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)

MCP is a JSON-RPC-based protocol Claude speaks to external processes. Those processes (called servers) expose three things:

Most servers focus on tools. That's where the action is.

MCP vs Skills vs Plugins. Skills are folders of instructions; MCP servers are running processes; Plugins are Claude Code packages that often bundle slash commands, hooks, AND MCP servers in one. See Plugins for the comparison table.

2. How an MCP server works

An MCP server is just a program that speaks the protocol on one of two transports:

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

ScopeFileBest for
User~/.claude/mcp.jsonPersonal 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.

  1. Settings → Connectors.
  2. Browse the catalog (Google Drive, Calendar, GitHub, Linear, Notion, Figma, etc.) or Add custom connector with an HTTP/SSE endpoint.
  3. Authenticate (usually OAuth). Toggle the connector on per chat from the paper-clip menu.
Connectors run server-side. Your data flows through Anthropic. For local-only workflows (private DBs, secret APIs), use Claude Code's local stdio servers instead.

5. The essentials (install these first)

Three servers cover 80% of pro workflows.

ServerWhat it doesInstall
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

ServerWhat you get
PostgresRead-only SQL with schema introspection, EXPLAIN ANALYZE, sampled queries. Crucial for debugging.
SQLiteSame as Postgres but for local .sqlite/.db files. Great for Chrome history, app local DBs.
PlaywrightDrives a real browser. Pairs with the built-in verify skill — Claude can navigate, click, screenshot, assert.
PuppeteerLighter alternative to Playwright when you just need a screenshot or to scrape SSR pages.
SentryPull issues + stack traces, group similar errors, jump from a stack frame to source via the GitHub MCP.
CloudflareWorkers, KV, R2, D1. Deploy and manage from chat.
AWSRead-only describe-* calls for EC2/S3/RDS/Lambda/CloudWatch. Useful for triage.
Kuberneteskubectl behind a safety layer — get pods, describe, logs, rollout status.
GitBeyond what's in the Bash tool: log search, blame, branch ops with structured output.
DockerList containers/images, exec, logs, inspect.

7. Productivity & team tools

ServerWhat you get
LinearPull tickets, update status, post comments, link branches. Pairs with the linear-triage skill.
JiraSame idea, JQL searches.
SlackSearch history, post messages, react, start threads. Heavy permissions — scope the bot token carefully.
NotionRead/write pages, query databases, set properties.
Google DriveSearch docs, sheets, slides. Surfaces meeting notes you forgot you had.
Google CalendarFree/busy, schedule with attendees, recurring events.
GmailSearch and draft (sending requires explicit confirmation).
Asana / ClickUpTask ops, project queries.

8. Data & analytics

ServerWhat you get
BigQueryRun analytical SQL with dataset introspection, dry-run costing.
SnowflakeSame idea, multi-warehouse aware.
StripeLookup customers, subscriptions, refunds. Write actions require confirmation.
PostHogQuery events, funnels, feature flags from chat.
GrafanaQuery metrics, get dashboard snapshots when debugging.

9. Design tools

ServerWhat 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.
FigJamWhiteboard ops — sticky notes, diagrams, retros.
FramerPush 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:

For the official scaffolder skill, install mcp-builder and ask Claude to make you one in plain English.

11. Security & trust

An MCP server is code you're running. Apply normal supply-chain hygiene: prefer official Anthropic / modelcontextprotocol.io servers, pin versions, read what you install, scope tokens to least privilege.