What the Model Context Protocol Actually Is, and What It Opens Up

Model Context Protocol

Connecting a language model to a company’s issue tracker used to mean writing a small integration layer by hand. Someone had to describe each operation to the model, handle authentication, map the model’s chosen action onto the right API call and turn the response back into text. Then the same work started again for the next model or the next application, because none of it was portable. With five AI applications and twenty internal systems, that is up to a hundred bespoke connectors, each with its own bugs and its own way of handling credentials.

The Model Context Protocol (MCP) is an attempt to collapse that grid. It defines one way for an AI application to discover what an external system offers and to call it. Anthropic described the problem in its November 2024 announcement: “Every new data source requires its own custom implementation.” MCP makes the connection standard. It does not make what sits on the other end of the connection trustworthy, and much of what follows is about the difference between the two.

Key Takeaways
  • The Model Context Protocol standardises how AI applications discover and call external capabilities. It replaces per-application integration code, not security design.
  • Hosts, clients and servers have distinct roles. The host sits between model and server, which makes it the natural place for policy.
  • Listing a tool and executing it are separate steps. Visibility through tools/list grants nothing, and execution is a host decision.
  • Tool descriptions and tool outputs are both untrusted inputs to the model. The specification says so, and tool-poisoning research has demonstrated the consequences.
  • The 2026-07-28 revision made MCP stateless and deprecated sampling, roots and logging. Check which version a server implements before relying on older documentation.
  • MCP provides interoperability, OAuth-based authentication for HTTP servers and consent guidance. Least privilege, isolation, validation and logging must be built around it.

Quick Navigation


What the Model Context Protocol actually is

The Model Context Protocol is an open specification for how AI applications exchange context and capabilities with external programs. In the words of the current specification, it gives applications a standard way to “share contextual information with language models” and “expose tools and capabilities to AI systems.” Its designers say it takes inspiration from the Language Server Protocol, which let one language server work with many code editors.

Several things it is often confused with are worth separating:

  • MCP is not a model. It doesn’t make a model smarter or better at choosing tools. That still depends on the model and the application.
  • MCP is not an agent framework. The architecture documentation says plainly that it “does not dictate how AI applications use LLMs or manage the provided context.”
  • MCP is not an API in the usual sense. A REST API defines one service’s operations. MCP defines how any service can describe its operations to any compatible AI application.
  • An MCP server is not the protocol. A server is one program that speaks MCP, written by anyone, with whatever quality and permissions its author chose.

Anthropic released the protocol in November 2024, along with SDKs and a set of open-source servers. In December 2025 it donated MCP to the Agentic AI Foundation, a fund under the Linux Foundation co-founded with Block and OpenAI. The existing maintainers kept control of its technical direction. The specification changes regularly. The current revision, dated 28 July 2026, made substantial changes, covered below.

Model Context Protocol architecture: hosts, clients and servers

MCP has three participants, and their responsibilities differ in ways that matter later.

  • The host is the AI application the user works in, such as a desktop chat app, an IDE or an agent runtime. It owns the conversation, the model and the user interface.
  • A client is a connector inside the host. The host creates one client for each server it connects to, and each client keeps a dedicated connection to its server.
  • A server is a program that provides context and capabilities: a filesystem server, a database server, an issue tracker’s server.

The model never talks to a server directly. When a model wants to use a tool, the host receives that request, decides whether to allow it, and has the relevant client send the call. The architecture documentation describes this step: the host “intercepts the tool call, routes it to the appropriate MCP server, executes it, and returns the results back to the LLM.” That interception point is where an application can enforce policy. Whether it does is up to the application.

Messages and transports

Clients and servers exchange JSON-RPC 2.0 messages, a simple request-and-response format. MCP defines two standard transports:

  • stdio, where the host launches the server as a local process and talks to it over standard input and output;
  • Streamable HTTP, where the server runs remotely and the client sends HTTP POST requests, optionally receiving streamed responses.

A local filesystem server typically uses stdio. A hosted service, such as the remote server Sentry operates, uses Streamable HTTP.

The 2026-07-28 revision made the protocol stateless. Earlier versions opened each connection with an initialize handshake that negotiated capabilities once per session. Now every request carries its protocol version and the client’s capabilities in its own metadata. Clients can call a new server/discover method to learn what a server supports. Servers that need state across calls must hand out explicit identifiers as ordinary tool arguments. The same revision deprecated sampling, which let servers ask the host’s model for completions, along with roots and logging. Articles written before mid-2026 describe the older design, so check which version a server implements.

Model Context Protocol

Tools, resources and prompts are different things

A server can offer three kinds of capability, and the MCP documentation is explicit about who is meant to control each.

CapabilityWhat it isWho typically controls itExample
ToolsFunctions the model can call; they may read data or change itThe model, with the host’s permissioncreate_issue, run_query, send_message
ResourcesRead-only data identified by a URIThe application, which decides what to include as contextA file, a database schema, a calendar
PromptsReusable templates for a taskThe user, who invokes them explicitlyA slash command such as /summarise-incident

The server concepts page uses this split: tools are model-controlled, resources application-controlled and prompts user-controlled. Servers declare which of these they support, and a client may use only some of them.

Discovery and execution are separate steps, and the gap between them matters. A client calls tools/list and receives each tool’s name, description and JSON Schema for its inputs. The host passes some or all of these to the model. Later, if the model asks for one, the client sends tools/call with arguments. Seeing a tool in a list grants nothing by itself. Execution is a second, distinct decision that the host makes.

What the Model Context Protocol opens up in real applications

Three patterns show what the protocol standardises and what it leaves to the application.

Querying documents or a database

A database server might expose its schema as a resource and a query function as a tool, and a filesystem server exposes file reading and searching. The official filesystem server is one of the project’s reference implementations. MCP standardises how the assistant finds those capabilities and calls them. The host still decides which directories or databases the server is configured for, and whether a query runs automatically or waits for approval. The integration needs read access to the data, and nothing more if it only answers questions.

Working with a code repository

GitHub’s official MCP server is a demonstrated case. It can run remotely, hosted by GitHub, or locally in Docker. It groups tools into toolsets, such as repositories, issues and pull requests. A --read-only flag skips write tools even when they’re explicitly requested. MCP standardises the interface, so a developer assistant in an IDE can list issues or open a pull request. The permissions come from the GitHub token or OAuth grant behind the server, and which toolsets are switched on is a deployment choice.

Retrieval combined with an action

This example is illustrative. An assistant reads a customer’s recent support tickets through one server, drafts a reply, and sends it through an email server. MCP lets both servers plug into the same host. Nothing in the protocol decides whether sending should happen without a person reviewing the draft. The integration needs read access to tickets and send access to email. That second permission turns a summarising assistant into one that acts on a customer.

The trust boundary hiding inside the tool description

A tool description is text written by the server’s author, and the model reads it to decide when and how to use the tool. That makes it an input to the model’s reasoning. If the author is careful and honest, the description helps the model choose correctly. If the author is careless, or the server is malicious, the description can push the model toward something the user never asked for.

The specification acknowledges this. It says descriptions of tool behaviour, including annotations, “should be considered untrusted, unless obtained from a trusted server.” In April 2025, Invariant Labs demonstrated “tool poisoning”. In its experiment, a tool presented as a simple add function carried hidden instructions in its description. Those instructions led the Cursor agent to read a configuration file and a private SSH key and pass them out through a tool argument. The confirmation dialog didn’t show the full arguments. Invariant also described “rug pulls”, where a server changes a description after the user has approved it. It showed a malicious server’s description altering how the agent used a different, trusted server’s email tool.

Tool outputs carry the same risk from the other direction. A tool that fetches a web page or reads an email returns text the model then reads, and that text may contain instructions. Our guide to the eight classes of prompt injection treats tool metadata and tool output as two of them.

Four layers, one of them yours

It helps to keep four layers distinct:

  1. Metadata: what the server claims a tool does.
  2. Model interpretation: what the model decides to do after reading it.
  3. Execution: what the server actually does when called, with whatever credentials it holds.
  4. Enforcement: what the host or surrounding infrastructure allows, regardless of the first three.

Only the fourth layer is under the deploying team’s direct control. Here is an illustrative example. A team connects a “project notes” server that also exposes a shell tool its author added for convenience, running with the developer’s own permissions. A poisoned page fetched by another tool now has a path to arbitrary commands. MCP carried every message correctly. The failure lay in what the host exposed and allowed.

The deeper threat model, covering token passthrough, cross-server shadowing, CVEs and supply-chain incidents, is in our analysis of where the model-to-tool boundary fails in MCP security. This article stays with what the protocol is.

Model Context Protocol

What the Model Context Protocol does not guarantee

Several common assumptions don’t survive a reading of the specification.

  • Interoperability is not semantic compatibility. Two servers can both speak MCP and still describe similar operations differently. A host that connects both may present the model with two search tools. The specification tells clients aggregating many servers to handle name collisions, for example by prefixing tool names with a server identifier.
  • Authentication is not authorisation. For HTTP servers, the authorisation specification builds on OAuth 2.1. Servers must validate that tokens were issued specifically for them, and must not pass tokens through to other services. That proves who is calling. Which actions that caller may take inside the server is the server’s own access-control logic. Authorisation is also optional in the protocol, and stdio servers are told to take credentials from their environment instead.
  • A successful response is not a trustworthy result. A tool result marked complete means the server answered. It doesn’t mean the answer is correct, safe to show the model, or free of injected instructions. The specification asks clients to “validate tool results before passing to LLM”, but how is left to them.
  • Human approval is not a complete boundary. The specification says there “SHOULD always be a human in the loop with the ability to deny tool invocations.” Invariant’s experiment shows an approval prompt is only as good as what it displays. A user approving a call they can’t fully see isn’t exercising much control.
Who is responsible for what

The specification is candid about where its responsibility ends: “MCP itself cannot enforce these security principles at the protocol level.” The work divides roughly as follows:

  • Server implementers validate inputs, enforce access control, rate-limit and sanitise outputs.
  • Host developers build consent flows, display tool calls accurately, validate results and log usage.
  • Deployment owners choose which servers to trust, with what credentials, inside what isolation.
  • Users decide what to approve, which works only if they’re shown enough to decide.

Before connecting a Model Context Protocol server: a checklist

These are the checks that change outcomes. The MCP security best practices cover the authorisation-level attacks in more depth.

  • Identity and provenance. Know who publishes the server, pin its version, and record a hash of its tool descriptions so a changed description is noticed.
  • Least privilege. Enable only the tools the task needs. Use read-only modes where they exist, as GitHub’s server offers.
  • Credentials. Give each server its own scoped, short-lived credential. Never share a broad personal token across several servers.
  • Scope of tools and resources. Restrict directories, repositories and databases at the server’s configuration, not in the prompt.
  • Approval for consequential actions. Gate writes, sends, deletes and payments. Make sure the approval shows the full arguments.
  • Isolation. Run local servers with limited filesystem and network access. The MCP best practices recommend sandboxing local servers, which run with the client’s privileges. Our guide to the four layers of sandbox isolation covers the options.
  • Validation. Check tool arguments against the schema before calling. Treat returned content as untrusted input to the model.
  • Logging. Record every tool call, its arguments, the result and the approving user, with a correlation ID.
  • Updates and configuration review. Re-review a server when its tool list changes. Updates can add tools.
  • Adversarial testing. Feed the integration poisoned documents and malicious tool outputs before production. Confirm the enforcement layer holds when the model is misled.

None of these removes prompt injection. Together they limit what a misled model can reach.

The engineering decision the Model Context Protocol leaves

MCP solves a real problem well. Connecting a new tool to a compatible host is now configuration rather than a project, and the same server can serve an IDE, a chat app and an agent runtime. The 2026 move to a stateless design also makes remote servers easier to scale behind ordinary HTTP infrastructure.

What MCP doesn’t decide is whether a given server deserves the access it asks for. Every server you connect adds a party whose text your model reads and whose code runs with credentials you granted. The question to ask of each integration is the same one you would ask of any third-party code with production access: what can it reach, and what stops it when it’s wrong?

FAQ

What is the Model Context Protocol?

It’s an open protocol that standardises how AI applications connect to external tools and data. A host application uses MCP clients to discover what an MCP server offers (tools, resources and prompts) and to call it. It doesn’t define how the model reasons or which tools are safe.

How does an MCP client communicate with an MCP server?

Through JSON-RPC 2.0 messages, over stdio for local servers or Streamable HTTP for remote ones. Since the 2026-07-28 revision, each request carries its own protocol version and capabilities. There’s no session handshake, and a client can call server/discover to learn what a server supports.

What is the difference between MCP and an API?

An API defines one service’s operations. MCP defines a common way for many services to describe their operations to AI applications. An MCP server often wraps an existing API, translating it into tools and resources that any MCP-compatible host can discover and call.

Is MCP secure?

The protocol includes OAuth-based authorisation for HTTP servers and security requirements for implementers. But the specification states that MCP “cannot enforce these security principles at the protocol level.” Security depends on which servers you trust, the permissions they hold, and the controls your host and infrastructure enforce.

When should a team use MCP?

When several AI applications need the same external capabilities, or when you want to use servers others maintain. For one application calling one internal API, a direct integration may be simpler. Either way, the same permission and isolation decisions apply.


Keep reading

Types of AI Models

Types of AI Models in 2026: A Field Guide From LLMs to World Models

Model details checked against official announcements, model cards and documentation on 1 November 2026. Line up four AI models that were current at the end …
AI Coding Agent

AI Coding Agents Are Getting Expensive. Who’s Paying for the Tokens?

Pricing checked on official vendor pages on 1 November 2026. All USD. Cost scenarios are illustrative and labelled as such. On 28 October, TechCrunch published …
generative AI architecture

Generative AI Architecture: The 7 Layers That Are Hard to Undo

Published 30 October 2026. API prices checked 28–30 October 2026 on each provider’s official pricing page. Cost figures below are labelled as illustrative where they …
Indirect Prompt Injection

Gemini 4 Carbon Hit 0% on Indirect Prompt Injection. Is That Enough?

When Google announced Gemini 4 Carbon on 28 October, one line in the safety section stood out. Carbon scored 0.0% on Gray Swan’s Indirect Prompt …

AI Agent Framework Security: A Review Guide for 10 Frameworks

AI agent framework security

Installing a framework and registering tools does not, by itself, document the security boundaries of the resulting deployment.

This article sets out questions for evaluating agent-framework security. It does not report substantiated UniverseBlend execution results. Assess sandboxing, network access, credential scope, approval requirements and logging for the exact framework version and deployment configuration under review.

The guide is a review framework, not a ranking or a report of installed-framework tests.

Key Takeaways

  • Evaluate the deployed system and its exact configuration.
  • Record execution boundaries, network access and credential scope.
  • Check approval requirements and logging destinations explicitly.
  • Distinguish documented behaviour from observed behaviour.
  • No framework installation, container probe or execution result is reported here.

Quick Navigation


The Configuration You Never See

Treat configuration as part of the security review. A documented capability does not establish whether that capability is enabled in a particular deployment.

How to Assess Agent Framework Security

A reproducible assessment should record the framework version, runtime, configuration, test commands and observed outputs. Distinguish documented behaviour from directly observed behaviour, and mark anything not established by either as unverified.

The definitions used throughout:

  • Logging — whether tool calls are recorded somewhere without the developer configuring an exporter, and what those records contain.
  • Default — the behaviour of the library as installed, with no keyword arguments, no environment variables and no configuration file. If you must pass an argument to get a control, it is not a default.
  • Sandbox — a boundary that prevents tool or model-generated code from reaching the host’s filesystem, environment and network. Restricting what the model may write is a weaker property than isolating where it runs; we separate the two.
  • Egress — outbound network access from the process executing tools. A framework-level egress control would be a deny list or allowlist the framework itself enforces.
  • Credential scope — which secrets a given tool can read. Full isolation would mean a tool receives only the credentials it was granted and cannot read the rest of the process environment.
  • Human approval — a framework mechanism that pauses execution before a tool call and requires an external decision to continue.

Which Frameworks Made the List, and Why

The guide covers LangChain / LangGraph, LlamaIndex, CrewAI, OpenAI Agents SDK, Google ADK, Microsoft Agent Framework, PydanticAI, smolagents, Strands Agents and Haystack. Their repository links are retained in Sources. Inclusion is not a test result or a security endorsement.

Recording the Assessment

For each framework, record the exact version, execution boundary, network policy, credential scope, approval requirements and logging configuration. Attach documentation or observed output to each assessment. No version-tested or execution-result table is presented here.

What the Security Review Should Examine

Use these five review areas to identify what is established and what still needs testing.

Execution boundaries

Where do tools execute, and which filesystem, process and user boundaries apply?

Approval requirements

Which actions require approval in the actual configuration, and how is the pause enforced?

Logging configuration

Which events and payloads are recorded, where are they sent, and what retention applies?

Network access

Which destinations can tools reach, and which layer enforces the network policy? No socket or proxy test result is reported here.

Code-execution restrictions

Distinguish restrictions on model-generated code from isolation of the process and developer-written tools. Establish each property from documentation and reproducible tests.

Applying the Review in Production

  • For an API tool, identify which credentials are available and how access is scoped.
  • For a coding agent, identify the execution environment and reachable files and services.
  • For customer information, establish whether traces include sensitive content and where it is sent.
  • For consequential actions, verify the configured approval path before deployment.

AI Agent Framework Security vs Runtime Security

Assess framework controls and runtime controls separately.

A framework is not a runtime. The framework decides what the agent is asked to do and in what order. The runtime decides what the resulting code is permitted to touch. They are different layers with different enforcement powers, and a Python decorator sits firmly in the first.

Real isolation in an agent system comes from:

  • Containers and VMs — process, filesystem and user boundaries
  • Sandboxed execution services — separate machines for model-written code
  • OS permissions — the user the agent runs as, and what that user owns
  • Network policies — egress rules at the cluster, VPC or proxy layer
  • Secret managers — short-lived, per-tool credentials injected at call time
  • Identity systems — the agent as a principal with its own scoped grants
  • Observability platforms — where the traces land and how long they persist

An absence of evidence about a framework control does not establish the security of the application. Document the deployment’s runtime, permissions, network policy and credential configuration separately.

The framework layer is simply not where this question gets answered. Our companion piece on sandbox isolation layers covers the runtime side in detail.


What Changes When You Configure the Framework

  • Consult the exact version’s documentation for supported approval mechanisms.
  • Choose and verify an appropriate execution boundary for tools and generated code.
  • Scope credentials to the tools that need them.
  • Configure logging and decide whether records may contain sensitive payloads.

The 50-Input Reality Check

The following is a proposed evaluation exercise, not a report of a completed test.

A benchmark score tells you how often a model produced an acceptable answer on a curated set. It tells you nothing about what the system did to get there — how many tool calls, against which endpoints, carrying which credentials, with what recovery behaviour when a tool timed out.

Run fifty representative inputs through your actual agent, with your actual tools, and record the tool-call trace for each. You will learn four things a leaderboard cannot give you: the cost distribution, the latency tail, the failure shape rather than the failure rate, and the real set of external systems your agent touches when it is confused.

Preserve the traces and configuration if you perform this exercise. Related reading: why benchmark scores fail · the four signals an agent stack must emit. No result is asserted here.


What Security Teams Should Ask Before Approving an Agent Framework

Ten questions. They are deliberately about the deployed system, not the library.

  1. What can the agent execute? Is there a code path, and if so, where does that code run — this process, a container, or a remote sandbox?
  2. What can it access? Which filesystem paths and which internal services are reachable from the process, regardless of what the tools claim to do?
  3. Where can it connect? Is there an egress policy, and is it enforced at the network layer rather than by tool descriptions?
  4. Which credentials can it see? Record the credentials exposed by the execution environment and verify which tools can access them.
  5. Which actions require approval? Name the specific tools that pause, and show the flag or middleware that makes them pause.
  6. What gets logged? Tool names only, or arguments and outputs too?
  7. Where do logs go? Your collector, or a vendor endpoint — and did anyone choose that deliberately?
  8. How long are traces retained, and do they contain regulated data?
  9. What happens when a tool fails? Does the agent retry, escalate, or improvise a different tool?
  10. What happens when the model behaves unexpectedly? What is the worst single action available to it right now, and who would see it happen?

Use the answers as a deployment review record; a framework name alone is not evidence that a control is effective.


Sources

Framework repositories for version-specific documentation and further review:

  • LangChain — https://github.com/langchain-ai/langchain
  • LangGraph — https://github.com/langchain-ai/langgraph
  • LlamaIndex — https://github.com/run-llama/llama_index
  • CrewAI — https://github.com/crewAIInc/crewAI
  • OpenAI Agents SDK — https://github.com/openai/openai-agents-python
  • Google ADK (Python) — https://github.com/google/adk-python
  • Microsoft Agent Framework — https://github.com/microsoft/agent-framework
  • PydanticAI — https://github.com/pydantic/pydantic-ai
  • smolagents — https://github.com/huggingface/smolagents
  • Strands Agents SDK — https://github.com/strands-agents/sdk-python
  • Haystack — https://github.com/deepset-ai/haystack

Standards and security research:

  • OWASP Top 10 for LLM Applications — https://owasp.org/www-project-top-10-for-large-language-model-applications/
  • NIST AI Risk Management Framework — https://www.nist.gov/itl/ai-risk-management-framework

Referenced in the article body:

  • LangChain Experimental sunset notice — https://github.com/langchain-ai/langchain-experimental/issues/87

Frequently Asked Questions

Are AI agent frameworks sandboxed by default?

Check where tools execute and which isolation controls are configured. This article does not establish the default sandboxing behaviour of the listed frameworks.

Do agent frameworks restrict network access?

Check the framework documentation and the deployment’s network controls. No network-probe results are reported here.

Can AI agents access environment variables?

Check which credentials the tool’s execution environment exposes. This article does not establish that scope for the listed frameworks.

What is the difference between an agent framework and an agent runtime?

The framework decides what the agent attempts — prompts, tool selection, control flow, state. The runtime decides what the resulting execution is allowed to touch — process boundaries, filesystem access, network reachability, credential lifetime. A Python orchestration library cannot enforce runtime boundaries, which is why the absence of a framework-level control does not mean the deployed application lacks that control.

How should organisations evaluate agent security?

Evaluate the deployed system, not the library. Run a representative set of real inputs through the actual agent with tracing enabled, record every tool call and every external endpoint touched, then check that set against the credentials and network reach the process actually has. A framework comparison is an input to that review, not a substitute for it.


Keep reading

Types of AI Models

Types of AI Models in 2026: A Field Guide From LLMs to World Models

Model details checked against official announcements, model cards and documentation on 1 November 2026. Line up four AI models that were current at the end …
AI Coding Agent

AI Coding Agents Are Getting Expensive. Who’s Paying for the Tokens?

Pricing checked on official vendor pages on 1 November 2026. All USD. Cost scenarios are illustrative and labelled as such. On 28 October, TechCrunch published …
generative AI architecture

Generative AI Architecture: The 7 Layers That Are Hard to Undo

Published 30 October 2026. API prices checked 28–30 October 2026 on each provider’s official pricing page. Cost figures below are labelled as illustrative where they …
Indirect Prompt Injection

Gemini 4 Carbon Hit 0% on Indirect Prompt Injection. Is That Enough?

When Google announced Gemini 4 Carbon on 28 October, one line in the safety section stood out. Carbon scored 0.0% on Gray Swan’s Indirect Prompt …