MCP, the Model Context Protocol, is an open standard that lets AI apps use outside tools and data. A service is wrapped once as an “MCP server”, and every app that supports MCP can use it: Claude Code, Codex, OpenCode, Cursor, VS Code, ChatGPT and many more. The official docs compare it to USB-C: one plug instead of a different cable for every device.
For coding agents, that means you can give your agent new abilities, such as reading GitHub issues, driving a browser or querying a database, by adding one line of config instead of writing an integration.
What it looks like in practice
Without MCP, you copy an issue from GitHub into the chat, the agent writes a fix, and you open the pull request yourself.
With the GitHub MCP server added, you write “fix issue 142 and open a pull request”. The agent reads the issue, makes the change and opens the pull request through the server. You approve the steps that matter.
The agent did not get smarter. It got hands.
Isn’t that just an API?
Almost. MCP sits on top of APIs; it doesn’t replace them.
| What it is | Who writes the glue | |
|---|---|---|
| API | An interface programs call, such as GitHub’s REST API | You, for every app that needs it |
| Function calling | A model’s ability to request a tool call in a structured format | You, inside your own app |
| MCP | A standard way to package tools so any AI app can find and call them | The server author, once |
The difference that matters: with plain function calling, the tool definitions live in one app’s code. With MCP, the server publishes them and any app can load them at runtime.
How it works
Three parts:
- Host: the app you use, such as Claude Code or Cursor.
- Client: the connection inside the host to one server.
- Server: the program that offers the tools.
A server can offer tools (actions the model can call, like create_issue), resources (data to read, like files or records) and prompts (ready-made templates). Coding agents mostly use tools.
Servers run in one of two ways:
- Local (stdio): your app starts the server as a program on your computer. It runs with your user’s permissions.
- Remote (HTTP): the server is a web service, usually with a sign-in through your browser.
How to add an MCP server
Every agent does the same thing, with a different command or file:
| Agent | How you add a server | Where it’s saved |
|---|---|---|
| Claude Code | claude mcp add | This project, just for you (default); all your projects with --scope user; .mcp.json in the repo with --scope project |
| Codex CLI | codex mcp add | ~/.codex/config.toml |
| OpenCode | Edit the config | opencode.json in the project, or ~/.config/opencode/opencode.json |
| Cursor | Edit the config | .cursor/mcp.json in the project, or ~/.cursor/mcp.json |
| VS Code | Edit the config | .vscode/mcp.json, with servers as the top-level key |
| Contenox | Connectors → Add connector | The app; for every chat, one project folder, or one chat |
The examples use two real servers: GitHub, which runs remotely, and Playwright, which runs on your computer and lets the agent control a browser.
Claude Code
claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
--header "Authorization: Bearer YOUR_GITHUB_TOKEN"
claude mcp add playwright -- npx @playwright/mcp@latest
claude mcp list
For GitHub, create a personal access token in your GitHub settings first. Add --scope project to share a server with your team through a .mcp.json file in the repo.
Codex CLI
codex mcp add playwright -- npx @playwright/mcp@latest
codex mcp list
Or edit ~/.codex/config.toml:
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
OpenCode: add an mcp block to opencode.json in the project:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"playwright": {
"type": "local",
"command": ["npx", "@playwright/mcp@latest"],
"enabled": true
},
"github": {
"type": "remote",
"url": "https://api.githubcopilot.com/mcp/",
"headers": { "Authorization": "Bearer YOUR_GITHUB_TOKEN" }
}
}
}
opencode mcp list shows which servers are connected.
Cursor: create .cursor/mcp.json in the project, or ~/.cursor/mcp.json for all projects:
{
"mcpServers": {
"playwright": { "command": "npx", "args": ["@playwright/mcp@latest"] }
}
}
VS Code: the same idea in .vscode/mcp.json, but the top-level key is servers, not mcpServers:
{
"servers": {
"github": { "type": "http", "url": "https://api.githubcopilot.com/mcp/" }
}
}
VS Code signs you in to GitHub in the browser; no token needed.
Local servers started with npx need Node.js installed.
Servers worth knowing
- GitHub: issues, pull requests and code across your repositories. Remote at
https://api.githubcopilot.com/mcp/, or run locally with Docker. - Playwright (
@playwright/mcp): opens pages, clicks through flows and takes screenshots, so the agent can check its own UI work. - Context7 (
@upstash/context7-mcp): fetches current library documentation, so the agent stops guessing APIs from old training data. - Filesystem (
@modelcontextprotocol/server-filesystem): the reference server. Useful for apps without built-in file access; coding agents already have it.
When you don’t need MCP
MCP is not always the best tool, and the debate about it is fair.
- If a good command-line tool exists, the agent can often just use it. Coding agents can run
gh,psqlorkubectldirectly, with nothing extra to install. - Every server’s tool descriptions use up part of the model’s context. Ten servers you rarely use make every request longer and can make the agent pick the wrong tool. Add servers for the work you do, and remove the rest.
- MCP pays off when there is no CLI, when the service needs a browser sign-in, or when the same tools should work across several apps and teammates.
Is MCP safe?
An MCP server is code that acts with your access, so treat it like any program you install:
- Install servers only from publishers you trust. A local server runs as you.
- Give servers the least access that works, for example a read-only token for a server that only reads.
- Treat what tools return as untrusted. An issue comment or web page can contain instructions aimed at the model. This is called prompt injection.
- Approve actions, not just servers. Reading an issue is harmless; deleting a branch is not. Set rules per tool where your app allows it. See AI agent permissions.
Who owns MCP, and what changed in 2026
Anthropic released MCP in November 2024. In December 2025 it was handed to the Agentic AI Foundation under the Linux Foundation, so no single company controls it.
The specification revision of 28 July 2026 made the protocol stateless: each request carries what the server needs to know, instead of opening a session first. If you use MCP servers, nothing changes for you. If you build them, check that your SDK supports the new revision; older tutorials show the previous style.
Contenox
In the Contenox desktop app, MCP servers are Connectors: add one on the Connectors page for every chat or one project folder, or for a single chat from the + menu in the message box. You can switch a connector or a single tool off per chat, which keeps the tool list, and the context it costs, small. Every call still goes through your permission rules and asks first by default. Steps: add an MCP server.
Related guides
- What is an AI coding agent?
- Agent Client Protocol (ACP): how agents run inside editors, the other protocol you will meet
- AGENTS.md explained: give your agent project instructions
- AI agent permissions
- Keep secrets away from AI agents