Skip to content
lanzai.co
Go back

AI Agent: Skills vs Tools vs MCP, What's the Difference

In the agent ecosystem (Claude, opencode, Cursor, etc.), “Skills”, “Tools”, “Plugins”, and “MCP” are often used interchangeably, but they operate at different levels.

One-liner distinction

ConceptWhat it isExample
ToolA single callable function/APIread_file, run_bash, web_search
SkillInstructions + resources that teach the model “how to do something”A TDD workflow, a code-review process
MCPA standard transport protocol for toolsMCP servers for GitHub, databases
PluginUsually an IDE/framework extension shellVSCode extension, LangChain package

Tool: the execution unit

A Tool is the smallest execution unit; the model triggers it via function calling. It has well-defined capabilities and parameters — the model only decides “when to call it”.

Skill: procedural knowledge

A Skill doesn’t perform actions directly. It provides procedural knowledge: a Markdown guide (how to do it, the steps, gotchas) plus optional scripts/resources. The model reads it and follows the process. For example, a “TDD skill” instructs the model to write a failing test first, then implement, then refactor.

Key difference: Tools answer “what can you do”, Skills answer “how should you do it”.

MCP: the distribution protocol for tools

MCP (Model Context Protocol) turns tools into pluggable standard services. An MCP server can expose many tools over the network or locally, discovered and called by the model through a unified protocol. The benefit is decoupling: the same MCP server can be reused by multiple agents.

How they relate

Skill ──guides──> Model ──calls──> Tool / MCP

Choosing what to use

Common misconceptions

  1. “Skills can run commands” — No. A Skill is just documentation; execution happens via Tools.
  2. “MCP is a Tool” — MCP is a protocol; Tools are one of its products.
  3. “Plugins are the same as Skills” — Plugins are host extensions; Skills are in-model instructions.

Share this post:

Previous Post
Git Commands Cheat Sheet
Next Post
besttrace.sh: One-Command Return Route Testing