spinny:~/writing $ less mcp-model-context-protocol-guide.md
12**Model Context Protocol (MCP)** je otevřený standard vytvořený společností Anthropic, který definuje, jak AI modely komunikují s externími nástroji, datovými zdroji a službami. Představte si ho jako "USB-C pro AI" - univerzální konektor, který umožňuje jakémukoli AI agentovi komunikovat s jakýmkoli nástrojem prostřednictvím standardizovaného rozhraní.34Od svého spuštění MCP překonal **97 milionů měsíčních stažení SDK** a byl přijat všemi hlavními poskytovateli AI: Anthropic, OpenAI, Google, Microsoft a Amazon. V tomto průvodci prozkoumáme vše, co potřebujete vědět pro vývoj s MCP.56## Proč MCP existuje78Před MCP musel každá AI aplikace vytvářet vlastní integrace pro každý nástroj, který chtěla používat. Chcete, aby vaše AI četla soubory? Napište vlastní kód. Dotazovat databázi? Více vlastního kódu. Publikovat na Slack? Další integrace.910To vytvořilo **problém N×M**: N AI aplikací, z nichž každá potřebovala M vlastních integrací, což vedlo k duplicitnímu úsilí a fragmentovaným ekosystémům.1112```mermaid13graph TD14 subgraph "Before MCP (N×M)"15 A1[AI App 1] --> T1[GitHub Integration]16 A1 --> T2[Slack Integration]17 A1 --> T3[DB Integration]18 A2[AI App 2] --> T4[GitHub Integration]19 A2 --> T5[Slack Integration]20 A2 --> T6[DB Integration]21 end22```2324MCP to řeší **jediným protokolem**, který může jakýkoli AI klient použít ke komunikaci s jakýmkoli MCP serverem:2526```mermaid27graph TD28 subgraph "With MCP (N+M)"29 A1[AI App 1] --> MCP[MCP Protocol]30 A2[AI App 2] --> MCP31 MCP --> S1[GitHub Server]32 MCP --> S2[Slack Server]33 MCP --> S3[DB Server]34 end35```3637## Základní koncepty3839MCP má tři základní primitivy:4041### 1. Nástroje (Tools)42Nástroje jsou funkce, které AI může volat. Představují akce jako "vytvoř soubor", "dotáž databázi" nebo "pošli zprávu". Každý nástroj má název, popis a JSON Schema pro své parametry.4344```typescript45{46 name: "create_issue",47 description: "Create a new GitHub issue",48 inputSchema: {49 type: "object",50 properties: {51 title: { type: "string", description: "Issue title" },52 body: { type: "string", description: "Issue body" },53 repo: { type: "string", description: "Repository name" }54 },55 required: ["title", "repo"]56 }57}58```5960### 2. Zdroje (Resources)61Zdroje jsou data, která AI může číst. Představují soubory, záznamy databáze, odpovědi API nebo jakýkoli jiný datový zdroj. Zdroje jsou identifikovány pomocí URI.6263```typescript64{65 uri: "file:///Users/dev/project/README.md",66 name: "Project README",67 mimeType: "text/markdown"68}69```7071### 3. Prompty (Prompts)72Prompty jsou znovupoužitelné šablony, které pomáhají strukturovat interakce. Mohou obsahovat dynamické parametry a jsou užitečné pro standardizaci běžných pracovních postupů.7374```typescript75{76 name: "code_review",77 description: "Review code changes for quality and security",78 arguments: [79 { name: "diff", description: "The code diff to review", required: true }80 ]81}82```8384## Architektura8586MCP sleduje architekturu klient-server:8788```mermaid89graph LR90 subgraph "Host Application"91 Client[MCP Client]92 end9394 subgraph "MCP Server"95 Server[Server Process]96 Server --> Tools[Tools]97 Server --> Resources[Resources]98 Server --> Prompts[Prompts]99 end100101 Client -- "JSON-RPC 2.0\n(stdio or SSE)" --> Server102```103104- **Hostitel**: AI aplikace (Claude Desktop, Cursor, vaše vlastní aplikace)105- **Klient**: Udržuje spojení 1:1 s MCP serverem106- **Server**: Zpřístupňuje nástroje, zdroje a prompty klientovi107- **Transport**: Komunikace probíhá přes JSON-RPC 2.0 přes stdio (lokálně) nebo Server-Sent Events (vzdáleně)108109## Vytvoření MCP serveru110111Pojďme vytvořit praktický MCP server, který pracuje se seznamem úkolů uloženým v JSON souboru.112113### Nastavení114115```bash116mkdir mcp-todo-server && cd mcp-todo-server117npm init -y118npm install @modelcontextprotocol/sdk zod119```120121### Implementace serveru122123```typescript124// src/index.ts125import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";126import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";127import { z } from "zod";128import fs from "fs";129130const TODO_FILE = "./todos.json";131132function readTodos(): { id: number; text: string; done: boolean }[] {133 if (!fs.existsSync(TODO_FILE)) return [];134 return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8"));135}136137function writeTodos(todos: { id: number; text: string; done: boolean }[]) {138 fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2));139}140141const server = new McpServer({142 name: "todo-server",143 version: "1.0.0",144});145146// Tool: Add a todo147server.tool(148 "add_todo",149 "Add a new todo item",150 { text: z.string().describe("The todo text") },151 async ({ text }) => {152 const todos = readTodos();153 const newTodo = { id: Date.now(), text, done: false };154 todos.push(newTodo);155 writeTodos(todos);156 return { content: [{ type: "text", text: `Added: "${text}"` }] };157 }158);159160// Tool: List todos161server.tool(162 "list_todos",163 "List all todo items",164 {},165 async () => {166 const todos = readTodos();167 const list = todos168 .map((t) => `${t.done ? "✅" : "⬜"} [${t.id}] ${t.text}`)169 .join("\n");170 return { content: [{ type: "text", text: list || "No todos yet." }] };171 }172);173174// Tool: Complete a todo175server.tool(176 "complete_todo",177 "Mark a todo as completed",178 { id: z.number().describe("The todo ID to complete") },179 async ({ id }) => {180 const todos = readTodos();181 const todo = todos.find((t) => t.id === id);182 if (!todo) return { content: [{ type: "text", text: "Todo not found." }] };183 todo.done = true;184 writeTodos(todos);185 return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] };186 }187);188189// Resource: Current todos as a readable resource190server.resource(191 "todos://list",192 "Current todo list",193 async () => ({194 contents: [{195 uri: "todos://list",196 mimeType: "application/json",197 text: JSON.stringify(readTodos(), null, 2),198 }],199 })200);201202// Start the server203const transport = new StdioServerTransport();204await server.connect(transport);205```206207### Konfigurace208209Pro použití tohoto serveru s Claude Desktop ho přidejte do vaší konfigurace:210211```json212{213 "mcpServers": {214 "todo": {215 "command": "npx",216 "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"]217 }218 }219}220```221222## Vytvoření MCP klienta223224Můžete také vytvořit vlastního klienta, který se připojí k jakémukoli MCP serveru:225226```typescript227import { Client } from "@modelcontextprotocol/sdk/client/index.js";228import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";229230const transport = new StdioClientTransport({231 command: "npx",232 args: ["tsx", "./src/index.ts"],233});234235const client = new Client({ name: "my-client", version: "1.0.0" });236await client.connect(transport);237238// List available tools239const { tools } = await client.listTools();240console.log("Available tools:", tools.map((t) => t.name));241242// Call a tool243const result = await client.callTool({244 name: "add_todo",245 arguments: { text: "Write MCP blog post" },246});247console.log(result);248```249250## Populární MCP servery251252Ekosystém MCP rychle rostl. Zde jsou některé z nejpopulárnějších serverů:253254| Server | Popis | Případ použití |255|--------|-------|---------------|256| **GitHub** | Vytváření issues, PR, správa repozitářů | Vývojové workflow |257| **Slack** | Odesílání zpráv, správa kanálů | Týmová komunikace |258| **PostgreSQL** | Dotazování a správa databází | Přístup k datům |259| **Filesystem** | Čtení, zápis a vyhledávání souborů | Lokální vývoj |260| **Puppeteer** | Automatizace prohlížeče a scraping | Webové testování |261| **Sentry** | Monitoring chyb a debugging | Podpora produkce |262| **Supabase** | Databáze, autentizace, úložiště | Backend operace |263264## MCP vs A2A (Agent-to-Agent)265266Zatímco MCP zpracovává komunikaci **agent-nástroj**, Googlem vytvořený protokol **A2A (Agent-to-Agent)** zpracovává komunikaci **agent-agent**. Jsou komplementární:267268```mermaid269graph TD270 Agent1[Agent 1] -- "A2A Protocol" --> Agent2[Agent 2]271 Agent1 -- "MCP Protocol" --> Tool1[GitHub MCP Server]272 Agent2 -- "MCP Protocol" --> Tool2[Database MCP Server]273```274275- **MCP**: Jak AI agent používá nástroje (vertikální integrace)276- **A2A**: Jak AI agenti spolupracují (horizontální integrace)277278## Osvědčené postupy2792801. **Udržujte servery zaměřené**: Jeden server na doménu (GitHub server, Slack server atd.). Nestavte monolitické servery.2812. **Validujte vstupy pomocí Zod**: Vždy validujte vstupy nástrojů správnými schématy.2823. **Zpracovávejte chyby elegantně**: Vracejte smysluplné chybové zprávy, ne stack traces.2834. **Používejte zdroje pro data pouze ke čtení**: Pokud AI potřebuje pouze číst data, zpřístupněte je jako zdroj, ne jako nástroj.2845. **Přidejte vhodné popisy**: Dobré popisy nástrojů a parametrů pomáhají AI pochopit, kdy a jak každý nástroj použít.2856. **Testujte pomocí MCP Inspector**: Použijte `npx @modelcontextprotocol/inspector` k interaktivnímu testování vašeho serveru.286287## Začínáme288289```bash290# Create a new MCP server from template291npx @modelcontextprotocol/create-server my-server292293# Test with the MCP Inspector294npx @modelcontextprotocol/inspector npx tsx ./src/index.ts295```296297## Závěr298299MCP se v roce 2026 stal de facto standardem pro používání AI nástrojů. Ať už vytváříte vlastní AI agenty, rozšiřujete Claude Code nebo vytváříte integrace pro stávající platformy, pochopení MCP je nezbytné. Protokol je dostatečně jednoduchý na naučení za jedno odpoledne, ale dostatečně výkonný pro vytváření produkčních AI workflow.300301**Další kroky:**302- Prozkoumejte [Specifikaci MCP](https://spec.modelcontextprotocol.io/)303- Prohlédněte si [existující MCP servery](https://github.com/modelcontextprotocol/servers) pro inspiraci304- Vytvořte svůj první server s TypeScript nebo Python SDK305- Otestujte ho s Claude Desktop nebo MCP Inspector306
:MCP (Model Context Protocol): Kompletní průvodce pro vývojářelines 1-306 (END) — press q to close