MCP-серверы
MCP (Model Context Protocol)
В этой папке собрана подробная документация и примеры настройки и использования MCP-серверов с Claude Code.
Обзор
MCP (Model Context Protocol) - это стандартизированный способ доступа Claude к внешним инструментам, API и источникам данных в реальном времени. В отличие от Memory, MCP обеспечивает доступ к изменяющимся данным «на лету».
Ключевые особенности:
- Доступ к внешним сервисам в реальном времени
- Синхронизация данных «на лету»
- Расширяемая архитектура
- Безопасная аутентификация
- Взаимодействие через инструменты
Архитектура MCP
graph TB A["Claude"] B["MCP Server"] C["External Service"] A -->|Request: list_issues| B B -->|Query| C C -->|Data| B B -->|Response| A A -->|Request: create_issue| B B -->|Action| C C -->|Result| B B -->|Response| A style A fill:#e1f5fe,stroke:#333,color:#333 style B fill:#f3e5f5,stroke:#333,color:#333 style C fill:#e8f5e9,stroke:#333,color:#333Экосистема MCP
graph TB A["Claude"] -->|MCP| B["Filesystem<br/>MCP Server"] A -->|MCP| C["GitHub<br/>MCP Server"] A -->|MCP| D["Database<br/>MCP Server"] A -->|MCP| E["Slack<br/>MCP Server"] A -->|MCP| F["Google Docs<br/>MCP Server"] B -->|File I/O| G["Local Files"] C -->|API| H["GitHub Repos"] D -->|Query| I["PostgreSQL/MySQL"] E -->|Messages| J["Slack Workspace"] F -->|Docs| K["Google Drive"] style A fill:#e1f5fe,stroke:#333,color:#333 style B fill:#f3e5f5,stroke:#333,color:#333 style C fill:#f3e5f5,stroke:#333,color:#333 style D fill:#f3e5f5,stroke:#333,color:#333 style E fill:#f3e5f5,stroke:#333,color:#333 style F fill:#f3e5f5,stroke:#333,color:#333 style G fill:#e8f5e9,stroke:#333,color:#333 style H fill:#e8f5e9,stroke:#333,color:#333 style I fill:#e8f5e9,stroke:#333,color:#333 style J fill:#e8f5e9,stroke:#333,color:#333 style K fill:#e8f5e9,stroke:#333,color:#333Способы установки MCP
Claude Code поддерживает несколько транспортных протоколов для подключения к MCP-серверам:
HTTP-транспорт (рекомендуется)
Stdio-транспорт (локальный)
Для локально запускаемых MCP-серверов:
CLAUDE_PROJECT_DIR для stdio-серверов (v2.1.139+)
Каждый MCP stdio-сервер запускается с уже установленной в окружении переменной CLAUDE_PROJECT_DIR=<абсолютный путь к корню репозитория> - по той же схеме, что используется для hook'ов. Файлы .mcp.json уровня plugin и project могут ссылаться на ${CLAUDE_PROJECT_DIR} в значениях command, args и env; подстановка выполняется до вызова execve():
Используйте этот вариант, когда вашему stdio-серверу требуется читать файлы относительно корня проекта независимо от того, откуда был запущен Claude Code.
stdio MCP-серверы также получают CLAUDE_CODE_SESSION_ID (совпадает со значением, передаваемым в hooks и Bash), в том числе при возобновлении сессии через --resume (v2.1.163+).
Транспорт SSE (устаревший)
Транспорт Server-Sent Events признан устаревшим в пользу http, но по-прежнему поддерживается:
Транспорт WebSocket (ws)
WebSocket-серверы удерживают постоянное двунаправленное соединение, что удобно для удалённых MCP-серверов, самостоятельно отправляющих события в Claude. Если же ваш сервер только отвечает на запросы, используйте HTTP: он поддерживает OAuth и флаг claude mcp add --transport, тогда как WebSocket не поддерживает ни того, ни другого.
Так как --transport не принимает значение ws, настройте транспорт в .mcp.json или через claude mcp add-json:
Запись type: "ws" принимает те же поля url, headers, headersHelper, timeout и alwaysLoad, что и http. Аутентификация возможна только через заголовки - OAuth-потока для WebSocket-серверов не предусмотрено.
Примечание: WebSocket-серверы не отображаются в выводе
claude mcp list. Для их проверки используйтеclaude mcp get <name>или панель/mcp.
Как и HTTP с SSE, WebSocket-соединения используют 5-минутное окно простоя; при этом у stdio и WebSocket нет таймера на отдельный запрос. Запись url без указания type приводит к ошибке, в которой в качестве допустимых значений перечисляются "http", "sse" и "ws".
Рабочие директории сессии (roots/list)
MCP-серверы могут получать список рабочих директорий сессии: директория запуска и все записи --add-dir/additionalDirectories возвращаются по MCP-запросу roots/list, а при каждом изменении набора отправляется уведомление notifications/roots/list_changed (v2.1.203). Таймаут простоя теперь применяется и к stdio-серверам (30 минут), причём заданный для сервера timeout служит нижней границей простоя (v2.1.203).
Примечание для Windows
В нативной Windows (не в WSL) для команд npx используйте cmd /c:
Аутентификация OAuth 2.0
Claude Code поддерживает OAuth 2.0 для MCP-серверов, которые этого требуют. При подключении к серверу с поддержкой OAuth Claude Code берёт на себя весь процесс аутентификации:
| Feature | Description |
|---|---|
| Interactive OAuth | Use /mcp to trigger the browser-based OAuth flow |
| Pre-configured OAuth clients | Built-in OAuth clients for common services like Notion, Stripe, and others (v2.1.30+) |
| Pre-configured credentials | --client-id, --client-secret, --callback-port flags for automated setup |
| Token storage | Tokens are stored securely in your system keychain |
| Step-up auth | Supports step-up authentication for privileged operations |
| Discovery caching | OAuth discovery metadata is cached for faster reconnections |
| Metadata override | oauth.authServerMetadataUrl in .mcp.json to override default OAuth metadata discovery |
Переопределение способа обнаружения метаданных OAuth
Если ваш MCP-сервер возвращает ошибки на стандартном endpoint метаданных OAuth (/.well-known/oauth-authorization-server), но при этом предоставляет рабочий OIDC endpoint, вы можете указать Claude Code, откуда получать метаданные OAuth. Задайте authServerMetadataUrl в объекте oauth конфигурации сервера:
URL должен начинаться с https://. Эта опция требует Claude Code v2.1.64 или новее.
Уведомление об аутентификации при запуске и обновление динамических заголовков (v2.1.193)
- Уведомление об аутентификации при запуске (v2.1.193+): при старте Claude Code выводит уведомление со списком MCP-серверов, которым всё ещё требуется аутентификация, чтобы сервер, нуждающийся в логине, не оставался молча неработающим.
- Автообновление
headersHelper(v2.1.193+): если вы задаёте собственную аутентификацию черезheadersHelper, этот helper автоматически вызывается повторно, когда сервер возвращает HTTP 401 или 403. Учётные данные обновляются на лету без ручного переподключения. См. Use dynamic headers for custom authentication.
Предупреждение (v2.1.238):
headersHelperв проектном.mcp.json, а также inline MCP-серверы в проектных agent-файлах или файлах, подключённых через--add-dir, теперь требуют, чтобы для соответствующей папки был подтверждён trust dialog - в том числе при запуске черезclaude -p. Кроме того, такие helper'ы выполняются без унаследованных переменных окружения с учётными данными; helper'ы уровня user, managed и claude.ai вместо этого запускаются из директории конфигурации Claude. Проектная конфигурация, которая полагалась на унаследованные учётные данные или на запуск в недоверенном режиме, перестанет работать, пока вы не подтвердите trust dialog и не передадите учётные данные другим способом.
MCP-коннекторы Claude.ai
MCP-серверы, настроенные в вашей учётной записи Claude.ai, автоматически доступны в Claude Code. Это значит, что любые MCP-подключения, настроенные через веб-интерфейс Claude.ai, будут доступны без дополнительной настройки.
MCP-коннекторы Claude.ai также работают в режиме --print (v2.1.83+), что позволяет использовать их неинтерактивно и в скриптах.
Замечание о запуске (v2.1.117+): когда одновременно настроены и локальные, и claude.ai MCP-серверы, по умолчанию используется параллельное подключение (ранее оно было последовательным), что уменьшает задержку запуска при использовании нескольких серверов.
Чтобы отключить MCP-серверы Claude.ai в Claude Code, установите переменную окружения ENABLE_CLAUDEAI_MCP_SERVERS в false:
Примечание: Эта функция доступна только пользователям, вошедшим в систему с учётной записью Claude.ai.
Процесс настройки MCP
sequenceDiagram participant User participant Claude as Claude Code participant Config as Config File participant Service as External Service User->>Claude: Type /mcp Claude->>Claude: List available MCP servers Claude->>User: Show options User->>Claude: Select GitHub MCP Claude->>Config: Update configuration Config->>Claude: Activate connection Claude->>Service: Test connection Service-->>Claude: Authentication successful Claude->>User: ✅ MCP connected!Команда /mcp
Введите /mcp в сессии, чтобы посмотреть список подключённых серверов, запустить OAuth-авторизацию и проверить состояние соединения.
- Начиная с версии v2.1.121, MCP повторяет попытку первичного подключения до 3 раз при временных ошибках.
- Начиная с версии v2.1.128,
/mcpпоказывает число инструментов для каждого подключённого сервера и визуально выделяет серверы, у которых заявлено 0 инструментов, - так неправильно настроенные серверы сразу бросаются в глаза.
Поиск MCP-инструментов
Если описания MCP-инструментов занимают более 10% контекстного окна, Claude Code автоматически включает поиск по инструментам, чтобы подбирать нужные из них, не перегружая контекст модели.
| Setting | Value | Description |
|---|---|---|
ENABLE_TOOL_SEARCH | auto (default) | Automatically enables when tool descriptions exceed 10% of context |
ENABLE_TOOL_SEARCH | auto:<N> | Automatically enables at a custom threshold of N tools |
ENABLE_TOOL_SEARCH | true | Always enabled regardless of tool count |
ENABLE_TOOL_SEARCH | false | Disabled; all tool descriptions sent in full |
Примечание: Поиск инструментов работает только с Sonnet 4 и новее либо Opus 4 и новее. Модели Haiku поиск инструментов не поддерживают.
Отключение поиска инструментов для отдельного сервера (v2.1.121+)
Если инструменты конкретного MCP-сервера нужны на каждом шаге, добавьте в его
конфигурацию "alwaysLoad": true - это отключит отложенную загрузку через поиск
инструментов и оставит его инструменты всегда доступными:
Используйте с осторожностью - каждый постоянно загружаемый инструмент занимает контекст, который иначе мог бы использоваться поиском по инструментам для подбора более подходящего.
Динамическое обновление инструментов
Claude Code поддерживает MCP-уведомления list_changed. Когда MCP-сервер динамически добавляет, удаляет или изменяет доступные инструменты, Claude Code получает уведомление и автоматически обновляет список инструментов - без переподключения или перезапуска.
MCP Apps
MCP Apps - первое официальное расширение MCP, позволяющее вызовам MCP-инструментов возвращать интерактивные UI-компоненты, которые отрисовываются прямо в интерфейсе чата. Вместо простых текстовых ответов MCP-серверы могут выдавать полноценные дашборды, формы, визуализации данных и многошаговые сценарии - всё это отображается прямо в чате, не прерывая диалог.
MCP Elicitation
MCP-серверы могут запрашивать у пользователя структурированный ввод через интерактивные диалоги (v2.1.49+). Это позволяет MCP-серверу запросить дополнительную информацию в процессе работы - например, попросить подтверждение, предложить выбрать один из вариантов или заполнить обязательные поля, - делая взаимодействие с MCP-сервером более интерактивным.
Ограничение на описания и инструкции инструментов
Начиная с v2.1.84, Claude Code применяет лимит в 2 КБ на описания инструментов и инструкции в расчёте на один MCP-сервер. Это не даёт отдельным серверам занимать чрезмерно много контекста излишне многословными определениями инструментов, снижая раздувание контекста и сохраняя эффективность взаимодействия.
MCP Prompts как slash-команды
MCP-серверы могут предоставлять промпты, которые отображаются в Claude Code как slash-команды. Промпты доступны согласно следующему соглашению об именовании:
Например, если сервер с именем github предоставляет prompt с названием review, его можно вызвать как /mcp__github__review.
Дедупликация серверов
Когда один и тот же MCP-сервер определён на нескольких уровнях (локальном, проектном, пользовательском), приоритет имеет локальная конфигурация. Это позволяет без конфликтов переопределять MCP-настройки уровня проекта или пользователя локальными.
Недавние исправления жизненного цикла (v2.1.136)
В v2.1.136 исправлены два давних бага жизненного цикла MCP - если вы используете конфигурации с несколькими серверами, ради этого стоит обновиться:
- MCP-серверы сохраняются после
/clear: серверы, настроенные через.mcp.json, плагины или коннекторы claude.ai, больше не исчезают после/clearв VS Code, JetBrains и Agent SDK. Более ранние версии молча выгружали их, и требовался перезапуск. - Исправлена гонка при одновременном обновлении OAuth refresh-token: в конфигурациях с несколькими OAuth-серверами refresh-токены больше не теряются, когда несколько серверов одновременно пытаются их обновить. Это устраняет ситуацию «каждое утро приходится заново авторизовываться», от которой страдали установки с несколькими MCP-серверами под OAuth.
MCP-ресурсы через @-упоминания
Вы можете ссылаться на MCP-ресурсы прямо в промптах, используя синтаксис @-упоминаний:
Например, чтобы сослаться на конкретный ресурс базы данных:
Это позволяет Claude получать содержимое MCP-ресурсов и встраивать его непосредственно в контекст разговора.
Области действия MCP
Конфигурации MCP можно хранить в разных областях действия с различными уровнями общего доступа:
| Scope | Flag | Location | Description | Shared With | Requires Approval |
|---|---|---|---|---|---|
| Local (default) | --scope local | ~/.claude.json (under project path) | Private to current user, current project only (was called project in older versions) | Just you | No |
| Project | --scope project | .mcp.json | Checked into git repository | Team members | Yes (first use) |
| User | --scope user | ~/.claude.json | Available across all projects (was called global in older versions) | Just you | No |
Укажите область видимости при добавлении сервера через --scope (краткая форма - -s). Если её не указать, Claude Code использует local: |
Использование области проекта
Храните конфигурации MCP, специфичные для проекта, в файле .mcp.json:
Участники команды при первом использовании MCP-серверов проекта увидят запрос на подтверждение. В недоверенном workspace серверы, которые репозиторий самостоятельно одобрил через закоммиченный .claude/settings.json, не запускаются автоматически командами claude mcp list/get - для них отображается ⏸ Pending approval, пока вы не подтвердите диалог доверия; параметр enableAllProjectMcpServers в недоверенной папке игнорируется (v2.1.196).
Управление конфигурацией MCP
Добавление MCP-серверов
Примечание: В JSON-конфигурациях -
.mcp.json,~/.claude.jsonилиclaude mcp add-json- полеtypeпринимаетstreamable-httpкак псевдоним дляhttp. В спецификации MCP этот транспорт называетсяstreamable-http, поэтому конфигурации, скопированные напрямую из документации сервера, работают без изменений.
Начиная с v2.1.238, команды claude mcp list и claude mcp get отображают отключённые серверы как ⊘ Disabled, не подключаясь к ним для проверки состояния.
claude mcp login <name> / claude mcp logout <name> - это неинтерактивный эквивалент OAuth-сценария из меню /mcp: вход и выход без его открытия. Добавьте флаг --no-browser к login, чтобы пройти OAuth по SSH или в headless-сессии (сценарий будет перенаправлен через stdin).
Таблица доступных MCP-серверов
| MCP Server | Purpose | Common Tools | Auth | Real-time |
|---|---|---|---|---|
| Filesystem | File operations | read, write, delete | OS permissions | ✅ Yes |
| GitHub | Repository management | list_prs, create_issue, push | OAuth | ✅ Yes |
| Slack | Team communication | send_message, list_channels | Token | ✅ Yes |
| Database | SQL queries | query, insert, update | Credentials | ✅ Yes |
| Google Docs | Document access | read, write, share | OAuth | ✅ Yes |
| Asana | Project management | create_task, update_status | API Key | ✅ Yes |
| Stripe | Payment data | list_charges, create_invoice | API Key | ✅ Yes |
| Memory | Persistent memory | store, retrieve, delete | Local | ❌ No |
Практические примеры
Пример 1: настройка GitHub MCP
Файл: .mcp.json (корень проекта)
Доступные инструменты GitHub MCP:
Управление Pull Request'ами
list_prs- список всех PR в репозиторииget_pr- получить детали PR, включая diffcreate_pr- создать новый PRupdate_pr- обновить описание/заголовок PRmerge_pr- смерджить PR в основную веткуreview_pr- добавить review-комментарии
Пример запроса:
Управление issues
list_issues- список всех issuesget_issue- получить сведения об issuecreate_issue- создать новый issueclose_issue- закрыть issueadd_comment- добавить комментарий к issue
Информация о репозитории
get_repo_info- сведения о репозиторииlist_files- дерево файловget_file_content- прочитать содержимое файлаsearch_code- поиск по кодовой базе
Операции с commit
list_commits- история commit'овget_commit- сведения о конкретном commitcreate_commit- создать новый commit
Настройка:
Подстановка переменных окружения в конфигурации
Конфигурации MCP поддерживают подстановку переменных окружения со значениями по умолчанию. Синтаксис ${VAR} и ${VAR:-default} работает в следующих полях: command, args, env, url и headers.
Переменные раскрываются во время выполнения:
${VAR}- использует переменную окружения; если она не задана, возвращает ошибку${VAR:-default}- использует переменную окружения, а если она не задана, подставляет значение по умолчанию
Пример 2: настройка Database MCP
Конфигурация:
Пример использования:
Настройка:
Пример 3: Workflow с несколькими MCP
Сценарий: ежедневная генерация отчётов
Настройка:
Пример 4: Операции MCP с файловой системой
Конфигурация:
Доступные операции:
| Operation | Command | Purpose |
|---|---|---|
| List files | ls ~/projects | Show directory contents |
| Read file | cat src/main.ts | Read file contents |
| Write file | create docs/api.md | Create new file |
| Edit file | edit src/app.ts | Modify file |
| Search | grep "async function" | Search in files |
| Delete | rm old-file.js | Delete file |
| Настройка: |
MCP vs Memory: матрица выбора
graph TD A["Need external data?"] A -->|No| B["Use Memory"] A -->|Yes| C["Does it change frequently?"] C -->|No/Rarely| B C -->|Yes/Often| D["Use MCP"] B -->|Stores| E["Preferences<br/>Context<br/>History"] D -->|Accesses| F["Live APIs<br/>Databases<br/>Services"] style A fill:#fff3e0,stroke:#333,color:#333 style B fill:#e1f5fe,stroke:#333,color:#333 style C fill:#fff3e0,stroke:#333,color:#333 style D fill:#f3e5f5,stroke:#333,color:#333 style E fill:#e8f5e9,stroke:#333,color:#333 style F fill:#e8f5e9,stroke:#333,color:#333Паттерн Request/Response
sequenceDiagram participant App as Claude participant MCP as MCP Server participant DB as Database App->>MCP: Request: "SELECT * FROM users WHERE id=1" MCP->>DB: Execute query DB-->>MCP: Result set MCP-->>App: Return parsed data App->>App: Process result App->>App: Continue task Note over MCP,DB: Real-time access<br/>No cachingПеременные окружения
Храните конфиденциальные учётные данные в переменных окружения:
Затем укажите их в конфигурации MCP:
Claude в роли MCP-сервера (claude mcp serve)
Claude Code сам может выступать в роли MCP-сервера для других приложений. Это позволяет внешним инструментам, редакторам и системам автоматизации использовать возможности Claude через стандартный протокол MCP.
Затем другие приложения смогут подключаться к этому серверу так же, как к любому MCP-серверу на базе stdio. Например, чтобы добавить Claude Code в качестве MCP-сервера в другом экземпляре Claude Code:
Это удобно для построения мультиагентных сценариев, в которых один экземпляр Claude оркестрирует другой.
Управляемая конфигурация MCP (Enterprise)
В корпоративных развёртываниях IT-администраторы задают политику MCP-серверов через два независимых механизма: файл managed-mcp.json, который разворачивает фиксированный набор серверов под исключительным контролем администратора, и ключи настроек allowedMcpServers / deniedMcpServers, которые фильтруют, какие из настроенных серверов допускаются к загрузке.
Расположение:
- macOS:
/Library/Application Support/ClaudeCode/managed-mcp.json - Linux и WSL:
/etc/claude-code/managed-mcp.json - Windows:
C:\Program Files\ClaudeCode\managed-mcp.json
managed-mcp.json использует тот же формат, что и проектный .mcp.json, - словарь mcpServers верхнего уровня. Он разворачивает серверы, а не фильтрует их:
Любой пользователь машины может прочитать этот файл, поэтому никогда не размещайте учётные данные в блоке env. Вместо этого используйте подстановку ${VAR}, OAuth или headersHelper.
Фильтрация: allowlist и denylist
allowedMcpServers, deniedMcpServers и allowAllClaudeAiMcps - это ключи настроек, а не поля managed-mcp.json. Чтобы они действительно применялись, разместите их в управляемом источнике настроек - server-managed settings, managed-settings.json, MDM-профиле или реестре:
allowedMcpServers- allowlist разрешённых серверов. Задайте рядомallowManagedMcpServersOnly: trueв том же управляемом источнике, иначе allowlist'ы объединяются из всех областей, и пользователь сможет расширить ваш.deniedMcpServers- denylist заблокированных серверов. Объединяется из всех областей в любом случае.allowAllClaudeAiMcps- загружает облачные коннекторы claude.ai вместе с развёрнутымmanaged-mcp.json(v2.1.149+). Считывается только из уровней политик, контролируемых администратором.
Каждая запись - это объект с единственным ключом:
| Key | Matches |
|---|---|
serverUrl | A remote server URL, exact or with * wildcards |
serverCommand | The exact command and arguments that start a stdio server, as an array - every argument, in order |
serverName | The user-assigned label. Exact match only; wildcards are not expanded |
| Пример конфигурации: |
Третий управляемый параметр, managedMcpServers (v2.1.259+), позволяет организации предоставлять HTTP/SSE MCP-серверы всем пользователям. Записи имеют ту же структуру, что и в .mcp.json; записи, в которых указана команда для запуска, игнорируются.
Примечание: Если сервер одновременно подпадает под
allowedMcpServersиdeniedMcpServers, приоритет имеет правило запрета.
MCP-серверы, поставляемые плагинами
Плагины могут включать в свой состав собственные MCP-серверы, которые становятся доступны автоматически при установке плагина. Определить такие MCP-серверы можно двумя способами:
- Отдельный
.mcp.json- поместите файл.mcp.jsonв корневую директорию плагина - Inline в
plugin.json- опишите MCP-серверы непосредственно в манифесте плагина
Используйте переменную ${CLAUDE_PLUGIN_ROOT}, чтобы указывать пути относительно директории установки плагина:
MCP с областью видимости на уровне субагента
MCP-серверы можно объявлять прямо во frontmatter агента через ключ mcpServers:, ограничивая их областью видимости конкретного субагента, а не всего проекта. Это удобно, когда агенту требуется доступ к определённому MCP-серверу, который не нужен остальным агентам в workflow.
MCP-серверы, привязанные к области субагента, доступны только в контексте выполнения этого агента и не передаются родительскому или смежным агентам.
Ограничения на вывод MCP
Claude Code применяет ограничения на объём вывода MCP-инструментов, чтобы предотвратить переполнение контекста:
| Limit | Threshold | Behavior |
|---|---|---|
| Warning | 10,000 tokens | A warning is displayed that the output is large |
| Default max | 25,000 tokens | Output is truncated beyond this limit |
| Disk persistence | 50,000 characters | Tool results exceeding 50K characters are persisted to disk |
Максимальный размер вывода настраивается через переменную окружения MAX_MCP_OUTPUT_TOKENS: |
Автоматический перевод долгих вызовов инструментов в фон (v2.1.212)
Вызовы MCP-инструментов, выполняющиеся дольше 2 минут, теперь автоматически уходят в фон, благодаря чему сессия остаётся доступной для работы и не блокируется из-за медленного инструмента. Пороговое значение настраивается, а само поведение можно изменить или отключить через CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS:
Решение проблемы раздувания контекста через исполнение кода
По мере роста внедрения MCP подключение к десяткам серверов с сотнями и тысячами инструментов порождает серьёзную проблему - раздувание контекста. Это, пожалуй, главная сложность MCP при работе в масштабе, и инженерная команда Anthropic предложила изящное решение: использовать исполнение кода вместо прямых вызовов инструментов.
Источник: Code Execution with MCP: Building More Efficient Agents - инженерный блог Anthropic
Проблема: два источника перерасхода токенов
1. Определения инструментов перегружают контекстное окно
Большинство MCP-клиентов загружают все определения инструментов заранее. При подключении к тысячам инструментов модели приходится обрабатывать сотни тысяч токенов ещё до того, как она прочитает запрос пользователя.
2. Промежуточные результаты расходуют дополнительные токены
Каждый промежуточный результат работы инструмента проходит через контекст модели. Возьмём перенос транскрипта встречи из Google Drive в Salesforce: полный текст проходит через контекст дважды - при чтении и при записи в целевую систему. Транскрипт двухчасовой встречи легко может добавить свыше 50 000 токенов.
graph LR A["Model"] -->|"Tool Call: getDocument"| B["MCP Server"] B -->|"Full transcript (50K tokens)"| A A -->|"Tool Call: updateRecord<br/>(re-sends full transcript)"| B B -->|"Confirmation"| A style A fill:#ffcdd2,stroke:#333,color:#333 style B fill:#f3e5f5,stroke:#333,color:#333Решение: MCP-инструменты как программные API
Вместо того чтобы прогонять описания инструментов и результаты их вызова через контекстное окно, агент пишет код, обращающийся к MCP-инструментам как к обычным API. Код исполняется в изолированной песочнице, а модели возвращается только итоговый результат.
graph LR A["Model"] -->|"Writes code"| B["Code Execution<br/>Environment"] B -->|"Calls tools directly"| C["MCP Servers"] C -->|"Data stays in<br/>execution env"| B B -->|"Only final result<br/>(minimal tokens)"| A style A fill:#c8e6c9,stroke:#333,color:#333 style B fill:#e1f5fe,stroke:#333,color:#333 style C fill:#f3e5f5,stroke:#333,color:#333Как это работает
Инструменты MCP представлены в виде файлового дерева типизированных функций:
Каждый файл инструмента содержит типизированную обёртку:
Затем агент пишет код, оркеструющий эти инструменты:
Результат: расход токенов снижается с ~150 000 до ~2 000 - сокращение на 98,7%.
Ключевые преимущества
| Benefit | Description |
|---|---|
| Progressive Disclosure | Agent browses the filesystem to load only the tool definitions it needs, instead of all tools upfront |
| Context-Efficient Results | Data is filtered/transformed in the execution environment before returning to the model |
| Powerful Control Flow | Loops, conditionals, and error handling run in code without round-tripping through the model |
| Privacy Preservation | Intermediate data (PII, sensitive records) stays in the execution environment; never enters the model context |
| State Persistence | Agents can save intermediate results to files and build reusable skill functions |
Пример: фильтрация больших наборов данных
Пример: цикл без обращений к модели
Компромиссы, которые стоит учитывать
Выполнение кода привносит собственную сложность. Запуск сгенерированного агентом кода требует:
- безопасной изолированной среды выполнения (sandbox) с адекватными лимитами ресурсов
- мониторинга и логирования выполняемого кода
- дополнительных накладных расходов на инфраструктуру по сравнению с прямыми вызовами tools
Преимущества - снижение расхода токенов, меньшая задержка, более удобная композиция tools - нужно взвешивать относительно этих издержек на реализацию. Для агентов всего с несколькими MCP-серверами прямые вызовы tools могут оказаться проще. Для агентов, работающих в большом масштабе (десятки серверов, сотни tools), выполнение кода даёт существенный выигрыш.
MCPorter: runtime для композиции MCP-инструментов
MCPorter - это TypeScript runtime и CLI-набор инструментов, который делает вызов MCP-серверов удобным на практике, без шаблонного кода, и помогает бороться с разрастанием контекста за счёт выборочного подключения tools и типизированных обёрток.
Какую задачу решает: вместо того чтобы заранее загружать все определения tools со всех MCP-серверов, MCPorter позволяет находить, инспектировать и вызывать конкретные tools по требованию - сохраняя контекст компактным.
Ключевые возможности:
| Feature | Description |
|---|---|
| Zero-config discovery | Auto-discovers MCP servers from Cursor, Claude, Codex, or local configs |
| Typed tool clients | mcporter emit-ts generates .d.ts interfaces and ready-to-run wrappers |
| Composable API | createServerProxy() exposes tools as camelCase methods with .text(), .json(), .markdown() helpers |
| CLI generation | mcporter generate-cli converts any MCP server into a standalone CLI with --include-tools / --exclude-tools filtering |
| Parameter hiding | Optional parameters stay hidden by default, reducing schema verbosity |
| Установка: |
Пример - композиция tools на TypeScript:
Пример - вызов CLI-инструмента:
MCPorter дополняет описанный выше подход с выполнением кода, предоставляя runtime-инфраструктуру для вызова MCP-инструментов как типизированных API - благодаря этому легко удерживать промежуточные данные вне контекста модели.
Лучшие практики
Вопросы безопасности
Что делать ✅
- Используйте переменные окружения для всех учётных данных
- Регулярно ротируйте токены и API-ключи (рекомендуется ежемесячно)
- По возможности используйте токены только для чтения
- Ограничивайте область доступа MCP-сервера минимально необходимой
- Отслеживайте использование MCP-серверов и журналы доступа
- Используйте OAuth для внешних сервисов, когда это возможно
- Внедрите rate limiting для MCP-запросов
- Тестируйте MCP-подключения перед использованием в production
- Документируйте все активные MCP-подключения
- Поддерживайте пакеты MCP-серверов в актуальном состоянии
Чего не делать ❌
- Не хардкодьте учётные данные в конфигурационных файлах
- Не коммитьте токены и секреты в git
- Не передавайте токены в командных чатах и email
- Не используйте личные токены в командных проектах
- Не выдавайте лишних прав
- Не игнорируйте ошибки аутентификации
- Не выставляйте MCP-эндпоинты в публичный доступ
- Не запускайте MCP-серверы с правами root/администратора
- Не сохраняйте чувствительные данные в логах
- Не отключайте механизмы аутентификации
Лучшие практики конфигурирования
- Version Control: храните
.mcp.jsonв git, но для секретов используйте переменные окружения - Least Privilege: выдавайте каждому MCP-серверу минимально необходимые права
- Isolation: по возможности запускайте разные MCP-серверы в отдельных процессах
- Monitoring: логируйте все MCP-запросы и ошибки для аудита
- Testing: тестируйте все конфигурации MCP перед развёртыванием в production
Советы по производительности
- Кэшируйте часто используемые данные на уровне приложения
- Формулируйте MCP-запросы точечно, чтобы сократить объём передаваемых данных
- Отслеживайте время отклика MCP-операций
- Предусмотрите rate limiting для внешних API
- Используйте батчинг при выполнении нескольких операций подряд
Инструкция по установке
Предварительные требования
- Установлены Node.js и npm
- Установлен Claude Code CLI
- API-токены/учётные данные для внешних сервисов
Пошаговая настройка
- Добавьте свой первый MCP-сервер с помощью CLI (на примере GitHub):
Или создайте файл .mcp.json в корне проекта:
- Задайте переменные окружения:
- Проверьте подключение:
- Используйте инструменты MCP:
Установка для конкретных сервисов
GitHub MCP:
MCP для баз данных:
Filesystem MCP:
Slack MCP:
Устранение неполадок
Начните с текста ошибки (v2.1.219+)
Если сервер не подключается, сначала запустите claude mcp list (или /mcp внутри сессии), прежде чем что-либо менять. Claude Code теперь выводит HTTP-код ответа и текст ошибки от сервера рядом с проблемным сервером, так что вы увидите 401 Unauthorized или 404 Not Found вместо обобщённого «failed to connect»:
Сначала посмотрите на статус - он подскажет, какое исправление применить:
401/403→ неверные или просроченные учётные данные; выполните повторную аутентификацию командойclaude mcp login <name>404→ неверный URL (обычная причина - отсутствующий суффикс пути/mcpили/sse)5xx/ timeout → удалённый сервер недоступен; см. Тайм-аут соединения
Скрытые пробельные символы в значениях конфигурации (v2.1.219+)
Claude Code выдаёт предупреждение, когда значение в конфигурации MCP содержит начальные или конечные пробельные символы. Это распространённая и трудноуловимая причина сбоев аутентификации: токен, скопированный из браузера или сообщения в чате, нередко тянет за собой пробел или перевод строки в конце, который дословно отправляется в заголовке Authorization и отвергается как некорректные учётные данные.
Если вы видите такое предупреждение, перепроверьте значение в .mcp.json (или переменную окружения, из которой оно подставляется) и уберите лишние пробелы:
Пропуск серверов в headless-запусках (v2.1.219+)
Серверы, переданные через --mcp-config и не прошедшие валидацию конфигурации, теперь пропускаются, а не прерывают запуск целиком - из-за этого headless-скрипт может казаться работоспособным, лишившись при этом половины инструментов. Claude Code теперь сообщает, какие серверы были отброшены:
- Headless-запуски / запуски с
-p: событиеinitв stream-json содержит полеmcp_server_errorsсо списком всех пропущенных записей. Проверяйте его, прежде чем полагаться на результат запуска. - Интерактивные запуски в терминале: о той же проблеме сообщается предупреждением при старте сессии.
MCP-сервер не найден
Ошибка аутентификации
Тайм-аут подключения
- Проверьте сетевое соединение:
ping api.github.com - Убедитесь, что endpoint API доступен
- Проверьте лимиты запросов (rate limits) к API
- Попробуйте увеличить timeout в конфигурации
- Проверьте, не блокирует ли соединение firewall или proxy
Сбои MCP-сервера
- Проверьте логи MCP-сервера:
~/.claude/logs/ - Убедитесь, что все переменные окружения заданы
- Проверьте корректность прав доступа к файлам
- Попробуйте переустановить пакет MCP-сервера
- Проверьте, нет ли других процессов, занимающих тот же порт
Связанные концепции
Memory vs MCP
- Memory: хранит постоянные, неизменяемые данные (настройки, контекст, историю)
- MCP: обращается к динамическим, изменяющимся данным (API, базы данных, сервисы реального времени)
Когда что использовать
- Memory - для пользовательских настроек, истории диалогов, накопленного контекста
- MCP - для актуальных issues в GitHub, живых запросов к БД, данных в реальном времени
Интеграция с другими возможностями Claude
- Комбинируйте MCP с Memory, чтобы получить богатый контекст
- Используйте MCP-инструменты в промптах для более качественного reasoning
- Задействуйте несколько MCP-серверов для сложных workflow
Дополнительные материалы
- Официальная документация MCP
- Спецификация протокола MCP
- Репозиторий MCP на GitHub
- Доступные MCP-серверы
- MCPorter - TypeScript runtime и CLI для вызова MCP-серверов без boilerplate-кода
- Code Execution with MCP - статья в инженерном блоге Anthropic о решении проблемы раздувания контекста
- Справочник Claude Code CLI
- Документация Claude API
Последнее обновление: 6 сентября 2026 Версия Claude Code: 2.1.263 Источники:
- https://code.claude.com/docs/en/mcp
- https://code.claude.com/docs/en/managed-mcp
- https://code.claude.com/docs/en/changelog
- https://github.com/anthropics/claude-code/releases/tag/v2.1.117
- https://github.com/anthropics/claude-code/releases/tag/v2.1.139
- https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md
- https://code.claude.com/docs/en/model-config Совместимые модели: Claude Fable 5, Claude Opus 5, Claude Sonnet 5, Claude Sonnet 4.6, Claude Opus 4.8, Claude Haiku 4.5