seoskills.sh
Catalog/Docs/Skills vs MCP vs plugins: when to use which

Skills vs MCP servers vs plugins: what each one is for

Updated

Use a skill to teach your agent how to do a job, and an MCP server to connect it to the live tools and data that job needs. A skill is a folder of instructions the agent reads in full only when a task calls for it; an MCP server gives it tools that reach an outside system, such as Search Console. A plugin packages skills, MCP servers, subagents and hooks into a single install.

Skills, MCP servers, plugins and subagents side by side

FeatureWhat it isWhat it gives your agentAdd one when
SkillA folder with a SKILL.md and optional scripts and filesKnow-how: steps, checklists, reference materialYou paste the same playbook into chat for the third time
MCP serverA local or hosted server that connects the agent to an external systemTools and data access, with the connection and authentication handled by the serverYou keep copying data from a browser tab Claude can't see
PluginSkills, subagents, hooks and MCP servers packaged as one installA whole setup in one stepA second repository needs the same setup
SubagentA separate worker with its own context windowThe result of a side task, returned as a summaryA side task would flood your conversation with output you won't read again

The last column follows the triggers in Claude Code's docs.

What a skill gives your agent

A skill holds instructions, knowledge and workflows, written in Markdown. In Claude Code you run one by typing / and its name, or Claude loads it on its own when your request matches the skill's description. Some skills are reference material Claude applies as it works, like a style guide. Others are tasks with steps, like a deploy checklist. An SEO team might keep its schema conventions in the first kind and its audit procedure in the second.

A skill can also bundle scripts, so the line between skills and MCP isn't absolute. Several of the catalog's own skills ship code beside the SKILL.md: the Core Web Vitals CrUX Monitor, for example, pulls real-user LCP, INP and CLS from the Chrome UX Report. What an MCP server adds is a set of purpose-built tools for one external system, with the connection and authentication handled by the server. What are agent skills? covers the skill format in full.

What an MCP server gives your agent

MCP, the Model Context Protocol, gives Claude Code tools it doesn't have built in, such as querying a database or driving a web browser. Those tools come from MCP servers: a local one is a program Claude Code starts on your machine, and a hosted one is a service it reaches over a URL.

seoskills.sh runs a hosted one. Add it from your terminal, not from inside a Claude Code session:

claude mcp add --transport http seoskills https://seoskills.sh/api/mcp

Your agent then has three tools, search_skills, get_skill and list_categories, for looking up skills in this catalog mid-task. Connecting it installs no skills; you still install those with npx skills add.

Skills and MCP together: a Search Console example

Claude Code's docs sum up the pairing in one line: "MCP provides the connection; a skill teaches Claude how to use it well."

Say some pages lost traffic and you want to know why. Connect a Search Console MCP server, and the agent can read your queries, clicks, impressions, CTR and positions, and check URLs for indexing problems. The community mcp-gsc server, for instance, has tools named get_search_analytics and check_indexing_issues. Then install an audit skill such as SEO Audit, built to audit, review or diagnose SEO issues on your site. The server supplies the data. The skill supplies the method: what to check, in what order, and how to report it.

Without the server, you export reports and paste them into chat. Without the skill, the agent has your numbers and no checklist to work through.

Some skills target one server: SEO Rank Tracking runs rank tracking through the Ahrefs MCP server, picking the keywords to track and setting baselines. For the servers themselves and how to connect them, see SEO MCP servers. Skills written around specific tools, including Ahrefs, Semrush, Screaming Frog, Moz and Search Console, are in the SEO Tool Integration category.

Where plugins fit

A plugin is one directory holding any mix of skills, agents, hooks and MCP servers, which Claude Code installs and loads together. Most come from a marketplace, and you browse and install them with /plugin. Skills inside a plugin are namespaced: a review skill in a plugin called my-plugin runs as /my-plugin:review, so it loads alongside a review skill of your own instead of replacing it.

You don't need a plugin to use a skill or an MCP server: a skill saved in ~/.claude/skills/ already works in every project on your machine. Reach for a plugin when you want several pieces shipped as one unit, to hand your setup to teammates, install it in many projects, or publish versioned releases.

An enabled plugin is part of every session, including ones where you never use it. Each of its skills and agents that Claude can invoke on its own adds a name and description to context on every turn. Its MCP servers run alongside each session, and whatever it runs, it runs as you.

Subagents, slash commands and hooks

A subagent is a separate worker with its own context window, system prompt and tool access. Claude hands it a task, the subagent does the reading and searching in its own window, and only a summary comes back. Use one when a side task would bury your conversation in output you won't need again, like combing through a large crawl export. Skills and subagents combine both ways: a subagent can preload skills through its skills field, and a skill can run inside a subagent with context: fork. In the catalog, GEO Audit runs a full GEO and SEO audit by delegating to subagents in parallel.

Custom slash 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 and work the same way, and existing command files keep working. A skill adds a folder for supporting files, control over whether you or Claude can invoke it, and the option for Claude to load it automatically.

Hooks are for rules that must hold every time. Claude Code runs a hook at a set point, such as before each file edit, whether or not Claude is following your instructions. An instruction like "never edit robots.txt" in a skill is a request, and a hook that blocks the edit is enforcement.

What each one costs in context

Everything you add takes up context, and Claude Code's docs spell out what loads when:

FeatureLoads at session startLoads when used
SkillName and descriptionThe full SKILL.md, then bundled files only if needed
MCP serverTool names and server instructionsThe full schema of a tool when Claude needs it
SubagentIts description, so Claude knows when to delegateA fresh context window of its own
PluginNames and descriptions of its skills and agents, and its MCP servers startThe full text of a skill or agent when it runs
HookNothingNothing, unless the hook returns output
CLAUDE.mdIts full content, kept on every requestNothing more

The open Agent Skills spec puts rough numbers on the skill side: about 100 tokens per skill for the name and description, and under 5,000 tokens recommended for the full instructions. Once a skill loads, its content stays in the conversation across turns, so every line of a long SKILL.md is a recurring cost. And each connected MCP server's tool names and instructions load into every session, so removing servers you no longer use frees that space. Tool search, on by default, keeps idle MCP tools cheap.

A subagent keeps its work out of your main window, but its requests count toward the same usage limits as your main conversation, and its summary lands back in your context when it finishes.

To see your own numbers, run /context all for the tokens each loaded MCP tool uses, and /skill-doctor (Claude Code v2.1.252 or later) for what each skill costs and how often it gets used. For a skill you only run by hand, set disable-model-invocation: true in its frontmatter, which keeps even the description out of context until you invoke it.

Next