Перейти к основному содержимому

MCP-сервер

Превращает любой IDF-домен в Model Context Protocol сервер для Claude Desktop / Cursor / Zed. Тонкий адаптер поверх /api/agent/:domain/* — один файл онтологии → MCP-tools без ручной работы.

Что маппится автоматически

IDF intent.canExecute → MCP tool
intent.parameters → JSON Schema inputSchema
intent.conditions → description hint для LLM
intent.irreversibility:high → annotations.destructiveHint
role.visibleFields → resource per collection
preapproval guard → автоматические scope/limits
checkOwnership → автоматический access control

Никаких manual декораторов или middleware — всё выводится из декларативной онтологии.

1. Поднять IDF server

Из репо idf (референсная реализация со всеми 11 доменами):

cd ~/WebstormProjects/idf
npm run server # Express на :3001 по умолчанию

Или из своего create-idf-app проекта: pnpm mock на :4000.

2. Добавить сервер в Claude Desktop

Файл: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) / %APPDATA%\Claude\claude_desktop_config.json (Windows).

{
"mcpServers": {
"idf-booking": {
"command": "npx",
"args": ["-y", "@intent-driven/mcp-server"],
"env": {
"IDF_SERVER": "http://localhost:3001",
"IDF_DOMAIN": "booking",
"IDF_ONTOLOGY_PATH": "/Users/you/WebstormProjects/idf/src/domains/booking"
}
}
}
}

3. Перезапустить Claude Desktop

В меню Tools появятся инструменты create_booking, cancel_booking, reschedule_booking и т.д. — по одному на каждый intent из ontology.roles.agent.canExecute.

CLI-альтернатива

mcp-idf --domain=booking --server=http://localhost:3001
mcp-idf --domain=freelance --ontology-path=/abs/path/to/src/domains/freelance
mcp-idf --no-bootstrap # не грузить онтологию, если уже загружена на сервер

Что получает агент

Tools. Каждый intent с canExecute: true для role agent экспонируется как MCP tool:

  • name = intentId
  • description = intent description + conditions + «⚠ необратимо» если __irr.high
  • inputSchema — JSON Schema из particles.parameters (entityRef, text, number, datetime, email → соответствующие типы)
  • annotations.destructiveHint: true если irreversibility === "high"

Resources. Каждая коллекция из role.visibleFields[entity] — один resource с URI idf://<domain>/<collection>. resources/read отдаёт viewer-filtered world через /api/agent/:domain/world — single-owner + m2m через role.scope применяются автоматически.

Preapproval enforcement. Если для intent'а задан preapproval, guard проверяется до любых invariants. Превышение maxAmount / dailySum → reject, agent получает описательную ошибку (не просто 403).

Нелинейный выигрыш

MCP-сообщество решает эти задачи руками в каждом сервере:

ЗадачаРукамиIDF
Scope / visibilityOAuth decorators, middlewarerole.visibleFields декларативно
PermissionsCustom ACL, RBAC-librole.canExecute декларативно
Rate limits / spending capsRedis counters, custompreapproval.maxAmount / dailySum декларативно
Destructive hintsПроставляются, часто забываются__irr.point === "high" автоматически
Audit trailОтдельный lib, decoratorsΦ append-only по дизайну

Один файл онтологии → production-grade MCP-интеграция.

Debugging

  • mcp-idf --log-level=debug — verbose STDIO
  • Claude Desktop: ~/Library/Logs/Claude/mcp-server-<name>.log
  • Smoke: curl http://localhost:3001/api/agent/booking/schema?as=agent — должна вернуть JSON с доступными intent'ами

Ссылки