Tooling

Model Context Protocol (MCP)

Anthropic's open spec for AI tool servers — what it is, why it matters, the FOSS server ecosystem.

The Model Context Protocol (MCP) — Anthropic open-spec, late 2024 → community standard 2025–26 — gave the AI ecosystem a portable tool-server protocol. Instead of every chat / agent app integrating every tool individually, you write a tool server once (an "MCP server") and any MCP-capable client (Claude Desktop, Cursor, Cline, Continue, Aider, Goose, OpenHands, Open WebUI) can use it. This is the closest thing to "USB for AI tools" we've gotten.

For agentic coding context see agentic coding overview; for individual clients see Cline / Roo Code, Continue.dev, Aider, Open WebUI. For the Anthropic-paid side see Claude Code companion. Cross-link: site-wide MCP category.

What MCP is

  • Open spec (modelcontextprotocol.io) for tool servers that AI clients can connect to.
  • Defines: tools (functions the model can call), resources (read-only data), prompts (templated workflows).
  • Transport: stdio (local subprocess) or HTTP/SSE (remote / sandboxed).
  • Multiple language SDKs: TypeScript, Python, Go, Rust, Kotlin, Swift, Java, C#.
  • License: MIT (the spec).

Why it matters

  • Write once, integrate everywhere. A filesystem tool server works in Claude, in Cline, in Continue, in Cursor, in Aider, in Goose. Before MCP, each integration was bespoke.
  • Local-first. Your tools run as local subprocesses; nothing has to phone home unless your tool decides to.
  • Composition. Mix and match — filesystem MCP + GitHub MCP + Slack MCP + custom MCP all in one client.
  • Open. Not Anthropic-controlled despite Anthropic shipping it; the spec is community-driven now.

The 2026 client landscape

Clients that consume MCP servers (May 2026):

  • ★ ★ Claude Desktop, Claude Code, Cursor, Cline, Roo Code, Continue.dev, Aider, Goose, Zed, Open WebUI.
  • ★ Many more — the ecosystem has snowballed.

Curated MCP servers (community)

Lists at github.com/modelcontextprotocol/servers and various awesome-mcp lists. Notable categories:

Core / official

  • filesystem, git, github, gitlab, postgres, sqlite, slack, google-drive, puppeteer, fetch, time, memory.

Dev / coding

  • Tree-sitter / language-aware servers for code introspection.
  • Semgrep / Ripgrep wrappers for code search.
  • Test runners — pytest, jest.
  • Sentry / Datadog / Honeycomb — pull errors / traces.

Productivity / personal

  • Obsidian MCP — read/write notes — see pkm-obsidian-deep.
  • Apple Notes / Notion / Linear / Jira servers.
  • Calendar / email servers (Google, Microsoft, IMAP).

Self-host integrations

  • Home Assistant MCP — control your house from the model.
  • Vaultwarden / Bitwarden — read entries (with care).
  • Paperless-ngx — search scanned documents.
  • Immich — search photos.
  • Pi-hole / OPNsense — network ops.

Web / data

  • Brave / Tavily / SearXNG / DuckDuckGo — search.
  • Firecrawl / Scrapy — web scraping.
  • DBs — Postgres, MySQL, MongoDB, ClickHouse, BigQuery.
  • Vector DBs — Qdrant, Chroma, Milvus, pgvector.

Writing an MCP server

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
 
const server = new Server({ name: "my-server", version: "0.1.0" });
 
server.setRequestHandler(/* tools/list */ ListToolsRequestSchema, async () => ({
  tools: [{
    name: "say_hi",
    description: "Greets a person",
    inputSchema: { type: "object", properties: { name: { type: "string" } } },
  }],
}));
 
server.setRequestHandler(/* tools/call */ CallToolRequestSchema, async (req) => {
  if (req.params.name === "say_hi") {
    return { content: [{ type: "text", text: `Hello, ${req.params.arguments.name}!` }] };
  }
});
 
await server.connect(new StdioServerTransport());

A few hours to learn the SDK, days to a useful server. Most useful servers are <500 lines.

Wiring MCP to local stacks

Aider + MCP

Aider added MCP client support in 2025. Configure servers in .aider.conf.yml:

mcp:
  servers:
    filesystem:
      command: npx
      args: ["@modelcontextprotocol/server-filesystem", "/path/to/repo"]

Cline / Roo Code + MCP

Configure in VS Code settings JSON; supports stdio and SSE transport.

Continue.dev + MCP

config.yaml has mcpServers block; same shape as elsewhere.

Open WebUI + MCP

OWUI added MCP support in 2024–25 via Pipelines bridge.

Honest framing

  • MCP is genuinely the best protocol for this in 2026. OpenAI's "GPT actions" and Google's tool-use are vendor-specific; MCP is the open thing both vendors and clients are adopting.
  • Tool quality varies. A good MCP server has well-described tools, sensible error messages, idempotent operations. Many community servers are thin and break on edge cases.
  • Security matters. MCP servers can read your filesystem, run shell commands, hit APIs. Treat them like any other software you install. Don't run servers from sources you don't trust. Sandbox aggressively.
  • Local model tool-call reliability — Qwen 3, Llama 4, DeepSeek V3 are the most reliable at MCP tool calling among open weights in May 2026.

Pick this if…

  • You're an Aider / Cline / Continue user wanting more capabilities: add MCP servers.
  • You want to expose your home automation to chat: Home Assistant MCP server.
  • You want to query your notes from chat: Obsidian / SuttaCentral / Paperless-ngx MCP servers.
  • You want to write your own tools: TS / Python SDK + stdio is straightforward.
  • You want a single integration that works across every AI client: MCP, no question.
  • You're building a paid AI product: consume MCP and let users bring their own servers.