На этой странице рассматривается конфигурация MCP для Agent SDK. Чтобы добавить MCP серверы в Claude Code CLI так, чтобы они загружались в каждом проекте, см. Области установки MCP.
Быстрый старт
Этот пример подключается к MCP серверу документации Claude Code с использованием HTTP транспорта и используетallowedTools с подстановочным знаком для разрешения всех инструментов с сервера.
Добавить MCP сервер
Вы можете настроить MCP серверы в коде при вызовеquery(), или в файле .mcp.json, загруженном через settingSources.
Добавление сервера в коде
Передайте MCP серверы непосредственно в опцииmcpServers. Этот пример запускает локальный файловый MCP сервер для /Users/me/projects. Замените этот путь на директорию на вашей машине:
Добавление сервера из файла конфигурации
Создайте файл.mcp.json в корне вашего проекта. Файл загружается, когда включен источник настроек project, что происходит по умолчанию для опций query(). Если вы явно установите settingSources, включите "project" для загрузки этого файла. Замените /Users/me/projects на директорию на вашей машине:
Время подключения
Claude Code регистрирует серверы, которые вы передаёте вoptions.mcpServers при запуске и отправляет сообщение инициализации после разрешения первого ожидания, если оно есть. Подключение каждого сервера из options.mcpServers и задерживает ли он первый ход, зависит от его типа:
Серверы, загруженные из файлов конфигурации, таких как
.mcp.json, или из плагинов обычно показывают pending в сообщении инициализации. Когда options.mcpServers содержит сервер stdio, HTTP или SSE, первый ход ждёт эти ожидающие серверы тоже, до MCP_TIMEOUT. Когда options.mcpServers пуст или содержит только SDK серверы, первый ход ждёт до 2 секунд вместо этого:
- С поиском инструментов, по умолчанию: ожидание охватывает всё ещё ожидающие серверы, настроенные с
alwaysLoad: true, и не остальные. Остальные продолжают подключаться в фоновом режиме. Доступность инструментов описывает, как Claude достигает их инструментов после подключения. - Без поиска инструментов: ожидание охватывает каждый ожидающий сервер. Настройка поиска инструментов охватывает то, что отключает поиск инструментов. Если вы исключите инструмент
ToolSearchиз сеанса, например черезdisallowedTools, сеанс также работает без поиска инструментов.
permissionPromptToolName, первый ход также ждёт сервер этого инструмента в каждом случае, до MCP_TIMEOUT.
Чтобы установить ожидание первого хода самостоятельно, добавьте CLAUDE_CODE_MCP_STARTUP_WAIT_MS в опцию env, например CLAUDE_CODE_MCP_STARTUP_WAIT_MS: "5000". Первый ход затем ждёт до этого количества миллисекунд для каждого ожидающего сервера, независимо от того, доступен ли поиск инструментов. Этот срок также заменяет ожидание первого хода MCP_TIMEOUT для серверов stdio, HTTP и SSE в options.mcpServers. CLAUDE_CODE_MCP_STARTUP_WAIT_MS требует Claude Code версии 2.1.274 или позже.
Серверы, которые всё ещё ожидают, когда ожидание заканчивается, продолжают подключаться в фоновом режиме. Установите переменную в 0, чтобы пропустить ожидание. Сервер permissionPromptToolName сохраняет собственное ожидание MCP_TIMEOUT независимо от значения.
Чтобы заблокировать сам запуск на отдельной, более ранней фазе, чем ожидание первого хода, перед отправкой сообщения инициализации:
- Установите
MCP_CONNECTION_NONBLOCKINGв значение0, чтобы заблокировать всю партию подключений. Claude Code ограничивает это ожидание 5 секундами по умолчанию. Отрегулируйте ограничение с помощью переменной окруженияMCP_CONNECT_TIMEOUT_MSв миллисекундах. Серверы, которые всё ещё ожидают в этот момент, продолжают подключаться в фоновом режиме. - Установите
alwaysLoad: trueв конфигурации сервера, чтобы его инструменты были доступны с полными схемами на первом ходе, исключены из отложенного поиска инструментов. Claude Code ждёт при запуске инструментов этого сервера, ограничено тем же сроком, в то время как другие серверы продолжают подключаться в фоновом режиме; удалённый сервер с кэшированным списком инструментов предоставляет их без подключения, согласно таблице выше.
system с подтипом init сообщает статус каждого сервера в момент его отправки; см. Обработка ошибок для чтения этих статусов.
Разрешить инструменты MCP
Инструменты MCP требуют явного разрешения перед тем, как Claude сможет их использовать. Без разрешения Claude увидит, что инструменты доступны, но не сможет их вызывать.Соглашение об именовании инструментов
Инструменты MCP именуются какmcp__<server-name>__<tool-name>, где <server-name> — это имя, под которым вы регистрируете сервер, например его ключ в mcpServers.
Символы в имени сервера, такие как . и пробелы, заменяются на _. В этой таблице показано полное имя инструмента list_issues для двух ключей сервера:
Используйте полные имена инструментов в
allowedTools и в правилах разрешений MCP. Для сервера, который предоставляет плагин, <server-name> принимает форму с областью плагина и начинается с plugin_.
Автоматическое одобрение с allowedTools
ИспользуйтеallowedTools для автоматического одобрения определённых инструментов MCP, чтобы Claude мог их использовать без запроса разрешения:
*) позволяют вам разрешить все инструменты с сервера без перечисления каждого отдельно.
Предпочитайте
allowedTools режимам разрешений для доступа MCP. permissionMode: "acceptEdits" не одобряет автоматически инструменты MCP (только редактирование файлов и команды Bash файловой системы). permissionMode: "bypassPermissions" одобряет автоматически инструменты MCP, но также отключает большинство других запросов безопасности, что шире, чем необходимо; см. Как оцениваются разрешения для запросов, которые остаются. Подстановочный знак в allowedTools предоставляет ровно тот сервер MCP, который вам нужен, и ничего больше. См. Режимы разрешений для полного сравнения.Обнаружение доступных инструментов
Чтобы увидеть, какие инструменты предоставляет сервер MCP, проверьте документацию сервера или проверьте массивtools в инициализирующем сообщении system. Имена инструментов MCP начинаются с mcp__.
Claude Code выдаёт инициализирующее сообщение после ожидания подключения на первом ходу для серверов, переданных в options.mcpServers, поэтому массив tools содержит инструменты mcp__ каждого сервера, который подключился к этому моменту, плюс те, у которых есть кэшированный список инструментов, которые подключаются при первом использовании. Инструменты любого другого сервера, который ещё не подключился, отсутствуют; см. Обработка ошибок для чтения статуса каждого сервера.
Этот фильтр выводит имена инструментов MCP:
Типы транспорта
MCP серверы взаимодействуют с вашим агентом, используя различные протоколы транспорта. Проверьте документацию сервера, чтобы узнать, какой транспорт он поддерживает:- Если в документации указана команда для запуска (например,
npx @modelcontextprotocol/server-filesystem), используйте stdio - Если в документации указан URL, используйте HTTP или SSE
- Если вы создаёте свои собственные инструменты в коде, используйте SDK MCP сервер
stdio серверы
Локальные процессы, которые взаимодействуют через stdin/stdout. Используйте это для MCP-серверов, которые вы запускаете на одной машине. Для формата.mcp.json используйте те же поля, показанные в разделе Добавление сервера из файла конфигурации. В коде передайте команду и её аргументы. Замените /Users/me/projects на директорию на вашей машине:
HTTP/SSE серверы
Используйте HTTP или SSE для облачных MCP серверов и удалённых API. Для формата.mcp.json используйте те же поля, что и в примере в HTTP headers for remote servers, с "type": "sse" для SSE сервера. В коде передайте URL сервера:
"type": "http" вместо этого. В .mcp.json и других JSON файлах конфигурации "streamable-http" принимается как псевдоним для "http". Тип McpHttpServerConfig в SDK объявляет только "http", поэтому используйте "http" для серверов, которые вы передаёте в коде.
SDK MCP серверы
Определите пользовательские инструменты непосредственно в коде вашего приложения вместо запуска отдельного процесса сервера. Подробности реализации см. в custom tools guide. SDK MCP сервер, зарегистрированный запросом управленияinitialize, начинает подключаться сразу же после обработки запроса Claude Code.
Поиск инструментов MCP
Когда у вас настроено много инструментов MCP, определения инструментов могут занимать значительную часть вашего контекстного окна. Поиск инструментов решает эту проблему, скрывая определения инструментов из контекста и загружая только те, которые Claude нужны для каждого хода. Поиск инструментов включен по умолчанию. Дополнительную информацию о параметрах конфигурации, лучших практиках и использовании поиска инструментов с пользовательскими инструментами SDK см. в разделе Поиск инструментов.Аутентификация
Большинство серверов MCP требуют аутентификации для доступа к внешним сервисам. Передавайте учетные данные через переменные окружения в конфигурации сервера.Передача учетных данных через переменные окружения
Используйте полеenv для передачи ключей API, токенов и других учетных данных на сервер MCP:
- В коде
- .mcp.json
HTTP-заголовки для удаленных серверов
Для HTTP и SSE серверов передавайте заголовки аутентификации непосредственно в конфигурации сервера:- В коде
- .mcp.json
Аутентификация OAuth2
Спецификация MCP поддерживает OAuth 2.1 для авторизации. SDK не открывает браузер и не запускает интерактивный поток OAuth. Когда настроенный сервер возвращает запрос авторизации и нет сохраненного токена, запуск агента продолжается без инструментов этого сервера, и сервер сообщает статусneeds-auth. Массив mcp_servers системного инициализирующего сообщения может по-прежнему показывать pending для этого сервера при его отправке. Чтобы подтвердить, требуются ли серверу учетные данные, опросите mcpServerStatus() в TypeScript SDK или get_mcp_status() в Python.
Для предоставления учетных данных завершите поток OAuth в своем приложении и передайте полученный токен доступа в headers сервера:
Примеры
Список проблем из репозитория
Этот пример подключается к удалённому серверу GitHub MCP для получения списка последних проблем. Пример включает отладочное логирование для проверки подключения MCP и вызовов инструментов. Перед запуском создайте личный токен доступа GitHub с правами на чтение репозиториев, которые вы хотите запросить, и установите его как переменную окружения:MCP servers: статус connected для github подтверждает, что токен работает. Если Claude Code имеет кэшированный список инструментов для сервера, статус может отображаться как pending, и сервер подключится при первом вызове инструмента. Если статус failed или needs-auth, см. Обработка ошибок перед тем, как доверять результату, так как Claude может вернуться к встроенным инструментам, когда сервер недоступен.
Запрос к базе данных
Этот пример использует DBHub для запроса к базе данных Postgres. Агент автоматически обнаруживает схему базы данных, пишет SQL-запрос и возвращает результаты. Инструментexecute_sql DBHub выполняет любой SQL, который выдаёт агент, включая операции записи, если вы это не ограничите. Установка readonly = true в файле конфигурации DBHub заставляет DBHub отклонять операторы INSERT, UPDATE, DELETE и DDL, поэтому пример не может изменять ваши данные, даже если агент выдаст операцию записи. DBHub разрешает ${DATABASE_URL} из переменных окружения процесса при загрузке конфига, поэтому строка подключения остаётся вне файла. Создайте этот файл dbhub.toml рядом с вашим скриптом:
dbhub.toml
DATABASE_URL на вашу строку подключения. Замените значения-заполнители на детали вашей базы данных:
Обработка ошибок
MCP серверы могут не подключиться по различным причинам: процесс сервера может быть не установлен, учетные данные могут быть неверными или удаленный сервер может быть недоступен. Claude Code отправляет сообщениеsystem с подтипом init в начале каждого запроса. Это сообщение включает статус подключения для каждого MCP сервера. Поле status может быть "pending", "connected", "failed", "needs-auth" или "disabled". Claude Code отправляет сообщение init после первого ожидания подключения для серверов, переданных в options.mcpServers, поэтому такой сервер, который подключился в течение ожидания, показывает "connected".
В сообщении init не рассматривайте "pending" как ошибку само по себе. Это может означать любое из следующего:
- Сервер еще не подключился. См. как долго Claude Code ждет его перед первым ходом
- Список инструментов сервера был получен из кэша, с подключением при первом использовании
- Срок подключения истек. Такой сервер сообщает
"pending"или"failed"в зависимости от времени
"failed" или "needs-auth" для обнаружения серверов, которые не будут пригодны для использования:
"connected". Когда соединение с ним разрывается во время сеанса, Claude Code переводит сервер обратно в "pending" во время переподключения. Последующий вызов mcpServerStatus() в TypeScript или ClaudeSDKClient.get_mcp_status() в Python может затем сообщить "pending" для сервера, который вы видели подключенным ранее, без каких-либо изменений конфигурации с вашей стороны.
После пяти неудачных попыток переподключения сервер сообщает "failed" или "needs-auth", когда ему требуется повторная авторизация. HTTP- или SSE-сервер в состоянии "failed" может вернуться в "connected" без какого-либо вызова с вашей стороны, поскольку после временной ошибки Claude Code продолжает повторять попытки в фоновом режиме. Для повторной попытки вручную вызовите reconnectMcpServer() в TypeScript или ClaudeSDKClient.reconnect_mcp_server() в Python.
Troubleshooting
Server shows “failed” status
Check theinit message to see which servers failed to connect:
"pending" status doesn’t mean the server failed. See Обработка ошибок for the cases it covers at init. To get updated statuses later in the session, call the query’s mcpServerStatus() method in the TypeScript SDK, or ClaudeSDKClient.get_mcp_status() in Python.
Common causes:
- Missing environment variables: Ensure required tokens and credentials are set. For stdio servers, check the
envfield matches what the server expects. - Server not installed: For
npxcommands, verify the package exists and Node.js is in your PATH. - Invalid connection string: For database servers, verify the connection string format and that the database is accessible.
- Network issues: For remote HTTP/SSE servers, check the URL is reachable and any firewalls allow the connection.
Tools not being called
If Claude sees tools but doesn’t use them, check that you’ve granted permission withallowedTools:
Инструмент отсутствует в SDK MCP-сервере
В TypeScript SDK, если входную схему инструмента невозможно преобразовать в JSON Schema, сервер, созданный с помощьюcreateSdkMcpServer(), не включает этот инструмент в список своих инструментов. В этот момент SDK выдаёт предупреждение. В Node.js это предупреждение процесса с кодом CLAUDE_SDK_MCP_TOOL_SCHEMA_UNCONVERTIBLE, и оно начинается с такого текста:
Connection timeouts
MCP server connections time out after 30 seconds by default. To change how long a running tool call may take, setMCP_TOOL_TIMEOUT. If your server takes longer to start, the connection fails. Raise the connection limit with the MCP_TIMEOUT environment variable, in milliseconds. For servers that need more startup time, also consider:
- Using a lighter-weight server if available
- Pre-warming the server before starting your agent
- Checking server logs for slow initialization causes
timeout to createSdkMcpServer().
Tool output exceeds maximum allowed tokens
SDK применяет те же ограничения на вывод MCP, что и Claude Code. Когда успешный результат инструмента без изображений превышает 25 000 токенов, Claude Code сохраняет вывод в файл и заменяет результат инструмента сообщением об ошибке с путём к этому файлу, чтобы агент мог прочитать вывод по частям. Чтобы изменить лимит токенов, задайте переменную окруженияMAX_MCP_OUTPUT_TOKENS. Если инструмент не объявляет anthropic/maxResultSizeChars, успешный текстовый результат длиннее 50 000 символов сохраняется в файл независимо от лимита токенов. Полное описание поведения, включая то, как сервер объявляет эту аннотацию, см. в разделе Ограничения и предупреждения вывода MCP.
Связанные ресурсы
- Руководство по пользовательским инструментам: Создайте собственный MCP сервер, который работает в процессе вашего приложения SDK
- Разрешения: Контролируйте, какие MCP инструменты может использовать ваш агент, с помощью
allowedToolsиdisallowedTools - Справочник TypeScript SDK: Полный справочник API, включая параметры конфигурации MCP
- Справочник Python SDK: Полный справочник API, включая параметры конфигурации MCP
- Каталог MCP серверов: Просмотрите доступные MCP серверы для баз данных, API и многого другого