Claude Skills vs MCP Servers vs Subagents: the real difference
Published 26 September 2026
These three get compared as if you have to pick one. You do not. They answer three different questions about your setup, and once you see which question each one answers, the choice stops being a choice at all.
The three definitions, from the docs that own them
In brief: a Skill is a SKILL.md file of instructions that extends what Claude can do, MCP is an open standard for connecting AI applications to external systems, and a subagent is a specialized AI assistant that runs in its own context window with a custom system prompt and independent permissions.
Skill. The Claude Code skills page opens: "Skills extend what Claude can do. Create a SKILL.md file with instructions, and Claude adds it to its toolkit. Claude uses skills when relevant, or you can invoke one directly with /skill-name." The platform-side Agent Skills page puts it as: "Skills are reusable, filesystem-based resources that give Claude domain-specific expertise: workflows, context, and best practices that turn a general-purpose agent into a specialist."
One caution if you go quoting. The tidy one-line definition that circulates everywhere, about Skills packaging instructions, metadata and optional resources that Claude uses automatically when relevant, is not body prose on that page. It lives in the page's metadata description field, so it is Anthropic's, but it is not a sentence a reader lands on.
MCP server. The Model Context Protocol homepage: "MCP (Model Context Protocol) is an open-source standard for connecting AI applications to external systems." Note the ownership: MCP is an open standard published at modelcontextprotocol.io, not an Anthropic product surface, even though Anthropic's clients speak it.
Subagent. The Claude Code subagents page: "Subagents are specialized AI assistants that handle specific types of tasks." Its mechanism sentence is the one that matters most here: "Each subagent runs in its own context window with a custom system prompt, specific tool access, and independent permissions."
The organising insight: three different questions
A Skill changes what the model knows how to do. An MCP server changes what it can reach. A subagent changes who does the work and in whose context.
| Skill | MCP server | Subagent | |
|---|---|---|---|
| Question it answers | Does it know the procedure? | Can it get to the system? | Whose context pays for this? |
| What it adds | Instructions, workflows and reference material | Callable tools, plus resources and prompts | A separate context window with its own system prompt and permissions |
| Who triggers it | Claude uses skills when relevant, or you invoke one with /skill-name | Model-controlled: Claude calls a tool when the request maps to a described capability | You delegate a task to it |
| Where it lives | A SKILL.md file under ~/.claude/skills/ or .claude/skills/ | A separate program, local over stdio or remote over Streamable HTTP | A file with YAML frontmatter and a Markdown system prompt, under .claude/agents/ or ~/.claude/agents/ |
Fair warning on that contrast: it is a synthesis of three separate official definitions, not something Anthropic prints. There is no Skills versus MCP comparison section on the Claude Code skills page, whatever clean-sounding line to that effect gets quoted as doc text.
Where the boundaries actually blur
The blur runs both ways: MCP servers offer prompts and templated workflows, which are instruction-shaped, and the MCP spec names Skills over MCP among its notable optional extensions.
MCP is not purely about reach. The spec landing page lists what servers offer: "Resources: Context and data, for the user or the AI model to use; Prompts: Templated messages and workflows for users; Tools: Functions for the AI model to execute." Templated workflows are instruction-shaped. In practice the tools half dominates: the spec says tools are designed to be model-controlled, meaning the model discovers and invokes them automatically, while the MCP docs describe prompts as user-controlled, requiring explicit invocation. On the API side, Anthropic's MCP connector states plainly that of the MCP feature set, only tool calls are currently supported.
The blur runs the other way too. The spec landing page names Skills over MCP among its notable optional extensions. The two vocabularies are already growing into each other.
The picking guide
The docs give a trigger for each: repeated instructions call for a Skill, hand-pasted data calls for an MCP server, and side work that would flood the main conversation calls for a subagent.
Write a Skill when you keep repeating yourself. The Claude Code page names the trigger precisely: you keep pasting the same instructions, checklist or multi-step procedure into chat, or a section of CLAUDE.md has grown into a procedure rather than a fact. The Agent Skills page describes the architecture as enabling progressive disclosure, with Claude loading information as needed rather than consuming context upfront. Its own table gives three levels:
- Metadata: always loaded at startup, at roughly 100 tokens per Skill
- Instructions: loaded when the Skill triggers, at under 5k tokens
- Further resources: loaded only when accessed
Connect an MCP server when you are copying data in by hand. The Claude Code MCP page states the trigger directly: "Connect a server when you find yourself copying data into chat from another tool, like an issue tracker or a monitoring dashboard. Once connected, Claude can read and act on that system directly instead of working from what you paste." The inverse test is just as useful, from the MCP connector page: Claude does not call an MCP tool for general knowledge questions about a connected service. If you want it to know something rather than fetch something, a server is the wrong instrument.
Use a subagent when the work would pollute the main thread. Again the doc is specific: use one when a side task would flood your main conversation with search results, logs, or file contents you will not reference again, since the subagent does that work in its own context and returns only the summary. The subagents page also lists constraint enforcement by limiting which tools a subagent can reach, and cost control by routing tasks to faster, cheaper models. Worth knowing before you build one: subagents do not inherit output style, auto memory, or the parent's context window size.
They compose rather than compete
In Anthropic's own framing, a subagent is the thing that has Skills and MCP servers attached to it, not a rival to either. The docs' own section lists settle it. The subagents page includes sections on scoping MCP servers to a subagent and preloading skills into subagents. The skills page includes running skills in a subagent.
One piece of housekeeping that trips people up: the Claude Code skills page states that custom commands have been merged into skills. Slash commands are not a fourth category any more, whatever older third-party writing still tells you. And check your URLs, because the docs moved. Claude Code docs are served from code.claude.com and platform docs from platform.claude.com, and the widely cited docs.claude.com paths for subagents and MCP return a 301 redirect rather than the canonical page.
Where this fits if you use Bespoke Prompting
The same boundary shows up inside Bespoke Prompting's MCP Tool build type, which derives its tool count as one on the doctrine that one callable tool does one job. Rather than quietly building whatever you asked for, its classifier flags the mismatch: reads_as_agent when a request reads as an autonomous agent rather than a single callable tool, and multi_tool_implied when more than one tool is implied and a multi-tool server should be recommended instead. That is the same question this article opens with, enforced at build time.
Sources
- Claude Platform Docs, "Agent Skills": https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview
- Claude Code Docs, "Extend Claude with skills": https://code.claude.com/docs/en/skills
- Claude Code Docs, "Create custom subagents": https://code.claude.com/docs/en/sub-agents
- Claude Code Docs, "Connect Claude Code to tools via MCP": https://code.claude.com/docs/en/mcp
- Claude Platform Docs, "MCP connector": https://platform.claude.com/docs/en/agents-and-tools/mcp-connector
- Model Context Protocol, "Specification (revision 2026-07-28)": https://modelcontextprotocol.io/specification/latest
- Model Context Protocol Docs, "Understanding MCP servers": https://modelcontextprotocol.io/docs/2026-07-28/learn/server-concepts