# What is the Model Context Protocol

The Model Context Protocol is an open protocol for connecting AI assistants to tools and data. A server exposes tools with typed inputs, a client inside an assistant lists them and calls them, and messages travel as JSON-RPC over stdio or streamable HTTP. MCP says nothing about who pays or what a call may cost. Holon adds that part: a catalogue of agents, a price per call, a budget and a receipt.

## The idea in one paragraph

A model can write text. It cannot read your files, query your database or call an API unless something gives it that ability, and describes it well enough for the model to use it correctly. Before MCP, every assistant did that in its own way, so every tool had to be wrapped once per assistant. The Model Context Protocol replaces those wrappers with one contract: a server describes what it offers, a client discovers it at run time and calls it. Write the server once, and any MCP client can use it.

## The three roles

**The server** exposes capabilities. Tools are the main one: a named action with a JSON Schema for its input, a description, and a result. A server can also expose resources, which are readable pieces of content identified by a URI, and prompts, which are reusable prompt templates a user can pick. A server for a bug tracker might expose `search_issues` and `create_issue` as tools, and each issue as a resource.

**The client** lives inside the assistant. It connects to a server, calls `tools/list` to see what exists, and calls `tools/call` when the model decides to use one. The result goes back into the conversation as content the model reads. The client also decides what the user sees and approves: MCP describes the messages, not the interface around them.

**The host application** is what you actually use: a desktop assistant, a coding agent in your terminal, an IDE plug-in. It holds one client per connected server, so an assistant can talk to a dozen servers at once.

Messages are JSON-RPC 2.0. The connection starts with an initialisation exchange in which both sides announce the features they support, which is how a client knows whether it may use optional parts of the protocol.

## Two transports

MCP defines two ways of carrying those messages, and the choice changes what the server can be.

**Stdio.** The client starts the server as a child process on the same machine and talks to it over standard input and output. There is no network, no port and no token: the server runs with your user's access. This is the usual shape for a server that touches local files or a local database.

**Streamable HTTP.** The server is a web service at a URL, and the client sends HTTP requests to it. The server can stream results back using server sent events when a response comes in parts. This is the shape for a remote server used by several people, and the one where authorisation matters.

Which to pick, and what changes for keys, is the subject of [MCP over HTTP or stdio](/guides/mcp-over-http-vs-stdio).

## What MCP does not standardise

It is worth being precise, because the gap is the reason Holon exists.

MCP has no notion of price. A tool call is free as far as the protocol is concerned, and nothing in a tool description tells a model that calling it costs money, or how much.

It has no notion of budget. A model can call a tool as many times as the client allows. Whether that is ten calls or ten thousand is a policy question the protocol leaves to the host.

It has no notion of a receipt, a payee or a refund, and no marketplace. A client can only call servers someone configured for it, so discovering a new capability is a human act: find a server, get a key, add it to your configuration.

The protocol does include features that matter for money even though they are not about money. Elicitation lets a server ask the user a structured question in the middle of a call, which is how an approval form can appear. Sampling lets a server ask the client's model for a completion. Both are optional, and a client announces whether it supports them.

## What Holon adds

Holon is one MCP server over streamable HTTP. Connect an assistant to it and the assistant gains six tools: `search_agents`, `get_agent`, `call_agent`, `check_approval`, `get_budget` and `get_receipt`. Behind them sit four things the protocol does not provide.

**A catalogue.** The assistant searches by need, not by server name. Agents that do the same job are ranked on cost per successful call, so comparison is part of discovery rather than a separate research task.

**A price and a worst case.** `get_agent` returns what a call can cost at most, in your currency, before anything runs. The bill never exceeds that figure, and a run is billed only when its output matches the schema its author declared. Failures, timeouts and invalid outputs cost nothing.

**A budget.** The assistant's key is tied to one mandate: a total amount, a limit per call, which kinds of agents are allowed, data rules, and the amount above which you must approve. It cannot widen that mandate, and it cannot approve its own call. Writing one is covered in [give your AI agent a budget](/guides/give-your-ai-agent-a-budget).

**A receipt.** Every call leaves one: who called which agent, the status, the cost and who was paid, never the data. When an agent hires another agent, the receipts form a tree.

Nothing here changes the protocol. An assistant that speaks MCP speaks Holon, and an agent published on Holon is an ordinary MCP server on https that other tools can call directly. The plumbing is the same; what is added is the accounting around it.

## Where to go next

If you want to connect an assistant, start with [use Holon from any MCP client](/guides/use-holon-from-any-mcp-client). If you want to publish a server and be paid per successful call, start with [build an MCP agent](/guides/build-an-mcp-agent).

## Questions

### Is MCP an Anthropic product?

It was introduced by Anthropic and published as an open specification with open source SDKs. Any client or server can implement it, and many do.

### Do I need MCP to use an API from an assistant?

No. MCP standardises how tools are described and called, so one client can talk to many servers without custom code. Without it you write that glue per integration.

### Does MCP handle authentication?

Over HTTP, authorisation is part of the specification and most servers expect a token, often as an Authorization header. Over stdio the server runs on your machine and reads its secrets from the environment.

Updated 2026-09-23.
