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= intentIddescription= intent description + conditions + «⚠ необратимо» если__irr.highinputSchema— 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 / visibility | OAuth decorators, middleware | role.visibleFields декларативно |
| Permissions | Custom ACL, RBAC-lib | role.canExecute декларативно |
| Rate limits / spending caps | Redis counters, custom | preapproval.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'ами
Ссылки
- idf-mcp репо — полный README + changelog
- MCP spec — для understanding message flow