# MCP серверы: что это, зачем нужны и как подключить

> Полный гайд по MCP (Model Context Protocol): архитектура, подключение к Claude Code и Cursor, топ-20 серверов, написание своего сервера на TypeScript и Python.
> Author: Roman Belov · Published: 2026-06-29 · Source: https://futurecraft.pro/ru/blog/mcp-servers-explained/

MCP (Model Context Protocol) — открытый стандарт для подключения AI-моделей к внешним инструментам, данным и сервисам. Создан Anthropic в ноябре 2024, передан в Linux Foundation в декабре 2025. За 18 месяцев — 110 миллионов установок SDK в месяц, 10 000+ серверов в официальном реестре (а вместе с PulseMCP и Smithery — свыше 20 000), поддержка от 300+ клиентов: Claude, Cursor, VS Code, Gemini, ChatGPT, Windsurf, Microsoft Copilot, JetBrains, Xcode и десятков других.

Эта статья — полный гайд: от концепции до рабочего кода. Архитектура, подключение готовых серверов к Claude Code и Cursor, написание своего сервера на TypeScript и Python, production-нюансы.

## Что такое MCP (Model Context Protocol)

### Проблема: каждая интеграция — с нуля

AI-ассистент умеет генерировать текст и код. Но чтобы работать с реальным миром — базами данных, API, файлами, сервисами — ему нужны интеграции. До MCP каждая интеграция была кастомной.

Хотите подключить Claude к GitHub? Пишите обёртку над GitHub API. К PostgreSQL? Другую обёртку. К Slack? Третью. Каждая — со своим форматом, транспортом, логикой авторизации. Cursor делает то же самое по-своему. VS Code — по-своему.

Итог: N AI-платформ × M инструментов = N×M кастомных интеграций. Не масштабируется.

### Решение: один протокол для всех

MCP решает это на уровне протокола. Один стандарт — как AI-ассистент общается с внешними инструментами. Любой MCP-сервер работает с любым MCP-клиентом.

Аналогия — USB. До USB каждое устройство имело свой разъём: клавиатура — PS/2, принтер — LPT, модем — COM-порт. USB стандартизировал подключение: один разъём для всего. MCP делает то же самое для AI.

- **Один MCP сервер для GitHub** работает и в Claude Code, и в Cursor, и в VS Code, и в ChatGPT
- **Разработчик инструмента** пишет сервер один раз — он доступен на всех платформах
- **Разработчик AI-платформы** реализует клиент один раз — получает доступ ко всем серверам

Формула: N + M вместо N × M.

### Кто поддерживает MCP

По состоянию на июнь 2026 MCP поддерживается:

- **Claude Code** и **Claude Desktop** (Anthropic) — нативная поддержка, MCP изначально создавался для Claude
- **Cursor** — полная поддержка в Agent-режиме
- **VS Code** — нативная поддержка с версии 1.99 (март 2025), через GitHub Copilot Chat
- **ChatGPT** (OpenAI) — интеграция через MCP
- **Gemini** (Google) — поддержка MCP серверов
- **Microsoft Copilot** — интеграция в Copilot, VS Code и Windows 11
- **Windsurf** (Codeium) — поддержка в IDE
- **JetBrains** — MCP-клиент в AI Assistant с версии 2025.1, встроенный MCP-сервер IDE — с 2025.2
- **OpenAI Codex CLI** — поддержка MCP-клиентов и серверов (`codex mcp add`); с июня 2026 — Codex Plugins, объединяющие MCP-конфигурацию, skills и app integrations в одну единицу
- **Xcode** — поддержка в Apple Intelligence Developer Mode (ранний доступ)
- **Eclipse** — через плагин MCP Bridge
- **Zed** — встроенная поддержка через Agent Panel

MCP — не проприетарный протокол одной компании. Это открытый стандарт, управляемый Linux Foundation через Agentic AI Foundation (AAIF).

## Архитектура MCP

### Четыре уровня

MCP использует клиент-серверную архитектуру с чётким разделением ответственности:

```
Host (Claude Code, Cursor)
  └── MCP Client
        └── MCP Server
              └── Resource (DB, API, файлы)
```

**Host** — приложение, в котором работает AI-модель: Claude Code, Cursor, VS Code с Copilot. Host управляет жизненным циклом MCP-клиентов.

**MCP Client** — компонент внутри Host, держит соединение с одним MCP-сервером. Три сервера — три клиента.

**MCP Server** — программа, реализующая протокол. Принимает запросы от клиента, транслирует их в вызовы к ресурсу, возвращает результат. Локальный процесс или удалённый HTTP-сервер.

**Resource** — то, к чему сервер открывает доступ: база данных, REST API, файловая система, SaaS-сервис, внутренний инструмент.

### Протокол: JSON-RPC 2.0

Под капотом MCP использует JSON-RPC 2.0 — стандартный протокол удалённого вызова процедур. Каждый запрос — JSON-объект с методом, параметрами и идентификатором:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_issues",
    "arguments": {
      "query": "bug in auth module",
      "state": "open"
    }
  }
}
```

Клиент отправляет запрос, сервер возвращает результат. Формат стандартизирован — реализация на любом языке совместима с любым MCP-клиентом.

### Транспорт: stdio и Streamable HTTP

Транспорт определяет, как клиент и сервер обмениваются JSON-RPC сообщениями. MCP поддерживает два механизма:

**stdio** — стандартный ввод/вывод. Сервер запускается как дочерний процесс Host. Клиент пишет в stdin, читает из stdout. Самый простой вариант для локальных серверов.

```
Host запускает: npx @modelcontextprotocol/server-filesystem /path/to/dir
         stdin  → JSON-RPC запрос
         stdout ← JSON-RPC ответ
```

Когда использовать: локальная разработка, CLI-инструменты, серверы, которые работают на машине разработчика.

**Streamable HTTP** — HTTP-транспорт, введённый в марте 2025. Сервер работает как независимый HTTP-процесс, принимает POST-запросы. При необходимости использует Server-Sent Events (SSE) для потоковых ответов.

```
Client  →  POST /mcp  →  MCP Server (удалённый)
Client  ←  SSE stream  ←  MCP Server
```

Когда использовать: удалённые серверы, production-деплой, серверы в Docker/Kubernetes, multi-tenant архитектуры.

**HTTP+SSE (legacy)** — предыдущий транспорт для удалённых серверов, deprecated в пользу Streamable HTTP. Существующие серверы на SSE продолжают работать, новые реализации — переходят на Streamable HTTP.

### Сравнение транспортов

| Характеристика | stdio | Streamable HTTP |
|---|---|---|
| Развёртывание | Локальный процесс | Удалённый сервер |
| Клиенты | Один (запустивший процесс) | Множество одновременно |
| Масштабирование | Нет | Горизонтальное (load balancer) |
| Аутентификация | Через env | OAuth 2.1, bearer tokens |
| Латентность | Минимальная (IPC) | Сетевая (HTTP) |
| Настройка | Простая (command + args) | Нужен HTTP-сервер |
| Типичное применение | Dev tools, CLI | SaaS, team servers, production |

Начинайте со stdio. Переходите на Streamable HTTP, когда серверу нужно обслуживать нескольких разработчиков или работать удалённо.

### Жизненный цикл соединения

Подключение MCP-клиента к серверу проходит через несколько этапов:

1. **Initialize** — клиент отправляет `initialize` с информацией о себе (имя, версия, поддерживаемые capabilities)
2. **Server response** — сервер отвечает своими capabilities (какие tools, resources, prompts доступны)
3. **Initialized** — клиент подтверждает готовность нотификацией `notifications/initialized`
4. **Working** — обмен запросами: `tools/list`, `tools/call`, `resources/read` и т.д.
5. **Shutdown** — закрытие соединения при завершении сессии

Весь обмен идёт через JSON-RPC 2.0 — запросы, ответы и нотификации. Клиент и сервер могут отправлять нотификации асинхронно (например, сервер уведомляет об изменении списка tools).

### Capabilities: Tools, Resources, Prompts

MCP-сервер может предоставлять три типа возможностей:

| Тип | Кто вызывает | Аналогия | Пример |
|---|---|---|---|
| **Tools** | AI-модель | POST-endpoint | Создать issue в GitHub, выполнить SQL-запрос |
| **Resources** | Приложение (Host) | GET-endpoint | Схема базы данных, содержимое файла |
| **Prompts** | Пользователь | Шаблон | «Проанализируй этот код на безопасность» |

Подробнее о каждом типе — в разделе «Resources vs Tools vs Prompts».

## Как подключить MCP сервер к Claude Code

### Способ 1: команда claude mcp add

Самый быстрый способ — CLI-команда:

```bash
# Remote (рекомендуется) — использует официальный HTTP-endpoint GitHub
claude mcp add-json github '{"type":"http","url":"https://api.githubcopilot.com/mcp","headers":{"Authorization":"Bearer YOUR_GITHUB_PAT"}}'
```

Формат: `claude mcp add-json <имя> '<JSON-конфигурация>'`

Примеры:

```bash
# Файловая система (доступ к конкретной директории)
claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /home/user/projects

# Brave Search (официальный пакет от Brave; старый @modelcontextprotocol/server-brave-search архивирован)
claude mcp add brave-search -- npx -y @brave/brave-search-mcp-server

# PostgreSQL (@modelcontextprotocol/server-postgres архивирован; используйте актуальный сторонний пакет, например mcp-postgres-server)
claude mcp add postgres -- npx -y mcp-postgres-server postgresql://localhost/mydb
```

Конфигурация сохраняется — сервер доступен при следующем запуске Claude Code.

### Способ 2: файл .mcp.json

Для проектной конфигурации — файл `.mcp.json` в корне проекта:

```json
{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp",
      "headers": {
        "Authorization": "Bearer $GITHUB_PERSONAL_ACCESS_TOKEN"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"],
      "env": {}
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "mcp-postgres-server", "postgresql://localhost/mydb"],
      "env": {}
    }
  }
}
```

- **Переменные окружения** — значения в `env` поддерживают синтаксис `$VAR` и `${VAR}`. Переменные берутся из shell-окружения при запуске
- **JSON без trailing commas** — частая ошибка. JSON запятую после последнего элемента не допускает
- **Путь к файлу**: `.mcp.json` в корне проекта — для проектных серверов; `~/.claude/.mcp.json` — для глобальных (персональных)

### Способ 3: удалённый HTTP-сервер

Для серверов, работающих по HTTP:

```json
{
  "mcpServers": {
    "my-remote-api": {
      "type": "http",
      "url": "https://mcp.example.com/v1",
      "headers": {
        "Authorization": "Bearer $MY_API_TOKEN"
      }
    }
  }
}
```

### Три уровня конфигурации

Claude Code поддерживает три scope для MCP-серверов:

| Scope | Файл | Кто видит | Когда использовать |
|---|---|---|---|
| Проект (shared) | `.mcp.json` в корне проекта | Вся команда (коммитится в git) | Серверы, нужные всем на проекте |
| Проект (personal) | `.claude/.mcp.json` | Только вы | Персональные серверы для проекта |
| Глобальный | `~/.claude/.mcp.json` | Только вы, во всех проектах | Серверы, нужные везде |

Общие серверы проекта (GitHub, Sentry, Supabase) — в `.mcp.json`. Персональные инструменты (Notion, Slack) — глобально.

### Проверка подключения

Более широкий обзор повседневной работы с Claude Code, не только MCP-серверов, — в [полном гайде по Claude Code](/ru/blog/claude-code-complete-guide/).

После настройки перезапустите Claude Code и проверьте:

```bash
claude mcp list
```

Или в сессии Claude Code: `/mcp` покажет статус всех подключённых серверов.

### Частые ошибки при настройке

**Сервер не запускается.** Для локальных серверов проверьте доступность пакета: `npx -y @modelcontextprotocol/server-filesystem --help`. Пустой вывод — проблема с npm или Node.js. Для remote-серверов (GitHub) — проверьте доступность токена: `echo $GITHUB_PERSONAL_ACCESS_TOKEN`.

**Переменные окружения не подставляются.** Проверьте `echo $GITHUB_TOKEN`. Пусто — добавьте в `.zshrc` / `.bashrc` или `.envrc`.

**JSON syntax error.** Trailing comma после последнего элемента — JSON такое не принимает. Валидируйте: `cat .mcp.json | python -m json.tool`.

**Сервер подключён, но tools не видны.** Перезапустите Claude Code полностью (exit + новая сессия). Некоторые серверы загружаются с задержкой — дайте несколько секунд.

## Как подключить MCP сервер к Cursor

### Конфигурация

В Cursor — тот же формат конфигурации, другое расположение файлов:

**Проектный уровень** — файл `.cursor/mcp.json` в корне проекта:

```json
{
  "mcpServers": {
    "github": {
      "type": "http",
      "url": "https://api.githubcopilot.com/mcp",
      "headers": {
        "Authorization": "Bearer your-token-here"
      }
    }
  }
}
```

**Глобальный уровень** — файл `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@brave/brave-search-mcp-server"],
      "env": {
        "BRAVE_API_KEY": "your-key"
      }
    }
  }
}
```

### Особенности Cursor

- MCP-инструменты доступны только в **Agent-режиме** (не в Ask и не в Edit)
- Управление серверами: **Settings → Tools & MCP** — там виден статус каждого сервера и можно включать/отключать отдельные инструменты
- Cursor поддерживает как stdio, так и HTTP-транспорт
- Формат конфигурации идентичен Claude Code — тот же JSON с `mcpServers`

### Сравнение: Claude Code vs Cursor

| Параметр | Claude Code | Cursor |
|---|---|---|
| Файл конфигурации | `.mcp.json` | `.cursor/mcp.json` |
| Глобальный конфиг | `~/.claude/.mcp.json` | `~/.cursor/mcp.json` |
| Транспорт | stdio, HTTP | stdio, HTTP |
| Управление | CLI (`claude mcp add/list`) | GUI (Settings → MCP) |
| Agent-режим | Всегда (CLI — агентный) | Только в Agent mode |

## Топ-20 MCP серверов

Из 10 000+ доступных серверов — двадцать, которые покрывают основные потребности разработчика. Все актуальны на июнь 2026. Подробный ранжированный разбор с заметками по настройке — в подборке [лучших MCP-серверов 2026](/ru/blog/best-mcp-servers-2026/).

### Код и репозитории

| Сервер | Пакет | Описание |
|---|---|---|
| **GitHub** | Remote: `https://api.githubcopilot.com/mcp` или Docker: `ghcr.io/github/github-mcp-server` | Полный доступ к GitHub: issues, PR, code search, файлы, actions. Самый популярный MCP сервер |
| **GitLab** | `gitlab-org/gitlab-mcp` (официальный от GitLab) | Аналог GitHub-сервера для GitLab: merge requests, issues, pipelines. Старый `@modelcontextprotocol/server-gitlab` — архивирован |
| **Filesystem** | `@modelcontextprotocol/server-filesystem` | Безопасный доступ к файловой системе. Ограничен указанными директориями |

### Базы данных

| Сервер | Пакет | Описание |
|---|---|---|
| **PostgreSQL** | `mcp-postgres-server` (сторонний) | Запросы к PostgreSQL, чтение схемы, анализ данных. Официальный `@modelcontextprotocol/server-postgres` — архивирован |
| **Supabase** | MCP встроен в Supabase CLI | SQL-запросы, управление миграциями, edge functions. Учитывает Row Level Security |
| **SQLite** | `@modelcontextprotocol/server-sqlite` (Python, официальный) | Работа с SQLite-базами: запросы, анализ, создание таблиц |

### Поиск и данные

| Сервер | Пакет | Описание |
|---|---|---|
| **Brave Search** | `brave/brave-search-mcp-server` (официальный от Brave) | Веб-поиск, поиск новостей, изображений, видео через Brave API. Старый `@modelcontextprotocol/server-brave-search` — архивирован |
| **Exa** | `exa-mcp-server` | Семантический поиск по вебу. Находит контент по смыслу, а не по ключевым словам |
| **Fetch** | `@modelcontextprotocol/server-fetch` | Загрузка веб-страниц, конвертация в Markdown для AI |

### Коммуникации и документация

| Сервер | Пакет | Описание |
|---|---|---|
| **Slack** | `zencoder-ai/mcp-server-slack` (поддерживается Zencoder) | Чтение каналов, поиск сообщений, отправка, работа с тредами. Старый `@modelcontextprotocol/server-slack` — архивирован |
| **Notion** | Официальный от Notion | Поиск страниц, чтение и редактирование контента, работа с базами данных |
| **Google Drive** | Официальный от Google | Поиск и чтение файлов в Google Drive. Старый `@modelcontextprotocol/server-gdrive` — архивирован |

### Мониторинг и DevOps

| Сервер | Пакет | Описание |
|---|---|---|
| **Sentry** | Официальный от Sentry | Поиск ошибок, анализ stack traces, корреляция с релизами |
| **Grafana** | Официальный от Grafana Labs | Дашборды, алерты, Prometheus/Loki запросы, инциденты |
| **Kubernetes** | `@modelcontextprotocol/server-kubernetes` | Управление кластерами, диагностика подов, анализ логов |

### Дизайн и браузер

| Сервер | Пакет | Описание |
|---|---|---|
| **Figma** | `figma-developer-mcp` (официальный от Figma) | Чтение дизайн-файлов: токены, цвета, типографика, layout |
| **Playwright** | `@playwright/mcp` | Браузерная автоматизация: навигация, клики, скриншоты, тесты |

### AI и Memory

| Сервер | Пакет | Описание |
|---|---|---|
| **Memory** | `@modelcontextprotocol/server-memory` | Персистентная память для AI: хранение фактов между сессиями в knowledge graph |
| **Sequential Thinking** | `@modelcontextprotocol/server-sequential-thinking` | Структурированное мышление: декомпозиция задач, пошаговый анализ |

### Автоматизация

| Сервер | Пакет | Описание |
|---|---|---|
| **Zapier** | Через Zapier MCP Bridge | Подключение 7000+ сервисов: email, CRM, spreadsheets, уведомления |

### Рекомендации по выбору

Три сервера — оптимально. Пять — потолок: дальше overhead от описаний инструментов начнёт съедать контекст.

Минимальный набор для разработчика:

1. **GitHub** — код, issues, PR
2. **Brave Search** или **Exa** — поиск документации и решений
3. **Sentry** или **Grafana** — мониторинг и отладка

Дальше: PostgreSQL/Supabase для данных, Slack/Notion для коммуникации.

## Написать свой MCP сервер на TypeScript

### Подготовка

```bash
mkdir my-mcp-server && cd my-mcp-server
npm init -y
npm install @modelcontextprotocol/sdk zod
```

### Полный пример: сервер с tool и resource

```typescript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({
  name: "weather-server",
  version: "1.0.0",
});

// Tool: получить погоду по городу
server.registerTool(
  "get_weather",
  {
    title: "Get Weather",
    description: "Get current weather for a city",
    inputSchema: {
      city: z.string().describe("City name, e.g. 'Moscow'"),
    },
  },
  async ({ city }) => {
    // В реальном сервере — запрос к API погоды
    const weather = {
      city,
      temperature: 18,
      condition: "cloudy",
      humidity: 65,
    };
    return {
      content: [
        {
          type: "text" as const,
          text: JSON.stringify(weather, null, 2),
        },
      ],
    };
  }
);

// Resource: список поддерживаемых городов
server.registerResource(
  "supported-cities",
  "cities://supported",
  {
    description: "List of supported cities",
    mimeType: "application/json",
  },
  async () => ({
    contents: [
      {
        uri: "cities://supported",
        text: JSON.stringify(["Moscow", "London", "Tokyo", "New York"]),
      },
    ],
  })
);

// Запуск через stdio-транспорт
const transport = new StdioServerTransport();
await server.connect(transport);
```

### Что здесь происходит

1. **McpServer** — экземпляр сервера с именем и версией
2. **registerTool** — регистрация инструмента. `inputSchema` использует Zod для валидации. AI-модель видит описание и схему, вызывает инструмент с нужными параметрами
3. **registerResource** — регистрация ресурса с сигнатурой `(name, uri, metadata, handler)`. В отличие от tool, resource вызывает приложение (Host), а не AI-модель напрямую. Так в модель попадает контекст
4. **StdioServerTransport** — подключение через stdio. Сервер запускается как дочерний процесс Claude Code или Cursor

### Подключение к Claude Code

```json
{
  "mcpServers": {
    "weather": {
      "command": "npx",
      "args": ["tsx", "/path/to/my-mcp-server/index.ts"]
    }
  }
}
```

Или через CLI:

```bash
claude mcp add weather -- npx tsx /path/to/my-mcp-server/index.ts
```

## Написать свой MCP сервер на Python

### Подготовка

```bash
mkdir my-mcp-server && cd my-mcp-server
pip install "mcp[cli]"  # v1.28.1+
```

Или через `uv` (рекомендуется):

```bash
uv init my-mcp-server && cd my-mcp-server
uv add "mcp[cli]"
```

### Полный пример: сервер с tool и resource

```python
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather-server")


@mcp.tool()
def get_weather(city: str) -> dict:
    """Get current weather for a city.

    Args:
        city: City name, e.g. 'Moscow'
    """
    # В реальном сервере — запрос к API погоды
    return {
        "city": city,
        "temperature": 18,
        "condition": "cloudy",
        "humidity": 65,
    }


@mcp.resource("cities://supported")
def supported_cities() -> str:
    """List of supported cities."""
    import json
    return json.dumps(["Moscow", "London", "Tokyo", "New York"])


@mcp.prompt()
def weather_report(city: str) -> str:
    """Generate a weather report prompt for a city."""
    return f"Provide a detailed weather analysis for {city}. Include temperature trends, precipitation forecast, and clothing recommendations."


if __name__ == "__main__":
    mcp.run()
```

### Что здесь происходит

1. **FastMCP** — высокоуровневый фреймворк из официального SDK. Генерирует описания инструментов из docstring и type hints автоматически
2. **@mcp.tool()** — декоратор регистрации. Тип `city: str` становится `inputSchema`, docstring — описанием
3. **@mcp.resource()** — декоратор для ресурса с URI-паттерном
4. **@mcp.prompt()** — декоратор для шаблона промпта
5. **mcp.run()** — запуск сервера (по умолчанию stdio)

FastMCP покрывает около 70% серверов в экосистеме. Python type hints + docstrings = полноценное описание инструмента, никакого лишнего boilerplate.

### Подключение к Claude Code

```json
{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": ["/path/to/my-mcp-server/server.py"]
    }
  }
}
```

Или через `uv`:

```json
{
  "mcpServers": {
    "weather": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/my-mcp-server", "server.py"]
    }
  }
}
```

## Resources vs Tools vs Prompts

MCP определяет три типа capabilities. Каждый — для своего сценария. Путаница между ними — частая ошибка при проектировании серверов.

### Tools — действия

Tools — то, что AI-модель вызывает самостоятельно. Аналог POST-endpoints в REST API.

**Характеристики:**
- Вызываются AI-моделью (model-controlled)
- Могут иметь побочные эффекты (запись в БД, отправка сообщения, создание файла)
- Принимают структурированный ввод (JSON Schema / Zod)
- Возвращают результат выполнения

**Примеры:**
- `create_issue` — создать issue в GitHub
- `execute_sql` — выполнить SQL-запрос
- `send_message` — отправить сообщение в Slack
- `search_web` — поиск в интернете

Модель видит список tools с описаниями и схемами — и сама решает, какой вызвать и с какими параметрами.

### Resources — данные

Resources — данные, которые Host предоставляет AI-модели как контекст. Аналог GET-endpoints.

**Характеристики:**
- Вызываются приложением (application-controlled), не AI-моделью напрямую
- Только чтение — никаких побочных эффектов
- Используют URI-паттерны (`file:///path`, `db://schema/table`, `config://app`)
- Предоставляют контекст для принятия решений

**Примеры:**
- `db://schema` — схема базы данных
- `file:///src/config.ts` — содержимое конфигурационного файла
- `git://log/recent` — последние коммиты
- `env://variables` — доступные переменные окружения

Resources — способ дать модели контекст без вызова инструмента. Host решает, какие ресурсы прикрепить к запросу.

### Prompts — шаблоны

Prompts — готовые шаблоны взаимодействия на выбор пользователя. Аналог сохранённых запросов.

**Характеристики:**
- Выбираются пользователем (user-controlled)
- Задают структуру диалога: системный промпт + пользовательское сообщение
- Могут принимать аргументы для параметризации
- Помогают стандартизировать типовые задачи

**Примеры:**
- `code_review` — шаблон для ревью кода с фокусом на безопасность
- `sql_optimizer` — анализ и оптимизация SQL-запроса
- `bug_report` — структурированное описание бага

### Когда что использовать

| Вопрос | Tools | Resources | Prompts |
|---|---|---|---|
| AI должен **сделать** что-то? | Да | — | — |
| AI нужен **контекст** для решения? | — | Да | — |
| Пользователь хочет **стандартный workflow**? | — | — | Да |
| Есть побочные эффекты? | Возможно | Нет | Нет |
| Кто инициирует? | AI-модель | Приложение | Пользователь |

Практика: большинство серверов предоставляют tools. Resources полезны для серверов баз данных (схемы) и файловых систем. Prompts — для специализированных workflow (code review, security audit).

## MCP в production

### Безопасность

MCP-сервер выполняет действия от имени AI — в production это вектор атаки.

**Принцип минимальных привилегий.** Давайте серверу только необходимые права. PostgreSQL MCP не нужен SUPERUSER. GitHub MCP не нужен доступ к приватным репозиториям, если работа ведётся с публичными.

**Валидация входных данных.** SDK валидирует по схеме (Zod в TypeScript, type hints в Python), но этого мало. Проверяйте бизнес-логику: SQL-инъекции через tool-параметры реальны.

**Секреты — через переменные окружения.** Никогда не хардкодьте токены в конфигурации. Используйте `$VAR` синтаксис в `.mcp.json`:

```json
{
  "env": {
    "DATABASE_URL": "$DATABASE_URL",
    "API_TOKEN": "$MY_SECRET_TOKEN"
  }
}
```

**Аудит.** Логируйте все вызовы tools — каждый потенциально деструктивен: удаление данных, отправка сообщений, изменения инфраструктуры. Без лога нет forensics. Подробный разбор production-паттернов для кастомных серверов — авторизация, rate limiting, деплой — в [гайде по MCP-серверам в production](/ru/blog/mcp-production-custom-servers/).

### Авторизация

Спецификация MCP (текущая revision 2025-11-25; RC 2026-07-28 заморожен с 21 мая 2026, финальная публикация — 28 июля) описывает авторизацию для HTTP-транспорта на базе OAuth 2.1. Для stdio авторизация — на уровне окружения: переменные и файлы конфигурации.

В июне 2026 стал стабильным Enterprise-Managed Authorization (EMA) — расширение для корпоративных сред. EMA позволяет организациям управлять авторизацией MCP-серверов централизованно через IdP (Okta, Microsoft Entra ID и др.): пользователь входит один раз через SSO и получает доступ ко всем подключённым серверам без отдельного OAuth для каждого. Уже поддерживают Anthropic, Microsoft, Okta, Asana, Atlassian, Canva, Figma, Linear, Supabase.

В production:
- HTTP-серверы — OAuth 2.1 с PKCE, bearer tokens в headers; в enterprise — EMA через IdP
- Stdio-серверы — секреты через env, ротация токенов
- Ограничение scope — сервер должен запрашивать минимально необходимые permissions

### Мониторинг

Что мониторить:

- **Latency** — время ответа сервера прибавляется к latency AI-ответа
- **Error rate** — сломанный MCP-сервер роняет весь workflow
- **Token overhead** — описания инструментов занимают контекст. 20 tools по 200 токенов = 4000 токенов на каждый запрос
- **Cost** — каждый tool call добавляет цикл AI. Больше серверов — выше расход токенов

Grafana MCP + Prometheus для метрик, Sentry MCP для ошибок. Мониторинг MCP через MCP — рекурсия, которая работает. Для трассировки самих LLM-вызовов (латентность, стоимость, промпты) — отдельный слой observability, например [Langfuse](/ru/blog/llm-observability-langfuse/).

### Масштабирование

Stdio — один процесс на одного клиента. Для командных серверов не масштабируется.

Streamable HTTP решает это: один сервер на множество клиентов. Stateless-архитектура — горизонтальное масштабирование за load balancer.

Паттерн для команды:
1. Локальные серверы (filesystem, sqlite) — stdio, на машине разработчика
2. Shared серверы (GitHub, Sentry, внутренние API) — Streamable HTTP, деплой в Docker/Kubernetes
3. Конфигурация — `.mcp.json` в репозитории для проектных, `~/.cursor/mcp.json` / `~/.claude/.mcp.json` для персональных

## Будущее MCP

### Agentic AI Foundation (AAIF)

В декабре 2025 Anthropic передал MCP в Linux Foundation, где образовался Agentic AI Foundation (AAIF). Это изменение governance, а не косметический шаг:

- **Нейтральное управление** — MCP больше не контролируется одной компанией. Platinum-члены AAIF: AWS, Anthropic, Block, Bloomberg, Cloudflare, Google, Microsoft, OpenAI. К апрелю 2026 — 170+ членов. Председатель Governing Board — David Nalley (AWS), исполнительный директор — Mazin Gilbert
- **Открытая спецификация** — развитие через SEP-процесс (Specification Enhancement Proposals) с публичным обсуждением
- **Совместимость** — AAIF объединяет MCP, Goose (Block) и AGENTS.md (OpenAI), выравнивая стандарты

### A2A Protocol

Agent-to-Agent Protocol (A2A) — стандарт от Google для коммуникации между AI-агентами, переданный в Linux Foundation. MCP закрывает связку «AI ↔ инструмент». A2A — «агент ↔ агент».

Протоколы дополняют друг друга:
- MCP: Claude Code вызывает GitHub через MCP-сервер
- A2A: Claude Code делегирует задачу специализированному агенту (например, security-reviewer), работающему со своими MCP-серверами

A2A является самостоятельным LF-проектом, не частью AAIF, но позиционируется как комплементарный стандарт. TSC A2A включает AWS, Cisco, Google, IBM Research, Microsoft, Salesforce, SAP, ServiceNow. Связка MCP + A2A — стандарт де-факто для мультиагентных систем. Как проектировать такие системы на практике — в статье про [архитектуру мультиагентных систем](/ru/blog/multi-agent-architecture/).

### Roadmap 2026

Ключевые направления из официального roadmap:

- **Stateless core** — MCP 2026-07-28 (Release Candidate заморожен 21 мая 2026, финальная публикация — 28 июля) делает протокол stateless на уровне ядра. Это крупнейшее изменение спецификации с момента запуска — спецификация больше не предполагает хранения состояния сессии на сервере, что позволяет горизонтально масштабировать за любым load balancer
- **Extensions framework** — расширения идентифицируются через reverse-DNS ID, версионируются независимо от спецификации, живут в отдельных `ext-*` репозиториях
- **Tasks Extension** — async долгоживущие операции: polling через `tasks/get` вместо блокирующего `tasks/result`
- **MCP Apps** — интерактивные UI-приложения внутри MCP-хостов
- **Enterprise readiness** — формальная политика deprecation (12 месяцев между deprecated и removed), OAuth 2.1 hardening, audit logging

### Цифры

- **110M+** установок SDK в месяц (апрель 2026; в марте — 97M+) — оба SDK в сумме
- **10 000+** серверов в официальном реестре; с учётом PulseMCP (15 000+) и Smithery (~7 300) — экосистема значительно крупнее
- **Рост 4 750%** за 16 месяцев (с 2M при запуске)
- npm SDK: `@modelcontextprotocol/sdk` — v1.29.0 (stable, последняя в серии v1); stable v2 ожидается Q3 2026
- Python SDK: `mcp` — v1.28.1 (stable), v2.0.0-beta публикуется на PyPI; stable v2 — конец июля 2026

Отметку в 100M установок в месяц MCP прошёл к апрелю 2026 — примерно через полтора года после запуска.

## Заключение

MCP — не buzzword. Это инфраструктурный стандарт, решающий конкретную проблему: подключение AI к реальному миру через единый протокол.

Что делать сейчас:

1. **Подключите 2-3 MCP-сервера** к Claude Code или Cursor. GitHub + Brave Search или Exa — минимум для любого разработчика
2. **Напишите свой сервер** — 30 строк на TypeScript или Python. Оберните внутренний API или базу данных
3. **Следите за спецификацией** — roadmap 2026 меняет транспорт и мультиагентные сценарии

MCP меняет не то, что AI делает, а то, к чему у него есть доступ. Правильные инструменты в правильном контексте — разница между AI-ассистентом и AI-напарником.
