spinny:~/writing $ less mcp-model-context-protocol-guide.md
12**Model Context Protocol (MCP)** - это открытый стандарт, созданный Anthropic, который определяет, как AI-модели взаимодействуют с внешними инструментами, источниками данных и сервисами. Думайте о нём как об «USB-C для AI» - универсальном коннекторе, который позволяет любому AI-агенту общаться с любым инструментом через стандартизированный интерфейс.34С момента запуска MCP превысил **97 миллионов ежемесячных загрузок SDK** и был принят всеми крупными поставщиками AI: Anthropic, OpenAI, Google, Microsoft и Amazon. В этом руководстве мы рассмотрим всё, что вам нужно знать для работы с MCP.56## Почему MCP существует78До MCP каждое AI-приложение должно было создавать пользовательские интеграции для каждого инструмента, который оно хотело использовать. Хотите, чтобы ваш AI читал файлы? Пишите пользовательский код. Запрашивать базу данных? Ещё больше пользовательского кода. Публиковать в Slack? Ещё одна интеграция.910Это создавало **проблему N×M**: N AI-приложений, каждому из которых нужно 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 решает это с помощью **единого протокола**, который любой AI-клиент может использовать для связи с любым MCP-сервером: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## Основные концепции3839MCP имеет три фундаментальных примитива:4041### 1. Инструменты (Tools)42Инструменты - это функции, которые AI может вызывать. Они представляют действия вроде «создать файл», «запросить базу данных» или «отправить сообщение». Каждый инструмент имеет имя, описание и JSON Schema для своих параметров.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. Ресурсы (Resources)61Ресурсы - это данные, которые AI может читать. Они представляют файлы, записи базы данных, ответы API или любой другой источник данных. Ресурсы идентифицируются по URI.6263```typescript64{65 uri: "file:///Users/dev/project/README.md",66 name: "Project README",67 mimeType: "text/markdown"68}69```7071### 3. Промпты (Prompts)72Промпты - это повторно используемые шаблоны, которые помогают структурировать взаимодействия. Они могут включать динамические параметры и полезны для стандартизации типичных рабочих процессов.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## Архитектура8586MCP следует клиент-серверной архитектуре: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- **Хост**: AI-приложение (Claude Desktop, Cursor, ваше пользовательское приложение)105- **Клиент**: Поддерживает соединение 1:1 с MCP-сервером106- **Сервер**: Предоставляет инструменты, ресурсы и промпты клиенту107- **Транспорт**: Связь происходит через JSON-RPC 2.0 по stdio (локально) или Server-Sent Events (удалённо)108109## Создание MCP-сервера110111Давайте создадим практичный MCP-сервер, который работает со списком задач, хранящимся в JSON-файле.112113### Настройка114115```bash116mkdir mcp-todo-server && cd mcp-todo-server117npm init -y118npm install @modelcontextprotocol/sdk zod119```120121### Реализация сервера122123```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### Конфигурация208209Чтобы использовать этот сервер с Claude Desktop, добавьте его в вашу конфигурацию: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## Создание MCP-клиента223224Вы также можете создать пользовательский клиент, который подключается к любому MCP-серверу: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## Популярные MCP-серверы251252Экосистема MCP быстро растёт. Вот некоторые из самых популярных серверов:253254| Сервер | Описание | Сценарий использования |255|--------|----------|----------------------|256| **GitHub** | Создание issues, PR, управление репозиториями | Рабочие процессы разработки |257| **Slack** | Отправка сообщений, управление каналами | Командная коммуникация |258| **PostgreSQL** | Запросы и управление базами данных | Доступ к данным |259| **Filesystem** | Чтение, запись и поиск файлов | Локальная разработка |260| **Puppeteer** | Автоматизация браузера и скрейпинг | Веб-тестирование |261| **Sentry** | Мониторинг ошибок и отладка | Поддержка продакшена |262| **Supabase** | База данных, аутентификация, хранилище | Бэкенд-операции |263264## MCP vs A2A (Agent-to-Agent)265266В то время как MCP обрабатывает коммуникацию **агент-инструмент**, протокол **A2A (Agent-to-Agent)** от Google обрабатывает коммуникацию **агент-агент**. Они дополняют друг друга: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**: Как AI-агент использует инструменты (вертикальная интеграция)276- **A2A**: Как AI-агенты сотрудничают друг с другом (горизонтальная интеграция)277278## Лучшие практики2792801. **Держите серверы сфокусированными**: Один сервер на домен (сервер GitHub, сервер Slack и т.д.). Не создавайте монолитные серверы.2812. **Валидируйте входные данные с помощью Zod**: Всегда валидируйте входные данные инструментов с помощью правильных схем.2823. **Обрабатывайте ошибки корректно**: Возвращайте осмысленные сообщения об ошибках, а не стек-трейсы.2834. **Используйте ресурсы для данных только для чтения**: Если AI нужно только читать данные, предоставляйте их как ресурс, а не как инструмент.2845. **Добавляйте хорошие описания**: Хорошие описания инструментов и параметров помогают AI понять, когда и как использовать каждый инструмент.2856. **Тестируйте с MCP Inspector**: Используйте `npx @modelcontextprotocol/inspector` для интерактивного тестирования вашего сервера.286287## Начало работы288289```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## Заключение298299MCP стал де-факто стандартом использования инструментов AI в 2026 году. Независимо от того, создаёте ли вы пользовательских AI-агентов, расширяете Claude Code или создаёте интеграции для существующих платформ, понимание MCP необходимо. Протокол достаточно прост, чтобы выучить его за полдня, но достаточно мощен для создания продакшен-уровня AI-рабочих процессов.300301**Следующие шаги:**302- Изучите [Спецификацию MCP](https://spec.modelcontextprotocol.io/)303- Просмотрите [существующие MCP-серверы](https://github.com/modelcontextprotocol/servers) для вдохновения304- Создайте свой первый сервер с TypeScript или Python SDK305- Протестируйте его с Claude Desktop или MCP Inspector306
:MCP (Model Context Protocol): Полное руководство для разработчиковlines 1-306 (END) — press q to close