
Security News
Ruby's Bundler 4.0.18 Extends Cooldown to bundle lock and bundle cache
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.
@intent-driven/mcp-server
Advanced tools
Turn any IDF domain into an MCP server (Claude Desktop / Cursor / Zed). Tool descriptions carry domain semantics — invariants, lifecycle, irreversibility, role scopes — so the agent knows what it can do and why before the call, not after.
Превращает любой IDF-домен в MCP-сервер
для Claude Desktop / Cursor / Zed. Тонкий адаптер поверх
/api/agent/:domain/{schema, world, exec} — один файл онтологии → MCP-tools
без дополнительной работы.
IDF intent.canExecute ─→ MCP tool
intent.parameters ─→ JSON Schema inputSchema
intent.conditions ─→ description hint для LLM
ontology.invariants (релевантные)─→ description блок "May fail on"
intent.irreversibility:high ─→ annotations.destructiveHint + warning
role.visibleFields ─→ resource per collection
preapproval guard ─→ автоматические scope/limits
checkOwnership ─→ автоматический access control
Поднимите IDF server (из репо idf):
npm run server # :3001 по умолчанию
Добавьте сервер в Claude Desktop
(~/Library/Application Support/Claude/claude_desktop_config.json):
{
"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"
}
}
}
}
Перезапустите Claude Desktop — в Tools-меню появятся инструменты
create_booking, cancel_booking, reschedule_booking, …
mcp-idf --domain=booking --server=http://localhost:3001
mcp-idf --domain=freelance --ontology-path=/abs/path/to/src/domains/freelance
mcp-idf --no-bootstrap # не загружать онтологию (предполагается, уже загружена)
Флаги / env переменные:
| Флаг | Env | По умолчанию |
|---|---|---|
--domain | IDF_DOMAIN | booking |
--server | IDF_SERVER | http://localhost:3001 |
--ontology-path | IDF_ONTOLOGY_PATH | ./src/domains/<domain> |
--agent-email | IDF_AGENT_EMAIL | mcp-agent@local |
--no-bootstrap | IDF_BOOTSTRAP=0 | bootstrap включён |
Один tool на каждый intent из ontology.roles.agent.canExecute.
name — intentIdtitle — intent.namedescription — intent.description + Создаёт: … + предусловия +
предупреждение о необратимости (если irreversibility: "high")inputSchema — JSON Schema из particles.parameters:
entityRef / id / text / textarea / select → stringnumber → numberboolean → booleandatetime → string + format: "date-time"email → string + format: "email"annotations.destructiveHint — true если
intent.irreversibility === "high" (§23 IDF: effect-level точка невозврата)Один resource на каждую коллекцию из role.visibleFields[entity].
URI-схема: idf://<domain>/<collection>.
resources/read возвращает filtered world из /api/agent/:domain/world —
уже отфильтрованный под viewer (single-owner + m2m через role.scope).
MCP-сообщество решает эти задачи руками в каждом сервере:
Scope / visibility. Руками решается через декораторы или middleware.
IDF: role.visibleFields — декларативно.
Permissions. Руками: OAuth scopes, custom ACL.
IDF: ontology.roles.agent.canExecute — декларативно.
Rate limits / spending caps. Руками.
IDF: preapproval.requiredFor с maxAmount / dailySum — декларативно.
Destructive hints. Руками проставляются, часто забываются.
IDF: effect.context.__irr.point === "high" → destructiveHint: true
автоматически.
Business rules как hint для LLM. Обычно не передаются.
IDF: intent.conditions попадают в tool description:
"booking.status = \"confirmed\"; booking.clientId = viewer.id".
Domain invariants (referential / transition / cardinality / aggregate /
expression) передаются ДО вызова, не только в rejection. IDF: для
каждого intent вычисляются релевантные инварианты — те, на которые
intent МОЖЕТ упасть исходя из своих effects (alpha × entity match) — и
попадают в tool description блоком May fail on (domain invariants).
Пример (submit_response в freelance):
Executor публикует Response на Task в status=published; ...
Creates: Response(pending)
Preconditions: task.status = "published"
May fail on (domain invariants):
- Response.taskId must reference existing Task.id
- Response: max 1 per taskId where (status="selected")
- Response: row count rule per taskId where (status="pending") [info]
Это решает №1 жалобу на рукописные MCP-серверы:
«сервер не передаёт доменную семантику — LLM знает что вызвать, но
не знает почему вызов упадёт». С IDF агент получает структурированный
список правил-кандидатов до вызова, а при rejection — точное
failedCondition AST в ответе.
Протокол надёжный, но требует от IDF-домена нескольких вещей. Если
что-то из перечисленного не сделано, tools/list может вернуть пустой
массив, tools/call — domain_not_supported, resources — пустые коллекции:
ontology.roles.agent должна быть объявлена. Без неё агент
не видит ни tools, ни resources.role.agent.canExecute — безопасные intents (избегайте
__irr:high без preapproval).role.agent.visibleFields — массив полей или "own" / "all"
/ "aggregated" маркеры.server/schema/effectBuildersRegistry.cjs
в idf-prototype) должен включать ваш домен. Без него tools/call
отдаёт domain_not_supported.ownerField, SDK filterWorldForRole отфильтрует все row'ы,
где row[ownerField] !== viewer.id. Для публичных каталогов
(например, Task со status: "published") нужна либо замена
на role.scope с via-коллекцией, либо отдельная агент-roleable
проекция (roadmap IDF).tools и resources. prompts / completion — roadmap.POST /exec sync). Long-running через MCP tasks API — 0.3.MIT
FAQs
Turn any IDF domain into an MCP server (Claude Desktop / Cursor / Zed). Tool descriptions carry domain semantics — invariants, lifecycle, irreversibility, role scopes — so the agent knows what it can do and why before the call, not after.
The npm package @intent-driven/mcp-server receives a total of 28 weekly downloads. As such, @intent-driven/mcp-server popularity was classified as not popular.
We found that @intent-driven/mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.