HomeLearn › Claude Code skills vs MCP servers

Claude Code skills vs MCP servers

Both extend what Claude can do, but they sit at different layers of the stack. A skill is a packet of natural-language instructions Claude reads and follows. An MCP server is a separate process exposing typed tools Claude can call via the Model Context Protocol. They solve different problems — and most non-trivial workflows benefit from a deliberate mix of both.

The 30-second version

Claude Code skillMCP server
Lives whereMarkdown file at ~/.claude/skills/<slug>/SKILL.mdSeparate process — local binary, Docker container, remote HTTP endpoint
Talks to Claude viaLoaded into context as textJSON-RPC over stdio or HTTP (MCP protocol)
What it providesInstructions, prompts, design patterns, workflow recipesTyped tools (functions Claude can call), resources (data Claude can read), prompts (server-defined templates)
StateStateless — same input → same loaded contextCan be stateful — the server process holds connections, caches, sessions
AuthUses whatever Claude already has (your shell creds, env vars)Owns its own auth flow — OAuth, API keys, certificates
DistributionCopy a Markdown fileInstall + configure a binary or container
When it shinesEncoding workflows, prompt patterns, domain expertiseWrapping APIs, databases, systems with stateful sessions

What a skill actually is

A skill is text. SKILL.md with YAML frontmatter, period. Claude Code discovers it under ~/.claude/skills/, reads name + description at session start, and loads the body into context when your prompt's intent matches the description. Once loaded, Claude follows the body the way it follows any other prompt context — calling its built-in tools (Bash, Read, Write, Edit, WebFetch, etc.) as the body instructs.

Skills are the right primitive when:

Most of the 56,116 skills in this registry fall into one of those four buckets.

What an MCP server actually is

The Model Context Protocol is an open standard for connecting AI assistants to tools and data sources. An MCP server is a long-running process — local or remote — that exposes a typed API surface to the AI client (Claude Code, Claude Desktop, or anything else that speaks MCP). The server publishes three kinds of capabilities:

MCP servers are the right primitive when:

The decision tree

Are you wrapping a system that has its own API + auth? ├─ YES → MCP server └─ NO → Are you encoding instructions / a workflow / domain expertise? ├─ YES → Skill └─ NO → Are you exposing data Claude needs to read repeatedly? ├─ YES → MCP server (resources) └─ NO → Maybe you don't need either — just better prompting.

Concrete examples

Skill: "Pre-mortem analysis on a PRD"

Claude reads a PRD, classifies risks into Tigers / Paper Tigers / Elephants, decides launch-blocking vs fast-follow, generates a structured report. No external system. No state. Pure workflow + domain pattern.

This belongs as a skill — SKILL.md tells Claude exactly which framework to apply, which questions to ask, what output shape to produce.

MCP server: "Linear ticket integration"

Wrapping Linear's API: list issues, create issues, update issue states, post comments, search by project/team/cycle. Each operation needs Linear's API key, structured responses, pagination handling.

This belongs as an MCP server — Claude calls typed tools (linear.list_issues, linear.create_issue) with structured arguments and gets back JSON. The server holds the API key and handles auth.

Both: "Cold outreach pipeline"

A real-world cold outreach workflow combines:

The MCP servers handle the data movement. The skill handles the judgment and writing. They compose: Claude calls the MCP servers as tools while following the skill's instructions on how to think about the task.

Common mistakes

Building an MCP server when a skill would do

If your "MCP server" is just shelling out to curl or running a Python script with no state, you're paying the protocol overhead for nothing. A skill that tells Claude to call curl directly is simpler, easier to distribute, and easier to debug.

Building a skill when an MCP server would do

If your "skill" boils down to "Claude, here are the curl commands for the Stripe API, and here's how to authenticate" — you're building a fragile, per-session re-implementation of what an MCP server gives you for free. Stripe has an MCP server. Use it.

Mixing concerns inside one primitive

The cleanest split: MCP servers handle integration, skills handle intent. A skill saying "use the Slack MCP server to post a daily standup digest in this format" is properly factored. A skill that includes the entire Slack API client inline is not.

Discovery

TL;DR

Skills encode how to think. MCP servers encode what to call. Most non-trivial workflows want both — let MCP handle the system integration, let skills handle the domain reasoning, and compose them.

Building a skill from scratch? Start with How to write a Claude Code skill for the practical walkthrough, then bookmark the SKILL.md frontmatter reference.

Spotted an inaccuracy or want a topic covered? Email acreatorstore@translatea.com.