Roundup
Skills vs MCP Servers: Which Your Agent Needs
Checked 2026-10-31
The verdict
A skill teaches your agent how to do a job: a folder with a `SKILL.md` file of instructions it follows. An MCP server gives your agent something to call: a running program that exposes tools, data or prompts through the Model Context Protocol. Install a skill when the agent lacks your procedure. Install a server when the agent lacks access to a system. Most useful setups have both, with a skill saying when and how to use the tools a server provides. Checked 31 October 2026.
Loading poll...
A skill teaches your agent how to do a job: a folder with a SKILL.md file of instructions it follows. An MCP server gives your agent something to call: a running program that exposes tools, data or prompts through the Model Context Protocol. Install a skill when the agent lacks your procedure. Install a server when the agent lacks access to a system. Most useful setups have both, with a skill saying when and how to use the tools a server provides. Checked 31 October 2026.
The short version
Your agent needs | Add |
|---|---|
Your team's way to write a changelog, review a PR or release | A skill |
Access to your tracker, database or calendar | An MCP server |
A repeatable multi-step procedure | A skill |
Live data from a hosted service | An MCP server |
Rules for style, naming and checks | A skill (or |
A way to act on a third-party service | An MCP server |
A procedure that uses a service | A skill that tells the agent to use that server's tools |
What each one is
A skill
Claude Code's docs: "Skills extend what Claude can do. Create a SKILL.md file with instructions, and Claude adds it to its toolkit." Claude uses a skill when it is relevant, or you invoke it directly with /skill-name. The file has two parts: YAML frontmatter that tells Claude when to use the skill, and markdown content with the instructions it follows. The description field is what lets Claude decide to load a skill automatically.
Skills live in folders, which decides who gets them:
Location | Reaches |
|---|---|
| All your projects on this machine |
| Sessions in this repository; commit it to share |
Plugin | Wherever the plugin is enabled |
Enterprise managed settings | All users where the organization deploys it |
Custom commands have been merged into skills: a file at .claude/commands/deploy.md and a skill at .claude/skills/deploy/SKILL.md both create /deploy. A skill folder can also hold supporting files.
Claude Code's skills follow the Agent Skills open standard, which works across multiple AI tools, and Claude Code adds extensions on top: invocation control, subagent execution and dynamic context injection.
An MCP server
The MCP site: "an open-source standard for connecting AI applications to external systems." A host application keeps one client per server over JSON-RPC 2.0. Servers expose tools, resources and prompts. Local servers use the stdio transport; remote ones use Streamable HTTP. In Claude Code you add one with claude mcp add, for example:
claude mcp add --transport http notion https://mcp.notion.com/mcpA server is a program somebody runs and maintains, locally or remotely. It holds credentials and talks to the service.
Side-by-side facts
Skill | MCP server | |
|---|---|---|
What it is | A folder with | A running program speaking MCP |
Gives the agent | Instructions, procedure, know-how | Tools, data, prompts |
Needs code? | No; markdown is enough (scripts optional) | Yes, a server implementation |
Needs a process? | No | Yes (local process or remote service) |
Credentials | None of its own | Holds or uses credentials |
Loaded | When relevant, by description, or by | Connected at session start; tool definitions deferred in Claude Code |
Shared via | Git, plugins, managed settings | Config files, plugin, directory listings |
Works across tools | The Agent Skills standard is multi-tool | MCP is supported by many clients |
Main risk | Bad or unsafe instructions | Arbitrary code execution and data access |
Main cost | Context for the description and body when loaded | Context for tool listings and results |
What each is good at
Skills: procedure and judgment
A skill is the right tool when the agent can already do the pieces but does not know your way of doing them. The docs' own example is a skill whose description reads: "Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff." The body then says how.
Good skill topics:
- A release checklist with the exact commands for your repo.
- A review rubric for your codebase.
- How to write a migration, a test, a changelog entry.
- Recorded setup recipes. Claude Code's
/verifyand run-skill generator write what worked into a project skill, so other agents in the repo follow the same steps.
Skills are plain text, so you can read and review them in a pull request before they run.
MCP servers: reach and action
A server is the right tool when the agent needs capabilities that text instructions cannot give: reading a ticket, querying a database, posting to a channel, driving a browser. These need an authenticated connection to something outside the model.
Good server topics:
- Issue trackers, chat, calendars and docs.
- Databases and observability systems.
- Browsers and design tools.
- Your own internal APIs.
Our MCP server directory lists many.
Costs in context
Neither is free, and Claude Code's docs show where.
Skills. Only the short description needs to be visible for Claude to decide; the body loads when the skill is used. The /usage screen attributes usage to skills, subagents, plugins and individual MCP servers, with recommendations for trimming. The context-audit tooling compares unused skills, MCP servers and plugins with their context cost.
MCP servers. Tool definitions are deferred by default, so only tool names and server instructions enter context until Claude uses a specific tool. The cost docs still advise disabling unused servers with /mcp and preferring CLI tools such as gh, aws, gcloud and sentry-cli, which add no per-tool listing.
A practical rule: keep the active set small. Every skill description and every server's tool list competes for the same context window as your code.
Safety
Skills are instructions, so the danger is in what they tell the agent to do. A skill that says "run this script" or "ignore confirmation prompts" is a risk. Read third-party skills before installing, and prefer ones that keep supporting scripts short and visible. Permission rules still apply to what the agent does.
MCP servers are code with credentials. The spec says tools represent arbitrary code execution, that tool descriptions should be considered untrusted unless they come from a trusted server, and that hosts must obtain explicit user consent before invoking any tool. Claude Code's docs tell you to verify you trust each server and warn that servers fetching external content can expose you to prompt injection. A cloned repository cannot approve its own project MCP servers until you trust the workspace.
If the choice is between a skill and a server for the same job, the skill is usually the smaller risk, because it adds no new process or credential. It is only an option when the agent can already reach the system by other means, such as a CLI.
Writing a good skill
The smallest useful skill is one directory and one file.
.claude/skills/changelog/SKILL.md---
description: Drafts a changelog entry from merged pull requests. Use when the user asks for release notes or a changelog.
---
List merged PRs since the last tag with `gh pr list --state merged`.
Group them as New, Improve, Fix. One sentence each. No ticket ids.Three habits make skills work. Put the trigger in the description, in plain words, since that is what the agent matches against ("Use when the user asks..."). Keep the body short and concrete, with the exact commands. And test it two ways, as the docs suggest: ask something that matches the description so Claude invokes it, and call it directly with /changelog.
Notice what this skill does not do. It does not connect to GitHub. It uses the gh command the agent can already run, and it tells the agent how to format the result. If gh were not installed, the skill would fail, and no amount of better writing would fix that. That is the line between the two: a skill can only direct access that already exists.
Writing a good MCP integration
If you are adding a server, start from a maintained one. Check the server's tool list before you connect it and ask what it can change. Prefer read-only modes where they exist. Pass the narrowest token that works. Add it at the narrowest scope, for one project and not globally, if only one project needs it. And keep a note of why it is there, so you can remove it when the project ends.
Then write the skill that sits on top, using the real tool names you saw. A skill written before the server works tends to name tools that do not exist.
Using them together
The pattern that works best splits the layers.
- An MCP server for your tracker gives the agent
get_issueandupdate_issue. - A skill called
triagesays: read the issue, check for a reproduction, label it with these labels, and never close an issue without a comment. - The agent uses the skill for the procedure and the server's tools for the actions.
Because skills can be committed in the repo, the whole team gets the same procedure. Servers are configured per user or per project, so each person authenticates for themselves.
The MCP spec itself has a name for the overlap. Its list of notable extensions includes "Skills over MCP: rich, structured instructions for agent workflows, discovered and consumed through MCP." So a server can ship the instructions with the tools. We did not test that extension, and client support will vary.
Subagents can take both. A subagent's definition accepts fields for skills and mcpServers, which lets you hand a worker agent exactly the procedures and tools it needs. See Subagents vs skills.
Choosing
Choose a skill when:
- The agent already has the access it needs.
- You want to encode how your team does something.
- You want it reviewed in a pull request and shared by Git.
- You want zero new processes or credentials.
Choose an MCP server when:
- The agent needs a connection it does not have.
- A maintained server already exists for the service.
- Several AI apps should share the same connection.
Choose both when:
- The job involves a service and a procedure. Write the skill after the server works, using the real tool names.
Choose neither when:
- A few lines in
CLAUDE.mdcover it, or a CLI does the job.
A short checklist
- Is the gap knowledge (skill) or access (server)?
- Can a CLI already do the job?
- Have you read the skill's instructions and any scripts?
- Do you trust the server's author and its handling of credentials?
- Is the description specific enough that the agent picks the skill at the right time?
- Did you check
/usageafter a week and remove what is unused?
One job, built three ways
Take a recurring job: every Friday, turn merged pull requests into release notes in your house style.
Approach | What you build | What the agent needs | Cost and risk |
|---|---|---|---|
Skill only | A | A logged-in | Close to nothing. The risk is the wording of the instructions |
MCP server only | Install a GitHub server that exposes pull request tools | Its token, and its tool list in context | A new process, a credential and a larger attack surface, and no instructions about house style |
Both | The server for access, and a skill for the procedure | The server's tools, named correctly in the skill | More moving parts. Worth it when several people or clients share the setup |
Here the skill-only route is the right one, because the agent already has access through gh and what it lacks is your style. The server earns its place only when the agent cannot reach the service any other way, or when several AI apps need the same connection. That is the test the page keeps returning to: is the gap knowledge or access?
Reviewing a skill in a pull request
A skill is text, so the review is a reading exercise. Ask these questions of every skill that lands in your repository.
- Is the description specific? It should say what the skill does and when to use it, in words a person would actually type.
- Does it tell the agent to run commands? Read each one. A command you would not run by hand should not be in the skill.
- Does it weaken a safeguard? Phrases such as "skip confirmation" or "do not ask" deserve a hard look.
- Does it name tools or servers that exist? A skill that mentions a tool you have not installed will fail quietly.
- Is it short? The body loads when the skill is used, so every extra paragraph costs context each time.
- Does it overlap with another skill? Two skills with similar descriptions make the agent choose between them.
When the agent ignores your skill
- The description is vague. Rewrite it around the trigger phrase a user would say.
- Two skills compete. Merge them or sharpen each description until the boundary is clear.
- The skill is in the wrong folder. Check whether it sits in your user skills, the repository's
.claude/skillsfolder or a plugin, since each reaches a different audience. - The skill asks for something the agent cannot do. It may need a tool or server you have not connected.
- You expected a slash command. Skills can also be invoked by name, which is the quickest way to test one.
Questions people ask
Can a skill replace an MCP server? Only if the agent already has another way to reach the service, such as a CLI. A skill adds know-how and cannot add access.
Do skills work outside Claude Code? Claude Code's skills follow the Agent Skills open standard, which works across multiple AI tools, though Claude Code adds its own extensions on top.
Which should a team start with? A skill, since it is reviewed in a pull request, shared through Git and adds no process or credential.
Our take
From the documents, skills and MCP servers are complements. A skill is cheap to write, easy to review and shareable by Git, so start there for anything procedural. An MCP server earns its place when the agent truly cannot reach a system any other way, and then the cost is a process, a credential and some context.
The mistake we would avoid is installing a server to solve a knowledge problem, or writing a skill that pretends to give access. If the agent keeps doing a job the wrong way, write a skill. If it cannot do the job at all, look for a server.
We did not run controlled tests of either for this page. The specifics come from the Claude Code docs and the MCP specification, read on 31 October 2026.
Related
Questions
What is the difference between a skill and an MCP server?
A skill is a folder with a SKILL.md file of instructions the agent follows. An MCP server is a running program that exposes tools, resources or prompts over the Model Context Protocol. Skills tell the agent how; servers give it something to call.
Do skills work outside Claude Code?
Claude Code's docs say its skills follow the Agent Skills open standard, which works across multiple AI tools, and that Claude Code adds extensions such as invocation control and subagent execution.
Which costs more context?
Both add context. Claude Code defers MCP tool definitions by default, loading only names and server instructions until a tool is used, and its /usage screen attributes usage to individual skills and MCP servers.
Can a skill call an MCP server?
Yes. A skill's instructions can tell the agent to use a tool that comes from an MCP server. The MCP spec also lists a Skills over MCP extension, which delivers structured workflow instructions through MCP.
Loading poll...
Reviews
Loading reviews…
Only members can review this page. Sign in