Portfolio
All posts
8 min read

The Model Context Protocol (MCP), Explained

MCP is becoming the USB-C of AI tooling — an open standard for connecting language models to your data and tools. Here's what it is, how hosts, clients, and servers fit together, and why it matters for developers.

  • AI
  • MCP
  • Integration

For a while, every team wiring an AI model to their own data reinvented the same plumbing: a bespoke way to expose a database, a one-off adapter for a ticketing system, a custom bridge to internal tools. The Model Context Protocol — MCP — is the industry's answer to that sprawl. It's an open standard for connecting language models to external tools and data, and it has been called the USB-C of AI integrations for good reason.

Why we needed a protocol

The value of an AI assistant collapses without context. A model that can't see your code, your documents, or your systems can only talk in generalities. The obvious fix is to give it access — but every integration built from scratch is a new surface to design, secure, and maintain. The combinatorial explosion of every model times every tool is exactly the kind of problem a shared protocol exists to kill.

MCP standardizes the connection once. A tool that speaks MCP works with any host that speaks MCP, and vice versa. Build the integration a single time, and the whole ecosystem can use it.

How MCP works

At its heart MCP is a client-server protocol with a small, well-defined vocabulary.

Hosts, clients, and servers

  • A host is the application the user interacts with — an editor, a chat app, a desktop assistant.
  • The host runs one or more clients, each maintaining a connection to a server.
  • An MCP server is a small program that exposes some capability — your files, a database, an API — through the protocol.

The host never needs to know how a given server works internally. It just speaks the protocol, and the server translates between MCP and whatever it wraps.

Tools, resources, and prompts

MCP servers expose three kinds of things:

  • Tools are actions the model can invoke — "search issues," "run query," "send message." These are the verbs.
  • Resources are data the model can read — files, records, documents. These are the nouns.
  • Prompts are reusable templates the server offers to guide common interactions.

That small vocabulary is enough to express most integrations, which is why the protocol stays simple even as the ecosystem grows.

Building a simple MCP server

Conceptually, a server registers its tools and resources, then handles requests for them. The shape is the same regardless of language:

// Pseudocode for the structure of an MCP server.
const server = createServer({ name: "issues", version: "1.0.0" })

server.tool("search_issues", { query: "string" }, async ({ query }) => {
  const results = await tracker.search(query)
  return { content: results.map((r) => ({ type: "text", text: r.title })) }
})

server.start()

The host discovers search_issues, shows the model that it exists, and the model can choose to call it with arguments. The server runs the real work and returns structured results the model can reason about.

Where MCP is headed

Adoption moved fast because the incentive is mutual: tool builders want to be reachable by every assistant, and assistant builders want access to every tool. Expect richer capabilities around streaming, authentication, and fine-grained permissions as the standard matures — but the core idea, one protocol between models and the world, is already settled.

The bottom line

MCP doesn't make models smarter; it makes them connected. By standardizing the boundary between an assistant and the tools it uses, it turns a quadratic integration problem into a linear one. If you're building anything that gives an AI access to your systems, speaking MCP means you build the bridge once and reach the whole ecosystem.

Frequently Asked Questions

Is MCP tied to one AI vendor?

No. MCP is an open standard with implementations across multiple model providers and a growing community of third-party servers. The entire point is to avoid vendor-specific plumbing, so a server you build is portable across hosts that support the protocol.

What's the difference between an MCP tool and a plain function call?

Function calling is how a single model decides to invoke a capability. MCP is the transport and standard that exposes those capabilities across applications. MCP tools are surfaced to the model much like function calls, but the protocol handles discovery, connection, and reuse so the same tool works in any compatible host.

Do I need MCP if I already use function calling?

Not necessarily. If you have one model and a handful of in-process functions, plain function calling is simpler. MCP pays off when you want those capabilities reusable across multiple apps, shared with other teams, or decoupled from a specific model.

Is MCP secure?

The protocol supports authentication and scoped access, but security still depends on how you deploy it. Treat an MCP server like any other service that exposes data: authenticate connections, limit what each tool can do, and never expose destructive actions without explicit confirmation.