MCP (Model Context Protocol) is an open standard for connecting AI agents to external tools and data sources. Think of it as USB for AI — a universal connector.
[AI Agent] <--MCP--> [MCP Server] <---> [External System]
(Database, API, File System, etc.)The agent sends requests to MCP servers, which translate them into actions on external systems. The agent never touches the external system directly.
Server — A program that exposes tools (functions the agent can call) and/or resources (data the agent can read). Runs locally or remotely.
Tool — A callable function with a defined schema. Example: query_database(sql: string).
Resource — Read-only data exposed to the agent. Example: a file's contents, a database schema.
Transport — How the agent communicates with the server. Options: stdio (local process), HTTP/SSE (remote).
These are the reference + widely-used servers most agents pick up first:
| Server | Purpose |
|---|---|
| GitHub Copilot MCP | Issues, PRs, code search — first-party replacement for the archived GitHub reference server |
| Vercel MCP | Deployment management, env vars, logs |
@upstash/context7-mcp | Fresh, versioned framework documentation |
Tools that happen to ship MCP servers for their own use — adopt selectively:
| Server | Purpose |
|---|---|
next-devtools-mcp | Next.js error detection, route inspection |
npx shadcn@latest mcp | Browse and install shadcn/ui components |
As of 2025–2026, several 2024-era reference servers have been moved to modelcontextprotocol/servers-archived and are no longer maintained:
Postgres, Slack, Sentry, GitHub (reference), Puppeteer, SQLite, Redis, Google Drive, Google Maps, Brave Search, EverArt, AWS KB Retrieval.
Use community-maintained forks or first-party replacements (e.g. GitHub Copilot MCP, Vercel MCP, Sentry's newer MCP, community Postgres MCPs).
Create .mcp.json at project root:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"]
},
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}Or add via CLI:
claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem "$PWD"A minimal MCP server in TypeScript:
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
const server = new McpServer({ name: 'my-server', version: '1.0.0' });
server.tool('greet', { name: z.string() }, async ({ name }) => ({
content: [{ type: 'text', text: `Hello, ${name}!` }],
}));
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
}
main();The TypeScript SDK uses the Standard Schema spec — bring Zod, Valibot, or ArkType.
For local personal agents default to stdio. For team/shared servers use Streamable HTTP.
DATABASE_URL, API keys, etc.).Every MCP server is an extension of the agent's blast radius. A filesystem server gives the agent filesystem access; a git server gives it repo-rewrite power.
/ or $HOME.list_tools output.permissions.deny in .claude/settings.json as defense in depth.npx -y <server> --help) before wiring them into the agent.Search for a command to run...