What's new in MCP
What MCP is, what the July 2026 spec changes for you, and how to use MCP servers in Claude Code, Codex and other agents.
Your agent can read and write code. With MCP, it can also read your Linear tickets, look at a Sentry error or query your database. MCP is the standard way to plug those tools into any agent.
In July, MCP got its most important update since remote servers launched. Here's what MCP is, what changed, and how to use it.
1. What MCP is
The Model Context Protocol is an open standard for connecting AI agents to tools and data. A service builds one MCP server, and every agent that speaks MCP can use it: Claude Code, Codex, Cursor, VS Code and many more.
- The host is your agent app, like Claude Code.
- A client inside the host holds the connection to one server.
- A server offers what the agent can use: tools it can call, resources it can read, and prompts you can start.
A server runs either locally, as a program your agent starts on your machine, or remotely, as a web service your agent reaches over HTTP. Remote servers usually sign you in with OAuth: you log in once in the browser instead of copying API keys around.
Anthropic launched MCP in late 2024. Today it's run by the Linux Foundation's Agentic AI Foundation.
2. What's new in the 2026-07-28 spec
On July 28, 2026, MCP got its fifth spec version, named after its release date. The big change: MCP is now stateless.
Until now, a client and a server opened a session with a handshake, and every later request belonged to that session. Now each request carries everything the server needs, so any instance behind a plain load balancer can answer it. That makes remote servers much easier to run at scale, including on serverless platforms.
The other changes worth knowing:
- Follow-up questions without a session. When a tool needs more input, like a confirmation, the server replies that it needs input, and the client sends the request again with the answer.
- Cacheable tool lists. Servers can say how long their tool list stays valid and return it in a fixed order. That keeps the agent's prompt cache stable, which makes responses cheaper and faster.
- Stricter sign-in. Clients must check who issued an OAuth response, and stored credentials are tied to the server that issued them.
- Official extensions. Optional features now live in extensions: MCP Apps for interactive UIs, for example, or Skills over MCP, finalized in September, which lets a server hand agent skills to your agent.
- Deprecated: roots, sampling, server logging, dynamic client registration and the old HTTP+SSE transport. They still work, and no spec released before July 28, 2027 will remove them.
What this means for you
If you only use MCP servers: almost nothing. The new SDKs speak both the old and the new protocol, and agents fall back to the old one when needed. As of September 2026, Claude Code already uses the new version with HTTP servers that support it. Codex has it built in but switched off by default. VS Code and Gemini CLI still use the previous version.
If you build servers: use the new official SDKs, like @modelcontextprotocol/server 2.x for TypeScript. Many tutorials still install the older @modelcontextprotocol/sdk package, which has the previous API.
3. Add MCP servers to your agent
Claude Code
A remote server takes one command. Then run /mcp in Claude Code to sign in:
claude mcp add --transport http notion \
https://mcp.notion.com/mcpFor a local server, everything after -- is the command that starts it:
claude mcp add --env AIRTABLE_API_KEY=your-key \
--transport stdio airtable -- npx -y airtable-mcp-serverBy default, a server is only available to you, in the current project. Add --scope project to write it to .mcp.json in your repository instead, so
your team gets it too:
{
"mcpServers": {
"notion": {
"type": "http",
"url": "https://mcp.notion.com/mcp"
}
}
}Claude Code loads a server's tool definitions only when it needs them, so connected servers don't fill your context window.
Codex
Same idea. Add a local server with --, a remote one with --url, and
sign in with codex mcp login:
codex mcp add context7 -- npx -y @upstash/context7-mcp
codex mcp add notion --url https://mcp.notion.com/mcp
codex mcp login notionBoth land in ~/.codex/config.toml, which you can also edit by hand:
[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
[mcp_servers.notion]
url = "https://mcp.notion.com/mcp"Cursor, VS Code and others
Most other agents use a JSON file like .mcp.json. Cursor reads .cursor/mcp.json with the same mcpServers key. VS Code reads .vscode/mcp.json, but calls the key servers. When you copy a config
between agents, check that key first. Claude Code also needs "type": "http" on remote
entries, which Cursor's examples leave out.
4. Use MCP safely
- Only connect servers you trust. A local server is a program running on your machine with your permissions. Treat it like any other dependency you install.
- Watch for prompt injection. A server that fetches outside content, like web pages, issues or emails, can pass your agent instructions you never wrote. Keep approvals on for tools that change things.
- Give tokens as few rights as possible. Use read-only or narrowly scoped keys where you can, never your personal admin token.
- Prefer a good CLI when there is one. For tools like GitHub's
gh, your agent already knows the commands, and you skip a whole server.
5. Build your own server
A working server takes about thirty lines with the official TypeScript SDK. Set up a project:
npm init -y
npm pkg set type=module
npm install @modelcontextprotocol/server zod tsximport { McpServer } from "@modelcontextprotocol/server";
import { serveStdio } from "@modelcontextprotocol/server/stdio";
import * as z from "zod/v4";
function createServer(): McpServer {
const server = new McpServer({
name: "dice",
version: "1.0.0",
});
server.registerTool(
"roll-dice",
{
description: "Roll a die with the given number of sides",
inputSchema: z.object({
sides: z.number().int().min(2).max(100),
}),
},
async ({ sides }) => {
const roll = 1 + Math.floor(Math.random() * sides);
return {
content: [{ type: "text", text: `You rolled ${roll}` }],
};
},
);
return server;
}
void serveStdio(createServer);
console.error("dice MCP server running on stdio");Register it from the project folder, start Claude Code there, and ask it to roll a die:
claude mcp add dice -- npx tsx server.tsNote the console.error: a local server talks to your agent over its standard
output, so any logging has to go to standard error.
Start with one server for the tool you switch to most, whether that's your issue tracker, your error monitoring or your database. And keep asking whether a CLI would do the same job.