Настройка MCP-сервера OpenCode
MCP (Model Context Protocol) — это открытый протокол, который позволяет подключать внешние инструменты и источники данных к OpenCode. После добавления MCP-сервера предоставляемые им инструменты автоматически отображаются рядом со встроенными инструментами OpenCode, и LLM может вызывать их напрямую во время диалогов.
OpenCode поддерживает два типа MCP-серверов:
- Локальный: процесс MCP, запускаемый через командную строку на вашем компьютере, подходит для локальных инструментов и скриптов.
- Удалённый: удалённый MCP-сервис, подключаемый через HTTPS, подходит для облачных сервисов и сторонних платформ.
Напоминание о потреблении контекста:Каждый MCP-сервер занимает место в контексте разговора. Чем больше инструментов включено, тем больше токенов расходуется за разговор, и тем легче достичь лимита контекста модели. Рекомендуется включать только те MCP-серверы, которые действительно нужны для текущей задачи, и отключать их после завершения. Некоторые серверы (например, GitHub MCP) имеют большое количество инструментов и потребляют особенно много токенов, поэтому будьте особенно внимательны при их использовании.
Базовая структура конфигурации
Все конфигурации MCP-серверов записываются подopencode.jsonизmcpполем. Каждый сервер требуетуникального именив качестве имени ключа, которое также можно использовать в запросе, чтобы указать, какой MCP вызвать:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-server": { // 服务器名称(自定义,全局唯一)
"type": "local", // 连接类型:local или remote
// ...其他配置项
"enabled": true // 是否启用,默认为 true
},
"another-mcp-server": { // 可同时配置多个 MCP 服务器
"type": "remote",
// ...
}
}
}
будетenabledУстановить вfalseможно временно отключить сервер, не удаляя его из файла конфигурации, что позволяет легко включать и отключать его по необходимости:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-server": {
"type": "local",
"command": ["npx", "-y", "my-mcp-command"],
"enabled": false // Временно отключено, конфигурация сохранена; просто измените обратно на true, когда потребуется
}
}
}
Локальный MCP-сервер
Локальный MCP-сервер предоставляет инструменты, запуская командный процесс на вашей машине. Задайтеtypeв"local", и указать команду запуска черезcommand:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-local-mcp-server": {
"type": "local", // Тип подключения: локальный
"command": ["npx", "-y", "my-mcp-command"], // Массив команды запуска:
// Первый элемент — исполняемый файл,
// Последующие элементы — аргументы
// Также можно записать как ["bun", "x", "my-mcp-command"]
"enabled": true,
"environment": { // Переменные окружения, внедряемые во время выполнения (необязательно)
"MY_ENV_VAR": "my_env_var_value"
}
}
}
}
Параметры конфигурации локального сервера
| Элемент конфигурации | Type | Обязательный | Описание |
|---|---|---|---|
type |
String | Да | Тип подключения; обязателен для локальных серверов"local" |
command |
Массив | Да | Команда и аргументы для запуска MCP-сервера, в виде массива, например.["npx", "-y", "my-mcp"] |
environment |
Object | нет | Переменные окружения, внедряемые при запуске сервера, в виде пар ключ-значение |
enabled |
Boolean | нет | Включать ли сервер при запуске; по умолчаниюtrue |
timeout |
Number | нет | Тайм-аут (в миллисекундах) для получения списка инструментов с MCP-сервера; по умолчанию5000(5 секунд) |
Пример: добавление тестового MCP-сервера
Ниже приведён пример добавления официального тестового MCP-сервера@modelcontextprotocol/server-everything, который можно использовать для проверки того, правильно ли работает функциональность MCP:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mcp_everything": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"]
// npx -y означает автоматическое подтверждение установки; не нужно вручную запускать npm install
}
}
}
После завершения настройки добавьте имя сервера в запрос, чтобы LLM мог вызывать инструменты этого MCP:
use the mcp_everything tool to add the number 3 and 4
Удалённый MCP-сервер
Удалённый сервер MCP подключается к облачным сервисам по HTTPS. Задайтеtypeв"remote", и укажите адрес сервера черезurl:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-remote-mcp": {
"type": "remote", // Тип подключения: удалённый
"url": "https://my-mcp-server.com", // Адрес удалённого сервера (обязательно)
"enabled": true,
"headers": { // HTTP-заголовки, отправляемые с запросами (необязательно)
"Authorization": "Bearer MY_API_KEY" // Обычно используется для аутентификации по API-ключу
}
}
}
}
Параметры конфигурации удалённого сервера
| Элемент конфигурации | Type | Обязательный | Описание |
|---|---|---|---|
type |
String | Да | Тип подключения; должен быть заполнен для удалённых серверов"remote" |
url |
String | Да | Полный HTTPS-адрес удалённого MCP-сервера |
enabled |
Boolean | нет | Включать ли сервер при запуске; по умолчаниюtrue |
headers |
Object | нет | HTTP-заголовки, отправляемые с каждым запросом; обычно используются для аутентификации по API-ключу |
oauth |
Объект /false |
нет | Конфигурация аутентификации OAuth или установите значениеfalseчтобы отключить автоматическое определение OAuth |
timeout |
Number | нет | Тайм-аут (в миллисекундах) для получения списка инструментов с MCP-сервера; по умолчанию5000(5 секунд) |
Ссылки на переменные окружения
В файле конфигурации,конфиденциальную информацию, такую как ключи API, не следует записывать напрямую в открытом виде. OpenCode поддерживает чтение системных переменных окружения во время выполнения с помощью{env:变量名}синтаксиса:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-remote-mcp": {
"type": "remote",
"url": "https://my-mcp-server.com",
"headers": {
"Authorization": "Bearer {env:MY_API_KEY}" // Автоматически считывает значение переменной окружения MY_API_KEY во время выполнения
// Переменную окружения необходимо заранее задать в системе:
// export MY_API_KEY=your_actual_key
}
}
}
}
Аутентификация OAuth
OpenCode имеет встроенную поддержку аутентификации OAuth для удалённых серверов MCP. Весь процесс почти полностью автоматический, и не нужно вручную управлять токенами.
Автоматический процесс аутентификации
Когда сервер требует аутентификацию OAuth, OpenCode автоматически выполняет следующие шаги:
- Обнаруживает ответ 401 (Unauthorized) от сервера
- Автоматически запускает процесс авторизации OAuth и открывает браузер, чтобы провести вас через вход
- Если сервер это поддерживает, автоматически регистрирует приложение с помощью динамической регистрации клиента (RFC 7591)
- Безопасно сохраняет полученный токен в
~/.local/share/opencode/mcp-auth.jsonСредняя - Последующие запросы автоматически передают токен; повторный вход не требуется
1. Автоматический OAuth (без дополнительной настройки)
Для большинства серверов MCP, поддерживающих OAuth, просто настройтеurlи OpenCode автоматически проведёт вас через аутентификацию при первом использовании:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp"
// Дополнительная настройка не требуется; OpenCode автоматически обрабатывает поток OAuth
}
}
}
Вы также можете вручную запустить процесс аутентификации (например, чтобы снова войти после истечения срока действия токена):
opencode mcp auth my-oauth-server
2. Предварительно зарегистрированные учётные данные клиента
Если вы уже получили фиксированный client ID и секрет от поставщика услуг, вы можете указать их непосредственно в конфигурации и пропустить шаг динамической регистрации:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-oauth-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": {
"clientId": "{env:MY_MCP_CLIENT_ID}", // Чтение из переменных среды, чтобы избежать раскрытия в открытом виде
"clientSecret": "{env:MY_MCP_CLIENT_SECRET}",
"scope": "tools:read tools:execute" // Запрашиваемые области разрешений; конкретные значения определяются поставщиком услуг
}
}
}
}
3. Отключение OAuth (использование аутентификации по API-ключу)
Если сервер использует API-ключ вместо аутентификации OAuth, вы можете установитьoauthвfalseчтобы отключить автоматическое определение OAuth и использоватьheadersчтобы передать ключ:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-api-key-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": false, // Отключить автоматическое обнаружение OAuth
"headers": {
"Authorization": "Bearer {env:MY_API_KEY}" // Использовать аутентификацию по API-ключу напрямую
}
}
}
}
Параметры конфигурации OAuth
| Элемент конфигурации | Type | Описание |
|---|---|---|
oauth |
Объект /false |
Объект конфигурации OAuth; установите вfalseчтобы полностью отключить автоматическое обнаружение OAuth |
clientId |
String | Идентификатор клиента OAuth. Если не указан, OpenCode попытается выполнить динамическую регистрацию клиента |
clientSecret |
String | Секрет клиента OAuth (если требуется сервером авторизации) |
scope |
String | Области разрешений, запрашиваемые во время авторизации. Несколько областей разделяются пробелами; конкретные значения определяются поставщиком услуг |
Команды управления аутентификацией
OpenCode предоставляет набор инструментов командной строки для управления состоянием аутентификации MCP:
# 对指定 MCP 服务器进行身份验证(会打开浏览器完成 OAuth 授权) opencode mcp auth my-oauth-server # 列出所有已配置的 MCP 服务器及其当前认证状态 opencode mcp list # 删除指定服务器已存储的凭据(下次使用时需要重新登录) opencode mcp logout my-oauth-server # 调试指定服务器的连接和 OAuth 流程(显示认证状态、测试连接、执行 OAuth 发现流程) opencode mcp debug my-oauth-server # 查看所有支持 OAuth 的服务器的认证状态 opencode mcp auth list
Переопределение удалённой конфигурации по умолчанию
Организации могут предоставлять.well-known/opencodeпредустановленные конфигурации MCP-серверов участникам через эндпоинты. Эти серверы могут быть отключены по умолчанию. Если вам нужно включить один из них, добавьте запись с тем же именем в вашу локальную конфигурацию и установитеenabled: trueчтобы включить его.Локальная конфигурация переопределит удалённые значения по умолчанию:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"jira": { // Соответствует имени сервера в удалённой конфигурации организации
"type": "remote",
"url": "https://jira.example.com/mcp",
"enabled": true // Установите true локально, чтобы переопределить удалённое состояние по умолчанию (отключено)
}
}
}
Управление инструментами
После регистрации MCP-сервера его инструменты появляются в服务器名称_工具名称в виде в списке инструментов OpenCode, и ими можно управлятьtoolsчерез поле для единого управления.
1. Глобальное отключение инструментов конкретного MCP
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp-foo": false // Отключить все инструменты сервера my-mcp-foo (сервер всё ещё запускается, но его инструменты недоступны)
}
}
2. Пакетное отключение с помощью Glob-шаблонов
Использование подстановочных знаков Glob позволяет сопоставлять и отключать инструменты с нескольких MCP-серверов одновременно:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["bun", "x", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp*": false // Glob-шаблон: отключить инструменты всех серверов, имена которых начинаются с my-mcp
}
}
3. Включение конкретных инструментов MCP для каждого агента
Если вы настроили много MCP-серверов, но каждому агенту нужно лишь подмножество, можно сначала глобально отключить все инструменты MCP, а затем включать их по мере необходимости в конфигурациях конкретных агентов. Это позволяет точно контролировать, к каким инструментам имеет доступ каждый агент, избегая бесполезного расхода контекста:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp": {
"type": "local",
"command": ["bun", "x", "my-mcp-command"],
"enabled": true // Сам сервер продолжает работать (иначе агент тоже не сможет его использовать)
}
},
"tools": {
"my-mcp*": false // Шаг 1: глобально отключить все инструменты этого MCP, чтобы они были недоступны в диалогах по умолчанию
},
"agent": {
"my-agent": {
"tools": {
"my-mcp*": true // Шаг 2: включить его только в агенте my-agent; другие агенты не затронуты
}
}
}
}
Правила шаблонов Glob
| Подстановочный знак | Значение | Пример |
|---|---|---|
* |
Соответствует нулю или более произвольным символам | my-mcp*matchesmy-mcp_search、my-mcp_listожидание |
? |
Соответствует ровно одному произвольному символу | my-mcp?matchesmy-mcpA, но не соответствуетmy-mcpAB |
| другие символы | Соответствует буквально и точно | my-mcp-fooСоответствует только серверам с точно идентичными именами |
Инструменты MCP-сервера при регистрации получают префикс с именем сервера. Например, инструменты сервера
myserverрегистрируются какmyserver_toolname. Поэтому, чтобы отключить все инструменты сервера, используйте"myserver_*": falseдля точного совпадения.
Примеры конфигурации
Sentry
Добавьте MCP-сервер Sentry, чтобы запрашивать ошибки, проблемы и данные событий проектов Sentry прямо в диалогах:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/mcp",
"oauth": {} // Пустой объект включает автоматическую аутентификацию OAuth; OpenCode автоматически обработает весь процесс OAuth.
}
}
}
После добавления конфигурации выполните следующую команду, чтобы завершить авторизацию учетной записи (откроется браузер для входа через OAuth):
opencode mcp auth sentry
После завершения аутентификации добавьтеuse sentryв свой промпт, чтобы вызвать инструменты Sentry:
Show me the latest unresolved issues in my project. use sentry
Context7
Добавьте MCP-сервер Context7, чтобы искать различные технические документы в беседах, помогая LLM получать самые свежие и точные API-справочники:
Пример
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
Пример
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}" // Чтение API-ключа из переменной окружения
// Нужно задать заранее: export CONTEXT7_API_KEY=your_key
}
}
}
}
Adduse context7к вашему промпту, чтобы вызвать функцию поиска по документам:
Configure a Cloudflare Worker script to cache JSON API responses for five minutes. use context7
Вы также можете добавить глобальные правила вAGENTS.mdчтобы LLM автоматически использовала Context7, когда ей нужно обратиться к документации, без необходимости указывать это вручную каждый раз:
When you need to search docs, use `context7` tools.
Grep от Vercel
Добавьте MCP-сервер Grep от Vercel, чтобы искать реальные фрагменты кода на GitHub прямо в диалогах, помогая LLM находить правильное использование API и ссылки на реализацию:
Пример
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gh_grep": { // Сервер с именем gh_grep, на который ссылаются по этому имени в промптах
"type": "remote",
"url": "https://mcp.grep.app"
}
}
}
Adduse the gh_grep toolв ваш промпт, чтобы искать примеры кода на GitHub:
What's the right way to set a custom domain in an SST Astro component? use the gh_grep tool
Аналогично вы можете задать глобальные правила вAGENTS.mdчтобы LLM автоматически искал примеры кода, когда не уверен в использовании:
If you are unsure how to do something, use `gh_grep` to search code examples from GitHub.Другие расширения