Hemanth's scribes

ai

Skills vs MCP? Wrong Question

Author Photo

Hemanth HM

Thumbnail

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.

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:

  1. Agent uses Postgres MCP → queries customer table
  2. Agent uses Data Skill → applies statistical analysis
  3. Agent uses Data Skill → identifies patterns
  4. 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.

#ai#agents#mcp#tools#architecture
Author Photo

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..