06. MCP (Model Context Protocol)
MCP — открытый протокол для интеграции внешних инструментов в LLM-агентов. AstraCode выступает и клиентом (подключается к внешним MCP-серверам), и сервером (может сам выставляться наружу).
1. Крейты
| Крейт | Назначение |
|---|---|
mcp |
Клиент: менеджер MCP-серверов, регистрация инструментов |
mcp-server |
Сервер: AstraCode как MCP-сервер для других клиентов |
rmcp-client |
Низкоуровневый клиент (transport, framing) |
stdio-to-uds |
Мост stdio↔UDS — для удалённого MCP-сервера через сокет |
2. Транспорты
AstraCode поддерживает два транспорта для подключения к MCP-серверам:
Stdio (локальный процесс)
[mcp_servers.local_tools] command = "python" args = ["-m", "my_mcp_server"] env_vars = ["API_KEY"] # переменные пробрасываются из текущего env cwd = "/path/to/dir" enabled = true required = false startup_timeout_sec = 10
AstraCode запускает процесс, пишет JSON-RPC сообщения в stdin, читает ответы из stdout. stderr идёт в логи.
Streamable HTTP / SSE (удалённый)
[mcp_servers.remote_tools]
url = "https://mcp-server.example.com"
bearer_token_env_var = "MCP_AUTH_TOKEN"
http_headers = { "X-Custom" = "value" }
enabled = true
Используется HTTP с поддержкой Server-Sent Events для стриминга. Поддерживается OAuth2 (см. ниже).
3. Параметры конфигурации
[mcp_servers.my_server]
command = "..."
args = ["..."]
env_vars = ["VAR1", "VAR2"]
cwd = "/path"
url = "https://..."
bearer_token_env_var = "..."
http_headers = { ... }
enabled = true
required = false
# required = true → если сервер не отвечает, AstraCode остановит старт
default_tools_approval_mode = "prompt" # auto | prompt | approve
supports_parallel_tool_calls = true
startup_timeout_sec = 10
# Per-tool overrides:
[mcp_servers.my_server.tools.dangerous_tool]
approval_mode = "prompt"
disabled = false
display_name = "Dangerous Tool"
default_tools_approval_mode:
- auto — AstraCode сам решает по полю tool'а requires_approval.
- prompt — каждый вызов требует подтверждения пользователя.
- approve — без подтверждений (использовать осторожно).
4. OAuth2 для HTTP-MCP
Для серверов, требующих OAuth2:
[mcp_servers.github] url = "https://api.github.com/mcp" # bearer_token_env_var не указан → AstraCode пройдёт OAuth-flow mcp_oauth_credentials_store = "keyring" # keyring | file | auto
OAuth-токены хранятся в keyring (или в зашифрованном файле как запасной вариант). При первом подключении открывается браузерный flow.
5. Встроенный MCP-сервер
astracode mcp-server запускает AstraCode как MCP-сервер, экспонируя его возможности (codebase navigation, file edit, run tests) другим клиентам — например, Claude Desktop или другому AstraCode.
astracode mcp-server # запуск как child process (только stdio)
Транспорт — только stdio. HTTP-режима у встроенного сервера нет: подкоманда
mcp-serverне принимает флагов--transport/--port.
В Claude Desktop конфиг:
{
"mcpServers": {
"astracode": {
"command": "astracode",
"args": ["mcp-server"]
}
}
}
6. Команды CLI для MCP
astracode mcp list # список всех настроенных серверов astracode mcp get my_server # показать конфигурацию одного сервера astracode mcp add my_server -- cmd args... # добавить stdio-сервер (или --url <URL> для streamable HTTP) astracode mcp remove my_server # удалить сервер из конфига astracode mcp login my_server # запустить OAuth-flow astracode mcp logout my_server # стереть сохранённый OAuth-токен
7. В TUI
/mcp # краткий список серверов и количества tools /mcp verbose # подробно: имена tools, описания, статус auth
В status-баре можно показать число активных MCP — настроить через /statusline.
8. Жизненный цикл MCP-сервера
TUI startup ↓ app-server загружает [mcp_servers.*] из config.toml ↓ Для каждого enabled-сервера: - Stdio: spawn процесс, посылает `initialize` RPC - HTTP: handshake, OAuth если нужен ↓ Получает список tools, регистрирует в реестре ↓ Когда модель вызывает tool: - Проверяется approval_mode - Если prompt → диалог пользователю - Если approved → RPC `tools/call` к серверу - Результат возвращается в модель ↓ TUI shutdown: - Stdio: graceful close stdin → ждёт exit - HTTP: закрывает соединение
9. Логирование и отладка
Логи MCP пишутся в ~/.astracode/log/astracode-tui.log с префиксом mcp::. Для детальной отладки:
RUST_LOG=astracode_mcp=debug astracode
В TUI:
/mcp verbose
покажет статусы (connected / disconnected / error) и последние ошибки.
10. Безопасность MCP
Каждый MCP-сервер — это отдельный процесс или удалённый сервис, не доверенный AstraCode'у автоматически:
- Все вызовы инструментов проходят через
approval_mode. - Можно отключить конкретные tools:
tools.<name>.disabled = true. - HTTP-серверы должны иметь TLS; bearer-токены берутся из env (не из config.toml в plaintext).
- Stdio-серверы запускаются с inherited env, но
shell_environment_policyк ним не применяется — будьте внимательны при экспорте секретов.
11. Популярные MCP-серверы (примеры)
- filesystem — расширенная работа с файлами.
- git-mcp — git operations через MCP вместо встроенных tools.
- playwright-mcp — браузер-автоматизация (альтернатива встроенному скиллу).
- postgres-mcp — выполнение SQL-запросов.
- github-mcp — issues, PRs, releases (требует OAuth).
См. официальный реестр MCP-серверов.
12. AstraCode как MCP-сервер для других клиентов
Встроенный MCP-сервер работает только по stdio и запускается клиентом как дочерний процесс (см. раздел 5). HTTP-режима serve у AstraCode нет, поэтому слушать порт и подключаться по http://localhost:... нельзя.
# Клиент (например, Claude Desktop) сам спаунит процесс: astracode mcp-server
Для интеграций IDE используется отдельная подкоманда astracode app-server (тоже stdio-транспорт), а не MCP.