MCP (Model Context Protocol) — открытый протокол, который описывает, как подключать к языковой модели внешние инструменты и источники данных: файловую систему, документацию, трекер задач, баг-трекер или собственный сервис. Вместо того чтобы встраивать каждый инструмент в агента, вы поднимаете отдельный MCP-сервер, а агент общается с ним по стандартной схеме.
OpenCode поддерживает MCP из коробки: и локальные серверы, которые запускаются дочерним процессом, и удалённые, доступные по HTTP. Важный момент — весь MCP-слой реализован на стороне самого OpenCode, а не на стороне провайдера модели. Поэтому DeepSeek получает инструменты MCP как обычные функции в запросе, и ему не нужно ничего знать про сам протокол.
В этой заметке я разберу, как добавить локальный и удалённый сервер, как пройти авторизацию, как не утонуть в токенах и что учитывать при работе с моделями DeepSeek.
Что понадобится
Для работы нужны три вещи:
- Установленный OpenCode. Если агент ещё не настроен, порядок установки и подключения DeepSeek я разбирал в отдельной заметке.
- Node.js и npx. Нужны для локальных MCP-серверов, которые распространяются как npm-пакеты.
- Ключи доступа. Только для тех удалённых серверов, которые требуют авторизации. Публичные серверы вроде Context7 работают и без ключа, но с меньшими лимитами.
Как это устроено
Серверы описываются в конфигурации OpenCode в блоке mcp. У каждого сервера есть уникальное имя, по которому его можно упомянуть в запросе. Инструменты сервера регистрируются с префиксом этого имени, поэтому конфликтов между разными серверами не возникает.
После подключения инструменты MCP становятся доступны модели наравне со встроенными: чтением файлов, правкой кода и запуском команд. С точки зрения DeepSeek это обычные функции, которые агент может вызвать, — именно поэтому связка работает без какой-либо поддержки MCP на стороне API модели.
Локальный сервер
Самый простой способ познакомиться с механизмом — тестовый сервер @modelcontextprotocol/server-everything. Добавим его в файл opencode.json в корне проекта:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mcp_everything": {
"type": "local",
"command": ["npx", "-y", "@modelcontextprotocol/server-everything"]
}
}
}
Поле command — это команда запуска сервера и её аргументы в виде массива. После перезапуска OpenCode инструменты появятся в сессии, и их можно попросить явно:
используй инструмент mcp_everything, чтобы сложить 3 и 4
У локального сервера есть ещё несколько полезных полей. environment задаёт переменные окружения процесса, cwd — рабочую директорию, timeout — таймаут запросов в миллисекундах, а enabled позволяет временно отключить сервер, не удаляя его из конфигурации.
Удалённый сервер
Удалённые серверы удобнее: не нужно ничего запускать локально, а доступ к ним идёт по URL. Хороший пример — Context7, который ищет актуальную документацию библиотек. Он подключается без ключа:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp"
}
}
}
Если у вас есть бесплатный аккаунт Context7, ключ поднимает лимиты. Заголовки передаются через блок headers, а сам ключ удобно держать в переменной окружения:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"context7": {
"type": "remote",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
}
}
}
}
Конструкция {env:ИМЯ} подставляет значение переменной окружения при загрузке конфигурации, поэтому ключ не попадает в репозиторий. Перед запуском агента переменную нужно экспортировать в терминале.
Ещё один полезный публичный сервер — Grep by Vercel, поиск по примерам кода на GitHub:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gh_grep": {
"type": "remote",
"url": "https://mcp.grep.app"
}
}
}
Авторизация через OAuth
Часть удалённых серверов требует OAuth. OpenCode умеет проходить этот сценарий сам: он замечает ответ 401, запускает авторизацию и сохраняет токены. Для Sentry достаточно указать сервер:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sentry": {
"type": "remote",
"url": "https://mcp.sentry.dev/mcp",
"oauth": {}
}
}
}
После этого авторизацию можно запустить вручную — откроется браузер:
opencode mcp auth sentry
Служебные команды полезны и в повседневной работе. opencode mcp list показывает серверы и статус авторизации, opencode mcp logout удаляет сохранённые токены, а opencode mcp debug проверяет сетевое подключение и OAuth-обнаружение для конкретного сервера. Токены хранятся локально в файле ~/.local/share/opencode/mcp-auth.json.
Если сервер использует не OAuth, а обычный API-ключ, автоматическую авторизацию стоит отключить, иначе OpenCode будет пытаться пройти OAuth там, где это не нужно:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-api-key-server": {
"type": "remote",
"url": "https://mcp.example.com/mcp",
"oauth": false,
"headers": {
"Authorization": "Bearer {env:MY_API_KEY}"
}
}
}
}
Управление инструментами
Инструменты MCP расходуют контекст: каждый сервер добавляет в запрос описания своих функций. Поэтому серверы, которые нужны редко, лучше держать выключенными. Сделать это можно глобально через блок tools:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp-foo": {
"type": "local",
"command": ["npx", "-y", "my-mcp-command-foo"]
},
"my-mcp-bar": {
"type": "local",
"command": ["npx", "-y", "my-mcp-command-bar"]
}
},
"tools": {
"my-mcp*": false
}
}
Шаблон my-mcp* отключает все инструменты, имя которых начинается с этого префикса. Если серверов много, разумнее выключить их глобально и включать точечно для конкретного агента:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"my-mcp": {
"type": "local",
"command": ["npx", "-y", "my-mcp-command"],
"enabled": true
}
},
"tools": {
"my-mcp*": false
},
"agent": {
"my-agent": {
"tools": {
"my-mcp*": true
}
}
}
}
Особенности DeepSeek
Связка с DeepSeek работает потому, что модели поддерживают вызов функций, а MCP-инструменты для них выглядят как самые обычные функции. Сам DeepSeek при этом не подключает MCP-серверы и не должен: подключением занимается OpenCode.
На что стоит обратить внимание:
- Выбор модели. Для рутины и небольших правок достаточно deepseek-flash. Задачи, где нужно удержать в голове много контекста и аккуратно выбрать инструмент, лучше отдавать deepseek-v4-pro.
- Размер контекста. Тяжёлые серверы вроде GitHub MCP добавляют очень много токенов и вместе с большим проектом легко упираются в лимит. Включайте их только на время конкретной задачи.
- Стоимость. Схемы инструментов отправляются в каждом запросе, поэтому чем больше серверов включено, тем дороже каждая итерация. Платите вы провайдеру напрямую, так что лишние серверы заметны по счёту.
- Подсказки агенту. Надёжнее не полагаться на догадливость модели, а прямо называть сервер в запросе или прописать правило в AGENTS.md.
Пример правила для AGENTS.md, чтобы агент сам обращался к нужному источнику:
Когда нужно посмотреть документацию библиотеки, используй инструменты context7.
Практический рецепт
Для повседневной работы обычно хватает двух серверов: Context7 для документации и одного узкого сервера под конкретную задачу — например, Sentry для разбора ошибок или Grep для поиска примеров кода. Остальные лучше держать выключенными и включать по мере необходимости.
Мой порядок действий такой: добавляю сервер в opencode.json, перезапускаю OpenCode, проверяю список через opencode mcp list, затем задаю пробный вопрос с явным упоминанием сервера. Если инструмент не вызывается, смотрю в сторону opencode mcp debug и таймаута — медленный сервер может не успевать ответить за отведённые 30 секунд.
На что обратить внимание
Пара практических моментов. MCP-серверы — это доверенный код: локальный сервер запускается на вашей машине с вашими правами, а удалённому вы отправляете данные запроса. Поэтому ставить случайные серверы из интернета стоит с той же осторожностью, что и любой сторонний CLI.
Ключи и токены держите в переменных окружения и не коммитьте в репозиторий. OAuth-токены OpenCode хранит локально, но на общей машине это тоже стоит учитывать: opencode mcp logout удаляет их, когда доступ больше не нужен.
И ещё: не включайте всё сразу. MCP добавляет инструменты в контекст, а контекст — это деньги и качество ответа. Два-три действительно нужных сервера работают заметно лучше, чем десять подключённых на всякий случай.
Ссылки
https://opencode.ai/docs/mcp-servers/
https://opencode.ai/docs/config/
https://modelcontextprotocol.io/
https://github.com/upstash/context7
https://mcp.sentry.dev
https://mcp.grep.app
https://github.com/anomalyco/opencode
Источники
https://opencode.ai/docs/mcp-servers/
https://modelcontextprotocol.io/
https://api-docs.deepseek.com/
https://api-docs.deepseek.com/quick_start/agent_integrations/opencode
Добавить комментарий