Skills vs MCP -- When to Use Which
You installed a React MCP server and a React skill. Now the AI has two sources of React knowledge that occasionally contradict each other. The MCP server says to use createRoot from its tool output, but the skill says to use the legacy ReactDOM.render (it is outdated). You have two mechanisms doing overlapping work, and neither is clearly in charge.
This confusion is common because skills and MCP servers look similar from the outside — they both add capabilities to your AI. But they solve fundamentally different problems, and using the right one for each situation makes your setup cleaner and more reliable.
What You’ll Walk Away With
Section titled “What You’ll Walk Away With”- A clear mental model for when to use skills versus MCP servers
- Decision framework for common development scenarios
- Strategies for combining skills and MCP effectively
- Anti-patterns to avoid when mixing the two
The Core Difference
Section titled “The Core Difference”Skills are instructions. MCP servers are tools.
A skill tells the AI how to think about a problem. It shapes the AI’s approach, conventions, and decision-making patterns. Skills are passive — they sit in the context and influence behavior.
An MCP server gives the AI the ability to do something it could not do before. It provides tools for reading data, executing actions, and interacting with external systems. MCP servers are active — the AI calls them to perform operations.
| Skills | MCP Servers | |
|---|---|---|
| What they provide | Instructions, conventions, patterns | Tools, actions, data access |
| How they work | Loaded into context at session start | Called on-demand during conversation |
| Analogy | A style guide handed to a developer | A set of power tools on a workbench |
| Context cost | Fixed (loaded once per session) | Variable (each tool call adds to context) |
| Persistence | Always active once installed | Only active when connected |
| Authentication | None needed | Often requires tokens or OAuth |
The Decision Framework
Section titled “The Decision Framework”Use a Skill When…
Section titled “Use a Skill When…”You want to standardize how the AI writes code.
“Always use named exports. Always add JSDoc comments. Always create test files alongside components.” These are conventions — rules about style and structure that do not require external tool access.
You want to teach the AI about your project’s architecture.
“Our API routes live in src/pages/api/ and use this authentication middleware pattern. Our database queries use Drizzle ORM with this specific pattern for error handling.” This is project knowledge that the AI needs to apply consistently.
You want to share team conventions across developers.
Skills are stored as files in your repository. Every developer who clones the repo gets the same instructions. This is how you standardize AI behavior across a team.
You want to teach the AI a framework’s best practices.
“When using Next.js App Router, prefer Server Components by default. Only use ‘use client’ when you need interactivity.” This is framework knowledge that prevents the AI from using outdated patterns.
Use an MCP Server When…
Section titled “Use an MCP Server When…”You need the AI to interact with an external system.
Reading Jira tickets, creating GitHub PRs, querying databases, browsing Figma designs — these require actual API calls that skills cannot make.
You need real-time data.
Skills are static text. They cannot fetch the current state of your database, the latest CI pipeline status, or the contents of a web page. MCP servers provide live data.
You need the AI to execute actions.
Creating files in specific formats, running test suites, deploying code, updating ticket status — these are operations that require tool access.
You need the AI to work with credentials.
MCP servers handle authentication (API keys, OAuth tokens) in a secure way. Skills should never contain credentials.
Real-World Scenarios
Section titled “Real-World Scenarios”Scenario 1: “I want the AI to write better React code”
Section titled “Scenario 1: “I want the AI to write better React code””Use a skill. Install vercel-labs/agent-skills to teach the AI current React patterns: Server Components, Suspense boundaries, proper hook usage. The skill provides the knowledge; the AI applies it to your code.
Why not an MCP server? Writing React code does not require external tool access. The AI already has the ability to write and edit files.
Scenario 2: “I want the AI to create PRs that reference Jira tickets”
Section titled “Scenario 2: “I want the AI to create PRs that reference Jira tickets””Use an MCP server (two, actually). You need the Atlassian MCP server to read Jira tickets and the GitHub MCP server to create PRs. These are actions that require API access.
Why not a skill? A skill could tell the AI “always reference the Jira ticket in PR descriptions,” but it cannot actually read the ticket or create the PR. You need the MCP servers for the doing.
Best approach: Use both. Install a skill that says “When creating PRs, always include the Jira ticket ID in the branch name and PR title, and link back to the ticket in the description.” Then connect the Atlassian and GitHub MCP servers so the AI can actually execute this workflow.
Scenario 3: “I want the AI to follow our deployment process”
Section titled “Scenario 3: “I want the AI to follow our deployment process””Use a skill for the process, MCP for the execution. A skill describes the steps: “Check CI is green, merge to main, wait for staging deployment, run smoke tests, promote to production.” MCP servers (GitHub, Playwright, your CI platform) execute each step.
Scenario 4: “I want the AI to use the latest library documentation”
Section titled “Scenario 4: “I want the AI to use the latest library documentation””Use an MCP server. Context7 or Fetch MCP fetches live documentation. Skills are static and would contain stale documentation.
Exception: If the library rarely changes and you want to embed specific patterns, a skill works. For example, a skill teaching Drizzle ORM patterns for your specific schema is more reliable than fetching docs every time.
Scenario 5: “I want all team members’ AIs to behave consistently”
Section titled “Scenario 5: “I want all team members’ AIs to behave consistently””Use a skill. Commit it to your repository. Every developer who clones the repo gets identical AI behavior. MCP servers are configured per-developer and may differ.
Combining Skills and MCP Effectively
Section titled “Combining Skills and MCP Effectively”The best setups use skills for the “what” and “how,” and MCP servers for the “do.”
| Concern | Handled By | Example |
|---|---|---|
| Code conventions | Skill | ”Use named exports, add JSDoc to public functions” |
| Framework patterns | Skill | ”Prefer Server Components, use Suspense for data fetching” |
| Reading external data | MCP Server | ”Fetch the Jira ticket details, read the database schema” |
| Executing actions | MCP Server | ”Create a PR, deploy to staging, run E2E tests” |
| Workflow orchestration | Skill + MCP | Skill defines the steps, MCP servers execute them |
Anti-Patterns to Avoid
Section titled “Anti-Patterns to Avoid”Putting API documentation in a skill. API docs change. Use Context7 or Fetch MCP instead.
Using an MCP server to enforce coding conventions. An MCP server that lints code on every save is a code review tool, not an AI skill. Use a skill for conventions and a linter for enforcement.
Installing too many skills. Each skill consumes context window space. If you have 20 skills, the AI may not read all of them carefully. Prioritize the 5-10 most impactful skills.
Duplicating MCP tool instructions in a skill. If the GitHub MCP server already knows how to create a PR, you do not need a skill that explains the GitHub API. You do need a skill that describes your team’s PR conventions (title format, required reviewers, description template).
When This Breaks
Section titled “When This Breaks”Skill and MCP give contradictory guidance. The AI follows whichever appears later or more prominently in context. Remove the less authoritative source. If the skill says “use createRoot” but Context7 fetches docs showing hydrateRoot, the live docs should win.
Too much context from skills and MCP combined. If you have 10 skills and 5 MCP servers, the AI’s context window may be exhausted before you even ask a question. Audit your setup and remove anything you are not actively using.
Skills work in Claude Code but not in Cursor. Skills install into different directories per tool. Check that the skill files exist in the correct location for your editor.