Интеграция Agent Client Protocol (ACP)¶
CodeGraph поддерживает Agent Client Protocol (ACP) для бесшовной интеграции с IDE: Zed, JetBrains, VS Code и другими ACP-совместимыми редакторами.
Обзор¶
ACP - стандартизированный протокол взаимодействия между редакторами кода и AI-агентами. CodeGraph реализует ACP для предоставления интеллектуального анализа кода прямо в вашей IDE.
Транспорты¶
CodeGraph поддерживает три механизма транспорта:
| Транспорт | Сценарий использования | Endpoint |
|---|---|---|
| stdio | Локальный subprocess (запускается IDE) | команда codegraph-acp |
| HTTP | Удалённый REST API | POST /api/v1/acp/rpc |
| WebSocket | Потоковая передача в реальном времени | WS /api/v1/acp/ws |
Поддерживаемые методы¶
Базовые методы (обязательные)¶
| Метод | Описание |
|---|---|
initialize |
Согласование capabilities |
authenticate |
JWT аутентификация |
session/new |
Создание новой сессии |
session/prompt |
Отправка сообщения |
session/cancel |
Отмена операции |
Опциональные методы¶
| Метод | Описание |
|---|---|
session/load |
Возобновление существующей сессии |
fs/read_text_file |
Чтение файла |
fs/write_text_file |
Запись файла |
terminal/create |
Создание терминала |
terminal/output |
Получение вывода терминала |
terminal/wait_for_exit |
Ожидание завершения команды |
terminal/kill |
Завершение команды |
terminal/release |
Освобождение ресурсов |
Возможности агента¶
CodeGraph объявляет следующие возможности:
{
"loadSession": true,
"setMode": false,
"promptCapabilities": {
"image": false,
"audio": false,
"embeddedContext": true
},
"mcp": {
"stdio": true,
"http": true,
"sse": false
},
"authMethods": ["bearer"]
}
Жизненный цикл сессии¶
1. Инициализация
Client -> initialize -> Agent
Agent -> capabilities -> Client
2. Создание сессии
Client -> session/new {cwd} -> Agent
Agent -> {sessionId} -> Client
3. Отправка запроса
Client -> session/prompt {sessionId, prompt} -> Agent
Agent -> session/update (plan) -> Client
Agent -> session/update (tool_call) -> Client
Agent -> session/update (agent_message_chunk) -> Client
Agent -> {stopReason} -> Client
4. Закрытие
Client -> session/cancel -> Agent
API Endpoints¶
HTTP транспорт¶
POST /api/v1/acp/rpc
Единый JSON-RPC endpoint для всех вызовов.
Запрос:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": 1,
"clientCapabilities": {},
"clientInfo": {"name": "my-ide", "version": "1.0"}
}
}
Ответ:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": 1,
"agentCapabilities": {...},
"agentInfo": {
"name": "codegraph",
"version": "0.1.0",
"title": "CodeGraph Code Analysis Agent"
}
}
}
WebSocket транспорт¶
WS /api/v1/acp/ws?token=
Конечная точка потоковой передачи с обновлениями в реальном времени.
Проверка работоспособности¶
GET /api/v1/acp/health
Возвращает статус агента и доступные возможности.
GET /api/v1/acp/info
Возвращает метаданные агента.
Session Updates¶
Во время обработки запроса CodeGraph отправляет session/update notifications:
План выполнения¶
{
"sessionUpdate": "plan",
"plan": {
"entries": [
{"id": "1", "title": "Классификация интента", "status": "completed"},
{"id": "2", "title": "Запрос к графу кода", "status": "in_progress"},
{"id": "3", "title": "Генерация ответа", "status": "pending"}
]
}
}
Вызов инструмента¶
{
"sessionUpdate": "tool_call",
"toolCallId": "tc_abc123",
"title": "Анализ безопасности",
"kind": "search",
"status": "in_progress"
}
Фрагмент ответа¶
{
"sessionUpdate": "agent_message_chunk",
"chunk": "На основе анализа..."
}
Маппинг сценариев¶
CodeGraph отображает свои сценарии на следующие типы инструментов ACP:
| Сценарий | Тип инструмента |
|---|---|
| Анализ безопасности | search |
| Проверка кода | read |
| Анализ производительности | search |
| Рефакторинг | edit |
| Документация | read |
| Анализ архитектуры | think |
Аутентификация¶
Для HTTP/WebSocket аутентификация необязательна, но рекомендуется:
Authorization: Bearer <jwt_token>
Аутентифицированные сессии имеют: - Персистентную историю диалогов - Пользовательские настройки - Квоты rate limit
Коды ошибок¶
| Код | Значение |
|---|---|
| -32700 | Ошибка парсинга |
| -32600 | Неверный запрос |
| -32601 | Метод не найден |
| -32602 | Неверные параметры |
| -32603 | Внутренняя ошибка |
| -32002 | Агент не инициализирован |
Примеры¶
Инициализация и создание сессии¶
# Инициализация
curl -X POST http://localhost:8000/api/v1/acp/rpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": 1,
"clientCapabilities": {},
"clientInfo": {"name": "curl-client"}
}
}'
# Создание сессии
curl -X POST http://localhost:8000/api/v1/acp/rpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "session/new",
"params": {"cwd": "/path/to/project"}
}'
Отправка запроса¶
curl -X POST http://localhost:8000/api/v1/acp/rpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "session/prompt",
"params": {
"sessionId": "acp_xxx",
"prompt": [
{"type": "text", "text": "Какие основные точки входа?"}
]
}
}'
Поддержка MCP серверов¶
CodeGraph может подключаться к внешним MCP серверам:
{
"method": "session/new",
"params": {
"cwd": "/project",
"mcpServers": [
{
"id": "github",
"name": "GitHub MCP",
"transport": "stdio",
"command": "github-mcp-server"
}
]
}
}
MCP-сервер CodeGraph¶
CodeGraph также предоставляет собственный MCP-сервер, позволяющий ИИ-ассистентам (Claude Code, Open Code, Codex, Cursor, Windsurf и др.) напрямую запрашивать граф свойств кода (CPG).
Запуск сервера¶
# Запуск MCP-сервера через stdio транспорт
python -m src.mcp
# С указанием конкретной базы данных
python -m src.mcp --db data/projects/postgres.duckdb
# Подробное логирование
python -m src.mcp --verbose
Доступные инструменты¶
| Инструмент | Описание |
|---|---|
codegraph_query |
Выполнение SQL-запросов к базе данных CPG (только SELECT) |
codegraph_find_callers |
Поиск функций, вызывающих указанный метод |
codegraph_find_callees |
Поиск функций, вызываемых указанным методом |
codegraph_impact |
Анализ радиуса влияния метода |
codegraph_taint_analysis |
Анализ распространения taint-меток |
codegraph_search |
Поиск методов по шаблону имени |
codegraph_explain |
Комплексный анализ метода (метрики, граф вызовов, безопасность) |
codegraph_hotspots |
Поиск горячих точек кода по метрике (сложность, вызывающие, pagerank) |
Конфигурация¶
Настройки MCP-сервера в config.yaml:
mcp:
enabled: true
transport: stdio
max_query_rows: 1000
dynamic_tools_path: .codegraph/tools.yaml
Динамические инструменты¶
Пользовательские SQL-инструменты определяются в .codegraph/tools.yaml:
tools:
- name: find_large_methods
description: "Поиск методов с высокой цикломатической сложностью"
sql: "SELECT name, Filename, CyclomaticComplexity FROM nodes_method WHERE CyclomaticComplexity > ? ORDER BY CyclomaticComplexity DESC LIMIT ?"
parameters:
- name: threshold
type: integer
description: "Минимальный порог сложности"
default: 10
- name: limit
type: integer
description: "Максимум результатов"
default: 20
В динамических инструментах допускаются только SELECT-запросы. DDL/DML-выражения отклоняются при загрузке.
Интеграция с Claude Code¶
Добавьте в конфигурацию MCP Claude Code (.claude/mcp.json):
{
"mcpServers": {
"codegraph": {
"command": "python",
"args": ["-m", "src.mcp", "--db", "data/projects/postgres.duckdb"],
"cwd": "/path/to/codegraph"
}
}
}