Model Context Protocol (MCP) Àr en öppen standard skapad av Anthropic som definierar hur AI-modeller kommunicerar med externa verktyg, datakÀllor och tjÀnster. TÀnk pÄ det som "AI:s USB-C" - en universell kontakt som lÄter vilken AI-agent som helst prata med vilket verktyg som helst genom ett standardiserat grÀnssnitt.
Sedan lanseringen har MCP passerat 97 miljoner mÄnatliga SDK-nedladdningar och har antagits av alla stora AI-leverantörer: Anthropic, OpenAI, Google, Microsoft och Amazon. I denna guide utforskar vi allt du behöver veta för att bygga med MCP.
Varför MCP Finns
Före MCP behövde varje AI-applikation bygga anpassade integrationer för varje verktyg den ville anvĂ€nda. Vill du att din AI ska lĂ€sa filer? Skriv anpassad kod. FrĂ„ga en databas? Mer anpassad kod. Posta pĂ„ Slack? Ănnu en integration.
Detta skapade ett NĂM-problem: N AI-applikationer som var och en behövde M anpassade integrationer, vilket ledde till dubbelarbete och fragmenterade ekosystem.
MCP löser detta med ett enda protokoll som vilken AI-klient som helst kan anvÀnda för att kommunicera med vilken MCP-server som helst:
GrundlÀggande Koncept
MCP har tre fundamentala primitiver:
1. Verktyg (Tools)
Verktyg Àr funktioner som AI:n kan anropa. De representerar ÄtgÀrder som "skapa en fil", "frÄga en databas" eller "skicka ett meddelande". Varje verktyg har ett namn, en beskrivning och ett JSON Schema för sina parametrar.
{ name: "create_issue", description: "Create a new GitHub issue", inputSchema: { type: "object", properties: { title: { type: "string", description: "Issue title" }, body: { type: "string", description: "Issue body" }, repo: { type: "string", description: "Repository name" } }, required: ["title", "repo"] } }
2. Resurser (Resources)
Resurser Àr data som AI:n kan lÀsa. De representerar filer, databasregister, API-svar eller andra datakÀllor. Resurser identifieras med URI:er.
{ uri: "file:///Users/dev/project/README.md", name: "Project README", mimeType: "text/markdown" }
3. Prompts
Prompts Àr ÄteranvÀndbara mallar som hjÀlper till att strukturera interaktioner. De kan inkludera dynamiska parametrar och Àr anvÀndbara för att standardisera vanliga arbetsflöden.
{ name: "code_review", description: "Review code changes for quality and security", arguments: [ { name: "diff", description: "The code diff to review", required: true } ] }
Arkitektur
MCP följer en klient-server-arkitektur:
- VĂ€rd: AI-applikationen (Claude Desktop, Cursor, din egen app)
- Klient: UpprÀtthÄller en 1:1-anslutning med en MCP-server
- Server: Exponerar verktyg, resurser och prompts till klienten
- Transport: Kommunikation sker via JSON-RPC 2.0 över stdio (lokalt) eller Server-Sent Events (fjÀrr)
Bygga en MCP-Server
LÄt oss bygga en praktisk MCP-server som interagerar med en att-göra-lista lagrad i en JSON-fil.
Installation
mkdir mcp-todo-server && cd mcp-todo-server npm init -y npm install @modelcontextprotocol/sdk zod
Serverimplementation
// src/index.ts import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import fs from "fs"; const TODO_FILE = "./todos.json"; function readTodos(): { id: number; text: string; done: boolean }[] { if (!fs.existsSync(TODO_FILE)) return []; return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8")); } function writeTodos(todos: { id: number; text: string; done: boolean }[]) { fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2)); } const server = new McpServer({ name: "todo-server", version: "1.0.0", }); // Tool: Add a todo server.tool( "add_todo", "Add a new todo item", { text: z.string().describe("The todo text") }, async ({ text }) => { const todos = readTodos(); const newTodo = { id: Date.now(), text, done: false }; todos.push(newTodo); writeTodos(todos); return { content: [{ type: "text", text: `Added: "${text}"` }] }; } ); // Tool: List todos server.tool( "list_todos", "List all todo items", {}, async () => { const todos = readTodos(); const list = todos .map((t) => `${t.done ? "â " : "âŹ"} [${t.id}] ${t.text}`) .join("\n"); return { content: [{ type: "text", text: list || "No todos yet." }] }; } ); // Tool: Complete a todo server.tool( "complete_todo", "Mark a todo as completed", { id: z.number().describe("The todo ID to complete") }, async ({ id }) => { const todos = readTodos(); const todo = todos.find((t) => t.id === id); if (!todo) return { content: [{ type: "text", text: "Todo not found." }] }; todo.done = true; writeTodos(todos); return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] }; } ); // Resource: Current todos as a readable resource server.resource( "todos://list", "Current todo list", async () => ({ contents: [{ uri: "todos://list", mimeType: "application/json", text: JSON.stringify(readTodos(), null, 2), }], }) ); // Start the server const transport = new StdioServerTransport(); await server.connect(transport);
Konfiguration
För att anvÀnda denna server med Claude Desktop, lÀgg till den i din konfiguration:
{ "mcpServers": { "todo": { "command": "npx", "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"] } } }
Bygga en MCP-Klient
Du kan ocksÄ bygga en anpassad klient som ansluter till vilken MCP-server som helst:
import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; const transport = new StdioClientTransport({ command: "npx", args: ["tsx", "./src/index.ts"], }); const client = new Client({ name: "my-client", version: "1.0.0" }); await client.connect(transport); // List available tools const { tools } = await client.listTools(); console.log("Available tools:", tools.map((t) => t.name)); // Call a tool const result = await client.callTool({ name: "add_todo", arguments: { text: "Write MCP blog post" }, }); console.log(result);
PopulÀra MCP-Servrar
MCP-ekosystemet har vuxit snabbt. HÀr Àr nÄgra av de mest populÀra servrarna:
| Server | Beskrivning | AnvÀndningsfall |
|---|---|---|
| GitHub | Skapa issues, PR:er, hantera repos | Utvecklingsarbetsflöden |
| Slack | Skicka meddelanden, hantera kanaler | Teamkommunikation |
| PostgreSQL | FrÄga och hantera databaser | DatatillgÄng |
| Filesystem | LÀsa, skriva och söka filer | Lokal utveckling |
| Puppeteer | WebblÀsarautomatisering och scraping | Webbtestning |
| Sentry | Felövervakning och felsökning | Produktionssupport |
| Supabase | Databas, autentisering, lagring | Backend-operationer |
MCP vs A2A (Agent-to-Agent)
Medan MCP hanterar agent-till-verktyg-kommunikation, hanterar Googles A2A (Agent-to-Agent)-protokoll agent-till-agent-kommunikation. De kompletterar varandra:
- MCP: Hur en AI-agent anvÀnder verktyg (vertikal integration)
- A2A: Hur AI-agenter samarbetar med varandra (horisontell integration)
BĂ€sta Praxis
- HÄll servrar fokuserade: En server per domÀn (GitHub-server, Slack-server, etc.). Bygg inte monolitiska servrar.
- Validera indata med Zod: Validera alltid verktygsindata med korrekta scheman.
- Hantera fel elegant: Returnera meningsfulla felmeddelanden, inte stack traces.
- AnvÀnd resurser för skrivskyddad data: Om AI:n bara behöver lÀsa data, exponera det som en resurs istÀllet för ett verktyg.
- LÀgg till bra beskrivningar: Bra verktygs- och parameterbeskrivningar hjÀlper AI:n att förstÄ nÀr och hur varje verktyg ska anvÀndas.
- Testa med MCP Inspector: AnvÀnd
npx @modelcontextprotocol/inspectorför att testa din server interaktivt.
Kom IgÄng
# Create a new MCP server from template npx @modelcontextprotocol/create-server my-server # Test with the MCP Inspector npx @modelcontextprotocol/inspector npx tsx ./src/index.ts
Sammanfattning
MCP har blivit de facto-standarden för AI-verktygssanvÀndning 2026. Oavsett om du bygger anpassade AI-agenter, utökar Claude Code eller skapar integrationer för befintliga plattformar Àr det viktigt att förstÄ MCP. Protokollet Àr enkelt nog att lÀra sig pÄ en eftermiddag men kraftfullt nog att bygga produktionsklara AI-arbetsflöden.
NĂ€sta steg:
- Utforska MCP-specifikationen
- BlÀddra bland befintliga MCP-servrar för inspiration
- Bygg din första server med TypeScript eller Python SDK
- Testa den med Claude Desktop eller MCP Inspector