Plugin, skill, subagent, hook or MCP server — which is which

Five different mechanisms, used as if they were one word. Here is the distinction that actually decides which you want.

Last updated: 2026-09-21 · checked against Claude Code 2.1.278

One sentence each

Five words get used as if they were interchangeable, and they are five different mechanisms. Shortest honest version:

The one that catches everyone: a slash command is not a separate thing. A skill at .claude/skills/ship-check/SKILL.md is /ship-check.

The table

Lives atWho triggers itWhose context
Skill.claude/skills/<name>/SKILL.md (or ~/.claude/skills/)You type /name, or Claude picks it when the description fitsYours — the instructions land in this conversation
Subagent.claude/agents/<name>.md (or ~/.claude/agents/)Claude delegates, or you name oneIts own. You get a summary back, not the transcript
Hooksettings.json, under hooksThe harness, on an event. Not Claude’s decisionNeither. It is a process with stdin and an exit code
MCP server.mcp.json / ~/.claude.json, running as its own process or a remote endpointClaude calls its tools once connectedYours, but only the tool results
PluginA directory with .claude-plugin/plugin.jsonNothing. You enable it; what it contains then behaves as aboven/a

Skill or subagent? The only question that matters

Not “which is more powerful”. Where should the reading pile up?

A skill’s instructions go into the conversation you are already having, so everything it reads stays in front of you and stays in your context. That is exactly what you want for a procedure: a release checklist, a commit convention, the four steps before a deploy.

A subagent gets its own context window and hands back a summary. That is what you want when the honest answer involves reading thirty files and you only need the conclusion. Run it as a skill instead and you will spend your context on file dumps.

Rule of thumb: if you would want to read what it read, make it a skill. If you only want its answer, make it a subagent.

Hook or skill? Also one question

Is it allowed to be skipped?

A skill is something Claude chooses to follow. A hook is something the harness does regardless. “Run the formatter after every edit” written into a skill is a hope; written as a PostToolUse hook it is a fact. This is why “from now on, always…” requests belong in settings.json rather than in a memory file or an instruction.

Hooks are also the part most likely to be quietly broken, because a failing hook says nothing where you can see it — why a configured hook never seems to run.

MCP server or skill?

Does it need to reach something outside your machine? A skill is words. If the capability is “look this up in our database” or “file this ticket”, no amount of instruction gets there; that is a tool, and a tool is an MCP server.

MCP is an open protocol rather than a Claude Code feature, so a server you write works in other MCP clients too. That is the argument for building one instead of a bespoke integration, and the reason a working sample is worth more than a diagram: kit-one-tool-mcp is one tool, a described schema, handled failure paths and 15 tests that run with no API key.

Do you need a plugin?

Probably not yet. A plugin is about distribution, not capability. For yourself, in one repo, a SKILL.md and a hook in settings.json do the whole job and there is nothing to package.

A plugin earns its keep when either of these is true:

Installing one is two lines, and there is no single registry you are confined to — a marketplace is any repo with a .claude-plugin/marketplace.json:

/plugin marketplace add sdvsignal/kit-plugins
/plugin install kit-ship-check@kit-plugins

Four small ones, free and readable, are at github.com/sdvsignal/kit-plugins.

Four things that are commonly said and are wrong

ClaimActually
“Slash commands and skills are different features”The same thing. A skill is invoked as /name; plugin skills as /plugin:name
“A plugin is just a bigger skill”A plugin is a container. It may hold skills, subagents, hooks and MCP definitions
“A subagent shares the main conversation”It has its own context window and returns a summary
“MCP servers are a Claude Code thing”MCP is an open protocol. The same server works in other MCP clients

Related

What does it cost to have someone set this up?

Flat prices, written scope, stop at any rung. No call to book, no retainer.

RungWhat you getClock
Free — starter repoA real setup you copy yourselfnow
$29 — Setup LiteOne project: CLAUDE.md, allowlist, one skill, as a pull request you review24 hours
$99 — Setup Sprint3–5 skills, hooks, up to 3 MCP servers, plus a runbook48 hours
$79 — Surface AuditAlready set up and still fighting it: contradictions and an exact fix list48 hours
Setup Sprint $99 Or start free

Hooks and MCP servers are in Sprint, not Lite — which one you actually need. Clocks run from a complete intake, not from the Stripe receipt.