8.7 KiB
MCP Interface
1. Назначение документа
Этот документ фиксирует, как именно платформа публикует agents и operations в виде MCP tools и какой transport используется в целевой модели.
2. Архитектурное решение
mcp-server публикует tools через network-oriented MCP transport.
Решение:
- основной transport:
Streamable HTTP; POSTможет завершатьсяapplication/jsonилиtext/event-stream;GETSSE stream поддерживается как server-to-client канал;- отдельный
mcp-serverкак сервис; stdioне является обязательной частью текущего scope.
3. Модель публикации tools
Каждая published operation превращается в один MCP tool внутри конкретного published agent.
Соответствие:
- один published agent;
- набор
AgentOperationBinding; - один tool name на binding;
- одна input schema;
- один результат.
Публикация tool основана на:
agent.slugoperation.nameили binding-leveltool_nametool_descriptioninput_schemapublished runtime view
4. Что делает mcp-server
mcp-server должен:
- загрузить published agents и их bindings из registry;
- преобразовать их в MCP tool definitions;
- вести
Mcp-Session-IdиMCP-Protocol-Version; - принимать вызовы tools от MCP clients;
- валидировать вход;
- делегировать исполнение в runtime;
- возвращать нормализованный output.
5. Что не делает mcp-server
mcp-server не должен:
- читать draft-конфигурации;
- управлять versioning;
- импортировать YAML;
- выполнять CRUD;
- заниматься protobuf discovery;
- содержать бизнес-логику admin UI.
6. Runtime view
В runtime view остаются:
workspace_idagent_idoperation_idprotocoltargetinput_schemaoutput_schemainput_mappingoutput_mappingexecution_configtool_description
В runtime view не попадают:
- raw uploaded samples;
- generated draft metadata;
- YAML import metadata;
- UI-specific helper fields.
7. MCP endpoint model
Канонический endpoint:
/mcp/v1/{workspace_slug}/{agent_slug}
Этот endpoint определяет:
- tenant boundary;
- конкретный curated toolset;
- набор usage и log labels.
7.1. MCP authentication
Целевая модель машинной аутентификации для mcp-server строится вокруг AI-агента, а не вокруг рабочей области целиком. При этом допустимый способ вызова определяется не только агентом, но и уровнем защиты самой операции.
Контракт:
- каждому published agent соответствует собственный длинноживущий
agent key; agent keyпринадлежит одновременноworkspaceиagent;- в редакции
Communityвызовы допускаются по статическомуagent key; - в управляемой платформе для операций уровня
elevatedдолжен использоваться короткоживущий токен; - в редакции
Enterpriseдля операций уровняstrictдолжен использоваться одноразовый токен; - операция задает обязательный
security_level, иmcp-serverобязан отклонять вызов, если представленный credential слабее требуемого уровня; - детальная модель уровней зафиксирована в
docs/agent-auth-model.md.
Уровни защиты операции:
standardelevatedstrict
Правило применения:
standardдопускает статический ключ агента, короткоживущий токен и одноразовый токен;elevatedдопускает короткоживущий токен и одноразовый токен;strictдопускает только одноразовый токен.
8. MCP lifecycle
Поддерживаемые JSON-RPC методы:
initializenotifications/initializedpingtools/listtools/call
Дополнительно на transport уровне:
POST /mcp/v1/{workspace_slug}/{agent_slug}как основной MCP endpoint;GET /mcp/v1/{workspace_slug}/{agent_slug}для SSE stream;DELETE /mcp/v1/{workspace_slug}/{agent_slug}для explicit session termination, если сервер разрешает client-side session close.
Tool listing
- клиент вызывает
tools/list; mcp-serverизвлекаетworkspace_slugиagent_slugиз path;- перечитывает published agent по refresh policy;
- строит или обновляет in-memory catalog tools только для этого agent;
- отдает список tools через MCP JSON-RPC result.
Tool call
- клиент вызывает tool;
mcp-serverопределяетworkspaceиagent;- находит binding нужной operation внутри published agent;
- валидирует input относительно schema;
- делегирует вызов в
crank-runtime; - возвращает результат.
Tool call и streaming
Поддерживаются четыре execution modes:
unarywindowsessionasync_job
Правила публикации:
unaryиwindowпубликуются как один tool;sessionпубликуется какstart/poll/stopfamily;async_jobпубликуется какstart/status/result/cancelfamily.
Transport-level SSE не отменяет bounded tool semantics. Даже если POST отвечает через text/event-stream, итогом вызова должен оставаться управляемый JSON-RPC lifecycle.
8.1. Multiple SSE connections
Crank должен корректно работать, если MCP client держит несколько SSE streams одновременно.
Правила:
- одно server message отправляется только в один stream;
- disconnect не считается cancel;
- cancel выражается отдельным MCP notification или session/job control tool;
- resumability допустима как будущая возможность, но не обязательна в MVP.
9. Обновление tools
После публикации новой operation version или agent version:
admin-apiфиксирует published version в registry;registryобновляет published operations или published agents;mcp-serverне требует restart;- выполняется controlled refresh опубликованного каталога;
- новый tool contract становится доступен MCP clients.
10. Именование tools
Рекомендуется использовать стабильные tool names:
crm_create_leaduser_get_profileinventory_list_items
Требования:
- имя уникально в пределах одного agent;
- имя не зависит от numeric version;
- один и тот же operation может публиковаться под разными именами в разных agents.
11. Ошибки MCP слоя
На MCP слое нужно различать:
- schema validation error;
- mapping error;
- adapter execution error;
- external service error;
- internal runtime error.
12. Практический итог
mcp-server- отдельный сервис;- transport -
Streamable HTTP; POSTиGETtransport semantics соответствуют MCP spec2025-06-18;- endpoint определяется парой
workspace + agent; - одна published operation = один MCP tool внутри agent;
- streaming operations публикуются как bounded tools или tool families;
- reload published tools без пересборки сервиса;
- никакой draft-логики или admin CRUD в MCP слое.