MCP Servers.
Model Context Protocol (MCP) is Anthropic's open standard for connecting AI models to tools, data, and services. Each server below plugs into Claude Desktop, Claude Code, or any MCP-compatible runtime.
Official Anthropic MCP Servers
Read, write, list, and manage local filesystem. Essential for any code-working agent.
npx @modelcontextprotocol/server-filesystem <path>Real-time web search via Brave Search API. Returns titles, URLs, and snippets.
npx @modelcontextprotocol/server-brave-searchFull GitHub API — repos, files, commits, issues, PRs, branches.
npx @modelcontextprotocol/server-githubExecute queries, inspect schema, list tables on any PostgreSQL database.
npx @modelcontextprotocol/server-postgres <connection-string>Full SQLite read/write operations on local .db files.
npx @modelcontextprotocol/server-sqlite <path>Headless browser automation: navigate, screenshot, fill forms, extract DOM.
npx @modelcontextprotocol/server-puppeteerHTTP GET/POST requests. Web scraping, API calls, form submission.
npx @modelcontextprotocol/server-fetchPersistent knowledge graph with entities, relations, and observations.
npx @modelcontextprotocol/server-memoryForces structured multi-step reasoning with branching.
npx @modelcontextprotocol/server-sequential-thinkingDatabase Integrations
Execute queries, inspect schema, manage tables on any MySQL/MariaDB database.
npx @modelcontextprotocol/server-mysql <connection-string>MongoDB CRUD operations, aggregation pipelines, index management, and collection listing.
npx mcp-server-mongodb <connection-string>Full Redis command set: strings, hashes, lists, sets, sorted sets, pub/sub, and key expiry.
npx mcp-server-redisFull-text search, index management, document CRUD, and cluster health on Elasticsearch/OpenSearch.
npx mcp-server-elasticsearchSupabase database queries, storage, and auth operations.
npx mcp-server-supabaseProductivity Tools
List, read, create, update, and share files and folders in Google Drive.
npx @modelcontextprotocol/server-gdriveGeocoding, route planning, place search, and distance matrix via Google Maps API.
npx @modelcontextprotocol/server-google-mapsRead and write Obsidian vault notes, search by tag, list recent files, and manage frontmatter.
npx mcp-obsidian <vault-path>Read and write Airtable bases, tables, records, and fields. Schema introspection included.
npx mcp-airtableRead/write Notion pages, databases, blocks.
npx mcp-notion-serverCreate, update, transition, and search Linear issues, cycles, and projects.
npx @linear/mcp-serverCreate, update, transition, and search Jira issues, sprints, and projects.
npx mcp-server-jiraDevOps & Infrastructure
Local Git operations: status, diff, log, commit, branch, checkout, push, and merge.
npx @modelcontextprotocol/server-git --repository <path>Docker container lifecycle, log tailing, exec, image management, and network inspection.
npx mcp-server-dockerKubernetes cluster operations: pods, deployments, services, ConfigMaps, logs, and exec.
npx mcp-server-kubernetesManage Cloudflare Workers, KV namespaces, D1 databases, R2 buckets, and DNS records.
npx @cloudflare/mcp-server-cloudflareQuery Sentry for issues, events, releases, and performance data. Triage errors with AI.
npx mcp-server-sentryAI & Search
AI-optimized web search returning clean, structured results. Faster than raw HTML scraping.
npx tavily-mcpStripe customers, subscriptions, invoices, payments.
npx @stripe/agent-toolkitAWS Knowledge Base RAG — retrieve grounded context from Amazon Bedrock Knowledge Bases.
npx @modelcontextprotocol/server-aws-kb-retrieval-serverReference implementation and test server. Exercises all MCP primitives: tools, resources, prompts, sampling.
npx @modelcontextprotocol/server-everythingCommunication
Post messages, list channels, fetch thread history.
npx mcp-server-slackRead, send, search, and label Gmail messages. Draft management and attachment handling.
npx mcp-server-gmailSend messages and files to Telegram chats and channels via Bot API.
npx mcp-server-telegramSend transactional email via Resend API. Supports React Email templates.
npx mcp-server-resendClaude Code Configuration
.claude/mcp.json
Configure multiple MCP servers in a single JSON file at the root of your project or user config.
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/projects"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
},
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
}
}
}
Transport Types
stdio Transport
Communicates via stdin/stdout process pipes. Ideal for local tools, CLI scripts, and development environments where the server runs as a child process.
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
// stdio transport: communicates via stdin/stdout
// Perfect for: local tools, CLI scripts, process pipes
// Launch via: claude --mcp "node my-server.js"
const server = new Server(
{ name: 'stdio-server', version: '1.0.0' },
{ capabilities: { tools: {} } }
)
// ... register handlers ...
const transport = new StdioServerTransport()
await server.connect(transport)
// Server is now listening on stdin, writing to stdout
HTTP / SSE Transport
Communicates over HTTP with Server-Sent Events for streaming. Perfect for remote servers, multi-user deployments, and anything requiring authentication.
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'
import express from 'express'
// HTTP/SSE transport: communicates over HTTP with Server-Sent Events
// Perfect for: remote servers, multi-user, authentication, cloud deployment
const app = express()
app.use(express.json())
const server = new Server(
{ name: 'http-server', version: '1.0.0' },
{ capabilities: { tools: {} } }
)
// Require auth header for all requests
app.use((req, res, next) => {
const token = req.headers['authorization']?.replace('Bearer ', '')
if (token !== process.env.MCP_SECRET) {
return res.status(401).json({ error: 'Unauthorized' })
}
next()
})
app.post('/mcp', async (req, res) => {
const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined })
await server.connect(transport)
await transport.handleRequest(req, res, req.body)
})
app.listen(3000, () => console.log('MCP server running on :3000'))
stdio vs HTTP/SSE — Comparison
| Feature | stdio | HTTP / SSE |
|---|---|---|
| Communication | stdin / stdout pipes | HTTP POST + Server-Sent Events |
| Security | Process-level isolation | Network layer, requires auth |
| Latency | Sub-millisecond (local) | Network RTT (1–50ms typical) |
| Deployment | Local process only | Cloud, container, serverless |
| Authentication | OS-level (no extra needed) | Bearer token, API key, mTLS |
| Multi-user | One user per process | Unlimited concurrent sessions |
| Best for | Local tools, CLI, dev scripts | Production APIs, team servers |
MCP Primitives
MCP defines three primitive types that servers expose to AI clients. Each serves a distinct purpose in the AI-tool interaction model.
Functions the AI can call. Tools have side effects: they write files, query databases, call APIs, send emails. The model decides when to invoke them based on the task.
// MCP Tool — a function the AI can call (actions, side effects)
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [{
name: 'send_email',
description: 'Send an email via Resend API',
inputSchema: {
type: 'object',
properties: {
to: { type: 'string', description: 'Recipient email address' },
subject: { type: 'string' },
body: { type: 'string' },
},
required: ['to', 'subject', 'body'],
},
}],
}))
Data sources the AI can read. Resources are identified by URI and expose content that the model can include in its context — files, database rows, API responses.
// MCP Resource — data the AI can read (files, DB, APIs)
import { ListResourcesRequestSchema, ReadResourceRequestSchema } from '@modelcontextprotocol/sdk/types.js'
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
resources: [{
uri: 'file:///project/README.md',
name: 'Project README',
description: 'Main project documentation',
mimeType: 'text/markdown',
}],
}))
server.setRequestHandler(ReadResourceRequestSchema, async (request) => ({
contents: [{
uri: request.params.uri,
mimeType: 'text/markdown',
text: await fs.readFile(request.params.uri.replace('file://', ''), 'utf-8'),
}],
}))
Parameterized prompt templates stored server-side. The client lists available prompts, selects one, passes arguments, and receives a fully-rendered message array ready to send.
// MCP Prompt — reusable prompt templates with parameters
import { ListPromptsRequestSchema, GetPromptRequestSchema } from '@modelcontextprotocol/sdk/types.js'
server.setRequestHandler(ListPromptsRequestSchema, async () => ({
prompts: [{
name: 'code_review',
description: 'Review code with specified focus areas',
arguments: [
{ name: 'language', description: 'Programming language', required: true },
{ name: 'focus', description: 'Review focus: security|performance|readability', required: false },
],
}],
}))
server.setRequestHandler(GetPromptRequestSchema, async (request) => ({
messages: [{
role: 'user',
content: {
type: 'text',
text: `Review this ${request.params.arguments?.language} code focusing on ${request.params.arguments?.focus ?? 'all areas'}.`,
},
}],
}))
Build Your Own
Build Your Own MCP Server
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from '@modelcontextprotocol/sdk/types.js'
const server = new Server(
{ name: 'my-mcp-server', version: '1.0.0' },
{ capabilities: { tools: {} } }
)
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [{
name: 'my_tool',
description: 'Does something useful',
inputSchema: {
type: 'object',
properties: {
input: { type: 'string', description: 'The input value' },
},
required: ['input'],
},
}],
}))
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === 'my_tool') {
const { input } = request.params.arguments as { input: string }
return { content: [{ type: 'text', text: `Processed: ${input}` }] }
}
throw new Error(`Unknown tool: ${request.params.name}`)
})
const transport = new StdioServerTransport()
await server.connect(transport)
Claude Desktop Config · claude_desktop_config.json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/projects"]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_..." }
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
},
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
}
}
}