# 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

Здесь пример намеренно короткий. Полная последовательность — окружение, дизайн tools
и локальная проверка — есть в отдельном
[гайде по MCP-серверу на Python](/ru/blog/build-mcp-server-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. Отдельный [гайд по безопасности MCP](/ru/blog/mcp-security-guide/) разбирает OAuth audience binding, tool approval, prompt injection, local sandboxing и безопасные audit fields. Reliability и deployment patterns описаны в [гайде по MCP-серверам в production](/ru/blog/mcp-production-custom-servers/).

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

Актуальная спецификация MCP, опубликованная 28 июля 2026 года, описывает OAuth-based authorization для HTTP transports. В stdio credentials передаются через process environment, а не через этот HTTP authorization flow.

В июне 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-напарником.
