With agent frameworks now supporting Skills, a question keeps coming up: “Does this replace MCP?”
Short answer: No.
Skills and MCP are teammates, not competitors. Anthropic designed them to work together. Skills provide the expertise, MCP provides the access. Here’s why you need both.
The Problem I Was Trying to Solve
Before Skills, my agents were slow. Really slow.
Why? Because I was loading everything upfront:
# The old way (still works, but ugh)
agent = Agent("assistant", tools=[
pdf_tool_1, pdf_tool_2, pdf_tool_3,
email_tool_1, email_tool_2,
database_tool_1, database_tool_2,
# ... 100 more tools 😱
])
Every time I started an agent, it had to load all 100 tools into the context window. Even if I was just processing a single PDF. Slow startup, bloated context, split attention.
My First Solution: Tool Search
Before Skills, I solved this with deferred tools. Instead of loading everything, the agent discovers tools on-demand:
# Tools are searchable, not loaded immediately
agent = Agent("payments").with_tools(defer=[
charge_card, send_receipt, refund_payment
])
# Agent calls search_tools("charge card") → activates charge_card → executes it
await agent.infer("charge $50 to card_123")
This worked. The agent uses a search_tools function to find relevant tools when it needs them. But it still had problems: tools were just functions. They didn’t carry documentation, examples, or context.
Enter Skills
Skills take tool search further. They’re not just functions. They’re packaged expertise:
from agentu import Skill
pdf_skill = Skill(
name="pdf-processing",
description="Extract text and tables from PDFs",
instructions="skills/pdf/SKILL.md", # How-to guide
resources={"forms": "skills/pdf/FORMS.md"} # Reference docs
)
agent = Agent("assistant").with_skills([pdf_skill])
What changed:
- Faster startup (only load what you use)
- Clean context (no irrelevant tools)
- Portable packages (share skills across projects)
- Bundled documentation (instructions + resources load progressively)
So What’s MCP?
MCP (Model Context Protocol) connects your agent to external systems.
It’s not about loading tools. It’s about accessing live data.
# Connect to GitHub
agent.with_mcp(["github"])
# Now your agent can:
# - List your repos
# - Read actual files
# - Create real issues
# - Post actual comments
MCP is how you give your agent access to the outside world.
What you get:
- Standardized protocol for all external connections
- Built-in auth & permissions
- Security boundaries
MCP servers can be local or remote. There’s a growing ecosystem of hosted MCP servers you can connect to:
# Connect to remote MCP servers
agent.with_mcp([
"github", # Official GitHub MCP
"postgres", # Database access
"https://mcp.paypal.com/mcp", # Payments
"https://mcp.slack.com/mcp" # Team messaging
])
This is something Skills can’t do. Skills are local expertise packages. MCP gives you live connections to external services, wherever they’re hosted.
See the Difference?
This is the part people miss:
- Skills: Things your agent knows how to do
- MCP: Things your agent can access
Different problems. Different solutions.
Real Example
Let me show you a concrete case where you need both.
Task: Build a code review agent.
What it needs:
1. Code Review Skill
- Tools for static analysis
- Documentation on best practices
- Example feedback formats
2. GitHub MCP
- Access to fetch PR diffs
- Access to read files
- Access to post comments
Without the Skill?
Your agent can access GitHub fine. But it doesn’t know how to give good feedback.
Without MCP?
Your agent knows code review principles. But it can’t access the actual PRs.
You need both:
from agentu import Agent, Skill
# The expertise
code_review_skill = Skill(
name="code_review",
resources={"guide": "review-guide.md"}
)
# The whole thing
agent = (Agent("assistant")
.with_skills([code_review_skill]) # Knows how
.with_mcp(["github"])) # Can access
# Now it works
review = agent.infer("Review PR #247")
The Skill teaches it how to review code.
MCP gives it access to GitHub.
Another Real-World Example
Task: “Analyze customer churn from our database.”
from agentu import Agent, Skill
data_skill = Skill(
name="data_analysis",
resources={"guide": "analysis-guide.md"}
)
agent = (Agent("assistant")
.with_skills([data_skill]) # Expertise
.with_mcp(["postgres"])) # Access
analysis = agent.infer("""
Query customer data from the last 6 months
and identify churn patterns
""")
What happens:
- Agent uses Postgres MCP → queries customer table
- Agent uses Data Skill → applies statistical analysis
- Agent uses Data Skill → identifies patterns
- Agent generates insights
Neither Skills nor MCP could do this alone.
Why This Confusion Exists
Both involve “tools,” which is where people get mixed up.
But they’re different kinds of tools:
Skill tools: Functions your agent runs locally
# Pure function, no external deps
parse_pdf(file)
MCP tools: Bridges to external services
# Requires GitHub auth, makes API calls
github/get_pull_request(number)
An agent might use a Skill to understand how to query a database, and MCP to actually connect to it.
How I Use Both in agentu
Here’s a real example: a due diligence assistant for evaluating companies.
from agentu import Agent, Skill
# Financial analysis expertise
finance_skill = Skill(
name="financial_analysis",
resources={"guide": "finance-guide.md"}
)
agent = (Agent("assistant")
.with_skills([finance_skill])
.with_mcp(["postgres", "google-drive"]))
report = agent.infer("""
Pull Q3 financials from our database,
compare against the pitch deck in Drive,
and flag any discrepancies
""")
The agent knows how to analyze financials (Skill) and can access your database and Drive (MCP).
The Bigger Picture
Skills and MCP solve different problems.
Skills = what your agent knows how to do
MCP = what your agent can access
You need both. An agent with Skills but no MCP is smart but isolated. An agent with MCP but no Skills is connected but inefficient.
It’s not Skills vs. MCP. It’s Skills and MCP.
Try It
Both are in agentu:
pip install agentu
Examples:
So stop asking “Skills vs MCP?” Use both.
About Hemanth HM
Hemanth HM is a Sr. Staff Engineer at PayPal, Google Developer Expert, TC39 delegate, FOSS advocate, and community leader with a passion for programming, AI, and open-source contributions..