Model Context Protocol (MCP) - это открытый стандарт, созданный Anthropic, который определяет, как AI-модели взаимодействуют с внешними инструментами, источниками данных и сервисами. Думайте о нём как об «USB-C для AI» - универсальном коннекторе, который позволяет любому AI-агенту общаться с любым инструментом через стандартизированный интерфейс.
С момента запуска MCP превысил 97 миллионов ежемесячных загрузок SDK и был принят всеми крупными поставщиками AI: Anthropic, OpenAI, Google, Microsoft и Amazon. В этом руководстве мы рассмотрим всё, что вам нужно знать для работы с MCP.
Почему MCP существует
До MCP каждое AI-приложение должно было создавать пользовательские интеграции для каждого инструмента, который оно хотело использовать. Хотите, чтобы ваш AI читал файлы? Пишите пользовательский код. Запрашивать базу данных? Ещё больше пользовательского кода. Публиковать в Slack? Ещё одна интеграция.
Это создавало проблему N×M: N AI-приложений, каждому из которых нужно M пользовательских интеграций, что приводило к дублированию усилий и фрагментации экосистем.
MCP решает это с помощью единого протокола, который любой AI-клиент может использовать для связи с любым MCP-сервером:
Основные концепции
MCP имеет три фундаментальных примитива:
1. Инструменты (Tools)
Инструменты - это функции, которые AI может вызывать. Они представляют действия вроде «создать файл», «запросить базу данных» или «отправить сообщение». Каждый инструмент имеет имя, описание и JSON Schema для своих параметров.
{ 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. Ресурсы (Resources)
Ресурсы - это данные, которые AI может читать. Они представляют файлы, записи базы данных, ответы API или любой другой источник данных. Ресурсы идентифицируются по URI.
{ uri: "file:///Users/dev/project/README.md", name: "Project README", mimeType: "text/markdown" }
3. Промпты (Prompts)
Промпты - это повторно используемые шаблоны, которые помогают структурировать взаимодействия. Они могут включать динамические параметры и полезны для стандартизации типичных рабочих процессов.
{ name: "code_review", description: "Review code changes for quality and security", arguments: [ { name: "diff", description: "The code diff to review", required: true } ] }
Архитектура
MCP следует клиент-серверной архитектуре:
- Хост: AI-приложение (Claude Desktop, Cursor, ваше пользовательское приложение)
- Клиент: Поддерживает соединение 1:1 с MCP-сервером
- Сервер: Предоставляет инструменты, ресурсы и промпты клиенту
- Транспорт: Связь происходит через JSON-RPC 2.0 по stdio (локально) или Server-Sent Events (удалённо)
Создание MCP-сервера
Давайте создадим практичный MCP-сервер, который работает со списком задач, хранящимся в JSON-файле.
Настройка
mkdir mcp-todo-server && cd mcp-todo-server npm init -y npm install @modelcontextprotocol/sdk zod
Реализация сервера
// 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);
Конфигурация
Чтобы использовать этот сервер с Claude Desktop, добавьте его в вашу конфигурацию:
{ "mcpServers": { "todo": { "command": "npx", "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"] } } }
Создание MCP-клиента
Вы также можете создать пользовательский клиент, который подключается к любому MCP-серверу:
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);
Популярные MCP-серверы
Экосистема MCP быстро растёт. Вот некоторые из самых популярных серверов:
| Сервер | Описание | Сценарий использования |
|---|---|---|
| GitHub | Создание issues, PR, управление репозиториями | Рабочие процессы разработки |
| Slack | Отправка сообщений, управление каналами | Командная коммуникация |
| PostgreSQL | Запросы и управление базами данных | Доступ к данным |
| Filesystem | Чтение, запись и поиск файлов | Локальная разработка |
| Puppeteer | Автоматизация браузера и скрейпинг | Веб-тестирование |
| Sentry | Мониторинг ошибок и отладка | Поддержка продакшена |
| Supabase | База данных, аутентификация, хранилище | Бэкенд-операции |
MCP vs A2A (Agent-to-Agent)
В то время как MCP обрабатывает коммуникацию агент-инструмент, протокол A2A (Agent-to-Agent) от Google обрабатывает коммуникацию агент-агент. Они дополняют друг друга:
- MCP: Как AI-агент использует инструменты (вертикальная интеграция)
- A2A: Как AI-агенты сотрудничают друг с другом (горизонтальная интеграция)
Лучшие практики
- Держите серверы сфокусированными: Один сервер на домен (сервер GitHub, сервер Slack и т.д.). Не создавайте монолитные серверы.
- Валидируйте входные данные с помощью Zod: Всегда валидируйте входные данные инструментов с помощью правильных схем.
- Обрабатывайте ошибки корректно: Возвращайте осмысленные сообщения об ошибках, а не стек-трейсы.
- Используйте ресурсы для данных только для чтения: Если AI нужно только читать данные, предоставляйте их как ресурс, а не как инструмент.
- Добавляйте хорошие описания: Хорошие описания инструментов и параметров помогают AI понять, когда и как использовать каждый инструмент.
- Тестируйте с MCP Inspector: Используйте
npx @modelcontextprotocol/inspectorдля интерактивного тестирования вашего сервера.
Начало работы
# 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
Заключение
MCP стал де-факто стандартом использования инструментов AI в 2026 году. Независимо от того, создаёте ли вы пользовательских AI-агентов, расширяете Claude Code или создаёте интеграции для существующих платформ, понимание MCP необходимо. Протокол достаточно прост, чтобы выучить его за полдня, но достаточно мощен для создания продакшен-уровня AI-рабочих процессов.
Следующие шаги:
- Изучите Спецификацию MCP
- Просмотрите существующие MCP-серверы для вдохновения
- Создайте свой первый сервер с TypeScript или Python SDK
- Протестируйте его с Claude Desktop или MCP Inspector