AgentPlaybooks
AgentPlaybooks is an MCP server for managing portable AI-agent playbooks end to end.
List, create, get, update, and delete playbooks; manage singleton persona and always-on project instructions.
Manage skills: list, get, create, update, delete, inspect version history, and roll back.
Work with memory: read, write, search, history, context views, trees, task graphs, status updates, consolidation, promotion, and archiving.
Manage workflow runs and canvas markdown documents: list/read/write, patch sections, get TOCs, and lock/unlock sections for parallel edits.
Connect and manage MCP/OpenAPI servers, call federated tools, and discover available tools by keyword.
Manage encrypted secrets and use them server-side for safe GET/HEAD requests or mutating HTTP requests without exposing secret values.
Operations are permission-gated; secret values are never returned to the agent.
Syncs playbooks to GitHub Copilot by generating the necessary platform configuration files, enabling management of instructions, skills, and MCP servers for GitHub Copilot.
Integrates with Google's agent platforms by syncing playbooks to Google Antigravity (.agents/skills) and Gemini CLI, providing instructions, skills, and MCP server configurations.
AgentPlaybooks
One playbook, every agent. A portable operating environment for AI agents — persona, skills, MCP servers, project instructions, and memory in one source of truth.
Keep your agents yours. AgentPlaybooks stores skills, personas, MCP servers, project instructions, and memory in one portable playbook, so you can switch platforms, use several at once, or self-host without vendor lock-in.
Your agent setup stays in sync across Claude, ChatGPT, Cursor, Codex, Gemini, local models, and future platforms. The playbook is the portable source of truth—not any single vendor or editor.
It is not another skill store or MCP registry. Skills and MCP connections are parts of a playbook; the playbook is the whole job. That holds for agents with a body too: a skill can carry demonstrations, recordings of the task in the order a robot performs them.
Highlights
What a playbook holds
Persona: 1 per playbook, stored directly on the playbook record
Instructions: always-on project rules — the
AGENTS.md/CLAUDE.mdcontentSkills:
SKILL.mddocuments in the Agent Skills format, frontmatter preserved across every clientSkill attachments: bundled scripts, references, and templates, round-tripped by the CLI
Demonstrations: recordings of a skill being performed — YouTube, a pinned URL, or a LeRobot dataset — with timestamped segments, for agents that learn by watching
MCP servers: tools and resources in Model Context Protocol format
Memory: key-value store with tags and descriptions, with a native Hermes memory provider
Hermes Tools plugin: connect playbook skills, MCP/OpenAPI tools, and credentials
Canvas: versioned markdown work documents, scoped to a playbook run, so several teams can execute the same playbook without sharing work products
Credentials, without handing them over
Secrets vault: AES-256-GCM, per-user derived keys. Agents reference a secret by name and the platform injects it server-side (
use_secret), so the value never enters an agent's context. Optional per-secret host allow-lists, and an expiry that is enforced: an expired secret is refused by every path that would use it.Federation: other MCP servers and OpenAPI services become tools on your playbook, with their credentials resolved from that same vault by name
Audit trail: every federated call and every vault operation, refusals included
Getting it into your tools
Claude: one plugin brings every playbook in your account into claude.ai, Claude Desktop, Cowork, Claude Code, and mobile, signing in with OAuth — no API key. Or add a single playbook as a custom connector. See AgentPlaybooks in Claude.
Cursor and VS Code: one-click install links for the account or a single playbook — on each playbook's Integrations tab, and in MCP Integration.
CLI + portable Agent Plugin: audit your local agent config, then sync one playbook to Claude Code, Cursor, ChatGPT/Codex, Google Antigravity, Grok Bot and Hermes
Agent Plugins 1.0: install the project plugin or export a single playbook as
plugin.json,mcp.json, and complete Agent Skills directories. Compatible MCP hosts can also discover hosted playbook skills through the MCP Skills extension.Private, versioned central backups are separate from installable plugin exports; packages contain no vault secret values.
Publishing: a public playbook's skills are served as plain markdown over HTTP at
/.well-known/skills/— installable from a URL, no registry, no sign-upExport formats: Agent Plugin ZIP, JSON, OpenAPI, MCP, Anthropic, Markdown
Working with other people
API keys: role-based access control (Viewer, Coworker, Admin)
Team collaboration: one-time editor invites without sharing human credentials or agent API keys
Explore: practical use cases, setup guidance, and curated AgentPlaybooks starters
Sharing: public or unlisted playbooks; keep project context in private copies
Theme: system-aware Light and Dark modes
Related MCP server: mcp-canon
Tech Stack
Category | Technology | Purpose |
Framework | App Router, SSR | |
Styling | Utility-first CSS | |
Animation | UI animations | |
Icons | Icon library | |
API | Edge API routing | |
Database | Postgres + Auth + RLS | |
i18n | Localization (en, hu, de, es) | |
Docs | Plain markdown in | Fetched and rendered client-side |
Hosting | Edge deployment | |
Adapter | Next.js on Workers |
Live Demo
Website: https://agentplaybooks.ai — the canonical host; https://apbks.com is a short domain for links
Release distribution checklist: npm, MCP registry, plugin stores, skill discovery, Hermes memory, and verification
Getting Started
Prerequisites
Node.js 22+ (
enginesinpackage.json; CI runs 22)npm 11+ — npm 10 writes a lockfile
npm cithen rejectsSupabase project
Cloudflare account (optional for deployment)
Installation
git clone https://github.com/matebenyovszky/agentplaybooks.git
cd agentplaybooks
npm installStarters
Portable playbooks under examples/ — persona, instructions,
skills, MCP, memory, and vault in a tree you control. Small MIT examples you
can clone or cp -R. Not a marketplace.
Starter | One-liner |
Coding-agent playbook: instructions, two skills, safe MCP stub | |
Review playbook with host-folder drift; the portable store stays canonical | |
Smallest playbook: three skills + instructions; no MCP | |
Playbook with persona, instructions, and skills for Cursor and Hermes hosts |
Install into a host (optional doctor check, then sync):
npx @agentplaybooks/cli@latest doctor examples/coding-agent-baseline
npx @agentplaybooks/cli@latest sync examples/coding-agent-baseline --target=claude,cursor --applySee examples/README.md, the CLI docs, and the Agent Plugins spec.
Environment Variables
Create a .env.local file with:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# Required for the secrets vault. 32 bytes as 64 hex characters:
# node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# Losing it means losing every stored secret — no vault operation can decrypt
# without it, and rotating it invalidates everything already encrypted.
SECRETS_ENCRYPTION_KEY=Optional:
Variable | Effect |
| The canonical origin used for canonical tags, the sitemap and robots. Defaults to |
| Comma-separated CORS allow-list. Replaces the hosted defaults entirely — set it on a self-hosted instance so the project's own domains are not trusted there. |
|
|
Development
npm run devCloudflare Deployment
npm run build:worker
npm run preview
npx wrangler deployCLI, ChatGPT/Codex Plugin, and Claude Code Plugin (packages/cli)
agentplaybooks doctor <project> audits local agent configuration
(instructions, Agent Skills, custom agents, MCP servers, likely hard-coded secrets, drift)
and agentplaybooks sync <project> creates the canonical
agentplaybook.json plus the platform files missing from enabled targets:
Claude Code, Cursor, ChatGPT/Codex, GitHub Copilot, Gemini CLI, Google
Antigravity (.agents/skills), Grok Bot (.agents/skills, which it
discovers natively alongside AGENTS.md), and Hermes Agent (.agents/skills
registered in ~/.hermes/config.yaml, plus that file's mcp_servers: and
SOUL.md).
agentplaybooks plugin export|import round-trips Agent Plugins 1.0 packages;
the only manifest extension carries secret references and bindings, never
secret values.
login / playbooks / pull / push synchronize skills, MCP servers, and the
manifest with a hosted playbook using a user API key. push also creates a
private, versioned cross-platform AI agent configuration backup, including
complete Agent Skills folders and portable custom agents. backups lists
revisions; pull --snapshot can recover an earlier one. Secret values never
move, only references declared in spec.secrets. Mutating commands show a
plan first and require --apply, --yes, or interactive confirmation where
supported. See packages/cli/README.md and the
backup and migration guide.
The same package is a ChatGPT/Codex and Cursor plugin (skill + account MCP). Exact API-key setup and installation commands are in packages/cli/README.md.
The Claude plugin is a separate, lean folder, plugins/agentplaybooks: the
account MCP connector (OAuth, no key), a playbooks skill that works in chat and
Cowork, and doctor / sync commands that run the published CLI through a
pinned npx. It has no bin/ directory, because claude.ai and Cowork refuse a
plugin that has one. Add it on claude.ai under Customize → Plugins → Add
marketplace with matebenyovszky/agentplaybooks, or in Claude Code:
/plugin marketplace add matebenyovszky/agentplaybooks
/plugin install agentplaybooks@agentplaybooksAPI Overview
Public and Unlisted playbook access
Public playbooks are visible to everyone. Unlisted playbooks are accessible via GUID but hidden from search.
GET /api/playbooks/:guid
GET /api/playbooks/:guid?format=openapi
GET /api/playbooks/:guid?format=mcp
GET /api/playbooks/:guid?format=anthropic
GET /api/playbooks/:guid?format=markdown
GET /api/playbooks/:id/personas
GET /api/playbooks/:id/skills
GET /api/playbooks/:guid/memoryNote: :id supports both UUID and GUID for personas and skills.
Authenticated playbook CRUD (session auth)
GET /api/playbooks
POST /api/playbooks
PUT /api/playbooks/:id
DELETE /api/playbooks/:idPersonas (owner or editor)
POST /api/playbooks/:id/personas
PUT /api/playbooks/:id/personas/:pid
DELETE /api/playbooks/:id/personas/:pidSkills (owner or editor)
POST /api/playbooks/:id/skills
PUT /api/playbooks/:id/skills/:sid
DELETE /api/playbooks/:id/skills/:sidMemory writes (API key or owner)
PUT /api/playbooks/:guid/memory/:key
DELETE /api/playbooks/:guid/memory/:keyCanvas work documents
Canvas documents belong to an isolated workflow run, so multiple teams can execute the same playbook without sharing work products. They are long-form markdown artifacts that agents can revise over time. Use memory for durable facts and structured state; use canvas for deliverables such as a PR review, research report, implementation plan, or draft that may be edited passage by passage.
GET /api/playbooks/:guid/runs
POST /api/playbooks/:guid/runs
GET /api/playbooks/:guid/canvas?runId=:runId
POST /api/playbooks/:guid/canvas
GET /api/playbooks/:guid/canvas/:slug?runId=:runId
PUT /api/playbooks/:guid/canvas/:slug?runId=:runId
PATCH /api/playbooks/:guid/canvas/:slug?runId=:runId
DELETE /api/playbooks/:guid/canvas/:slug?runId=:runIdPUT replaces document fields and requires expectedVersion. PATCH performs an incremental
append, prepend, or exact replace operation and also requires expectedVersion. A stale
version returns HTTP 409, preventing two agents from silently overwriting each other's work.
curl -X PATCH 'https://your-domain.com/api/playbooks/abc123/canvas/pr-review?runId=RUN_UUID' \
-H "Authorization: Bearer apb_your_key" \
-H "Content-Type: application/json" \
-d '{
"operation": "replace",
"search": "## Security review\nPending.",
"content": "## Security review\nNo blocking issues found.",
"expectedVersion": 3
}'Playbook API keys (owner only)
GET /api/playbooks/:id/api-keys
POST /api/playbooks/:id/api-keys
DELETE /api/playbooks/:id/api-keys/:kidHuman collaboration (session auth; owner manages access)
Human editors are invited with a one-time link. They can edit playbook content, while ownership controls remain owner-only.
GET /api/playbooks/:id/collaborators
POST /api/playbooks/:id/collaborators
DELETE /api/playbooks/:id/collaborators/:collaboratorId
GET /api/collaboration-invites/:token
POST /api/collaboration-invites/:tokenInvite links expire after 72 hours and can be accepted once. See Team Collaboration for the full permission model and security notes.
Playbook Secrets (owner or API key)
Secrets are encrypted using AES-256-GCM. Agents can use the use_secret MCP tool or proxy endpoint to use secrets in HTTP requests without ever reading the plaintext value.
GET /api/playbooks/:guid/secrets # List metadata only
POST /api/playbooks/:guid/secrets # Create encrypted secret
PUT /api/playbooks/:guid/secrets/:name # Update/rotate secret
DELETE /api/playbooks/:guid/secrets/:name # Delete secret
# Dashboard only
GET /api/playbooks/:guid/secrets/reveal/:name
# Proxy external requests using a secret
POST /api/playbooks/:guid/secrets/proxy
# Audit trail — shared with federated MCP calls
GET /api/playbooks/:guid/audit?operation=secret.Every vault operation is recorded, refusals included: what was done, to which secret, by the
owner or by which API key prefix, and for secret.use the destination host. An entry never
holds a secret value, a full outbound URL, or a key. Owner access only — a playbook API key
performs vault operations but cannot read the record of them.
User profile and user API keys (Management)
GET /api/user/profile
PUT /api/user/profile
GET /api/user/api-keys
POST /api/user/api-keys
DELETE /api/user/api-keys/:kidPublic discovery and saved favorites
These APIs support public reads, dashboard skill/MCP discovery, and existing favorites. Explore is a server-rendered use-case guide with curated first-party starter links; it does not load these catalogs or automatically feature public playbooks.
GET /api/public/playbooks
GET /api/public/skills
GET /api/public/skills/:id
GET /api/public/mcp
GET /api/public/mcp/:id
GET /api/playbooks/:id/star
POST /api/playbooks/:id/star
GET /api/user/starredMemory write-back (playbook API key or owner)
GET /api/playbooks/:guid/memory
PUT /api/playbooks/:guid/memory/:key
DELETE /api/playbooks/:guid/memory/:keyMCP endpoints
For clients that require a local stdio process, see the local MCP transport. It uses the same account tools and authorization handlers; protocol discovery starts without credentials, while data operations require your instance configuration.
GET /api/mcp/:guid # MCP manifest
POST /api/mcp/:guid # MCP JSON-RPC
POST /api/mcp/:guid/tools/:tool # Call one tool over plain HTTP
POST /api/mcp/manage # MCP management server (user API key)
GET /api/mcp/config/:serverId # Federated server config (owner)
POST /api/mcp/config/:serverId
PUT /api/mcp/config/:serverId
DELETE /api/mcp/config/:serverId
POST /api/mcp/config/:serverId/test # Try the connection before saving it
GET /api/mcp-registry/search # Search the public MCP registry
GET /.well-known/mcp-registry-auth # Registry ownership verificationEvery tool a playbook exposes is also reachable as a plain HTTP call, so a client that cannot speak MCP is not shut out:
POST /api/playbooks/:guid/operations/:operation
POST /api/control/:operation # Account-level operationsPublishing skills over HTTP
Skills are served as plain markdown — an index plus one SKILL.md per skill, no
credential, open CORS. Any client can install from a base URL with no registry
and no sign-up. Only public playbooks are served; unlisted and private ones
stay reachable through apb pull.
GET /.well-known/skills/ # Site-wide: every public playbook's skills
GET /playbooks/:guid/.well-known/skills/ # One playbookhermes skills install well-known:https://agentplaybooks.ai/.well-known/skills/<name>Connection catalogue
GET /api/connectionsCurated templates for wiring up a federated MCP server or OpenAPI service. Public, because a template is not a credential: every entry references the secrets it needs by name only, to be resolved from the playbook's vault.
Management
GET /api/manage/openapi.json
GET /api/manage/playbooks
POST /api/manage/playbooksHealth
GET /api/healthAPI Key Usage
Playbook API keys let agents read/write memory for a single playbook.
curl -X PUT https://your-domain.com/api/playbooks/abc123/memory/user_preferences \
-H "Authorization: Bearer apb_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"value": {"theme": "dark"}}'User API keys are used for management endpoints and the MCP management server:
curl -X POST https://your-domain.com/api/mcp/manage \
-H "Authorization: Bearer apb_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"list_playbooks","params":{}}'Project Structure
agentplaybooks/
src/
app/
.well-known/skills/ # Public skill publishing (site-wide)
api/
_shared/ # auth.ts, guards.ts — where authorization lives
[[...route]]/ # Hono catch-all for most endpoints
mcp/ # MCP manifest, JSON-RPC, federation config
playbooks/ # Per-playbook routes (secrets, canvas, audit, …)
dashboard/ # Authenticated UI
enterprise/ # Self-hosting landing page
explore/ # Use cases, setup guidance, curated starters
login/ # Auth pages
page.tsx # Marketing home
components/
playbook/ # Editor components
ui/ # UI primitives
i18n/
messages/ # Translation files (en, hu, de, es)
request.ts # Server-side locale resolution
lib/
mcp/ # Federation, secret references
storage/ # Storage adapters
supabase/ # Supabase client and types
crypto.ts # Secrets vault encryption
packages/
cli/ # AgentPlaybooks CLI + Codex/Cursor plugin
plugins/
agentplaybooks/ # Claude plugin (claude.ai, Cowork, Claude Code)
.claude-plugin/ # Plugin marketplace manifest
docs/ # Contributor-facing notes
security/ # Supplier-assessment pack (HU + EN)
examples/ # Starter playbooks (fork/clone/sync)
public/
blog/ docs/ # Markdown served to the client
schemas/ # JSON schemas (agentplaybook.json, …)
scripts/ # Seed and build scripts
supabase/
migrations/ # Database migrations
tests/ # Vitest suites
open-next.config.ts
wrangler.jsoncDatabase Schema
playbooks: core entity (includes visibility enum: private, public, unlisted; persona fields for agent identity and
instructionsfor always-on project rules)secrets: the vault — AES-256-GCM ciphertext, per-secret host allow-list, reveal flag, rotation and usage accounting
audit_logs: owner-readable audit trail for federated MCP calls and secrets vault operations (
secret.*); never holds values, full URLs or keys. Renamed frommcp_proxy_audit_logs.skills: skill definitions and optional SKILL.md content
skill_attachments: secure attachment storage for skills
mcp_servers: MCP tools and resources
playbook_runs: isolated executions of a reusable playbook
canvas: versioned markdown work documents
memories: key-value memory store
api_keys: playbook-scoped API keys with RBAC roles
user_api_keys: user-scoped API keys
playbook_collaborators: accepted human editor memberships and hashed one-time invites
profiles: public user profile data
playbook_stars: saved playbook favorites
There is deliberately no second credential store. Federated MCP and OpenAPI
servers used to keep their own encrypted secrets in mcp_server_secrets; that
table was dropped (supabase/migrations/20260820_drop_mcp_server_secrets.sql)
because a second store meant the credentials most worth stealing sat in the
weaker box, without the rotation, expiry, usage accounting and audit trail the
vault already had. transport_config.auth.token_secret now names a vault entry
instead.
A note on Row Level Security
RLS is enabled on the tables listed above, but it is not the primary
authorization mechanism at runtime. Almost all API routes query with the
service-role key, which bypasses RLS; authorization is enforced in application
code (src/app/api/_shared/guards.ts).
RLS is load-bearing for the handful of endpoints that read public playbooks
with the anon key — the MCP manifest (/api/mcp/:guid), its tool routes, and
the public skills/MCP listings. Those depend on the anon SELECT policies in
supabase/migrations/20260107_permissions_refactor.sql. Removing or disabling
those policies breaks the endpoints rather than merely relaxing them.
Policies written against auth.uid() are currently inert, because no
JWT-bearing client performs table queries — the browser talks only to
/api/*, never to Postgres directly.
Security
Report vulnerabilities privately — see SECURITY.md. Do not open a public issue for a security defect.
Self-hosted operators assembling a NIS2 / 418/2024. 77. § filing can start from
the incident runbook
(HU). Release SBOMs and cosign verify
are in docs/security/supply-chain.md.
Contributing
Fork the repository
Create your feature branch (
git checkout -b feature/amazing-feature)Run the same checks CI runs, in the same order:
npm run lint # eslint npm run test:all # vitest + the CLI suite npm run prebuild && npx tsc --noEmit npm run audit:production npm run buildCommit your changes and open a Pull Request
Two things worth knowing before your first PR:
Write the lockfile with npm 11. npm 10 produces a
package-lock.jsonthatnpm cithen rejects outright, so CI fails on install before it reaches your change.npx npm@11 installworks on Node 20 as well.Warnings are tolerated, errors are not.
npm run lintcurrently reports a known set ofreact-hooksand navigation warnings, tracked in the issues — a clean run means zero errors, not zero output.
License
MIT — see LICENSE.
Use it for anything, including commercially. Keep the copyright notice and the permission notice in copies or substantial portions.
Available Tools
15 toolscreate_playbookCreate playbookA
Create a new playbook container for a singleton persona, skills, and memory. Each call inserts a new playbook; it does not upsert by name. Requires playbooks:write or full permission. Use update_playbook to change an existing playbook, not this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the playbook | |
| tags | No | Discovery and organization tags | |
| visibility | No | Visibility of the playbook | private |
| description | No | Description of what the playbook is for | |
| instructions | No | Always-on project instructions (the AGENTS.md / CLAUDE.md content). Separate from the persona: the persona is who the agent is, these are the rules of this project. | |
| persona_name | No | Initial persona name | |
| persona_metadata | No | Initial persona metadata | |
| persona_system_prompt | No | Initial persona/system prompt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral context beyond the annotations: it states every call inserts a new record (does not upsert by name) and requires playbooks:write or full permission. This goes beyond the bare annotations (e.g., idempotentHint=false) by explaining exactly what that means in operation. Minor gap: does not explain what happens to existing playbook containers or return behavior, but the provided details are genuinely useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and resource, followed by non-upsert behavior and an alternative tool recommendation. No filler or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 8 parameters, nested objects, and no output schema, the description gives enough operational context: creation semantics, auth requirement, and when to use an alternative. It doesn't describe the returned value or error/edge-case behavior, which could be slightly richer, but it is largely complete for this tool's complexity and available schema info.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Param descriptions cover all 8 fields (100% schema coverage), so the description does not need to repeat them. It adds a slight conceptual frame by describing the container's purpose, but no parameter-specific enrichment beyond the schema. This is acceptable for a tool with excellent schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Create a new playbook container') and specifies the container's role ('for a singleton persona, skills, and memory'). It clearly distinguishes from update_playbook, and the explicit 'each call inserts a new playbook; it does not upsert by name' makes the create-only scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use and when-not-to-use guidance: 'Create a new playbook...' plus 'Use update_playbook to change an existing playbook, not this tool.' It also notes the required permission, helping the agent decide if the tool is appropriate for the current context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_toolsFind toolsARead-onlyIdempotent
Find account and playbook operations by keyword and return their input schemas. No playbook_id is needed for the account catalog. Supply playbook_id to also search connected servers. Call returned tools directly; omitted tools remain callable in core/full. Pinned domain views search only their allowed operations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matches to return (default 10, max 25) | |
| query | Yes | Keywords to match against tool names and descriptions, e.g. 'sql tables' or 'archive memory' | |
| playbook_id | No | UUID or GUID of the target playbook |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe, idempotent read, so the description spends its words well on non-obvious behavior: results are tool definitions with schemas, the search surface widens with playbook_id, and pinned domain views restrict the result set. Terms like 'core/full' and 'Pinned domain views' are used without definition, which limits how much an agent can act on them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, purpose front-loaded, each carrying distinct information with no filler. Slight density cost from unexplained internal jargon ('core/full', 'Pinned domain views') that an outside agent cannot parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't describe return values, and it instead covers the risky parts: search scope, when playbook_id matters, and whether omitted tools are callable. That is sufficient for an agent to select and invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining the semantic effect of playbook_id (it expands the search scope to connected servers) rather than restating the schema's 'UUID or GUID of the target playbook'. The limit cap is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: find operations by keyword and return their input schemas, which is a distinct capability from every sibling (get_playbook, list_skills, list_mcp_servers are conventional lookups). It does not explicitly name a sibling to contrast with, so it lands just shy of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear conditional: omit playbook_id for the account catalog, supply it to also search connected servers. It also warns that omitted tools remain callable in core/full, discouraging the false inference that absence means unavailability. No explicit when-not-to-use-this-tool statement keeps it at 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playbookGet playbookARead-onlyIdempotent
Get a playbook with its singleton persona and compact skill, connected-server and memory metadata. Skill bodies, memory values and server configurations are omitted unless include_content=true. This is the only persona retrieval tool; there is no get_persona. Read-only; requires playbooks:read or full. Use list_playbooks for IDs, get_skill / get_skill_reference for selected instructions and search_memory / read_memory for selected facts.
| Name | Required | Description | Default |
|---|---|---|---|
| playbook_id | Yes | UUID of the playbook | |
| include_content | No | Restore the full skill, memory and server payload; prefer targeted reads |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/no-destroy, and the description still adds meaningful context: the required scope (playbooks:read or full) and the fact that skill bodies, memory values and server configurations are elided by default. The only missing piece is response shape/error behavior, which is minor given no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content scope is front-loaded, then the elision rule, then the persona-uniqueness note, then routing. Four dense sentences with no filler and no repetition of schema types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent what fields come back and what is suppressed by default, plus permissions and sibling routing. Nothing needed to call this correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: include_content restores the full skill/memory/server payload and should be used sparingly in favor of targeted reads. That explains the tradeoff, not just the type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource and enumerates the returned payload (singleton persona, compact skill, connected-server and memory metadata). It also preempts a likely sibling-name confusion by declaring 'there is no get_persona', so the agent can distinguish it from get_skill and the persona tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: list_playbooks for IDs, get_skill / get_skill_reference for selected instructions, search_memory / read_memory for selected facts. The include_content caveat also states the default path and the preferred targeted-read alternative, which is exactly when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_skillGet skillARead-onlyIdempotent
Return the full definition of one skill: SKILL.md content, metadata, and an attachment manifest with filenames and sizes. For only the manifest set include_content=false. Attachment bodies are omitted by default; read one with get_skill_reference, or set include_attachments=true for a complete export. skill_id accepts a UUID or kebab-case name. Declared demonstrations include resolved recording and segment links. Read-only. Use list_skills to discover IDs; list_skill_versions is historical data, not the current definition. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| skill_id | Yes | Skill ID or name | |
| playbook_id | Yes | UUID or GUID of the target playbook | |
| include_content | No | Set false for metadata and attachment manifest only | |
| include_attachments | No | Include every attachment body; prefer get_skill_reference for one file |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| content | No | |
| licence | No | |
| priority | No | |
| created_at | No | |
| description | No | |
| playbook_id | No | |
| publisher_id | No | |
| demonstrations | No | |
| skill_attachments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so the safety profile is covered; the description adds genuinely new behavior: attachment bodies are omitted by default, include_attachments produces a complete export, and demonstrations come back with resolved recording and segment links. The only weakness is that 'Read-only' restates the annotation and no guidance is given on size/rate implications of a full export.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the primary return payload, then the modifier flags, then the ID/discovery guidance, so the most important information comes first. Six sentences is dense but nearly all earn their place; only 'Read-only' (redundant with readOnlyHint) and the playbook_id restatement are filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be explained, and the description still covers default omission of attachments, the full-export escape hatch, resolved demonstration links, and ID format flexibility. For a 4-parameter read with full schema coverage, nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: skill_id accepts either a UUID or a kebab-case name, and playbook_id is the UUID/GUID of the target playbook. It also clarifies the intent of the two boolean flags (manifest-only vs. complete export) rather than just their defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Return the full definition of one skill') and enumerates what that definition comprises: SKILL.md content, metadata, attachment manifest with filenames and sizes. It also explicitly distinguishes itself from list_skills, list_skill_versions, and get_skill_reference, so an agent can select it without reading sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions and alternatives: use include_content=false for manifest only, use get_skill_reference to read a single attachment body, use include_attachments=true for a full export, use list_skills to discover IDs, and notes list_skill_versions is historical rather than current. Every branch point an agent could hit is routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_skill_referenceRead skill referenceARead-onlyIdempotent
Read exactly one skill file, optionally just one Markdown heading and its subsections. Use a filename from get_skill's attachment manifest, or SKILL.md for the main instructions. section matches the first exact ATX heading (without #, case-insensitive); code-fence headings are ignored. Returns at most max_chars (default 12000, maximum 32000), with next_offset for continuation within the selected text. Offsets count UTF-16 string units. Read-only; the parent skill must belong to this playbook. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | Zero-based UTF-16 offset within the selected file or section; use the previous next_offset | |
| section | No | Optional exact Markdown heading without # prefixes | |
| filename | Yes | Exact attachment filename, including its folder, or SKILL.md | |
| skill_id | Yes | Skill UUID or name | |
| max_chars | No | Maximum UTF-16 string units returned in content; default 12000, maximum 32000 | |
| playbook_id | Yes | UUID or GUID of the target playbook |
Output Schema
| Name | Required | Description |
|---|---|---|
| offset | Yes | |
| content | Yes | |
| section | No | |
| filename | Yes | |
| skill_id | Yes | |
| truncated | Yes | |
| next_offset | Yes | |
| total_chars | Yes | |
| section_start_line | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent, but the description adds substantial behavior: code-fence headings are ignored, matching is first-exact ATX heading and case-insensitive, offsets are UTF-16 units, output is capped with next_offset continuation, and the parent skill must belong to the playbook.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its scoping constraint are front-loaded, and later sentences supply the matching, pagination, and permission rules. It is dense and packs several rules together, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not describe return values, and the remaining unknowns an agent would care about — file selection, section matching, pagination, size caps, and the playbook ownership precondition — are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes beyond it by explaining that section matches the first exact ATX heading case-insensitively with code fences ignored, and by clarifying that offsets count UTF-16 string units and chain from next_offset.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Read exactly one skill file, optionally just one Markdown heading and its subsections.' It also distinguishes itself from the sibling get_skill by directing the agent to that tool's attachment manifest as the source of filenames.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent where filename values come from (get_skill's attachment manifest, or SKILL.md for main instructions) and what section values must match. It does not state any when-not-to-use condition or contrast with other read tools like read_canvas, so it falls just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_canvasList canvas documentsARead-onlyIdempotent
List canvas documents in a workflow run. Canvas documents are collaborative markdown files that multiple agents can edit in parallel. Omit run_id to list documents across all runs. Read-only. Use read_canvas for content and get_canvas_toc for section IDs. There is no get_run; list_runs returns run records. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | No | Workflow run UUID. Omit to list documents across all runs. | |
| playbook_id | Yes | UUID or GUID of the target playbook |
Output Schema
| Name | Required | Description |
|---|---|---|
| documents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description states 'Read-only', explains the effect of omitting run_id (lists all runs), and clarifies the absence of a get_run endpoint, providing transparent behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, well-structured, and covers all necessary points without redundancy or irrelevant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides complete context including purpose, parameter usage, relationships to other tools, and behavioral notes, leaving no major gaps for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds meaningful guidance on parameters beyond the schema: explains that run_id can be omitted to list all runs and that playbook_id should be a UUID or GUID, enhancing usability.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool lists canvas documents in a workflow, defines canvas documents, and distinguishes from read_canvas and get_canvas_toc, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly guides when to use this tool versus alternatives (read_canvas for content, get_canvas_toc for section IDs) and clarifies that list_runs is used for runs, not get_run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mcp_serversList MCP serversARead-onlyIdempotent
List the MCP and OpenAPI servers connected to this playbook, including transport metadata and discovered capability counts. Read-only. There is no get_mcp_server; this list is the detail view. Do not use this to invoke a connected tool—use call_connected_tool. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| playbook_id | Yes | UUID or GUID of the target playbook |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description goes beyond by specifying the content returned (transport metadata, discovered capability counts) and clarifying it is the detail view. This adds meaningful context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct purpose: stating the action, clarifying read-only nature and the absence of a getter, and providing usage guidance. No fluff or redundancy, effectively front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (1 param, no output schema), the description fully covers what the tool does, what it returns, and how to use it. It also anticipates potential confusion with sibling tools, making it complete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter playbook_id is fully described in the schema ('UUID or GUID of the target playbook'), and the description only repeats that instruction without adding additional semantics. With 100% schema coverage, baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists MCP and OpenAPI servers connected to a playbook, including transport metadata and capability counts. It distinguishes from siblings by explicitly noting there is no get_mcp_server and by contrasting with call_connected_tool, making its purpose unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool (for listing/detail view) and when not to use it (not for invoking a tool, for which call_connected_tool is the alternative). It also instructs how to pass the playbook_id, providing clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playbooksList playbooksARead-onlyIdempotent
List playbooks owned by or shared with the authenticated user, including access role and content counts. Read-only; it does not create or modify playbooks. Use get_playbook when you need the singleton persona, skills, connected servers, and memory for one playbook. Requires playbooks:read or full permission.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| playbooks | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and destructive properties, and the description reinforces these by stating 'Read-only; it does not create or modify playbooks.' The description adds the permission requirement and mentions the type of data returned (access role, content counts), but these are not major behavioral traits beyond what annotations provide, so a high but not maximal score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of three concise sentences, each conveying necessary information without redundancy. It is well-structured and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides sufficient context: it specifies the scope (owned or shared), what is included (access role, content counts), that it is read-only, offers an alternative for a single playbook, and mentions required permissions. Since an output schema exists, no need to describe return format separately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters in the schema, so there is nothing to explain. The description does not add parameter details, which is acceptable given the empty schema. According to the rubric, with 100% schema coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists playbooks owned or shared, including access role and content counts, and explicitly distinguishes it from get_playbook, which retrieves a single playbook with more detail. This makes the purpose specific and differentiates it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using get_playbook for a single playbook with additional details, providing an alternative. It also mentions the required permission (playbooks:read or full), giving clear guidance on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_skillsList skillsARead-onlyIdempotent
List every skill currently attached to this playbook as metadata: id, name, description (up to 512 characters), licence, priority and created_at. Content and attachment bodies are omitted by default. Use get_skill for one definition, then get_skill_reference for one file or Markdown section. Set include_content=true only for an explicit full-content listing. Read-only. Do not use list_skill_versions, which lists historical revisions of one skill. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| playbook_id | Yes | UUID or GUID of the target playbook | |
| include_content | No | Include full SKILL.md contents; omitted by default to keep discovery small |
Output Schema
| Name | Required | Description |
|---|---|---|
| skills | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description still adds real behavior: content and attachment bodies are omitted by default, descriptions are capped at 512 characters, and include_content is an opt-in that enlarges discovery. The separate 'Read-only.' sentence is redundant with readOnlyHint=true, which keeps this from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with payload and default behavior, followed by alternatives and exclusions — good ordering with no filler sentences. It is slightly over-long because 'Read-only' and the playbook_id format duplicate structured data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only two-parameter listing tool with a rich output schema and full annotation coverage, nothing an agent needs is missing: payload scope, defaults, alternatives, and the negative routing case are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in structured fields, and the description's 'UUID or GUID of the playbook' merely restates the schema. It does add mild value by framing include_content as an exception for an explicit full-content listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource (list the skills attached to a playbook) plus the exact fields returned as metadata. It explicitly distinguishes itself from get_skill, get_skill_reference and list_skill_versions, so an agent can route without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing ('Use get_skill for one definition, then get_skill_reference for one file or Markdown section') and an explicit when-not ('Do not use list_skill_versions, which lists historical revisions'). The include_content caveat further constrains usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_canvasRead canvas documentARead-onlyIdempotent
Read a canvas document. Returns full content, sections structure, and metadata. Optionally read a specific section by ID. Read-only. Use get_canvas_toc to discover section IDs before patch_canvas_section, and list_canvas to find slugs. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Document slug | |
| run_id | Yes | Workflow run UUID | |
| section_id | No | Optional: read only this section | |
| playbook_id | Yes | UUID or GUID of the target playbook |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context beyond the annotations: what the tool returns (full content, section structure, metadata) and the optional section-scoped read mode. It does not cover failure behavior or restrictions, but annotations cover the safety profile well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, and contains no filler. Every sentence contributes either the return shape, the optional section mode, or parameter sourcing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the return values sufficiently (full content, sections, metadata). It also explains how to obtain section IDs and slugs, which is important in a tool ecosystem with many siblings. It does not clarify run_id's role, but the schema fully describes that parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful guidance: using get_canvas_toc to discover section IDs, using list_canvas to find slugs, and passing playbook_id as UUID/GUID. These references enrich the schema descriptions and help agents source correct parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a canvas document, returns full content, section structure, and metadata, and supports optional section-level reads. This distinguishes it from siblings like get_canvas_toc and list_canvas, which are explicitly positioned as discovery helpers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage—read a canvas when you need full content or a specific section—and gives guidance for using get_canvas_toc to find section IDs and list_canvas to find slugs. However, it does not explicitly state when to prefer read_canvas over these sibling tools or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_memoryRead memoryA
Read one memory entry by key and return its value, tags, tier, summary, and metadata. This is not a pure read: it increments access_count and updates last_accessed_at as a side effect, without changing the stored value. There is no update_memory; use write_memory to overwrite a key. Use search_memory to find keys, get_memory_context for a tiered summary, or get_memory_tree for hierarchical task graphs. Do not pass memory_type; that filter belongs to search_memory. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Memory key to read | |
| playbook_id | Yes | UUID or GUID of the target playbook |
Output Schema
| Name | Required | Description |
|---|---|---|
| key | No | |
| tags | No | |
| tier | No | |
| value | No | |
| summary | No | |
| priority | No | |
| memory_at | No | |
| parent_key | No | |
| updated_at | No | |
| description | No | |
| is_archived | No | |
| access_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark readOnlyHint=false, idempotentHint=false, destructiveHint=false — the description adds critical context that annotates why: reads increment access_count and update last_accessed_at as a side effect without changing stored value. This is exactly the value-add beyond annotations that earns a top score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the read purpose, then behavioral caveat, then alternatives, then parameter guidance. Dense and every sentence carries information, though the multi-clause structure is slightly long for a 2-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for the tool's complexity: annotated side-effect behavior is explained, output schema exists (value/tags/tier/summary/metadata are named), sibling routing is exhaustive, and parameter constraints are clarified. Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both key and playbook_id. The description reinforces playbook_id format ('UUID or GUID') and adds exclusions (do not pass memory_type), but with full schema coverage the baseline is 3 even with no param info in description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read one memory entry by key and return its value, tags, tier, summary, and metadata') and explicitly differentiates from siblings search_memory, get_memory_context, get_memory_tree, and write_memory. An agent can pick it apart from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes: 'not a pure read' side effect disclosed, 'no update_memory; use write_memory to overwrite', 'Use search_memory to find keys', and 'Do not pass memory_type; that filter belongs to search_memory'. When-to-use and when-not-to-use are both stated clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_memorySearch memoryARead-onlyIdempotent
Search memory keys, JSON values, descriptions and summaries. Defaults to current, non-archived memories. scope='archived' searches archived entries and previous versions; scope='all' searches both. Results include memory_at and history_id (null for current entries). Use get_memory_history for one key's previous versions, or read_memory for its current value. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Filter by tags (any match) | |
| tier | No | Filter by memory tier | |
| after | No | Inclusive lower bound on memory_at | |
| limit | No | Page size | |
| scope | No | active: current; archived: archived and previous versions; all: both | active |
| before | No | Inclusive upper bound on memory_at | |
| offset | No | Results to skip, for paging | |
| search | No | Literal text in keys, JSON values, descriptions and summaries | |
| status | No | Filter by task status (hierarchical only) | |
| memory_type | No | Filter by memory type | |
| playbook_id | Yes | UUID or GUID of the target playbook | |
| include_children | No | Include child memories in results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real context beyond that: the default scope filter, the fact that archived scope surfaces previous versions, and that results carry memory_at and a history_id that is null for current entries. It stops short of describing result ordering or paging behavior, so it is not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, zero filler, and the most decision-relevant facts (what is searched, default scope, scope variants) are front-loaded ahead of the sibling routing and the playbook_id note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, no-output-schema search tool, the description covers the discriminating behavior (scope semantics, result fields, alternative tools) well. It omits result ordering and how search matching is done (the schema says 'literal text'), which are minor gaps rather than blockers for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 12 parameters are already documented, including the scope enum and playbook_id. The description's prose about scope and playbook_id restates rather than extends the schema; the extra return-field note (memory_at, history_id) is output information, not parameter semantics. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and the exact fields searched ('keys, JSON values, descriptions and summaries'), and its scope semantics ('archived searches archived entries and previous versions') clearly separate it from siblings like get_memory_history and read_memory. An agent can distinguish it from the other memory tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the default behavior ('Defaults to current, non-archived memories'), defines what each scope value does, and routes the agent to explicit alternatives with the condition that selects them: get_memory_history for one key's prior versions, read_memory for its current value. That is the full when/when-not/alternatives triad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_personaUpdate personaAIdempotent
Edit the playbook's one persona: name, system prompt or metadata. Omitted fields stay unchanged. Example: {playbook_id, system_prompt: 'Review Python code'}. Requires personas:write or full. Use reset_persona only to discard custom persona settings. Use update_playbook for project name, visibility or instructions. Legacy persona_id is optional and must equal playbook_id if supplied.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name | |
| metadata | No | New metadata | |
| persona_id | No | Must equal playbook_id; the persona is a singleton stored on the playbook | |
| playbook_id | Yes | UUID of the playbook | |
| system_prompt | No | New system prompt |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description explains partial-update semantics with omitted fields staying unchanged, the singleton persona model, and the legacy persona_id constraint. It also discloses the required authorization scope, which is useful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the edit action and affected fields appear first, followed by alternatives and constraints. Every sentence adds practical information without unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description covers the operation, partial-update behavior, permission requirement, sibling alternatives, and legacy parameter constraint. That is enough for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description adds a useful example and reinforces the legacy persona_id rule, but most parameter meaning is already available in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: editing the playbook's single persona, including its name, system prompt, or metadata. It also distinguishes this tool from siblings by naming reset_persona and update_playbook for adjacent operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use this tool and when to use alternatives: reset_persona for discarding custom settings, and update_playbook for project name, visibility, or instructions. It also states the required permission, personas:write or full.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_canvasWrite canvas documentADestructiveIdempotent
Create or fully replace a canvas document. Markdown headings are auto-parsed into sections for parallel editing. A replace overwrites prior content and cannot be undone. Requires canvas:write or full permission. Use patch_canvas_section for partial updates and lock_canvas_section before multi-agent edits. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Document title | |
| slug | Yes | URL-friendly document identifier | |
| run_id | Yes | Workflow run UUID | |
| content | Yes | Full markdown content | |
| metadata | No | Custom document metadata | |
| playbook_id | Yes | UUID or GUID of the target playbook |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, and the description reinforces this by stating 'A replace overwrites prior content and cannot be undone.' It adds unique context about auto-parsing markdown headings into sections and the permission requirement, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and front-loaded with the core purpose, followed by key usage notes and alternatives. Every clause provides value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with full schema coverage, the description covers purpose, usage context, destructive behavior, and prerequisites. The lack of an output schema is fine, and the description sufficiently explains the tool's role in the canvas workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented. The description adds minimal extra semantics, primarily noting that playbook_id is a UUID/GUID, which duplicates the schema. No additional parameter guidance is provided beyond what the schema already offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create or fully replace a canvas document.' It uses specific verbs (create/replace) and a specific resource (canvas document), and distinguishes itself by explicitly mentioning patch_canvas_section for partial updates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is given: 'Use patch_canvas_section for partial updates and lock_canvas_section before multi-agent edits.' It also mentions permission requirements (requires canvas:write or full permission), which helps the agent decide when to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_memoryWrite memoryADestructiveIdempotent
Create or update a memory by key; previous contents are saved automatically and readable with get_memory_history. Keep entries concise and actionable: save durable facts, decisions, and useful next steps rather than raw transcripts or repeated detail, and provide a short summary. When current evidence corrects an existing fact, update its existing key instead of adding a contradictory duplicate; archive obsolete entries with archive_memories. memory_at is optional and defaults to this save's time; supply an ISO timestamp to preserve an earlier time. is_archived=true hides the entry from normal search/context; false restores it. Tier controls context priority independently of archiving. Requires memory:write or full permission; with memory:propose the write is saved as a proposal (status pending_review) that changes nothing until the owner or an editor approves it. Pass playbook_id as the UUID or GUID of the playbook this call should target.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Memory key | |
| tags | No | Tags for categorization | |
| tier | No | Memory tier (default: contextual) | |
| value | Yes | JSON value to store | |
| status | No | Task status (for hierarchical task tracking) | |
| summary | No | Compact summary for context views | |
| metadata | No | Free-form metadata: dependencies, thread assignment, progress. Two keys have a defined shape and are validated: metadata.episode as {location, task, outcome} makes the entry findable by where through get_memory_context, while when it happened is memory_at; and metadata.recording holds demonstration references in the same shape a skill uses, as a list of {provider, ref, fidelity, role, segments}. Everything else is stored untouched. | |
| priority | No | Priority 1-100 (default: 50) | |
| memory_at | No | Memory time including timezone; defaults to save time | |
| parent_key | No | Parent memory key for hierarchical organization | |
| description | No | Human-readable description | |
| is_archived | No | Hide from normal search; false restores an archived entry | |
| memory_type | No | flat (default) or hierarchical for task graphs | |
| playbook_id | Yes | UUID or GUID of the target playbook |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, and the description reconciles the destructive flag by explaining previous contents are saved and retrievable via get_memory_history. It goes beyond structured fields with permission requirements (memory:write / full vs memory:propose producing a pending_review proposal) and archive/tier behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and follows with the highest-value policies (concise saving, dedup-by-key, archiving). It is dense and covers many concerns in one block, but nearly every sentence carries actionable instruction; minor looseness around the playbook_id sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, nested-metadata mutation with no output schema, the description covers the risky and non-obvious angles (permissions, proposals, history retention, archiving, tiers). It omits any mention of return shape and barely touches several optional parameters, but schema coverage is complete so the gap is small.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: memory_at defaults to save time and accepts ISO, is_archived toggles visibility, tier controls context priority independently of archiving, and playbook_id is UUID or GUID. It does not add guidance for tags, priority, parent_key, status, or memory_type, so it stops short of full value-add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair and resource ('Create or update a memory by key') and immediately clarifies the create-vs-update semantics that distinguish it from read_memory, delete_memory, or archive_memories. An agent can identify the operation and its target without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-do-what: update an existing key rather than duplicating a contradictory fact, archive obsolete entries with archive_memories, save durable facts not raw transcripts. It names the corrective alternative (archive_memories) and the review path (memory:propose).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
42 tool updates
v0.1.4- Removed
archive_memories - Removed
call_connected_tool - Removed
consolidate_memories - Removed
create_mcp_server - Removed
create_persona - Removed
create_run - Removed
create_skill - Removed
create_task_graph - Removed
delete_mcp_server - Removed
delete_memory - Removed
delete_persona - Removed
delete_playbook - Removed
delete_run - Removed
delete_secret - Removed
delete_skill - Changed
find_tools1 field changed- changed
Input schema / requiredPrevious value: -[ - "playbook_id", - "query" -]New value: +[ + "query" +]
- Removed
get_canvas_toc - Removed
get_memory_context - Removed
get_memory_history - Removed
get_memory_tree - Changed
get_playbook1 field changed- added
Input schema / properties / include_contentAdded value: +{ + "default": false, + "description": "Restore the full skill, memory and server payload; prefer targeted reads", + "type": "boolean" +}
- Changed
get_skill2 fields changed- added
Input schema / properties / include_attachmentsAdded value: +{ + "default": false, + "description": "Include every attachment body; prefer get_skill_reference for one file", + "type": "boolean" +} - added
Input schema / properties / include_contentAdded value: +{ + "default": true, + "description": "Set false for metadata and attachment manifest only", + "type": "boolean" +}
- Added
get_skill_reference - Removed
list_runs - Removed
list_secrets - Removed
list_skill_versions - Changed
list_skills2 fields changed- added
Input schema / properties / include_contentAdded value: +{ + "default": false, + "description": "Include full SKILL.md contents; omitted by default to keep discovery small", + "type": "boolean" +} - added
Output schema / properties / skills / items / properties / created_atAdded value: +{ + "type": "string" +}
- Removed
lock_canvas_section - Removed
patch_canvas_section - Removed
promote_memory - Removed
rollback_skill - Removed
rotate_secret - Removed
store_secret - Removed
unlock_canvas_section - Removed
update_mcp_server - Changed
update_persona1 field changed- changed
Input schema / requiredPrevious value: -[ - "playbook_id", - "persona_id" -]New value: +[ + "playbook_id" +]
- Removed
update_playbook - Removed
update_run - Removed
update_skill - Removed
update_task_status - Removed
use_secret - Removed
use_secret_write
50 tool updates
v0.1.0- First observed
archive_memories - First observed
call_connected_tool - First observed
consolidate_memories - First observed
create_mcp_server - First observed
create_persona - First observed
create_playbook - First observed
create_run - First observed
create_skill - First observed
create_task_graph - First observed
delete_mcp_server - First observed
delete_memory - First observed
delete_persona - First observed
delete_playbook - First observed
delete_run - First observed
delete_secret - First observed
delete_skill - First observed
find_tools - First observed
get_canvas_toc - First observed
get_memory_context - First observed
get_memory_history - First observed
get_memory_tree - First observed
get_playbook - First observed
get_skill - First observed
list_canvas - First observed
list_mcp_servers - First observed
list_playbooks - First observed
list_runs - First observed
list_secrets - First observed
list_skill_versions - First observed
list_skills - First observed
lock_canvas_section - First observed
patch_canvas_section - First observed
promote_memory - First observed
read_canvas - First observed
read_memory - First observed
rollback_skill - First observed
rotate_secret - First observed
search_memory - First observed
store_secret - First observed
unlock_canvas_section - First observed
update_mcp_server - First observed
update_persona - First observed
update_playbook - First observed
update_run - First observed
update_skill - First observed
update_task_status - First observed
use_secret - First observed
use_secret_write - First observed
write_canvas - First observed
write_memory
TDQS
Scored across 15 tools
Each tool maps to a distinct resource+action (playbook get/list/create, skill list/get/reference, memory read/write/search, canvas list/read/write), so an agent can generally pick correctly. The main friction is that several descriptions spend more words pointing at sibling tools that are absent from the set (get_memory_history, patch_canvas_section, call_connected_tool), which muddies boundaries without creating true overlap.
All 15 tools use a consistent snake_case verb_noun pattern (get_playbook, list_skills, write_memory, read_canvas, search_memory). Verb choice is predictable per action family (list/get/read for retrieval, write/create/update for mutation), with no camelCase or stylistic mixing.
15 tools is within a reasonable band and each entry is a plausible slice of the playbook domain. The count is slightly high for what is effectively a read-heavy partial surface, and the presence of a meta tool (find_tools) alongside the concrete operations adds a bit of redundancy.
The surface is a fragment of the described domain: there is create_playbook but no update_playbook or delete_playbook, skills are read-only with no create/attach, memory has no delete/archive/history, and canvas lacks section patching, TOC, and locking. Worse, descriptions explicitly instruct agents to use tools that are not present (update_playbook, get_canvas_toc, patch_canvas_section, get_memory_history, call_connected_tool), which will produce dead ends.
Maintenance
Related MCP Connectors
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Self-hosted AI workspace: semantic RAG document search, long-term memory, and AI chat via MCP.
Related MCP Servers
- FlicenseCqualityAmaintenanceSelf-hosted, source-available AI workflow automation platform. Build multi-agent, RAG, and tool-using pipelines on a visual canvas and publish any workflow as an MCP server (stdio/SSE/Streamable HTTP). Also an MCP client via the agent node.21,260-
- AlicenseAqualityCmaintenanceUniversal MCP knowledge server for LLM agents, powered by local RAG, providing domain-specific best practices and playbooks across software engineering, marketing, video editing, and other knowledge areas.3MIT
- AlicenseNot gradedqualityAmaintenanceA self-hosted MCP server that provides any LLM with a graph-backed memory layer of your life—tasks, email, finance, contacts, calendar—plus autonomous agent offices that act on your behalf.3Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for a self-hostable typed knowledge graph, giving AI agents durable structured memory with typed nodes, links, and flexible payloads. Enables agents to bootstrap, manage, and evolve their ontology via MCP tools.2,680 npm2MIT