11. MCP-серверы
MCP (Model Context Protocol) — это способ дать AstraCode доступ к внешним системам: Linear, GitHub, Slack, базе данных, custom-сервисам. Каждое подключение — отдельный «MCP-сервер», который добавляет в распоряжение модели свои tools.
Зачем
Без MCP: - Чтобы прочитать тикет из Linear, вы копируете ID, вставляете описание в чат. - Чтобы оставить комментарий — открываете браузер, печатаете. - Чтобы запросить из БД — пишете SQL вручную.
С MCP:
You: посмотри тикет LIN-1234, поправь баг, опиши в комментарии что сделал. AstraCode: (через linear-mcp читает тикет) AstraCode: (видит описание бага, идёт в код, чинит) AstraCode: (через linear-mcp оставляет комментарий)
Всё автоматизировано.
Транспорты
MCP-сервер подключается одним из двух транспортов:
stdio— MCP-сервер запускается как локальный процесс, AstraCode общается с ним по стандартным потокам ввода/вывода.streamable-http— удалённый сервер, доступный по HTTP. Внутри этого транспорта для стриминга ответов используется SSE (Server-Sent Events), но как самостоятельный транспортsseне выделяется.
Как добавить MCP-сервер
Через config.toml, не через UI. Откройте ~/.astracode/config.toml и добавьте секцию [mcp_servers.<name>].
Локальный (stdio)
Самый частый случай — MCP-сервер запускается как процесс:
[mcp_servers.linear] command = "npx" args = ["-y", "@linear/mcp-server"] env_vars = ["LINEAR_API_KEY"] enabled = true default_tools_approval_mode = "prompt"
command+args— что запустить (как в shell).env_vars— какие переменные окружения пробросить (значения берутся из вашей среды).default_tools_approval_mode— режим approval для tools этого сервера.
Удалённый (streamable-http)
Для серверов с публичным API:
[mcp_servers.github_remote] url = "https://mcp-server.github.com" bearer_token_env_var = "GITHUB_TOKEN" enabled = true
После добавления — перезапустите AstraCode (/exit или Ctrl-D, потом astracode). MCP-серверы загружаются при старте.
Проверка
В TUI:
/mcp
Вывод — это read-only chat-cell, где по каждому настроенному серверу показаны поля: Status, Auth, Command (для stdio) или URL (для streamable-http), Tools, Resources.
Статусы аутентификации (поле Auth):
Unsupported— сервер не требует/не поддерживает OAuth.NotLoggedIn— OAuth поддерживается, но вход не выполнен.BearerToken— аутентификация через bearer-токен (env var).OAuth— выполнен OAuth-вход.
Подробнее:
/mcp verbose
Покажет имена всех tools от каждого сервера, OAuth-статус, последние ошибки.
Approval для MCP-tools
Каждый MCP-сервер имеет default_tools_approval_mode:
| Режим | Что значит |
|---|---|
auto |
AstraCode решает сам по requires_approval флагу tool'а |
prompt |
Каждый вызов спрашивает разрешение |
approve |
Без вопросов (использовать осторожно) |
Можно настроить per-tool:
[mcp_servers.github_remote.tools.delete_repo] approval_mode = "prompt" # для опасного — всегда спрашивать
[mcp_servers.github_remote.tools.search_code] approval_mode = "approve" # для безопасного — без вопросов
OAuth flow
Многие удалённые MCP (GitHub, Notion, Slack) требуют OAuth. OAuth-логин выполняется через CLI, не через slash-команду:
astracode mcp login github
Откроется браузер с OAuth-flow. После подтверждения — токен сохранится:
- В OS keyring (режим
keyring) — самое безопасное. - Или в файл
ASTRACODE_HOME/.credentials.json(режимfile) — если keyring недоступен. - Режим
auto(по умолчанию) — keyring, если доступен, иначе файл.
Управление режимом хранения:
mcp_oauth_credentials_store = "auto" # auto | keyring | file
Стереть токен (например, чтобы перелогиниться):
astracode mcp logout github
Что есть из готовых MCP
Список растёт. Популярные:
| Сервер | Что даёт |
|---|---|
@linear/mcp-server |
Linear: тикеты, проекты, комментарии |
@modelcontextprotocol/server-github |
GitHub: issues, PRs, releases |
@modelcontextprotocol/server-filesystem |
Расширенный доступ к FS (вне sandbox) |
@modelcontextprotocol/server-postgres |
PostgreSQL: запросы |
@modelcontextprotocol/server-slack |
Slack: каналы, сообщения |
@modelcontextprotocol/server-google-drive |
Google Drive |
playwright-mcp |
Браузерная автоматизация |
Примеры
База данных
[mcp_servers.db] command = "npx" args = ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"] default_tools_approval_mode = "prompt" # SQL — лучше с approval'ом
В чате:
You: сколько пользователей зарегистрировалось за последний месяц? AstraCode: SELECT COUNT(*) FROM users WHERE created_at > NOW() - INTERVAL '30 days'; [approval] Allow this SQL query? [y/a/p/d/n] You: y AstraCode: 1247 пользователей.
GitHub
[mcp_servers.github] url = "https://api.github.com/mcp" # токен через OAuth — astracode mcp login github
You: посмотри PR #234 в репо acme/backend — что в diff'е? AstraCode: (через MCP читает PR) You: оставь комментарий: "LGTM, но проверь edge case с пустым массивом" AstraCode: (через MCP пишет коммент)
Когда MCP полезен
✓ Регулярная работа с одним сервисом (Linear / Jira / GitHub).
✓ Запросы к БД, которые нужны часто.
✓ Custom-инструменты вашей компании (свой MCP-сервер).
✓ Замена ручных копи-паст из браузера.
Когда MCP избыточен
✗ Разовая задача — проще руками.
✗ Простые скрипты — обычный shell через exec_command.
✗ Чтение/запись файлов — встроенные tools и так умеют.
Безопасность MCP
⚠️ MCP-сервер = отдельный процесс или удалённый сервис. Он: - Получает данные, которые вы передаёте (tickets, code snippets). - Может выполнять действия от вашего имени (создать комментарий, удалить тикет).
Защита: - approval_mode = "prompt" для опасных операций (delete, force, send). - Не подключайте MCP из недоверенных источников — это полный доступ к выполнению tools. - OAuth токены — в keyring (не в файлах). - bearer_token_env_var, а не plaintext в config.
Список tools от сервера
Каждый MCP объявляет свои функции. Например, linear может дать:
linear_list_issueslinear_get_issuelinear_create_issuelinear_update_issuelinear_add_commentlinear_list_projects
В /mcp verbose они все перечислены с описаниями. Модель сама выбирает, какую вызвать.
Per-server enabled = false
Если хотите временно выключить сервер:
[mcp_servers.slack] enabled = false
Tools от него не появятся в списке доступных модели. Удобно: не нужно стирать конфигурацию.
Per-server required = true
[mcp_servers.linear] required = true
Если этот сервер не отвечает при старте — AstraCode не запустится. Используйте, только если действительно критично.
Свой MCP-сервер
Если у вашей компании есть внутренний API, и вы хотите дать к нему доступ AstraCode — напишите свой MCP-сервер.
Это библиотека Python / TypeScript, реализующая MCP-протокол (stdio или streamable-http). См. официальную документацию MCP.
Шаги:
1. Написать сервер (обычно ~200 строк кода).
2. Указать его в ~/.astracode/config.toml.
3. Перезапустить AstraCode.
Командная строка
Управление через CLI (вне TUI), подкоманды astracode mcp:
astracode mcp list # все сервера (есть --json) astracode mcp get linear # показать один сервер (есть --json) astracode mcp add <name> ... # добавить сервер в config.toml astracode mcp remove linear # удалить запись о сервере astracode mcp login github # OAuth-вход для сервера astracode mcp logout github # удалить OAuth-токен для сервера
Best practices
✓ Начинайте с одного — Linear или GitHub, поработайте, привыкните.
✓ prompt режим для опасного — delete, force, push.
✓ approve для безопасного — search, list, read.
✓ OAuth через keyring — не файл.
✗ Не подключайте всё подряд — каждый MCP-сервер добавляет tools, тратит токены на discovery.
✗ Не доверяйте сторонним MCP без проверки — они могут запросить что угодно.