Home Glossary
HomeGlossaryMCP Tool
MCP Glossary

MCP Tool

TL;DR

An MCP tool is a callable function exposed by an MCP server. Each tool has a name, description, and JSON Schema for its input. LLMs discover available tools at session start and call them by name with matching arguments.

In depth

An MCP tool is the primary primitive for agent action. A tool has three pieces of metadata: a unique name, a human-readable description (which the LLM reads to decide when to call it), and a JSON Schema for its input arguments.

Servers expose tools via `tools/list`, and the client queries this at initialization to build the LLM's tool manifest. When the LLM wants to act, it emits a tool call with the tool's name and arguments matching the schema. The server receives this, executes, and returns a result.

Tool descriptions matter enormously for LLM quality — a well-written description is the difference between the LLM calling the right tool at the right moment vs. ignoring it. Think of the description as documentation that the LLM will read every turn.

Tools can be annotated with hints: `readOnlyHint` (tool doesn't mutate state), `destructiveHint` (tool does), `idempotentHint` (safe to retry), and `openWorldHint` (tool interacts with external systems).

Code example

{
  "name": "create_issue",
  "description": "Create a new GitHub issue in the specified repository.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "owner": { "type": "string", "description": "Repo owner" },
      "repo": { "type": "string", "description": "Repo name" },
      "title": { "type": "string", "description": "Issue title" },
      "body": { "type": "string", "description": "Issue body (markdown)" }
    },
    "required": ["owner", "repo", "title"]
  },
  "annotations": {
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": true
  }
}

Examples

  • 1
    `read_file(path: string)` — filesystem MCP
  • 2
    `create_issue(owner, repo, title, body)` — GitHub MCP
  • 3
    `create_payment_intent(amount, currency)` — Stripe MCP
  • 4
    `execute_sql(query: string)` — Supabase/Postgres MCP
  • 5
    `search_web(query: string, max_results: number)` — Tavily MCP

What it's NOT

  • ✗An MCP tool is NOT a 'plugin' — plugins is ChatGPT terminology. MCP tools are universal.
  • ✗A tool is NOT the same as a resource — tools DO things, resources are read-only data.
  • ✗Tool schemas are NOT optional — every tool must declare its input shape in JSON Schema.
  • ✗A tool's description is NOT just documentation — the LLM reads it to decide when to invoke the tool.

Related terms

Tool CallFunction CallingMCP ServerMCP Resource

See also

  • MCP Tools

Frequently asked questions

How many tools can one server expose?

There's no hard limit, but practical limits apply: the GitHub MCP exposes ~30 tools. Each tool's description fills the LLM's context, so keep tools focused.

Can tools have side effects?

Yes — tools frequently mutate state. Always set `destructiveHint: true` if the tool deletes data; hosts use this to warn users.

How do I version a tool?

Bump the server version and either rename the tool (breaking) or add new optional fields (non-breaking). The LLM will adapt if your description is clear.

Build with MCP

Browse 300+ MCP servers, explore recipes, or continue learning the MCP vocabulary.

Browse MarketplaceAll terms