AI Integration

Should Your Product Have an MCP Server? What the Spec Actually Requires

MCP is how ChatGPT, Claude and VS Code reach a product without a bespoke integration for each one. Here is the architecture in the spec’s own words, the three server primitives, the two transports, and the security rules that say MUST.

If your product has an API, someone is going to ask this year whether it has an MCP server. The Model Context Protocol is the standard that lets an AI application reach an external system without a bespoke integration per assistant, and the practical effect for a software business is that one server makes a product reachable from ChatGPT, Claude, Visual Studio Code and Cursor at once. Everything below is quoted from the protocol documentation as it stood on 25 September 2026, at protocol version 2026-07-28, and linked so you can check it.

The build is small. The decisions that are expensive to reverse are which operations you expose as tools, whether the server runs locally or remotely, and how you handle tokens. Get those three right and the rest is an SDK.

What MCP is, in the specification’s own words

The introduction to MCP, read on 25 September 2026, describes it as "an open-source standard for connecting AI applications to external systems", and uses a hardware analogy that is worth keeping: "Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect electronic devices, MCP provides a standardized way to connect AI applications to external systems."

The commercial argument follows directly from that. The documentation notes that MCP is supported across Claude, ChatGPT, Visual Studio Code, Cursor and others, "making it easy to build once and integrate everywhere". Before MCP, a vendor wanting to be usable from three assistants wrote three integrations and maintained three. That is the cost the standard removes, and it is the reason the question is being asked at board level rather than in a backlog.

“MCP focuses solely on the protocol for context exchange - it does not dictate how AI applications use LLMs or manage the provided context.”

Model Context Protocol, Architecture overview, read 25 September 2026

That scope note matters when someone asks whether adopting MCP locks the company into a model vendor. It does not. MCP is a wire protocol for context and actions, not a model API.

The architecture: host, client, server, and one connection each

The architecture overview names three participants. The MCP host is the AI application that coordinates everything. The MCP client is "a component that maintains a connection to an MCP server". The MCP server is "a program that provides context to MCP clients". The host creates one client per server, and each client keeps a dedicated connection.

The protocol splits into two layers. The data layer is a JSON-RPC 2.0 exchange that carries discovery, capabilities and the primitives. The transport layer handles the channel and the authorization. Keeping those separate in your own head is useful, because almost every decision that costs money later is a transport or an authorization decision, and almost every decision that affects how useful the server feels is a data layer decision.

Decisionstdio transportStreamable HTTP transport
Where it runsLocally, as a child process of the AI applicationRemotely, on your infrastructure
Who it servesTypically a single MCP clientTypically many MCP clients
AuthenticationProcess boundary; the spec advises restricting access to just the clientBearer tokens, API keys, custom headers; MCP recommends OAuth
Operational burdenDistribution and versioning on the user’s machineUptime, scaling, token handling, audit
Typical fitDeveloper tooling, local files, a database on the workstationA SaaS product exposing its own data to customers’ assistants
Transports as described in the MCP architecture overview, read 25 September 2026. If you are a SaaS vendor exposing your own product, the answer is almost always Streamable HTTP.

One more architectural fact is easy to miss and changes how you design state. MCP is described as a stateless protocol: "Every request contains all the information needed to process it, so servers infer nothing from previous requests". Anything spanning requests, such as a cart or a workflow, is an explicit handle you mint and receive back as an ordinary tool argument. That has a security consequence covered further down.

Three primitives, and the one that decides whether the server is useful

A server can expose three things. Tools are "executable functions that AI applications can invoke to perform actions". Resources are "data sources that provide contextual information". Prompts are "reusable templates that help structure interactions with language models". Clients discover each through a list method and, for tools, execute through tools/call.

The documentation gives a clean worked example: a server providing context about a database "can expose tools for querying the database, a resource that contains the schema of the database, and a prompt that includes few-shot examples for interacting with the tools". Most teams build the tools, skip the resource and skip the prompt, and then wonder why the assistant guesses at column names.

Tool design is where the quality of the server is decided, and the spec is unusually prescriptive about naming. Each tool carries a name that "should follow a clear naming pattern (e.g., calculator_arithmetic rather than just calculate)", a human-readable title, a description explaining what it does and when to use it, and an inputSchema in JSON Schema. The description is not documentation for humans. It is the text a language model reads when it decides whether to call your tool at all.

  • Namespace the names. A client may federate dozens of servers. invoices_create survives that; create does not.
  • Write the description for the caller, not the reader. Say when to use the tool and when not to. Ambiguity between two similar tools produces wrong calls.
  • Constrain the input schema. Enums, required fields and defaults are cheaper than validating a hallucinated string on the server.
  • Expose the schema as a resource. If the tools query your data, the shape of that data belongs in a resource so the model does not guess.
  • Keep results small and structured. Tool responses come back as a content array that lands in the conversation, and a 4,000-row dump is a cost line as well as a usability problem.

Two things changed at protocol version 2026-07-28 that are worth knowing before you copy an older tutorial. Elicitation is the supported way for a server to ask the user for more information or confirm an action, using elicitation/create. Sampling and logging are deprecated as of that version; the documentation advises that new implementations "integrate directly with LLM provider APIs" and log to stderr or OpenTelemetry instead.

The security rules that say MUST

The MCP security best practices document is the part to read before you write the server, not after. Three of its rules are absolute, and each of them is a mistake a competent team makes by accident.

The first is token passthrough, which the document calls an anti-pattern: accepting a token from a client "without validating that the tokens were properly issued to the MCP server" and forwarding it downstream. The rule is stated without qualification.

“MCP servers MUST NOT accept any tokens that were not explicitly issued for the MCP server.”

Model Context Protocol, Security Best Practices, read 25 September 2026

The second is the confused deputy problem, which arises when a server proxies a third-party API using a static client ID while letting clients register dynamically. Because the third-party authorization server has already set a consent cookie, a later malicious request can skip the consent screen entirely. The mitigation is per-client consent held by your server: proxy servers "MUST implement per-client consent", maintain a registry of approved client IDs per user, and check it before forwarding to the third-party flow. Redirect URIs must be validated by exact string match, never by pattern or wildcard.

The third follows from statelessness. Because a state handle is passed as an ordinary argument, anyone who guesses one can present it. The document is direct: servers that implement authorization "MUST verify all inbound requests" and "MUST NOT treat possession of a state handle as authentication". The recommended pattern is to bind handles server-side to the authenticated user, keying stored state as user ID plus handle, where the user ID comes from the verified token rather than from the client.

There is more in that document worth an afternoon: SSRF protections for clients that fetch OAuth metadata URLs, a requirement that clients reject javascript:, data: and file: authorization URLs, and a scope minimization section arguing against publishing an omnibus scope. If you have read our notes on securing a Node application in production, this is the same discipline applied to a new surface, and the same review we would run as part of a SOC 2 readiness exercise.

When a product should build one, and when it should not

An MCP server is worth building when a customer would plausibly want to ask an assistant about your data or have it act in your product, and when the actions are well bounded. It is not worth building as a marketing exercise, and it is a poor substitute for an API that does not exist yet.

SituationBuild an MCP server?
You have a stable authenticated REST or GraphQL API and customers ask for AI workflowsYes. The server is a thin, well-designed facade over what exists
Your data is most useful read in bulk and reasoned overYes, with resources for the shape and tools for the queries
You have no API and no authorization modelNot yet. Build the authorization model first; an MCP server inherits it
The valuable operations are irreversible and high-value (payments, deletions)Carefully. Use elicitation to confirm, and keep destructive operations out of the first release
You want one for the press releaseNo. A server with four vague tools is worse than none, because it will be called and it will be wrong
A decision table, not a maturity model. The second column assumes you will maintain the server, because tool descriptions drift out of date faster than API documentation.

Scope the first release narrowly: three to six tools, all read-only or reversible, one resource describing the data shape, and real authorization from day one. Ship it, watch which tools actually get called and which get called wrongly, and let that decide the second release. It is the same sequencing we argue for in choosing an AI agent development company, and the reason is the same: the expensive part of an AI integration is never the first working demo.

If you already run a retrieval system, note that MCP does not replace it. A RAG knowledge base answers questions from documents you control; an MCP server exposes live operations and live data to somebody else’s assistant. Plenty of products need both, and they fail for different reasons.

What a first build actually involves

For a team that already has an API and an identity provider, the engineering is measured in days rather than months. The work that takes the time is the part nobody demos.

  • Pick the transport and mean it. Streamable HTTP for a hosted product, stdio only if the server genuinely belongs on the user’s machine.
  • Implement server/discover. The architecture overview calls it mandatory, and it is how clients learn your version and capabilities.
  • Model authorization before tools. Every tool call runs as somebody. Decide who, from a verified token, and enforce it per call.
  • Write the tool descriptions twice. Once as you think of them, once after watching a model choose wrongly between two of them.
  • Test with the MCP Inspector from the reference tooling, then against at least two real clients, because host behaviour differs.
  • Decide the deprecation story. Tool lists are cached with a TTL and change notifications are best effort, so removing a tool is a breaking change with a delay built in.

The operational shape is an ordinary authenticated HTTP service, which means the deployment questions are the familiar ones rather than new ones: process management, TLS termination, logging and rollback. Our notes on deploying a Node application with PM2, Nginx and SSL and on running Node in Docker in production apply unchanged.

If you want a second pair of eyes on the tool surface before you commit to it, or a server built and handed over with the authorization model documented, talk to us about the build.

What is an MCP server?

A program that provides context to MCP clients. The Model Context Protocol documentation defines the server as the participant that exposes tools, resources and prompts, and the client as the component inside an AI application that maintains a dedicated connection to it. One host creates one client per server.

Is MCP tied to one AI vendor?

No. The documentation describes MCP as an open standard supported across Claude, ChatGPT, Visual Studio Code, Cursor and others, and states that the protocol "does not dictate how AI applications use LLMs or manage the provided context". It is a protocol for context exchange, not a model API.

Should an MCP server run locally or remotely?

Local servers use the stdio transport and typically serve a single client, which suits developer tooling and files on a workstation. Remote servers use the Streamable HTTP transport and typically serve many clients, which is what a SaaS product exposing its own data needs. MCP recommends OAuth for obtaining tokens on the HTTP transport.

What is the biggest security mistake in an MCP server?

Token passthrough. The security best practices document states that MCP servers MUST NOT accept any tokens that were not explicitly issued for the MCP server. Accepting a token issued for another service, and forwarding it downstream, breaks audience validation and creates a confused deputy.

Do I need an API before I build an MCP server?

In practice yes, or at least an authorization model. An MCP server inherits whatever access control sits underneath it, and every tool call has to run as a specific verified user. Building the server first means building the authorization model inside it under time pressure.

How many tools should a first MCP server expose?

Three to six, all read-only or reversible. Tool descriptions are what a model reads when deciding whether to call something, so a small well-described surface outperforms a large vague one, and irreversible operations are better added once you have seen how the model behaves.

Need help building this?

Let our team build it for you.

Dude Lemon builds production-grade web apps, APIs, and cloud infrastructure. Get a free consultation and project proposal within 48 hours.

Start a Project

Related articles

View all articles →