MCP — Model Context Protocol
MCP is the open standard that lets Claude talk to anything — your database, GitHub, Linear, Slack, Figma, even your own internal tools. Think of it as USB-C for AI: one protocol, many adapters. This page covers what it is, how to install servers, the ones every pro uses, and how to build your own.
On this page
- 1. What MCP is (and isn't)
- 2. How an MCP server works
- 3. Installing servers in Claude Code
- 4. Installing in claude.ai
- 5. The essentials (install these first)
- 6. Developer-focused servers
- 7. Productivity & team tools
- 8. Data & analytics
- 9. Design tools
- 10. Build your own MCP server
- 11. Security & trust
1. What MCP is (and isn't)
MCP is a JSON-RPC-based protocol Claude speaks to external processes. Those processes (called servers) expose three things:
- Tools — functions Claude can call (e.g.,
github.create_pr,postgres.query). - Resources — data Claude can read (a file, a row, a doc).
- Prompts — pre-baked prompt templates the server suggests.
Most servers focus on tools. That's where the action is.
2. How an MCP server works
An MCP server is just a program that speaks the protocol on one of two transports:
- stdio — Claude spawns the process and pipes JSON-RPC over stdin/stdout. Most local servers.
- HTTP / SSE — the server runs as a web service; Claude connects over the network. Used for shared servers and connectors on claude.ai.
When you connect a server, Claude reads its tool list at startup and can then call any of those tools mid-conversation — same as the built-in Bash, Read, Edit tools.
3. Installing servers in Claude Code
One-line install
# official Postgres server claude mcp add postgres @modelcontextprotocol/server-postgres \ --env POSTGRES_URL="postgres://localhost/mydb" # GitHub claude mcp add github @modelcontextprotocol/server-github \ --env GITHUB_TOKEN="ghp_..."
Manual configuration
Edit ~/.claude/mcp.json (or the project-level .mcp.json):
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"POSTGRES_URL": "postgres://localhost/mydb"
}
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "ghp_..." }
}
}
}
Verify
claude mcp list
Each connected server shows up with its tool count. Inside Claude Code, you can also run /mcp list.
User-scope vs project-scope
| Scope | File | Best for |
|---|---|---|
| User | ~/.claude/mcp.json | Personal connections (your GitHub token, your Slack) |
| Project | .mcp.json (in repo) | Team-shared connections — staging DB, internal API. Commit safely if no secrets are inline (use env-var references). |
4. Installing in claude.ai
On claude.ai, MCP servers are surfaced as Connectors.
- Settings → Connectors.
- Browse the catalog (Google Drive, Calendar, GitHub, Linear, Notion, Figma, etc.) or Add custom connector with an HTTP/SSE endpoint.
- Authenticate (usually OAuth). Toggle the connector on per chat from the paper-clip menu.
stdio servers instead.5. The essentials (install these first)
Three servers cover 80% of pro workflows.
| Server | What it does | Install |
|---|---|---|
| GitHub | Open / merge PRs, read issues, search code across all your repos, post review comments. | claude mcp add github @modelcontextprotocol/server-github |
| Filesystem | Read/write outside the current project — e.g., your scratch dir, dotfiles, downloads. | claude mcp add fs @modelcontextprotocol/server-filesystem ~/scratch |
| Fetch | HTTP GETs with HTML-to-markdown conversion. Lets Claude read docs pages, blog posts, anything. | claude mcp add fetch @modelcontextprotocol/server-fetch |
6. Developer-focused servers
| Server | What you get |
|---|---|
| Postgres | Read-only SQL with schema introspection, EXPLAIN ANALYZE, sampled queries. Crucial for debugging. |
| SQLite | Same as Postgres but for local .sqlite/.db files. Great for Chrome history, app local DBs. |
| Playwright | Drives a real browser. Pairs with the built-in verify skill — Claude can navigate, click, screenshot, assert. |
| Puppeteer | Lighter alternative to Playwright when you just need a screenshot or to scrape SSR pages. |
| Sentry | Pull issues + stack traces, group similar errors, jump from a stack frame to source via the GitHub MCP. |
| Cloudflare | Workers, KV, R2, D1. Deploy and manage from chat. |
| AWS | Read-only describe-* calls for EC2/S3/RDS/Lambda/CloudWatch. Useful for triage. |
| Kubernetes | kubectl behind a safety layer — get pods, describe, logs, rollout status. |
| Git | Beyond what's in the Bash tool: log search, blame, branch ops with structured output. |
| Docker | List containers/images, exec, logs, inspect. |
7. Productivity & team tools
| Server | What you get |
|---|---|
| Linear | Pull tickets, update status, post comments, link branches. Pairs with the linear-triage skill. |
| Jira | Same idea, JQL searches. |
| Slack | Search history, post messages, react, start threads. Heavy permissions — scope the bot token carefully. |
| Notion | Read/write pages, query databases, set properties. |
| Google Drive | Search docs, sheets, slides. Surfaces meeting notes you forgot you had. |
| Google Calendar | Free/busy, schedule with attendees, recurring events. |
| Gmail | Search and draft (sending requires explicit confirmation). |
| Asana / ClickUp | Task ops, project queries. |
8. Data & analytics
| Server | What you get |
|---|---|
| BigQuery | Run analytical SQL with dataset introspection, dry-run costing. |
| Snowflake | Same idea, multi-warehouse aware. |
| Stripe | Lookup customers, subscriptions, refunds. Write actions require confirmation. |
| PostHog | Query events, funnels, feature flags from chat. |
| Grafana | Query metrics, get dashboard snapshots when debugging. |
9. Design tools
| Server | What you get |
|---|---|
| Figma (official) | Two-way bridge. Read designs into code, push code into Figma, manage design systems, Code Connect mappings. Pairs with the official figma-* skills. |
| FigJam | Whiteboard ops — sticky notes, diagrams, retros. |
| Framer | Push designs into Framer projects. |
10. Build your own MCP server
The fastest path is the official TypeScript SDK. Five-minute "hello tool":
npm create mcp-server@latest my-server cd my-server npm install
// src/index.ts 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: "0.1.0" }); server.tool( "current-weather", "Return the current weather for a city.", { city: z.string() }, async ({ city }) => ({ content: [{ type: "text", text: `It's 72°F and sunny in ${city}.` }], }) ); await server.connect(new StdioServerTransport());
Build and connect:
npm run build claude mcp add my-server node /absolute/path/to/dist/index.js
Now your tool is callable from any Claude Code session. Pro patterns:
- Validate inputs with zod — schemas double as the tool documentation Claude sees.
- Return structured content when you can (text + JSON), not just stringified blobs.
- Read-by-default, write-on-confirm — for any destructive action, require an explicit
confirm: trueargument. - Log to stderr, not stdout — stdout is the JSON-RPC channel. Logging to stdout breaks everything.
- Use HTTP transport when the server is shared (one process, many users).
For the official scaffolder skill, install mcp-builder and ask Claude to make you one in plain English.
11. Security & trust
- Use fine-grained tokens. GitHub: limit to specific repos. AWS: use a session token with a tight IAM policy. Stripe: restricted keys per use case.
- Set
permissions.denyinsettings.jsonfor any MCP tool that shouldn't be auto-callable in your environment. - For sensitive workflows, use project-scope MCP so the connection only loads in the relevant repo.
- When the server is community-built, run it in a container or restricted user account.