Skip to content

feat: --agent-role / --agent-scope для domain-custom ролей#13

Merged
DubovskiyIM merged 1 commit into
mainfrom
feat/agent-opts
May 8, 2026
Merged

feat: --agent-role / --agent-scope для domain-custom ролей#13
DubovskiyIM merged 1 commit into
mainfrom
feat/agent-opts

Conversation

@DubovskiyIM
Copy link
Copy Markdown
Member

Зачем

Live e2e verification обнаружила: MCP server не работал с infra-доменом. До этого PR mcp-server подключался к host runtime'у с anonymous register — host fallback'ился на DEFAULT_ROLE='agent'. Это работало для booking/invest/freelance (где такая роль есть в ontology), но падало с 400 role_unknown для доменов с custom-ролями (e.g. infra с staging-agent/infra-operator), а scope-фильтрация (Gate 4 Fold-демо) была недоступна вовсе.

Без этого фикса pitch Fold'а «attack on what you don't see is impossible» через MCP не работал в принципе. Юнит-тесты mcp-server-а пропустили это — они не запускали реальный stdio flow с infra-доменом.

API

mcp-idf --domain=infra \
        --agent-role=staging-agent \
        --agent-scope='{"environment":"staging"}'

IDF_AGENT_ROLE=infra-operator mcp-idf --domain=infra

Live verification

staging-agent + scope={environment:'staging'}:
  → tools/list: 4 (deleteResource, restartResource, scaleResource, viewResource)
  → resources: 3 rows, environments=['staging']
  → production ОТСУТСТВУЕТ

infra-operator (без scope):
  → tools/list: 6 (включая auto-injected approve_request/reject_request)
  → resources: 6 rows, environments=['staging','production']

End-to-end через JSON-RPC stdio harness. Akt 2 Fold-демо («staging-agent через Claude Desktop / Cursor / Zed не видит production») теперь реально работает.

Backward-compat

Существующие домены (booking/invest/freelance/...) продолжают работать без opts — host fallback'ится на DEFAULT_ROLE='agent' если эта роль объявлена в ontology. Login для existing user'а не пробрасывает opts — metadata уже в БД.

Связанные

  • idf#290 — host server-side фиксы (auth opts forwarding, generic builder, alias-collision)
  • idf#288 — unified executor + UI inbox
  • idf#283 — per-request role + viewer.scope (Gate 4 base)

До этого PR mcp-server подключался к host runtime'у с anonymous register —
host fallback'ился на DEFAULT_ROLE='agent'. Это работало для booking/
invest/freelance (где такая роль есть в ontology), но падало с 400
role_unknown для доменов с custom-ролями (e.g. infra с staging-agent/
infra-operator), а scope-фильтрация (Gate 4 Fold-демо) была недоступна
вовсе.

Изменения

  bin/mcp-idf.js
    --agent-role=<name>          IDF_AGENT_ROLE
    --agent-scope=<json>          IDF_AGENT_SCOPE='{"environment":"staging"}'

  src/auth.js — agentLogin принимает opts:{role,scope}, пробрасывает в
    POST /api/auth/register body.opts. Login (existing user) — без opts,
    metadata подгружается из БД.

  src/server.js — createIdfMcpServer принимает agentRole/agentScope,
    собирает opts и пробрасывает в agentLogin.

Live e2e verification (manual stdio harness против host runtime'а)

  staging-agent с scope={environment:'staging'}:
    → tools/list: 4 (deleteResource, restartResource, scaleResource, viewResource)
    → resources/read[resources]: 3 rows, environments=['staging']
    → production resources ОТСУТСТВУЮТ

  infra-operator (без scope):
    → tools/list: 6 (включая auto-injected approve_request/reject_request)
    → resources/read[resources]: 6 rows, environments=['staging','production']

Это закрывает Gate 4 Fold-демо через MCP (не только REST). Akt 2 видео
(«staging-agent через Claude Desktop не видит production») теперь
реально работает end-to-end через stdio-протокол.

Examples

  mcp-idf --domain=infra \
    --agent-role=staging-agent \
    --agent-scope='{"environment":"staging"}'

  IDF_AGENT_ROLE=infra-operator mcp-idf --domain=infra

  # Booking/invest продолжают работать без opts (fallback 'agent' роль
  # есть в этих ontology'ях):
  mcp-idf --domain=booking
@DubovskiyIM DubovskiyIM merged commit 17a5e90 into main May 8, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants