11 KiB
Архитектура
1. Назначение проекта
Crank - платформа для публикации внешних API в виде MCP tools без написания отдельного backend-кода под каждую интеграцию. Пользователь конфигурирует интеграции через UI, а система:
- хранит и версионирует операции;
- группирует их по workspace;
- публикует их в составе конкретных agents;
- выдает LLM не глобальный каталог tools, а curated toolset на один agent;
- собирает продуктовые логи и usage по workspace, agent и operation.
2. Переход As Is -> To Be
2.1. As Is
Текущее ядро системы построено вокруг:
- глобальной сущности
Operation; - registry версий операций;
- runtime adapters
REST / GraphQL / unary gRPC; admin-apiдля CRUD и тестовых вызовов;mcp-server, который публикует tools из published operations.
2.2. To Be
Целевая архитектура расширяет текущее ядро до модели:
Workspace- tenant boundary;Operation- интеграционный контракт;Agent- curated MCP surface;Agent key,Agent tokenиMembership- доступ к самой платформе;Invocation logиUsage rollup- observability слой.
Operation остается фундаментом интеграции, но tools больше не публикуются глобально. MCP публикует tools в контексте конкретного workspace и конкретного agent.
3. Ключевые сущности и их роль
Workspace
Изолирует:
- операции;
- secrets;
- auth profiles;
- agents;
- agent keys;
- short-lived agent tokens;
- logs и usage;
- пользователей и роли.
Operation
Описывает один вызываемый элемент независимо от протокола:
namedisplay_nameprotocoltargetinput_schemainput_mappingexecution_configsecurity_leveloutput_mappingtool_descriptionstatus
Принцип:
- уровень защиты определяется самой операцией;
- агент не может ослабить обязательный режим доступа;
- для более чувствительных данных требуется более строгий вид машинного credential.
Agent
Является пользовательской MCP-поверхностью для LLM.
Agent:
- принадлежит одному workspace;
- имеет
slug,display_name,description,status; - ссылается на ограниченный набор published operations;
- формирует отдельный MCP endpoint;
- решает проблему "одному агенту нельзя отдавать 100 tools сразу".
При этом Agent не определяет чувствительность операции, а только публикует ее в составе MCP-поверхности.
Platform access
Отдельный слой, не связанный с upstream auth:
UserUserSessionMembershipInvitationAgentKeyIssuedAgentToken
Принцип:
- пользовательская аутентификация и машинная аутентификация разделены;
- длинноживущий доступ для вызова MCP tools привязан к конкретному агенту, а не к рабочей области целиком;
- в открытой редакции базовый режим строится на статическом ключе агента;
- в более защищенных редакциях используются короткоживущие и одноразовые токены;
- промежуточная схема с workspace-scoped ключами рассматривается как переходная и подлежит замене.
Upstream secrets
Отдельный слой для доступа к внешним системам:
SecretSecretVersionAuthProfile
Принцип:
- секреты принадлежат workspace;
- plaintext не хранится в открытом виде;
AuthProfileописывает способ применения секрета к upstream request;- runtime резолвит
auth_profile_refв реальный header/query/basic auth только в момент вызова.
Observability
Отдельный продуктовый слой:
InvocationLogInvocationEventUsageRollupLatencyStats
4. Главный принцип проектирования
Система строится в три слоя:
Operationкак низкоуровневый интеграционный контракт.Agentкак curated набор published operations.Workspaceкак граница данных, доступа и observability.
Это позволяет:
- переиспользовать одну operation в нескольких agents;
- ограничивать tool catalog для конкретного LLM-сценария;
- изолировать данные команд;
- строить logs и usage не глобально, а по tenant boundary.
5. Границы целевого продукта
Входит
Workspaceкак tenant boundary.- Операции
REST,GraphQL,gRPC,WebSocket,SOAP. - Controlled streaming operations поверх
Streamable HTTP, REST SSE, gRPC server-streaming и WebSocket upstream. Agentи привязка операций к агенту.- Agent-scoped MCP endpoints.
- Agent-scoped machine credentials.
- Short-lived MCP access tokens.
- Workspace-scoped encrypted secrets для upstream access.
- Workspace-scoped auth profiles для upstream access.
- Product logs и usage aggregates.
- Импорт и экспорт operation-конфигураций в
YAML. - Hot reload опубликованных agents и operations.
Отложено
- GraphQL
subscription. - gRPC client-streaming и bidirectional streaming.
- raw infinite stream passthrough.
- полный стек WS-* расширений.
- Оркестрация workflow.
- Биллинг.
- Full RBAC policy engine.
- Traffic splitting и deployment orchestration.
6. Пользовательские сценарии
Оператор операций
- Выбирает workspace.
- Создает или редактирует operation.
- При необходимости выбирает или создает upstream secret / auth profile.
- Выполняет test run.
- Публикует operation version.
- Привязывает operation к одному или нескольким agents.
Оператор агентов
- Создает agent.
- Выбирает набор published operations.
- Публикует agent.
- Получает MCP endpoint вида
/mcp/v1/{workspace}/{agent}.
Администратор workspace
- Управляет ключами AI-агентов и доверенных клиентов платформы.
- Управляет пользователями и ролями.
- Смотрит logs и usage.
7. Стратегия по протоколам
REST
GETPOSTPUTPATCHDELETE- path parameters
- query parameters
- headers
- JSON request body
- JSON response body
GraphQL
querymutation- endpoint URL
- request headers
- operation template
- variables mapping
- извлечение результата из
data
GraphQL в MCP публикуется как фиксированная операция с предсказуемой структурой ответа.
gRPC
- unary RPC;
- bounded server-streaming через
window,sessionиasync_jobexecution modes; .protoиdescriptor set;- JSON-oriented schema model поверх protobuf;
- без client-streaming и bidi.
WebSocket
- upstream-only adapter;
- bounded
window,sessionиasync_job; - subscribe/unsubscribe messages;
- heartbeat и reconnect policy;
- не используется как downstream MCP transport.
SOAP
- WSDL-driven request-response integration;
- service/port/operation selection;
- SOAP envelope и fault normalization;
- request-response first;
- long-running workflows через
async_job, если upstream это поддерживает.
Streaming
Платформа поддерживает controlled streaming model:
- downstream transport:
Streamable HTTPс optional SSE; - upstream streaming: REST SSE, gRPC server-streaming и WebSocket;
- execution modes:
unary,window,session,async_job; - никакого raw infinite stream passthrough в MCP client.
8. Работа с файлами и автогенерация черновика
Поддерживаемые источники:
- пример входного
JSON; - пример выходного
JSON; .proto;descriptor set.
Ожидаемый сценарий:
- оператор загружает артефакты;
- система строит черновую схему и mapping;
- оператор вручную корректирует результат;
- готовую конфигурацию можно экспортировать в
YAML.
9. Внутренняя модель данных
Базовые сущности:
WorkspaceSecretSecretVersionOperationOperationVersionAgentAgentVersionAgentOperationBindingStreamSessionAsyncJobHandleAuthProfileAgentKeyIssuedAgentTokenUserSessionInvocationLogUsageRollup
10. MCP publishing model
Публикация tools строится так:
Operationпроходит versioning и publish.Agentсобирает curated набор published operations.MCP serverчитает published view конкретного agent.tools/listиtools/callработают в контекстеworkspace + agent.
11. Observability
На каждый вызов tool сохраняются:
workspace_idagent_idoperation_idrequest_idtimestampstatusduration_mserror_kindrequest_previewresponse_preview
Сверху строятся:
- logs page;
- usage page;
- периодические rollups;
- latency and error aggregates.
12. Модель маппинга
Платформе нужен отдельный слой маппинга:
- сопоставление поле-в-поле по
JSONPath; - константы;
- значения по умолчанию;
- извлечение вложенных полей из ответа.