Essay · AI Stack
Agents vs Skills vs MCP: A Practical Guide to Building Your AI Stack in 2025
Stop reading thought leadership. Start building.
I've spent the last six months helping teams implement AI-assisted development workflows. The number-one question I get: “Should we use Agents, Skills, or MCP?”
The answer? All three - but not randomly. This guide gives you a mental model, concrete decision criteria, copy-paste templates, and real architecture patterns from production systems. No fluff. No “it depends.” Actionable guidance.
← Back to the homepageThe Problem: Everyone's Confused
- Using agents for everything (expensive, slow, overkill)
- Ignoring skills entirely (reinventing the wheel every conversation)
- Treating MCP as “just another API” (missing architectural benefits)
- Picking one and ignoring the others (leaving 70% of the value on the table)
The confusion exists because these concepts operate at different layers of abstraction. Once you see the layers, everything clicks.
The Mental Model: Three Layers, One System
| Layer | Concept | House Analogy | What It Does |
|---|---|---|---|
| Orchestration | Agents | The Architect | Decides what to do and when |
| Knowledge | Skills | The Blueprints | Encodes how to do it right |
| Integration | MCP | The Utilities | Connects to power, water, internet |
You wouldn't build a house with just an architect or just blueprints. You need all three layers.
Layer 1: MCP (Model Context Protocol) - The Foundation
What It Actually Is
MCP is an open protocol under the Linux Foundation that standardizes how AI systems connect to external tools and data. Before MCP, every tool x model combination required custom work. With MCP, each tool and model implements the protocol once and they all interoperate. It truly is “USB-C for AI.”
When to Use MCP
Use MCP when you need:
- Real-time data access (databases, APIs, file systems)
- Integrations with platforms like GitHub, Slack, or Notion
- Secure, production-ready connections
- Multi-user environments with proper auth and audit
Skip MCP when:
- You only need to teach the AI a procedure (use skills)
- You need autonomous decision-making (use agents)
- The data is static and fits in prompt context
Sample MCP Configuration
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost:5432/mydb"
}
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/dir"]
}
}
}
Key insight: MCP provides the what - the data and tools to work with.
Layer 2: Skills - The Knowledge Layer
What Skills Actually Are
Skills are reusable procedural knowledge encoded in Markdown. They teach AI how to do things your way. Skills don't add new tools; they make the existing ones more effective and token-efficient.
When to Use Skills
Use skills when you need:
- Consistent procedures across conversations
- Domain expertise captured in your own words
- Portable knowledge that travels wherever Claude runs
- Dynamic activation based on context
Skip skills when:
- You need real-time external data (use MCP)
- You need autonomous multi-step execution (use agents)
- The knowledge is highly specific to one conversation
Skill Architecture
~/.claude/skills/
├── code-review/
│ └── SKILL.md
├── data-analysis/
│ ├── SKILL.md
│ └── schema-reference.md
├── commit-messages/
│ └── SKILL.md
└── security-review/
└── SKILL.md
Sample SKILL.md Template
# Code Review Skill
## Description
Performs code reviews following [Company] engineering standards.
## Activation
Use this skill when:
- User asks for a code review
- User submits a PR for feedback
- User asks "what do you think of this code"
## Review Checklist
### 1. Security (Check First)
- [ ] No hardcoded secrets or API keys
- [ ] Input validation on all user data
- [ ] SQL queries use parameterized statements
- [ ] No eval() or dynamic code execution
### 2. Performance
- [ ] No N+1 query patterns
- [ ] Large datasets are paginated
- [ ] Expensive operations are cached or async
### 3. Maintainability
- [ ] Functions are <50 lines
- [ ] Clear naming (no abbreviations)
- [ ] Comments explain WHY, not WHAT
### 4. Testing
- [ ] Happy path covered
- [ ] Edge cases identified
- [ ] Error scenarios handled
## Output Format
**Summary:** [1-2 sentence overview]
**Critical Issues:**
- Issue 1
**Suggestions:**
- Suggestion 1
**What's Good:**
- Positive 1
## Examples
Input: "Review this authentication function"
Output: Start with security checklist, flag auth-specific concerns
Key insight: Skills provide the how - the methodology and expertise.
Layer 3: Agents - The Orchestration Layer
What Agents Actually Are
Agents are autonomous decision-makers that break down complex goals into steps, execute actions, handle errors, and work in parallel. They have a decision loop: Observe → Think → Act → repeat.
When to Use Agents
Use agents when you need:
- Multi-step autonomous execution
- Planning for complex tasks
- Parallel work via subagents
- Delegation without micromanagement
Skip agents when:
- A single prompt can do the job
- You need maximum control over each action
- Cost is a major concern (agents consume more tokens)
- The task is procedural rather than decision-heavy
Agent Architecture Patterns
Pattern 1: Single Agent with Skills + MCP
Main Agent (Autonomous Executor)
├─ Skills loaded: code-review, data-analysis, deployment-checklist
└─ MCP connections: postgres (data), github (code), slack (notifications)
Pattern 2: Multi-Agent with Specialization
Orchestrator Agent (plans & delegates)
├─ Research Agent (skills: search, summary)
├─ Coder Agent (skills: coding, testing)
└─ Reviewer Agent (skills: review, security)
Key insight: Agents decide the when - what to do and in what order.
Putting It All Together: Real-World Example
Scenario: Automated Weekly Data Reports
Goal: Every Monday, analyze sales data and send insights to Slack. Here's how the three layers play together.
Layer 1: MCP Connections
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://readonly:pass@prod-db:5432/sales"
}
},
"slack": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": {
"SLACK_BOT_TOKEN": "${SLACK_BOT_TOKEN}"
}
}
}
}
MCP provides live access to the sales database and Slack.
Layer 2: Skills
# Sales Analysis Skill
## Data Model
- orders: id, customer_id, total, created_at, region
- customers: id, name, segment (enterprise|mid-market|smb)
- products: id, name, category, margin
## Standard Metrics
1. Revenue by Segment (GROUP BY customers.segment)
2. Week-over-Week Growth (compare to previous 7 days)
3. Top Products (by revenue AND margin)
4. Regional Performance (GROUP BY orders.region)
## Query Patterns
- WHERE created_at >= NOW() - INTERVAL '7 days'
- Join orders → customers → products
- Exclude test accounts (segment != 'test')
## Output Format
1. Executive Summary (3 bullets max)
2. Key Metrics Table
3. Notable Changes (>10% WoW)
4. Recommendations (1-2 actions)
Skills provide the domain knowledge and methodology.
Layer 3: Agent Orchestration
Agent receives: "Generate weekly sales report"
1. Needs sales data → use MCP (postgres)
2. Needs to analyze correctly → load sales-analysis Skill
3. Needs to send results → use MCP (slack)
4. Executes the workflow autonomously, handles errors, and posts to #sales-reports
The agent provides autonomous execution, error handling, and sequencing.
Decision Flowchart
Need external data or tools? → Yes → Use MCP
→ No → Need consistent procedures? → Yes → Use Skill
→ No → Need autonomous multi-step work? → Yes → Use Agent
→ No → Prompt is enough
Combine as needed.
Diagrams referenced in the original article (architecture layers and flowchart) map directly to this logic.
Common Mistakes (And How to Avoid Them)
Mistake 1: Using Agents for Everything
Agents are expensive and slow for simple tasks. Use skills for procedural work and reserve agents for true orchestration.
Mistake 2: Ignoring Skills
If you're repeating instructions in every conversation, you're wasting tokens and inviting drift. Turn repeatable knowledge into a skill.
Mistake 3: Putting Secrets in Skills
Skills are text files, not secure storage. Keep secrets in MCP env vars.
Mistake 4: Massive Monolithic Skills
One giant skill wastes context tokens. Keep skills small and focused.
Quick Reference Card
| Question | Answer |
|---|---|
| Need external data? | MCP |
| Need real-time API access? | MCP |
| Need secure credentials? | MCP |
| Need consistent procedures? | Skill |
| Need domain expertise? | Skill |
| Need portable knowledge? | Skill |
| Need autonomous execution? | Agent |
| Need multi-step planning? | Agent |
| Need parallel processing? | Agent |
Getting Started Today
If you have 30 minutes
- Identify one procedure you repeat with AI.
- Write it as a SKILL.md using the template above.
- Save to
~/.claude/skills/<name>/SKILL.md.
If you have 2 hours
- Do everything above.
- Set up one MCP server (filesystem or GitHub).
- Test the skill + MCP combination end-to-end.
If you have a day
- Do the 2-hour plan.
- Identify a workflow that could be automated.
- Design an agent that uses your skills + MCP connections.
- Document the architecture for your team.
The Bottom Line
Skills teach how.
MCP provides what.
Agents decide when.
The teams that dominate 2026 won't pick one - they'll orchestrate all three. Start with skills (lowest barrier, highest ROI), add MCP when you need real data, and deploy agents when autonomy matters. This isn't theory. It's competitive advantage.