What is the Model Context Protocol?
The Model Context Protocol is an open standard for connecting AI models to the tools and data they need. One interface, written once, that any compliant model can use.
Every team that ships an AI feature hits the same wall: the model is capable, but it cannot see your data or act on your systems. The Model Context Protocol (MCP) is the open standard that closes that gap — a single, reusable way to hand a model your tools, files, and live data without rewriting the wiring for every new model or feature.
What the Model Context Protocol actually is
MCP is an open protocol that standardises how an application supplies context and capabilities to a large language model. Instead of bolting bespoke "function calling" glue onto each integration, you expose your data sources and actions through one well-defined interface, and any MCP-aware model — Claude included — can discover and use them at runtime.
Think of it the way USB standardised peripherals. Before USB, every device shipped its own connector and driver. After it, one port spoke to keyboards, drives, and cameras alike. MCP is that port for AI: write the integration once, and the model on the other end knows how to call it.
MCP lets you describe your tools and data in a standard shape so that a model can list them, understand them, and invoke them — without hardcoding that model into your integration.
The M×N integration problem
Without a shared protocol, connecting models to systems is a combinatorial mess. If you have M models (or model versions) and N internal systems — your CRM, a ticketing tool, a document store, a payments ledger — naive integration means building and maintaining M × N bespoke connectors. Swap a model, and you re-do a column. Add a system, and you re-do a row.
MCP collapses that into M + N. Each system exposes one MCP server. Each model speaks MCP as a client. The two meet at the protocol, so adding a model or a system is additive, not multiplicative. This is the same architectural win that drove USB, language server protocols in code editors, and ODBC for databases.
- Integrations are written once and reused across models, not rebuilt per model.
- Swapping the underlying model — say from Claude Sonnet 4.6 to Claude Opus 4.8 — does not break your tool wiring.
- New systems plug in by shipping a server, with no change to the model side.
- The same server can serve a chat product, an agent, and an internal tool.
How MCP works: servers, clients, and transport
MCP has two roles. An MCP server wraps a system — it advertises what it can do and answers calls. An MCP client lives inside the AI application (or the model host) and connects to one or more servers, surfacing their capabilities to the model. Between them sits a transport layer that carries structured JSON-RPC messages.
What a server exposes
- Tools — actions the model can invoke, each described by a name, a human-readable purpose, and a typed input schema so the model knows exactly how to call it.
- Resources — readable data the model can pull in as context, such as files, records, or documents.
- Prompts — reusable, parameterised prompt templates the host can offer to users.
How they connect
For a local integration the transport is typically standard input/output — the host launches the server as a subprocess and they exchange messages over the pipe. For remote or networked integrations, a streamable HTTP transport carries the same JSON-RPC traffic over the wire. Either way the protocol is identical; only the pipe changes.
The flow at runtime is simple: the client connects and asks the server to list its tools; the schemas are passed to the model as available capabilities; when the model decides to act, the client forwards the call to the server, the server executes it against the real system, and the result returns as context for the next step.
| Concept | Role | Lives in |
|---|---|---|
| Server | Exposes tools, resources, and prompts for one system | Your infrastructure |
| Client | Connects to servers and relays capabilities to the model | The AI app / model host |
| Transport | Carries JSON-RPC messages (stdio or streamable HTTP) | Between client and server |
| Tool schema | Typed description so the model can call correctly | Declared by the server |
A minimal MCP server
Here is the smallest useful server using the TypeScript SDK: it exposes a single tool, declares a typed input schema, and runs over stdio. This is the whole shape — declare the tool, validate inputs, return a result.
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'import { z } from 'zod' const server = new McpServer({ name: 'inventory', version: '1.0.0' }) // One tool: look up stock for a SKU against your real system.server.tool( 'get_stock_level', 'Return the current stock count for a product SKU.', { sku: z.string().describe('Product SKU, e.g. "LL-1024"') }, async ({ sku }) => { const count = await inventoryDb.countBySku(sku) return { content: [{ type: 'text', text: `${sku}: ${count} in stock` }] } },) // Speak MCP over stdio; the host launches this as a subprocess.await server.connect(new StdioServerTransport())That is the entire contract. The model never sees your database, your credentials, or your query language — only the tool name, its description, and its input schema. The server stays the trust boundary, which is exactly where access control and validation belong.
Because the model only ever calls declared tools, you decide precisely what it can read and do. Scope each tool narrowly, validate every input, and the model cannot reach past the surface you exposed.
Business use cases for MCP
MCP turns "an AI that can chat about your business" into "an AI that can operate inside it." The value shows up wherever a model needs live, governed access to systems rather than a stale copy pasted into a prompt.
- Internal copilots that read live records — orders, tickets, accounts — and act on them through audited tools rather than screenshots.
- Customer support agents that resolve, not just summarise, by calling refund, lookup, and escalation tools behind one server.
- Knowledge access over private document stores, exposed as resources so answers cite real internal sources.
- Multi-step automation where a single agent orchestrates several servers — billing, CRM, calendar — through one consistent interface.
Because MCP is part of the Anthropic build surface alongside the Messages API, the Claude Agent SDK, and Claude Code, the same servers you write for an internal copilot can power an agent or a Claude Code workflow without rework. That reuse is where the M + N maths becomes a budget line, not just an architecture diagram. We size most of this kind of work in short, fixed cycles — see how engagements are scoped and priced.
What separates a good MCP server from a fragile one
The protocol is simple; the engineering judgement is not. The difference between a demo and a server you can operate under an SLA lives in the details that the spec leaves to you.
- Tool design — clear names and tight schemas so the model calls correctly the first time, instead of guessing across vague, overlapping tools.
- Least privilege — each tool reaches only the data and actions it needs, with auth enforced server-side, never in the prompt.
- Error handling — failures return structured, legible messages the model can recover from, rather than opaque stack traces.
- Observability — every tool call is logged and traceable, so you can audit what the model did and why.
- Versioning — schemas evolve without silently breaking the agents that depend on them.
A model is only as useful as the surface you expose to it. MCP makes that surface a deliberate, reviewable engineering artefact — not an accident of prompt-stuffing.
This is where most of the work goes when we build for clients. We design the tool surface, draw the trust boundary, wire the transport, and operate the result — see MCP server development for how that engagement runs. It pairs naturally with AI workflow automation when the goal is an agent that does real work, and with custom SaaS when the server underpins a product.
Claude-native by default
We are Claude specialists — we build on Claude by default, across the current model family (Claude Opus 4.8, Claude Sonnet 4.6, Claude Haiku 4.5, and Claude Fable 5), all with a 1M-token context window, and available on AWS Bedrock and Google Vertex AI. Because MCP is an open standard, the servers we write are not locked to one model, but our defaults, tooling, and operational experience are deepest on Claude.
If you want context on the broader picture — how MCP fits agents, the Claude Agent SDK, and governed deployments — the related reading below is the place to start.
Questions, answered.
It is an open standard that lets an AI model connect to your tools and data through one reusable interface. You describe your capabilities once in a standard shape, and any MCP-aware model can discover and use them — instead of building custom integration glue for every model and feature.
The M×N integration problem. Connecting M models to N systems naively means building M × N bespoke connectors. MCP collapses that to M + N: each system ships one server, each model speaks MCP as a client, and they meet at the protocol — so adding a model or system is additive rather than multiplicative.
A small program that wraps one system and exposes its capabilities to AI models in MCP form — tools (actions with typed input schemas), resources (readable data/context), and prompts (reusable templates). The server is the trust boundary, so it controls exactly what the model can read and do.
No. MCP is an open standard, so the servers you write work with any MCP-aware model and are not locked to one vendor. Claude supports MCP alongside the Messages API, the Claude Agent SDK, and Claude Code, which is why we build on Claude by default — but the protocol itself is model-agnostic.
Function calling is a per-application mechanism for letting a model invoke functions you define. MCP standardises that across applications and models: discovery, schemas, transport, resources, and prompts all follow one spec, so the same server is reusable across a chat product, an agent, and a code tool without rewiring.
A minimal server is small — the example above is the whole shape. The engineering effort goes into tool design, least-privilege access, error handling, observability, and versioning so it can be operated reliably. We scope this kind of work in short, fixed cycles; see the pricing page for how engagements are sized.