Blog · 2026-06-28

Model Context Protocol explained

The open standard behind MCP agent development — what a tool contract contains, and what the protocol does not do for you.

Get my free blueprint

Model Context Protocol explained

Model Context Protocol (MCP) is an open standard that lets an AI agent discover and call tools through one typed interface instead of a bespoke integration per system. An MCP server publishes a name, a JSON Schema for its arguments, and a described return shape; the agent reads that contract at connect time and calls the tool.

MCP standardises the tool interface, not the agent's judgement about which tool to call — that stays in your prompt, your routing logic, and your approval gates.

An AI agent without tool access is a chatbot with ambitions. It can reason about what to do, but it cannot actually do it. MCP is the layer that closes that gap, and it does it by turning every integration into a published contract rather than a block of glue code buried in one agent's codebase.

What Model Context Protocol actually standardises

Before MCP, every agent integration was bespoke. Connecting an agent to a CRM meant writing CRM-specific code. Connecting to a mailbox meant writing mailbox-specific code. Each integration carried its own authentication, its own error shapes, and its own maintenance burden, and none of it was reusable by the next agent.

MCP defines three things and deliberately leaves the rest alone:

What it does not define is which tool should be called, what an acceptable argument is for your business, or whether the result should be acted on. Those are your decisions, and keeping them out of the protocol is the reason one server can serve several agents.

What a tool contract looks like

This is the level of specificity that makes the difference between an agent that calls a tool correctly and one that hands it a paragraph of prose. A contract for a single CRM lookup, written as an MCP server would advertise it:

{
  "name": "crm.find_contact",
  "description": "Look up exactly one contact by email address.
                  Returns null when no contact matches. Never creates a record.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "email": { "type": "string", "format": "email" }
    },
    "required": ["email"],
    "additionalProperties": false
  }
}

Three details in that block carry most of the value. additionalProperties: falsemeans a hallucinated extra argument is rejected at the boundary instead of being silently ignored. required means a missing email is a validation error, not an unfiltered query returning the whole contact table. And the description states the negative case — returns null when no contact matches, never creates a record — because a model choosing between tools reads descriptions, and a tool that might create something is a tool that needs an approval gate in front of it.

The same discipline applies to what comes back. A tool that returns free text puts the parsing burden back on the model on every single call. A tool that returns a fixed shape makes the next step deterministic. It is the same argument we make abouta research agent that cannot fabricate: structure at the data layer removes a class of failure that no amount of prompt tuning reliably removes.

Why MCP matters once you have more than one agent

With one agent and two tools, MCP is overhead. The economics change with the third consumer:

That last point is the one that matters most in production. An agent with a scoped MCP connection can be given read access to a CRM and no write path at all, and the restriction is enforced by the server rather than by asking the model nicely.

MCP compared with the other integration routes

ApproachReuse across agentsWhere access control livesCost of an upstream API change
Inline integration codeNone — copied per agentIn each agentEvery copy edited
Platform-specific pluginWithin one platformIn the platformWait for the vendor
MCP serverAny MCP clientIn the serverOne server edited

The table is about coupling, not speed. None of these routes makes an integration correct — they differ in how many places you have to be correct in.

Where MCP does not help

A protocol for tool access solves tool access. It does not solve the failure classes that actually stop agents running unattended. On our own production fleet, none of the recorded scheduled-job failures came from a tool being called wrongly — they came from a model provider revoking access to a free-tier slug mid-flight, from jobs finishing their work with no delivery target configured, and from upstream 500s. MCP would not have caught any of them. Fallback cascades, delivery checks, and an independent verification step would.

It also does not decide control flow. If your workflow needs explicit branching and resumable state, that belongs in the orchestration layer — which is the argument forLangGraph agent development on workflows that genuinely need it, and against it on workflows that do not. The framework question and the tool-protocol question are independent; ourcomparison of CrewAI alternatives covers the first.

How we use MCP

Tool access in the agents we build is MCP-based by default, for the reuse and access-control reasons above rather than as a badge. Practically it means the contracts get written before the prompts: what each tool accepts, what it returns, what it refuses to do, and which calls need a human to approve them. That work is most of the reason a build takes as long as it does — seehow long it takes to build a production AI agentfor the rest of it.

If you are evaluating a vendor, ask to see one of their tool contracts. A schema with required fields, a closed argument set, and a description that states what the tool refuses to do tells you more about how the system will behave in production than any demo.

MCP questions

Is Model Context Protocol the same thing as function calling?

No. Function calling is the model-side ability to emit a structured call against a schema you put in the request. MCP is the transport and discovery layer underneath it: a server advertises which tools exist, what arguments each accepts, and what it returns, so the agent learns the tool list at connect time instead of having it hardcoded into every prompt.

What does an MCP tool contract have to specify?

A unique name, a human-readable description the model uses to decide when the tool applies, and a JSON Schema for the arguments with required fields and additionalProperties set to false. Anything the schema leaves open is a failure the agent will eventually find — an unbounded string field is how a lookup tool ends up receiving a paragraph of prose instead of an email address.

Does MCP make it safe to give an agent production access?

It makes the boundary explicit, which is a precondition, not a guarantee. The server decides what the agent can reach, validates arguments before the underlying system sees them, and is the natural place for authentication and audit logging. It does not decide whether a delete should have been an archive — that needs an approval gate above the tool layer.

Do I need MCP if I have one agent and two tools?

Probably not on day one. Two direct integrations are less code than two MCP servers plus a client. The point at which MCP pays for itself is the third consumer of the same tool, or the first time a tool has to be swapped without touching the agent — at that point every integration you wrote inline has to be rewritten.

Amit Kumar

Founder of I Am Agent Man. Builds and runs production AI agents on Hermes, OpenClaw, and MCP — self-hosted, model-agnostic, with persistent memory and hard cost ceilings.

Want agents that connect to your tools?

We build MCP-connected agents that work with your stack. Scope the first one — free.

Goes straight to hello@iamagentman.com — we read every message ourselves. Prefer to answer three questions instead?Build your blueprint.

Talk to the studio

One message · reply within one business day