omnara
OfficialIntegrates with Discord, allowing agents to receive messages, be mentioned, and participate in Discord conversations and threads.
Connects agents to GitHub, enabling them to interact with repositories and GitHub workflows as part of agent tasks.
Enables agents to run in Modal sandboxes, providing managed machine environments for executing commands and tools.
Integrates with Ollama as a model provider, allowing agents to run local or self-hosted models through Ollama.
Integrates with OpenAI as a model provider, enabling agents to use OpenAI models for reasoning, generation, and tool use.
Integrates with Slack, allowing agents to receive messages, be mentioned, and participate in Slack conversations and threads.
Omnara is an open-source managed agent platform. Use the API to run AI agents on any model and any machine, with tools, secrets, permissions, and streaming built in. Self-host it for free under Apache 2.0, or use Omnara Cloud.
Quickstart
Omnara Cloud
Sign in at app.omnara.com. Your first project comes
with a model provider (omnara-openrouter) and a pool of managed sandboxes
(default-pool), so this config runs as is. Save it as agent.yaml:
version: v1
instruction: |
You are an engineering assistant. Use your machine to run commands.
model:
provider_config: omnara-openrouter
name: anthropic/claude-fable-5.1
machine_sources:
- machine_pool_name: default-poolLaunch it with the CLI (Node.js 22 or newer). If you're not logged in, the first command opens your browser to sign in.
npx omnara agents launch --file agent.yaml \
--name "Machine assistant" \
--message "Report this machine's operating system and free disk space."Chat with the agent in your terminal with npx omnara agents chat <agent-id>,
or open it in the dashboard to watch its tool calls and reply.
Create an API key in the dashboard and export it as OMNARA_TOKEN, install the
SDK with npm install @omnara/sdk, and use the org and project IDs that
npx omnara config prints:
import { readFile } from 'node:fs/promises'
import { bearerToken, createOmnaraClient, openAgentEventStream, sdk } from '@omnara/sdk'
const client = createOmnaraClient({ auth: bearerToken(process.env.OMNARA_TOKEN!) })
const path = { orgID: 'org_...', projectID: 'proj_...' }
const config = await sdk.createAgentConfig({
client,
path,
body: { source: await readFile('agent.yaml', 'utf8'), source_format: 'yaml' },
})
const launched = await sdk.createAgent({
client,
path,
body: { config: config.data.id, message: "Report this machine's free disk space." },
})
const agentID = launched.data.agent.id
for await (const event of openAgentEventStream({ client, path: { ...path, agentID } })) {
console.log(event)
}The quickstart shows the same flow with the REST API.
To have your coding agent do the setup, give it this prompt:
Help me set up Omnara by following https://www.omnara.com/SKILL.mdSelf-host
Requires Docker with Compose.
git clone https://github.com/omnara-ai/omnara.git
cd omnara
docker compose -f compose.yaml --profile app up -dOpen http://localhost:8000 and sign up. Local
development prints the verification link in docker compose logs api, so no
email provider is needed. To build from source instead of using published
images, run docker compose --profile app up -d --build.
A new instance has no models or machines yet. In the console, add a model provider and a model, connect this computer under Machines, and share both with your project. Sandboxes also work once your instance has a public URL.
Point the CLI at your instance and log in:
npx omnara config --api-url http://localhost:8000/api/v1 --issuer-url http://localhost:8000
npx omnara loginIn agent.yaml, use your provider and model names, and replace the
machine_pool_name entry with machine_name: <your machine>. Then launch it
with the same command as above.
The local defaults are intentionally insecure. For a real deployment, follow the self-hosting guide and the configuration reference.
Related MCP server: Agent-MQ
How it works
Your product talks to Omnara, and Omnara runs each agent with the model, tools, and machines in its config.
flowchart TB
subgraph yours["Your side"]
users(["Your users"]) --> app["Your app<br/>REST API · TypeScript SDK"]
team["Your team<br/>CLI · dashboard<br/>Slack · Discord · GitHub"]
end
subgraph omnara["Omnara"]
api["API<br/>launch · input<br/>event stream · approvals"] <--> pg[("Postgres<br/>each agent's event log")] <--> worker["Workers<br/>run the agent loop"]
end
subgraph plug[" "]
models["Models<br/>OpenAI · Anthropic<br/>OpenRouter · self-hosted"]
tools["Tools<br/>built-in · skills<br/>MCP · custom"]
machines["Machines<br/>sandboxes or your own<br/>laptop, VM, container"]
end
app --> api
team --> api
worker --> models
worker --> tools
worker --> machines
classDef side fill:none,stroke:#8b949e,stroke-width:1px
classDef core fill:#506FCF,stroke:#3D5BB5,stroke-width:1px,color:#ffffff
classDef store fill:#3D5BB5,stroke:#2E4794,stroke-width:1px,color:#ffffff
classDef plugin fill:none,stroke:#85A0E6,stroke-width:1.5px
class users,app,team side
class api,worker core
class pg store
class models,tools,machines plugin
style yours fill:none,stroke:#8b949e,stroke-dasharray:4 3
style omnara fill:#506FCF14,stroke:#506FCF,stroke-width:1.5px
style plug fill:none,stroke:#85A0E6,stroke-dasharray:4 3
linkStyle default stroke:#8b949e,stroke-width:1.5pxAPI. Your app, the CLI, and the dashboard all use the same REST API to launch agents, send messages, and answer approvals. Events stream back as they happen.
Postgres. Every step of every agent is saved here. That record is the agent's state, so any worker can pick an agent back up after a crash or restart.
Workers. Stateless processes that build the model context, call the model, and run tools. An agent only uses a worker while it's taking a turn, so one worker can serve many agents. Add workers to handle more turns at once.
Machines. Each machine runs the
omnaraddaemon, which connects out to Omnara, so agents can run commands there without any inbound ports.
Omnara also uses Redis, blob storage for attachments and tool outputs, and a memory filesystem. The architecture docs cover the details.
Features
Build agents
Any model. Bring your own keys for OpenAI, Anthropic, OpenRouter, Amazon Bedrock, LiteLLM, Ollama, or any compatible endpoint, including models you host yourself.
Tools. Built-in tools for shell commands, files, web search and fetch, and asking a person a question, plus MCP servers and custom tools that run in your own systems.
Skills. Package instructions and files once, attach them to any agent, and the agent loads them when it needs them.
Memory. Memory stores give agents files that persist between conversations and can be shared with other agents, with read or read-write access per agent.
Subagents. An agent can start subagents with a fresh context, check their progress, and send them new instructions. Each subagent is a full agent you can inspect.
Run them anywhere
Machines. Machines are tools the agent uses. Install the Omnara daemon on any macOS or Linux laptop, VM, or container and your agents can run commands and edit files there, with no inbound ports or SSH keys. Or use sandboxes from nine providers (Arker, Blaxel, boxd, CreateOS, Daytona, Freestyle, Modal, Tenki, Unikraft). An agent can use several machines at once (for example, a set of GPU servers) and move between them. If your laptop goes offline, the agent can continue in a sandbox and sync its work back with git.
Durable state. Every step is saved, so agents pick up where they left off after crashes, restarts, and machine disconnects.
Schedules. Cron triggers with time zones can message an existing agent, launch a new one from a profile, or start a new Slack or Discord thread.
Connect them
Slack, Discord, and GitHub. Mention the bot in Slack or Discord to start an agent in a thread, where it replies, asks questions, and requests approvals. On GitHub, an agent can start when a pull request opens or someone mentions it, then read the diff, comment, and submit reviews. To connect another service, build a custom integration on the same public API.
Streaming and webhooks. Stream every event as it happens or receive it as a webhook, and send new messages while the agent works.
Permissions. Each tool can run immediately, ask a person first, or be blocked. The platform enforces the setting, and the agent waits until someone approves or denies the call.
API, SDK, and CLI. A REST API defined in
api/openapi/openapi.yaml, a TypeScript SDK (@omnara/sdk), a CLI (omnara), and an MCP server.
Control them
Role-based access control and secrets. Organization and project roles for users and API keys. Credentials for models, machines, and MCP servers are stored once and shared with each project explicitly.
Multi-tenant. One deployment serves many organizations, each with its own members, projects, secrets, model providers, and machines. Self-hosted operators can give every new organization default models and sandboxes, as Omnara Cloud does.
Your data. Self-hosted deployments keep every agent's history in your own Postgres, where you can query it for analytics, evals, and training datasets.
Omnara vs Claude Managed Agents and OpenAI's Agents API
Claude Managed Agents and OpenAI's Agents API are hosted services for running agents on one company's models. Omnara does the same job as an open-source platform you can run anywhere, with any model.
Omnara | Claude Managed Agents | OpenAI's Agents API | |
Source | Open source (Apache 2.0) | Closed | Open-source harness (Codex). The hosted service is OpenAI's. |
Models | Any compatible model | Claude | OpenAI |
Agent loop | Omnara's, works with any model | Anthropic's, built for Claude | Codex, run and updated by OpenAI |
Where the platform runs | Omnara Cloud, or your own infrastructure | Anthropic's cloud | OpenAI's cloud |
Where agents run | Sandboxes from many providers, or your own machines | Anthropic sandboxes, or your own sandboxes | OpenAI sandboxes, partner sandboxes, or your own machines |
Operations | Managed on Omnara Cloud. You operate it when self-hosting. | Managed by Anthropic. You run the sandbox side if you self-host sandboxes. | Managed by OpenAI. You run the environment if you bring your own. |
Agent history | Stored by Omnara on Omnara Cloud and queryable through the API. In your own Postgres when self-hosted. | Stored by Anthropic, readable and deletable through the API. Not currently eligible for Zero Data Retention or HIPAA BAA coverage. | Stored by OpenAI. No Zero Data Retention support. US data residency only. |
Pricing | Free to self-host. On Omnara Cloud, free with your own keys and machines, or pay as you go for our models and sandboxes. | Claude token rates plus $0.08 per active session-hour | OpenAI model rates, plus standard rates for OpenAI tools and hosted sandboxes |
Choose Claude Managed Agents or the Agents API if you use one company's models and want that company to run everything for you. Choose Omnara if you want to pick your models and machines, run the platform yourself, or keep agent data in your own database.
Where Omnara fits
If you use | It's good for | Omnara adds |
Workflow builders, such as n8n or Zapier | Predictable, step-by-step automations | Open-ended agents that run code on machines and keep state for days |
Agent frameworks, such as Mastra, LangChain, or the OpenAI Agents SDK | Agent logic in your app's code | Hosting, state, machines, permissions, and integrations, with agents created and changed through an API instead of a redeploy |
Agent harnesses, such as Claude Code, the Claude Agent SDK, Codex, OpenCode, or Pi | One agent loop in a terminal or on one machine | Cloud agents that run as a service, across machines and users, started from your app, Slack, GitHub, or a schedule |
Managed agent platforms, such as Claude Managed Agents or the Agents API | Hosted agents on one company's models | The same model of hosted agents, open source, on any model, and self-hostable |
Examples
Each of these is an agent.yaml plus a SKILL.md in examples/,
and you can deploy any of them with one prompt to your coding agent.
Slack coding agent fixes issues you mention in Slack, Discord, or a GitHub pull request and opens a PR.
PR review agent reviews your GitHub pull requests against a checkout of the repository and leaves inline findings.
SRE agent investigates production problems such as a 5xx spike.
Browser agent works in a real browser on long-running tasks.
PostHog analytics agent compares yesterday's product usage with the 7-day average and reports what changed.
Reddit, X, and LinkedIn signal agents summarize the last 24 hours of posts about a topic you pick.
Video generation agent makes short videos from a brief.
There are also code samples for a CLI chat app built on the TypeScript SDK, custom tools over webhooks, and a SharePoint filesystem mount.
Use Omnara from your coding agent
MCP server. Connect Claude Code, Codex, Cursor, or any MCP client that
supports OAuth to https://app.omnara.com/mcp to launch and manage Omnara
agents. You sign in through the browser, so there are no tokens to paste. In
Claude, add it from the
connectors directory. Omnara is
also listed in the official MCP Registry as com.omnara/omnara.
claude mcp add --transport http omnara https://app.omnara.com/mcp
codex mcp add omnara --url https://app.omnara.com/mcpThen sign in with /mcp in Claude Code or codex mcp login omnara in Codex.
See Connecting MCP clients.
CLI. omnara manages agents,
profiles, machines, model providers, secrets, skills, and cron triggers from
your terminal or your coding agent's shell. Run npx omnara --help to start.
Setup skill. skills/setup-omnara-agent,
also served at omnara.com/SKILL.md, walks a
coding agent through setting up Omnara for your project.
Docs for LLMs. docs.omnara.com/llms.txt.
FAQ
What is Omnara? An open-source managed agent platform for running AI agents on any model and any machine.
How much does it cost? Nothing to self-host. Omnara Cloud has no platform fee. You can bring your own model keys and machines for free, or pay as you go for our models at provider token rates and our sandboxes by active time and retained storage. See pricing.
Can I self-host it? Yes. Run it with Docker Compose locally, then follow the self-hosting guide for production. The API, CLI, SDK, and config format are the same on Omnara Cloud and self-hosted deployments.
Which models work? Any model behind an OpenAI Responses, OpenAI Chat Completions, or Anthropic Messages compatible endpoint, including OpenAI, Anthropic, OpenRouter, Amazon Bedrock, LiteLLM, and Ollama.
Development
Source development requires the Go version declared in go.mod,
Node.js 24 or newer with Corepack, ripgrep, and Docker with Compose. Run the
fast repository gate with make verify. See CONTRIBUTING.md
for the full test suite, generated-code workflows, and pull request
expectations.
Community
Discord · GitHub Issues · X · Security
License
Available Tools
75 toolsagents_archiveArchive agentADestructiveInspect
Archives the agent: requests cancellation of its active runtime, cancels queued inputs and affected processes, removes its pending wakeup, releases explicit machine bindings, deletes pooled machines created for the agent, and deletes cron triggers targeting the agent. The agent and its full event history stay readable by id; archived agents leave listings. The agent's profile and configuration are retained, as are explicitly attached BYO machines. Archiving an already-archived agent is a no-op that returns the agent unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| agentID | Yes | ||
| projectID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them by naming exactly what is destroyed versus retained (event history, profile/config, BYO machines) and by describing repeat-call behavior. The 'no-op on already-archived' claim is a slight nuance against idempotentHint=false, but it reads as a benign clarification rather than a safety-profile contradiction.
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 verb and action are front-loaded, and the long first sentence is a necessary enumeration of destructive effects rather than filler. The three follow-up sentences each carry distinct, load-bearing information (retention, listing behavior, idempotent repeat).
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 and only conservative annotations, the description carries the behavioral burden well: it covers what is removed, what survives, and what a repeat call returns. It stops short of stating authorization requirements or whether archiving can be reversed, which matters for a destructive, listing-removing operation.
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 0%, so the three parameters carry only names and regex patterns. Those names (agentID, orgID, projectID) and ID prefixes are largely self-explanatory and the description notes the agent is 'readable by id', but it adds no format, scope, or cross-project semantics for the parameters.
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 ('Archives the agent') and then enumerates the exact runtime, input, wakeup, binding, pool, and cron cleanup it performs. This differentiates it cleanly from the sibling agents_cancel, which stops a runtime but does not remove the agent from listings.
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 conveys the intent of archiving (history stays readable by id, agent leaves listings), which implies when the tool is appropriate, but it never explicitly contrasts it with agents_cancel, agents_update, or any restore path. No prerequisites, permissions, or when-not-to-use conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_cancelCancel agentDDestructiveInspect
Cancel agent
| Name | Required | Description | Default |
|---|---|---|---|
| actor | No | Identity and attributes of an external actor. Actors are upserted by (provider_tenant_id, provider_user_id) with the external provider. Omitted attributes keep their stored values; provided attributes are overwritten, including empty values. omnara actors are implicit and hosted integrations own their own actor identities. | |
| orgID | Yes | ||
| agentID | Yes | ||
| projectID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is known. The description adds nothing beyond that — it does not say whether cancellation is immediate or graceful, whether running work is terminated, or whether the operation can be undone.
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?
Two words with no waste, but this is under-specification rather than effective conciseness. Nothing is front-loaded because nothing is stated.
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?
This is a destructive mutation with four parameters, a nested actor object, no output schema, and thin annotations. The description provides none of the context needed to invoke it safely or 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 only 25%, and the description contributes zero parameter information. The required agentID/orgID/projectID are documented only by regex patterns, and the actor object is never mentioned, so the description fails to compensate for the coverage gap.
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?
Tautological: description restates name/title.
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?
There is no guidance on when to cancel versus agents_archive, agents_update, or any other lifecycle sibling. An agent must infer the usage context entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_events_listList agent eventsARead-onlyIdempotentInspect
Returns one page of agent events, chronological within the page. Forward pagination (after_sequence) walks from a known boundary toward the present using next_after_sequence. Backward pagination (before_sequence) starts at the latest events and walks toward the beginning using next_before_sequence; passing before_sequence takes precedence over after_sequence.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of events to return. | |
| orgID | Yes | ||
| agentID | Yes | ||
| projectID | Yes | ||
| after_sequence | No | Exclusive event sequence boundary. Omit or pass 0 for the beginning of the agent event log. | |
| before_sequence | No | Exclusive event sequence boundary for backward pagination. Pass 0 for the latest events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, closed-world, so safety is covered. The description adds genuinely new behavior: page ordering, the direction each cursor walks, the returned cursor names (next_after_sequence/next_before_sequence), and precedence of before_sequence — none of which annotations supply.
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 return shape, then covers the two pagination directions efficiently with no filler sentences. The second half is dense and reads slightly like a run-on, but every clause carries pagination semantics.
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?
Pagination behavior is well covered, but with no output schema the description still never says what an 'event' contains, and the three required identity parameters are undocumented in both schema and description. Adequate for paginating, incomplete for interpreting results.
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 50%, so the description must compensate. It adds the precedence rule ('before_sequence takes precedence over after_sequence') and the cursor-output relationship beyond what the schema states for after_sequence/before_sequence. It does nothing for the three required identity parameters (agentID/orgID/projectID), which remain pattern-only.
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 (returns one page of agent events) plus the ordering guarantee (chronological within the page), which is clear and unambiguous. It does not explicitly differentiate from siblings like agents_interactions_list or other list tools, so it stops short 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 clear operational context for two usage modes: forward pagination via after_sequence and backward pagination via before_sequence, plus the precedence rule. It never states when to prefer this tool over alternatives or any exclusions, so it is clear context without routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_getGet agentDRead-onlyIdempotentInspect
Get agent
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| agentID | Yes | ||
| projectID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds no behavioral context beyond that — no mention of permissions, tenant scoping across org/project, or error behavior when an ID does not exist.
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?
It is extremely short, but this is under-specification rather than earned conciseness; there is no wasted sentence because there is effectively no sentence. Two words cannot front-load anything useful.
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 simple idempotent read tool the burden is light, and annotations plus ID patterns cover part of it. However, with no output schema and no indication of what an agent record contains or how the three scoping IDs relate, the definition is incomplete 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?
All three parameters (orgID, agentID, projectID) are required with 0% schema description coverage, and the description explains none of them. The pattern constraints for each ID type are not surfaced anywhere the agent can see meaning, so the description does nothing to compensate.
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?
Tautological: description restates name/title.
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?
There is no when-to-use, when-not-to-use, or alternative guidance whatsoever. With siblings such as agents_list, agents_events_list, and agents_interactions_list, some routing signal was needed and none is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_inputSend agent inputDInspect
Create agent input
| Name | Required | Description | Default |
|---|---|---|---|
| actor | No | Identity and attributes of an external actor. Actors are upserted by (provider_tenant_id, provider_user_id) with the external provider. Omitted attributes keep their stored values; provided attributes are overwritten, including empty values. omnara actors are implicit and hosted integrations own their own actor identities. | |
| orgID | Yes | ||
| agentID | Yes | ||
| projectID | Yes | ||
| delivery_mode | No | ||
| content_blocks | Yes | At most 20 inline media blocks per submission, each holding up to 10 MiB of decoded media and up to 24 MiB decoded across the submission. Non-media blocks may hold up to 1 MiB combined. The whole request body is capped at 48 MiB. | |
| cancel_open_interactions | No | Only valid when delivery_mode is steering. When true, atomically cancels open interactions associated with the current turn's unfinished tool calls before creating the steering input. Their parent tool calls complete as canceled; the turn, runtime, and unrelated tool calls are preserved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, destructiveHint=false, so the mutation profile is partly known. The description adds nothing beyond that: it does not explain delivery_mode behavior, the auto-upsert of actors, or what cancel_open_interactions destroys, all of which are non-obvious side effects.
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 words are not concise so much as under-specified. Front-loading is irrelevant when there is no content; the single fragment carries no information an agent can act on.
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 complex 7-parameter mutation with nested content blocks, media size limits, delivery modes, and a conditional cancel flag — and with no output schema to lean on — a three-word description is completely inadequate.
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 only 43% across 7 parameters with nested objects, so the description must compensate — yet it mentions no parameter at all. Critical semantics like queued vs steering delivery, or the meaning of actor identity upsert, are left entirely 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?
"Create agent input" is essentially a restatement of the tool name (agents_input) and title ("Send agent input"). It conveys no specific verb-plus-resource distinction and gives no hint of what an "agent input" means versus sibling operations like agents_launch or agents_interactions_resolve.
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?
There is no guidance on when to use this tool, no prerequisites (delivery_mode semantics, agent state requirements), and no mention of alternatives among the many agents_* siblings. The agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_interactions_listList agent interactionsCRead-onlyIdempotentInspect
Items are ordered by created_at ascending, then id ascending.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| state | No | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| agentID | Yes | ||
| projectID | Yes | ||
| include_subagents | No | Also return interactions from every subagent beneath this agent. Resolve those against the subagent's own agent_id. |
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's ordering guarantee (created_at asc, then id asc) is a genuine behavioral trait beyond the annotations and is relevant to stable cursor pagination. It says nothing about paging behavior, result volume, or auth requirements, so it is only partial.
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?
A single front-loaded sentence with zero filler, which is structurally clean. However, for a seven-parameter listing tool the brevity reads as under-specification rather than disciplined conciseness.
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?
Seven parameters (three required), 43% schema coverage, no output schema, and only one sentence of prose. An agent calling this cannot tell what an 'interaction' is, how paging terminates, or how state/include_subagents affect results, so the description is inadequate for the tool's complexity.
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 43%; orgID, state, agentID and projectID carry no descriptions, and the description adds no meaning for any of the seven parameters. Its mention of created_at/id hints at pagination stability but never ties to cursor or limit. It does not compensate for the coverage gap, so it falls below the baseline 3.
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 never states what the tool does; it only says how returned items are ordered. The purpose is recoverable only from the name/title ('List agent interactions'), so the description itself is effectively a restatement plus a sorting detail. It also gives no differentiation from siblings such as agents_events_list or agents_interactions_resolve.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many agents_* siblings. An agent gets no signal about when to call this versus agents_events_list or agents_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_interactions_resolveResolve agent interactionDInspect
Resolve agent interaction
| Name | Required | Description | Default |
|---|---|---|---|
| actor | No | Identity and attributes of an external actor. Actors are upserted by (provider_tenant_id, provider_user_id) with the external provider. Omitted attributes keep their stored values; provided attributes are overwritten, including empty values. omnara actors are implicit and hosted integrations own their own actor identities. | |
| orgID | Yes | ||
| agentID | Yes | ||
| answers | Yes | ||
| projectID | Yes | ||
| interactionID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, covering the safety profile. The description adds nothing about what resolving does (does it consume the interaction? mutate agent state? block?), so it provides no value beyond structured fields.
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?
A three-word phrase is not concise so much as under-specified; there is no front-loaded content because there is essentially no content at all. It fails to earn its place by conveying any actionable information.
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 6-parameter, 5-required mutation tool with nested objects, no output schema, and unspecified side effects, the description is completely inadequate. An agent cannot know what resolving an interaction does or how answers map to interaction options.
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 only 17% across 6 parameters and 5 required, with nested objects and no output schema. The description says nothing about answers, interactionID, actor, or the option_indices semantics, leaving the burden entirely unmet.
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?
Tautological: description restates name/title.
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?
There is no guidance on when to use this tool versus alternatives such as agents_input or agents_interactions_list, nor any prerequisites or conditions. The one-line description is a bare restatement with zero usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_launchLaunch agentAInspect
Launch from a pinned config, optionally adding agent-local integration tools, subscriptions and interaction handlers and admitting an attributed initial text input in the same transaction. Adding integration capabilities requires project management permission; launching an existing config requires agent operate permission. Reusing an idempotency key returns the current agent even if the retry body differs. The retry body is not applied and integration references are not resolved again.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Agent name. Empty means the agent is unnamed; non-empty values use the ResourceName policy. | |
| orgID | Yes | ||
| tools | No | Additional integration tool entries (int__<integration-name>__<operation>) and optional list_interaction_handlers or set_interaction_handler tools for this agent. Other tool names are not accepted here. Existing config entries win unchanged. Requires project management permission. The derived config is created atomically with the agent and initial input; the profile is unchanged. | |
| config | No | ||
| message | No | Optional initial text message. Mutually exclusive with initial_input. | |
| profile | No | ||
| projectID | Yes | ||
| config_source | No | An agent config to compile. YAML sources are stored verbatim, so comments and formatting survive; JSON sources, as text or as an object, are stored canonicalized, so the same JSON definition always maps to the same config. | |
| initial_input | No | Initial queued text input, committed atomically with the agent and any derived config. Mutually exclusive with message. Initial inline media is not supported; upload it through the agent input endpoint after launch. | |
| subscriptions | No | Integration-owned conversation subscriptions attached atomically with launch and initial input. Requires project management permission. Subscriptions alone preserve the pinned config. Launch replay never adds or restores subscriptions. | |
| interaction_handlers | No | Additional integration interaction handlers, keyed by immutable integration name with empty object values. Slack and Discord handlers require an assigned conversation and accept empty runtime args. Adding a handler does not assign a conversation. Existing entries win unchanged. Requires project management permission. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring this is a non-read-only, open-world, non-destructive operation, the description adds real value beyond them: required permissions, atomic commit of config/agent/initial input, and detailed idempotency-key replay semantics ('the retry body is not applied and integration references are not resolved again'). It stops short of 5 because it does not say what the response looks like or what happens on permission failure.
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 compact sentences, front-loaded with the action and followed by prerequisites and replay behavior; every sentence carries information. The permission sentence is dense but not wasteful.
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 an 11-parameter tool with deeply nested objects and no output schema, the description covers the main behavioral risks (atomicity, permissions, replay) but omits how the three launch sources (profile / config / config_source) relate, what the returned agent contains, and error/conflict behavior.
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 64%, so the schema already documents much of the surface, and the description adds meaning for tools, subscriptions, interaction handlers, and the attributed initial text input. It says nothing about name, profile, orgID, projectID, or config_source, so it only partially compensates for the uncovered parameters.
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 ('Launch from a pinned config') and enumerates what can be attached in the same call, so an agent can distinguish this from configs_create, profiles_create, or agents_update. It never explicitly names a sibling, and the phrase 'pinned config' is slightly ambiguous given the schema also accepts profile and config_source, so it falls short 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?
It gives the conditions required to succeed (project management permission for integration capabilities, agent operate permission for launching an existing config) and describes idempotency-key replay, which is useful context. However, there is no explicit 'use this when / use X instead' routing against the many sibling tools (agents_input, configs_create, profiles_create), so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_listList agentsCRead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes | ||
| include_usage | No | Include each agent's `usage`, so a list can show costs without a request per agent. | |
| parent_agent_id | No | Return only subagents spawned by this agent. | |
| agent_profile_id | No | Return only agents launched from this agent profile. | |
| include_archived | No | Include archived agents. Defaults to false. | |
| include_subagents | No | Include subagents alongside top-level agents. Defaults to false, so only agents without a parent are returned unless parent_agent_id is set. |
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 only the default sort order and omits meaningful behavior such as pagination via cursor and the default exclusion of archived agents and subagents.
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?
It is a single short sentence with no filler, but for an 11-parameter listing tool this is under-specification rather than effective conciseness. It also omits any front-loaded statement of purpose.
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 11 parameters, no output schema, and filtering/pagination behavior to explain, a lone sentence about ordering leaves the agent without the information needed to call this correctly. Purpose, scoping requirements, and default filters are all 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 description coverage is 82%, above the threshold where the schema carries parameter documentation, so 3 is the baseline. The description adds no parameter detail and arguably conflicts with the configurable sort enum by asserting a fixed ordering.
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 never states what the tool does; it only says how results are ordered. The purpose (listing agents) is inferable solely from the tool name and title, so the description adds no clarifying verb+resource of its own.
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?
There is no when-to-use guidance, no distinction from siblings like agents_get or agents_events_list, and no mention of required scoping (orgID/projectID). The ordering note is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_updateUpdate agent configDDestructiveInspect
Update agent config
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| source | Yes | Agent config source as YAML or JSON text, or, with source_format json, as a JSON object. | |
| agentID | Yes | ||
| projectID | Yes | ||
| source_format | Yes | ||
| expected_current_config_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered by structured data. The description adds nothing about what gets replaced, whether the provided source fully overwrites the existing config, or what happens on conflict — and no contradiction exists.
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?
It is short, but that brevity is under-specification rather than conciseness; four words that duplicate the title earn nothing and leave the agent with no actionable framing.
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 destructive config-overwrite tool with a deeply nested 6-parameter schema and no output schema, the description is completely inadequate. Nothing about the source/source_format duality, the optimistic-concurrency guard, or the effect of the update is conveyed.
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?
With 6 parameters and only 17% schema description coverage, the description carries the burden of explaining parameters like source, source_format, and expected_current_config_id — and it explains none of them. The single terse clause offers no semantic value over 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?
Tautological: description restates name/title.
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?
There is no when-to-use guidance, no prerequisites (e.g. required IDs, permissions), and no mention of alternatives among the many sibling config/agent tools. The agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configs_createCreate agent configDInspect
Create agent config
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| source | Yes | Agent config source as YAML or JSON text, or, with source_format json, as a JSON object. | |
| projectID | Yes | ||
| source_format | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the safety profile is largely covered. The description adds nothing beyond that — no mention of what gets created, whether creation is validated/compiled server-side, whether duplicate names conflict, or what identifiers are returned.
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?
It is short, but this is under-specification rather than conciseness — four words that duplicate the title. No information is front-loaded because no information exists.
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 tool with four required parameters, a deeply nested config schema, and no output schema, the description is completely inadequate. An agent cannot determine what a valid config source looks like, how source_format interacts with source, or what happens on success from this text.
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 only 25% (only 'source' is documented among the four required params). The description supplies zero parameter semantics, so nothing compensates for the undocumented orgID, projectID, and source_format fields, nor for the requirement that 'source' can be either YAML/JSON text or an object.
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?
Tautological: description restates name/title.
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?
There is no guidance on when to use this tool versus alternatives such as configs_get, profiles_create, or agents_launch. No prerequisites (org/project scoping, required grants) or exclusions are stated, so the agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configs_getGet agent configCRead-onlyIdempotentInspect
Get agent config
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| agentConfigID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description contributes nothing beyond that: no note on what a missing config returns, no error behavior, no scoping by org/project. With the lower bar set by annotations, this still earns only a minimal 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?
Three words is short, but this is under-specification rather than conciseness — nothing is front-loaded because nothing is said. Compare the LOW calibration example "Process", which scores 2 for the same reason.
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 three-parameter, fully-required retrieval tool with no output schema and no annotation nuance beyond safety flags, the description should at least identify what an agent config is and that it is fetched within an org/project scope. None of that is present, leaving the definition incomplete.
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 0%: three required parameters (agentConfigID, orgID, projectID) carry only regex patterns, with no prose explaining their meaning or how they relate. The description does not compensate at all, so an agent gains no semantic information about these IDs from either source.
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?
Tautological: description restates name/title.
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?
There is no statement of when to use this tool, no prerequisites, and no mention of alternatives like configs_create (for creating a config) or agents_get (for retrieving the related agent). The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crons_createCreate cron triggerAInspect
Creates a cron trigger that fires on a schedule. A trigger targeting an agent profile launches a new agent from the profile's current config on each firing; a trigger targeting an agent sends an input to that agent. Missed firings are coalesced, matching standard cron behavior: if one or more scheduled times pass while firing is delayed, the trigger fires once for the oldest missed time and then resumes its schedule from the current time, without retroactively firing for the other missed times.
| Name | Required | Description | Default |
|---|---|---|---|
| cron | Yes | Standard five-field cron expression (minute, hour, day of month, month, day of week). `TZ=`/`CRON_TZ=` prefixes are rejected; set the `timezone` field instead. | |
| name | Yes | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| target | Yes | ||
| enabled | No | ||
| timezone | No | IANA time zone the schedule is evaluated in. | |
| projectID | Yes | ||
| message_template | No | Go text/template rendered on each firing to produce the message sent to the target. The template receives a `trigger` value with `name`, `fired_at`, `last_fired_at`, and `local_date` fields. Timestamps remain UTC; local_date is the scheduled occurrence's ISO date in the schedule timezone. Required for agent and profile targets; omitted for integration targets, which use their own settings. Rendering is capped at 64 KiB of output and one second of wall-clock time, and `printf` width and precision specifiers are capped at 1024; a firing whose template fails to render is recorded in `failure_report` without sending a message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish a non-read-only, non-idempotent, open-world create. The description adds genuinely non-obvious runtime behavior: missed firings are coalesced, the trigger fires once for the oldest missed time, and the schedule resumes from the current time without retroactive firings. That is real operational context beyond the annotations, though it says nothing about authorization requirements or side effects of creating a trigger against an agent.
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 purpose, then target semantics, then firing behavior. The coalescing sentence is long and slightly overloaded, but every clause conveys distinct behavior an agent needs. No 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 no output schema and 8 parameters including a discriminated nested `target`, the agent gets no indication of what the call returns (trigger ID, initial state) and no coverage of the integration target branch or the default state of `enabled`. The behavioral explanation of coalescing is valuable, but the definition is not fully complete for a tool of this complexity.
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 50%, but the well-documented fields (cron, name, timezone, message_template) already carry strong inline descriptions, so the schema does the heavy lifting. The description does add semantic value for the polymorphic `target` parameter by describing profile vs agent firing behavior, but it omits the integration target variant entirely and says nothing about `enabled` or how orgID/projectID scope the trigger.
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 ("Creates a cron trigger that fires on a schedule") and immediately disambiguates the tool from its crons_list/get/update/delete siblings by explaining what the created trigger does at runtime. The agent knows exactly what artifact this produces.
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?
Usage is implied through the target-type explanation: an agent profile target launches a new agent per firing, an agent target sends an input. That helps the caller pick a target, but there is no explicit when-to-use guidance, no prerequisites (org/project scoping, permissions), and no mention of crons_update as the alternative when a schedule already exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crons_deleteDelete cron triggerDDestructiveIdempotentInspect
Delete cron trigger
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| cronTriggerID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds no behavioral context beyond the title—it doesn't say what gets destroyed, whether deletion is reversible, or what happens to associated runs.
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 three-word description is concise but drastically under-specified for a destructive tool requiring three IDs. It is not verbose, but its size is inappropriate given the operation's risk and required inputs.
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 destructive delete operation with three required parameters and no output schema, the description lacks essential context about effects, required identifiers, and usage. Annotations cover the safety profile, but the description still leaves an agent without enough information to confidently invoke it.
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 0%, so the description must compensate by explaining the three required identifiers (orgID, projectID, cronTriggerID). It mentions none of them, leaving parameter meaning entirely to schema names and patterns.
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?
Tautological: description restates name/title.
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?
Provides no guidance on when to use this tool versus alternatives, nor any prerequisites or conditions. An agent receives no routing information beyond the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crons_getGet cron triggerDRead-onlyIdempotentInspect
Get cron trigger
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| cronTriggerID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description contributes nothing beyond that — no note about what the trigger object contains, auth/scope requirements, or failure modes when an ID does not exist.
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?
It is short, but brevity here reflects under-specification rather than economy — there is no front-loaded scope, no constraint, and no routing information. The single sentence earns its place only by being the tool's name.
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 three required ID parameters, no output schema, and no parameter documentation, the description is insufficient to invoke the tool confidently. An agent cannot tell what the returned trigger looks like or how the three IDs relate, though the read-only annotations do cover the basic safety question.
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 0% for all three required parameters (orgID, projectID, cronTriggerID), so the description carries the full burden of explaining them and instead says nothing. The regex patterns hint at ID formats but the description adds no meaning about relationships or which scope each ID belongs to.
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?
Tautological: description restates name/title.
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?
No guidance on when to use this versus crons_list (to enumerate triggers) or crons_update (to modify one). No prerequisites or context are given, leaving the agent to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crons_listList cron triggersCRead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| agent_id | No | Only return triggers targeting this agent. | |
| projectID | Yes | ||
| integration_id | No | Only return scheduled launches for this integration. | |
| agent_profile_id | No | Only return triggers targeting this agent profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, destructive=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact not present in the schema — the default sort is created_at descending, then id descending — but omits pagination behavior, result limits, or what a returned trigger contains.
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?
A single, well-formed, front-loaded sentence with zero waste. But the brevity comes from under-specification rather than discipline: it omits the tool's actual function, so the economy doesn't serve the agent.
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 9-parameter, read-only list operation with no output schema, the definition leaves the agent guessing about result shape and pagination semantics. Only the default ordering is supplied; the core purpose and usage context are 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 78% with descriptive text, so most filters are self-explanatory. However, the two required parameters (orgID, projectID) have no descriptions in the schema or the description, and the description adds no parameter semantics at all — it does not compensate for that gap.
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 never states what the tool does — it only describes result ordering. Only the name/title ('crons_list' / 'List cron triggers') communicate that this retrieves cron triggers, so the description itself is effectively a restatement of supplemental detail rather than a purpose statement.
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?
There is no when-to-use guidance, no mention of how this differs from crons_get or crons_create, and no stated prerequisites (e.g., that orgID/projectID are required scope). The agent must infer all of this from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crons_updateUpdate cron triggerADestructiveInspect
Updates the schedule, message template, or enabled state. The target is immutable; delete the trigger and create a new one to retarget.
| Name | Required | Description | Default |
|---|---|---|---|
| cron | No | Standard five-field cron expression (minute, hour, day of month, month, day of week). `TZ=`/`CRON_TZ=` prefixes are rejected; set the `timezone` field instead. | |
| name | No | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| target | No | ||
| enabled | No | ||
| timezone | No | IANA time zone the schedule is evaluated in. | |
| projectID | Yes | ||
| cronTriggerID | Yes | ||
| message_template | No | Go text/template rendered on each firing to produce the message sent to the target. The template receives a `trigger` value with `name`, `fired_at`, `last_fired_at`, and `local_date` fields. Timestamps remain UTC; local_date is the scheduled occurrence's ISO date in the schedule timezone. Required for agent and profile targets; omitted for integration targets, which use their own settings. Rendering is capped at 64 KiB of output and one second of wall-clock time, and `printf` width and precision specifiers are capped at 1024; a firing whose template fails to render is recorded in `failure_report` without sending a message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the useful immutability constraint, but it never clarifies whether this is a partial or full replacement update (schema hints suggest omitted fields are preserved) — a meaningful gap for a mutation tool.
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?
Two sentences, front-loaded with what is mutable and followed by the immutability caveat. No filler, no restatement of the title.
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?
No output schema exists, and the tool has 9 parameters including a nested oneOf/discriminated target. The description addresses immutability but omits partial-update semantics, timezone handling, and the conditional requirement of message_template per target type. Adequate but leaves real gaps for a mutation of this complexity.
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 only 44% across 9 parameters, so the description is expected to compensate. It lists three updatable fields (schedule, template, enabled) but says nothing about name, timezone, or how narrow UUID/ID parameters and the nested target discriminator behave. The schema's own field descriptions for cron, message_template, and timezone carry most of the load.
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 gives a specific verb plus the exact mutable surface ('schedule, message template, or enabled state') and separates itself from crons_create/crons_delete by naming the delete-and-recreate workflow for retargeting. An agent can distinguish this from the other crons_* siblings 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?
It states a clear when-not/alternative: the target is immutable, so changing it requires deleting and recreating. That is genuinely actionable routing guidance. It stops short of stating other conditions (e.g., that it is a partial update, or when to prefer this over reading first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_machines_addGrant machine to projectCInspect
Create project machine grant
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| metadata | No | Arbitrary key-value metadata. Maximum 16 pairs, keys up to 64 characters, values must be strings of up to 512 characters. | |
| projectID | Yes | ||
| machine_id | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: it does not explain that a non-idempotent call may create duplicate grants, whether re-granting an already-granted machine errors or is a no-op, or what permissions are required.
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?
At four words it is terse and front-loaded with the verb 'Create', with no wasted sentences. However, the brevity reflects under-specification rather than disciplined conciseness, leaving no room for the usage or parameter context the tool needs.
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?
This is a non-idempotent mutation with 5 parameters (3 required), a nested metadata object, and no output schema. The description supplies no information about effects, duplicates, or the optional description/metadata fields, leaving the agent without enough context to call it confidently.
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 only 20% — only 'metadata' carries a description, while orgID, projectID, machine_id, and description are undocumented beyond regex patterns. The description mentions no parameters at all, so it fails to compensate for the coverage gap on a 5-parameter tool with a nested metadata object.
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 'Create project machine grant' essentially restates the tool name and title 'Grant machine to project' with no added specificity. It does not distinguish this tool from siblings like grant_machines_list, grant_machines_delete, or grant_models_add beyond the word 'machine'. It is a tautology rather than a clarifying purpose statement.
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?
There is no guidance on when to use this tool versus alternatives, no prerequisites (e.g. that machine and project must already exist), and no mention of the related delete/list siblings. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_machines_deleteDelete project machine grantADestructiveIdempotentInspect
Removes the project's access to the machine. Processes that depended on the grant are stopped. The machine itself is retained, and there are no dependency blockers.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| grantID | Yes | ||
| projectID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description is not needed for the safety profile. It earns credit by disclosing cascade behavior beyond annotations: dependent processes are stopped, the machine survives, and there are no dependency blockers.
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 short sentences, front-loaded with the primary action and followed by the two consequences an agent most needs. No filler, though it could be tightened slightly.
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 destructive delete with no output schema, the description covers the key concerns: what is destroyed (access), what survives (the machine), and dependency impact. The remaining gap is the undocumented required identifiers, which is a parameter-level omission.
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 0% across three required identifiers (grantID, orgID, projectID), and the description never names or explains any of them. With such low coverage the description should compensate, and it does not.
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 ('Removes the project's access to the machine') and immediately scopes it against machines_delete by clarifying 'The machine itself is retained'. An agent can distinguish it from the delete-machine sibling without further reading.
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 add/list siblings imply this is the removal counterpart, and the note about no dependency blockers hints at when deletion is safe. However, there is no explicit 'use this when...' guidance or stated alternatives/preconditions, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_machines_listList project machine grantsARead-onlyIdempotentInspect
Lists explicit machine grants that can be deleted directly. Pool-derived machine access is managed through project machine pool grants.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful resource semantics beyond that: these grants are the directly deletable kind, while pool-derived access originates elsewhere — context an agent cannot infer from the annotations alone.
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?
Two short sentences, zero filler, with the core purpose front-loaded and the disambiguation clause second. 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?
For a read-only list tool with annotations covering the safety profile, the description is nearly complete. Minor gaps: no mention of pagination behavior (cursor/limit) and no output schema, so return shape is left to inference from the pagination params.
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 67%: name glob, sort enum, limit, and cursor are documented in the schema, while orgID and projectID (both required) carry only patterns. The description says nothing about filtering, sorting, or pagination, so it adds no meaning beyond the schema — baseline 3 for middling coverage.
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 ('Lists explicit machine grants') and qualifies the scope ('that can be deleted directly'), which distinguishes this from pooled machine access. It does not name the sibling tool (grant_pools_list / grant_machines_add) verbatim, so the differentiation is conceptual rather than tool-precise.
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 second sentence routes the agent away from this tool when the access is pool-derived ('managed through project machine pool grants'), giving a clear when-not condition. It never names the alternative tool explicitly, so the agent must map the concept to a sibling name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_models_addGrant model to projectDInspect
Create project model grant
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| supports_tools | No | Optional project-level tool-use gate. Can disable tools, but cannot enable tools when the configured model does not support them. | |
| input_modalities | No | Optional project subset of configured-model input types (text, image, or file). Empty or omitted means inherit. | |
| max_output_tokens | No | Optional project output-token ceiling. Cannot exceed the configured model's ceiling. | |
| output_modalities | No | Optional project subset of configured-model output types. Empty or omitted means inherit. | |
| supports_reasoning | No | Optional project-level reasoning gate. Can disable reasoning, but cannot enable reasoning when the configured model does not support it. | |
| configured_model_id | Yes | ||
| context_window_tokens | No | Optional project context budget for input and output tokens. Cannot exceed the configured model's budget. Triggers compaction when estimated input exceeds the remaining budget after output and safety reserves. The turn fails if compaction cannot make it fit. | |
| default_cache_retention | No | Prompt-cache preference for model requests; `short` when omitted. `short` applies the route's default caching (explicit cache breakpoints where the provider requires them) and, where the route accepts one, a stable conversation key for cache-aware routing. `long` prefers the route's extended cache lifetime where one exists (currently Anthropic's one-hour cache, which on Bedrock requires Claude 4.5 or newer) and behaves like `short` elsewhere. `none` sends no Omnara-managed cache controls or conversation key; providers may still cache prefixes on their own. | |
| default_reasoning_effort | No | Optional project default reasoning effort. | |
| default_max_output_tokens | No | Optional project default per-request output-token cap. | |
| supported_reasoning_efforts | No | Optional project subset of configured-model reasoning efforts. If this excludes the inherited default_reasoning_effort, set default_reasoning_effort on the grant too. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a non-destructive write with side effects on repeat. The description adds zero behavioral context of its own: it does not say that re-granting an existing model/project pair may error or overwrite, does not mention auth/permission requirements, and says nothing about the gating semantics of supports_tools, supports_reasoning, or the compaction-failure behavior tied to context_window_tokens. No contradiction with annotations, but no added value either.
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 words are technically concise and front-loaded, but the brevity reflects under-specification rather than efficiency. For a 13-parameter mutation tool this length leaves the definition effectively empty; the problem is missing content, not excess verbiage.
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 13 parameters, three required, no output schema, generic annotations, and complex inheritance/ceiling semantics (input/output modalities, context budgets, reasoning gates), a single four-word phrase is wholly inadequate. An agent cannot determine scope, failure modes, or parameter interactions from this definition.
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 77%, just under the threshold where the schema alone would justify a baseline 3. Notably the three required parameters (configured_model_id, orgID, projectID) carry no descriptions at all, and the description adds no meaning about what the grant scopes or how the optional subset/inherit parameters relate to the configured model. The description contributes nothing beyond 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?
"Create project model grant" restates the tool name and title almost verbatim, adding no new information beyond the verb+resource already in the identifier. It gives no differentiation from the many siblings in the same family (grant_models_edit, grant_models_delete, grant_models_list, grant_machines_add, grant_pools_add). This sits at the tautology end of the scale.
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 provides no when-to-use guidance, no prerequisites, and never names the alternative to reach for when modifying an existing grant (grant_models_edit) instead of creating one. Nothing tells the agent under what conditions a new grant is the right call versus reusing or editing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_models_deleteDelete project model grantADestructiveIdempotentInspect
Removes the project's access to the configured model. The grant is live policy: new launches can no longer select the model, and agents already using it lose access on their next model call. The model itself is retained, and there are no dependency blockers.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| modelGrantID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it explains that the grant is live policy, that new launches lose model selection, that running agents lose access on their next call, that the model itself is retained, and that there are no dependency blockers. That is exactly the impact detail an agent needs before an irreversible action.
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 action and its immediate consequence, then impact and safety caveats. No filler or redundant restatement of the title.
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 destructive tool with no output schema, the description covers consequences, reversibility implications, and the absence of blockers well. The only real gap is the complete silence on the three required identifiers, which an agent must derive from the schema alone.
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 0% and all three parameters (orgID, projectID, modelGrantID) are opaque patterned IDs documented nowhere. The description never mentions how the grant is identified or how org/project scoping interacts, so it fails to compensate for the coverage gap.
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 ("Removes the project's access to the configured model") and is clearly distinguishable from the sibling grant_models_add, grant_models_edit and grant_models_list. The title reinforces the scope without merely restating it.
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?
Usage is implied by the destructive effect, but there is no explicit routing guidance versus grant_models_edit (which presumably alters rather than removes a grant) or grant_models_list. No preconditions or exclusions are stated, leaving the agent to infer when revocation is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_models_editUpdate project model grantADestructiveInspect
Updates the project's overrides for the configured model. Omitted fields keep their current values; null clears an override so the project inherits from the configured model. The grant is live policy: agents already using the model re-apply the updated overrides on their next model call, against the configured-model revision each agent pinned at launch. Updates are validated against the configured model's current revision only, so an update can make an agent pinned to an older, incompatible revision fail its next model call.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| modelGrantID | Yes | ||
| supports_tools | No | Project-level tool-use gate. Can disable tools, but cannot enable tools when the configured model does not support them. | |
| input_modalities | No | Project subset of configured-model input types. | |
| max_output_tokens | No | Project output-token ceiling. Cannot exceed the configured model's ceiling. | |
| output_modalities | No | Project subset of configured-model output types. | |
| supports_reasoning | No | Project-level reasoning gate. Can disable reasoning, but cannot enable reasoning when the configured model does not support it. | |
| context_window_tokens | No | Project context budget for input and output tokens. Cannot exceed the configured model's budget. Triggers compaction when estimated input exceeds the remaining budget after output and safety reserves. The turn fails if compaction cannot make it fit. | |
| default_cache_retention | No | ||
| default_reasoning_effort | No | Project default reasoning effort. | |
| default_max_output_tokens | No | Project default per-request output-token cap. | |
| supported_reasoning_efforts | No | Project subset of configured-model reasoning efforts. If this excludes the inherited default_reasoning_effort, set default_reasoning_effort on the grant too. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: omitted fields retain current values, null clears an override to inherit from the configured model, changes are live policy re-applied on each agent's next model call against its pinned revision, and updates are validated only against the current revision so older pinned agents can fail. This explains why the tool is flagged destructive and non-idempotent.
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, purpose front-loaded, then the omitted/null contract, then the live-policy and revision-validation consequences. Every sentence adds distinct information an agent needs and none is padding.
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 13-parameter mutation with no output schema, the description covers the mutation contract, inheritance behavior, and the risk of breaking pinned agents. It omits auth/permission requirements and return shape, but the substantive calling-time risks are addressed.
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 only 69% across 13 parameters, so the description carries partial burden. It supplies the critical shared semantics that the schema lacks: omission preserves, null clears and reverts to inheritance, and grant-level values are constrained by the configured model's capabilities.
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: it 'updates the project's overrides for the configured model', and the omitted-field/null semantics make clear this edits an existing grant rather than creating one. It does not name grant_models_add or grant_models_delete as the alternatives, so sibling differentiation is implicit rather than explicit.
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 explains what the tool does operationally but never states when to reach for it over grant_models_add, grant_models_delete, or grant_models_list. Usage is inferable from the update semantics, but no explicit when-to-use or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_models_listList project model grantsCRead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds one useful behavioral fact beyond the annotations: the default result ordering (created_at desc, id desc). However, it omits pagination behavior even though a cursor parameter exists, so the added value is thin.
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?
It is a single efficient sentence with no wasted words, but it is misprioritized: the one sentence spent on ordering should have been spent on purpose and when-to-use first. Brevity here reflects under-specification rather than disciplined conciseness.
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 6-parameter paginated list tool with no output schema, the description covers only ordering. It says nothing about what a model grant is, how pagination/limit interact, or what the returned items contain, leaving the agent to reconstruct behavior from sibling tools and schema alone.
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 67%, and the description gives no parameter semantics at all. It does not explain the name glob, the sort enum values, the limit/page-size behavior, or the cursor round-trip, so the ~third of undocumented parameters remain unaddressed and no meaning is added beyond 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 never states what the tool does; it only describes ordering of returned items. The name and title carry the purpose ('List project model grants'), so an agent can infer it, but the description text itself adds no purpose statement and does not distinguish this list tool from siblings like grant_machines_list or grant_secrets_list.
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?
There is no when-to-use guidance, no mention of related tools (grant_models_add, grant_models_edit, grant_models_delete), and no note about prerequisites such as the required orgID/projectID scope. The only content is a sorting statement, which is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_pools_addGrant machine pool to projectCInspect
Create project machine pool grant
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| metadata | No | Arbitrary key-value metadata. Maximum 16 pairs, keys up to 64 characters, values must be strings of up to 512 characters. | |
| projectID | Yes | ||
| default_cwd | No | ||
| description | No | ||
| max_total_cpu | No | ||
| machine_pool_id | Yes | ||
| max_machine_cpu | No | ||
| min_machine_cpu | No | ||
| max_total_machines | No | ||
| default_machine_cpu | No | ||
| max_total_memory_mb | No | ||
| max_machine_memory_mb | No | ||
| min_machine_memory_mb | No | ||
| default_machine_memory_mb | No | ||
| delete_after_idle_minutes | No | Idle minutes before deleting a machine created through this grant. Use 0 to disable for this grant; omit to inherit the pool default. Values from 1 through 4 are invalid. | |
| default_machine_env_overlay | No | Env overlay merged over the pool's default_machine_env for machines materialized through this grant; a null entry removes the key. | |
| default_machine_secret_env_overlay | No | Secret env overlay merged over the pool's default_machine_secret_env for machines materialized through this grant; a null entry removes the key. | |
| default_machine_provider_options_overlay | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the write nature and non-idempotency are covered externally. The description adds nothing beyond that: it does not say what happens on duplicate grants, whether it requires specific permissions, or how the grant affects existing machines. With annotations doing the safety work, the description's complete silence on behavior is a real gap.
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?
It is a single five-word clause, effectively front-loaded, but this is under-specification rather than conciseness. There is no wasted text precisely because there is almost no text at all, and it fails to earn its place by conveying anything the title does not.
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 19-parameter, nested-object mutation with no output schema and only safety annotations, a one-clause description is completely inadequate. An agent cannot determine prerequisites, parameter intent, or behavioral consequences from it.
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 only 21% across 19 parameters, so the description must compensate for undocumented fields such as the CPU/memory limits and env overlays. It contributes zero parameter meaning, leaving most fields understood only from their names. This is a severe shortfall for a 19-parameter mutation.
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 'Create project machine pool grant' gives a verb (Create) and a resource (machine pool grant) plus scope (project), so the basic action is inferable. However, it is terse and does not differentiate from siblings like grant_pools_edit or grant_pools_get beyond the implicit add-vs-edit distinction, and it never explains what a 'grant' actually is or what it enables. Adequate but with clear gaps.
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?
There is no when-to-use guidance, no mention of prerequisites (e.g., that the pool and project must already exist), and no alternatives named among the many sibling grant_* tools. The agent receives no routing help whatsoever.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_pools_deleteDelete project machine pool grantADestructiveIdempotentInspect
Removes the project's access to the machine pool, revokes machine grants generated through it, and stops processes that depended on those grants. The pool itself is retained, and there are no dependency blockers.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| poolGrantID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnly=false, so the safety profile is covered. The description earns credit by adding the blast radius beyond those hints: it revokes machine grants generated through the grant and stops dependent processes, while the pool survives. It omits permissions/auth requirements, but the cascade disclosure is genuinely useful 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?
Two sentences, zero filler, with the primary effect front-loaded ahead of the retention and blocker notes. Well-sized for the operation, though slightly more terse than ideal given the missing parameter 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?
For a destructive mutation with annotations covering safety and no output schema, the description supplies the consequential details: what is destroyed, what is preserved, and that no blockers exist. It is close to complete; only permission requirements and parameter meaning are unaddressed.
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 0% across three required string parameters, and the description mentions neither parameter names nor their meaning, formats, or constraints. It fails to compensate for the coverage gap, leaving the agent to infer semantics from parameter names alone.
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 plus resource ('Removes the project's access to the machine pool') and enumerates the cascade effect, and explicitly distinguishes itself from the pool-deletion sibling with 'The pool itself is retained.' An agent can tell this apart from grant_pools_edit and pools_delete 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?
The verb 'removes' implies when to use it, and 'there are no dependency blockers' tells the agent no pre-checks are needed. However it never names an alternative (e.g., revoke via grant_pools_edit) or states an explicit when-not condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_pools_editUpdate project machine pool grantADestructiveInspect
Updates the grant's overrides and limits. Omitted fields keep their current values; null clears an override so the grant follows the machine pool again. Overlay objects and metadata are replaced whole when present. Existing machines keep their configuration; the updated defaults and limits apply to new launches.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| metadata | No | Arbitrary key-value metadata. Maximum 16 pairs, keys up to 64 characters, values must be strings of up to 512 characters. | |
| projectID | Yes | ||
| default_cwd | No | ||
| description | No | ||
| poolGrantID | Yes | ||
| max_total_cpu | No | ||
| max_machine_cpu | No | ||
| min_machine_cpu | No | ||
| max_total_machines | No | ||
| default_machine_cpu | No | ||
| max_total_memory_mb | No | ||
| max_machine_memory_mb | No | ||
| min_machine_memory_mb | No | ||
| default_machine_memory_mb | No | ||
| delete_after_idle_minutes | No | Idle minutes before deleting a machine created through this grant. Use 0 to disable for this grant; null restores inheritance from the pool; omitted leaves it unchanged. Values from 1 through 4 are invalid. | |
| default_machine_env_overlay | No | ||
| default_machine_secret_env_overlay | No | ||
| default_machine_provider_options_overlay | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, and the description goes well beyond that by disclosing the exact mutation model: omitted fields are preserved, null reverts an override to pool inheritance, overlays/metadata are replaced whole, and running machines are untouched while new launches pick up the changes. This is the behavioral detail an agent needs before a destructive patch and cannot get from 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?
Four sentences, front-loaded with the update contract and free of filler. Each sentence introduces a distinct rule (preserve, clear, replace-whole, effect-on-existing-vs-new) and none restates the schema or annotations.
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 19-parameter destructive mutation with no output schema, the description covers the essential semantics an agent must know to call it safely and no return-value explanation is needed. The remaining gap is per-field meaning for the numeric limits and any auth/permission context, which keeps it short of full completeness.
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 only 11%, so the 15-odd numeric limit fields (max_total_cpu, min_machine_cpu, etc.) carry no per-parameter documentation in either place. The description does add the crucial cross-cutting meaning of null versus omitted versus whole-replacement for overlay objects, which is why the nullable fields behave as they do, but it does not explain the individual limits, so compensation is partial.
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 ('Updates') and resource ('the grant's overrides and limits'), so an agent knows this mutates a pool grant rather than a model grant or secret grant. It does not explicitly name which sibling it is not (e.g. grant_models_edit vs grant_pools_add/get), but the resource is clear enough to disambiguate from the surrounding CRUD family.
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 the partial-update use case through the 'omitted fields keep their current values' rule, but never says when to reach for this tool versus grant_pools_add, grant_pools_delete, or grant_pools_get, nor states any prerequisite. Usage is inferable from the update semantics rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_pools_getGet project machine pool grantCRead-onlyIdempotentInspect
Get project machine pool grant
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| poolGrantID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing on top of that — no note on behavior when the grant does not exist, no permission requirements, no return-shape hint.
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?
It is a single short phrase with zero redundancy and nothing buried, so structurally there is no waste. The problem is under-specification rather than verbosity: the sentence does not carry enough payload to earn its place as the whole description.
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 simple three-required-parameter read tool with no output schema, the description should at minimum signal that it returns one grant identified by these IDs and what happens on a missing grant. Nothing beyond the bare title is conveyed, leaving an agent to infer everything from the schema patterns.
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 0% for three required parameters (orgID, projectID, poolGrantID); only regex patterns are supplied, which give format but not meaning. The description compensates for none of this gap, offering no clarification of how the three identifiers relate or how to obtain them.
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?
Tautological: description restates name/title.
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?
There is no when-to-use guidance, no mention of prerequisites, and no named alternative such as grant_pools_list for enumeration or grant_pools_edit for changes. The 'Get' verb implies a single-resource read, but the description never states that or provides any exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_pools_listList project machine pool grantsDRead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes | ||
| machine_pool_id | No | Return only the grant for this machine pool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds the specific default ordering (created_at descending, then id descending), which is useful behavioral context, but it omits pagination behavior and what the returned grant items contain.
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 single sentence is concise but severely under-specified. It is not front-loaded with purpose or usage, so the brevity reflects omission rather than efficient communication.
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 7-parameter list tool with no output schema, the description is far too thin. It gives only ordering and omits purpose, usage, pagination, and return-value details that an agent would need to invoke it 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 71%, and the description adds no parameter meaning beyond what the schema already provides. It does not explain how orgID/projectID or the filter/sort/pagination parameters interact with the ordering note.
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 does not state what the tool does. It only provides an ordering note, leaving the purpose entirely to the title and name. This is missing rather than merely vague.
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?
No guidance is given about when to use this tool versus siblings like grant_pools_get, grant_pools_add, or other list tools. There is no context, no exclusions, and no routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_secrets_addGrant secret to projectCInspect
Create secret grant
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| secretID | Yes | ||
| target_project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is partly covered. The description adds nothing beyond that: it doesn't explain what granting does, whether duplicate grants error (relevant given idempotentHint=false), or what permissions are required.
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 words is not conciseness but under-specification; the text is too thin to be front-loaded meaningfully. It earns its place only by being harmless, not by being informative.
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 non-idempotent mutation tool with no output schema and zero parameter documentation, the description omits the target semantics, error behavior for duplicate grants, and required authorization context. The annotations cover part of the safety story but the definition remains inadequate 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 0% across three required parameters (orgID, secretID, target_project_id), yet the description names none of them. Only the regex patterns in the schema hint at the expected ID formats, so the description fails to compensate for the documentation gap.
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 title 'Grant secret to project' plus the name 'grant_secrets_add' do convey the specific verb and resource, and the resource (secrets) distinguishes it from grant_machines_add/grant_models_add siblings. However, the description itself, 'Create secret grant,' is essentially a restatement of the name with no scope, target, or effect detail.
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?
No guidance on when to use this versus grant_secrets_delete or grant_secrets_list, no prerequisites, and no indication of when a grant is appropriate. The agent must infer everything from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_secrets_deleteDelete secret grantADestructiveIdempotentInspect
Deletes only this project grant. The secret, its versions, the target project, and other grants are retained, and there are no dependency blockers.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| grantID | Yes | ||
| secretID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds valuable detail beyond that: it specifies that only the project grant is deleted, while the secret, its versions, the target project, and other grants are retained, and that no dependency blockers exist. This is exactly the kind of behavioral context needed to safely invoke a destructive operation.
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?
Two tightly written sentences with no wasted words. The critical deletion scope is front-loaded, followed by retention details, making it easy to parse quickly.
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 simple destructive tool with rich annotations and no output schema, the description covers the essential behavior and retention guarantees. It falls short only by not explaining the three required parameters, though their names are largely self-explanatory.
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 input schema has three required parameters with 0% description coverage, and the description provides no explanation of orgID, grantID, or secretID. It does not compensate for the missing schema documentation, leaving parameter meaning entirely to the agent's inference from names and patterns.
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 ('Deletes') and resource ('this project grant'), and distinguishes itself from secrets_delete by clarifying that the secret and its versions are retained. An agent can immediately tell this removes only a grant, not the underlying secret.
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 clear context for when to use it by stating the exact scope of deletion and what is retained, which effectively communicates when-not to use it for deleting the secret itself. However, it does not explicitly name alternative tools like secrets_delete or grant_secrets_add for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_secrets_listList secret grantsCRead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose a created timestamp. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| secretID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds one genuine behavioral fact beyond structured data: the default result ordering (created_at desc, id desc). It stops there, disclosing nothing about filtering behavior or result shape.
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?
A single sentence with zero padding, and the one fact it conveys is front-loaded. It is appropriately sized for its content, though the content itself is thin.
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 paginated list tool with 6 parameters, 2 required, and no output schema, the description omits purpose, filtering semantics, and relationship to the secret being listed. Only the default ordering is covered, which is far from what an agent needs to call 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 only 67%, and two required parameters (orgID, secretID) carry no description anywhere. The description adds nothing about the parameters, and the ordering it mentions is tangential to the 'sort' enum rather than explaining it. It fails to compensate for the coverage gap.
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 never states what the tool does; it only says 'Items are ordered by created_at descending, then id descending.' The verb+resource ('List secret grants') lives in the title/name, not the description, so the description itself is effectively a restatement of ordering rather than a purpose statement. It does distinguish nothing from the sibling grant_secrets_add/delete.
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?
There is no when-to-use guidance, no mention of when to prefer this over grant_secrets_add or grant_secrets_delete, and no stated prerequisites. The parent/child relationship to a secret (via required secretID/orgID) is left for the agent to infer from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_skills_addGrant skill to projectDInspect
Create skill grant
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| skillID | Yes | ||
| target_project_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, establishing this as a non-idempotent mutation. The description adds nothing beyond that — no indication of what happens on duplicate grants (relevant given idempotentHint=false), no auth requirements, and no side effects disclosed. It merely echoes "create."
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?
At three words it is short, but this is under-specification rather than conciseness — nothing meaningful is front-loaded because nothing is said. Brevity here reflects minimal effort rather than tight editing.
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 three-parameter mutation with 0% schema coverage, no output schema, and a non-idempotent hint, the description is wholly inadequate. It conveys nothing beyond the tool's name, leaving the agent with no guidance on inputs, semantics, or behavior.
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 0% and the description mentions none of the three required parameters (orgID, skillID, target_project_id). The agent must infer from parameter names alone that skillID is the skill and target_project_id is the grant target. No compensation for the coverage gap.
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?
"Create skill grant" essentially restates the tool name (grant_skills_add) and the title, adding no distinguishing information. It does imply a verb+resource, but the title "Grant skill to project" carries the actual meaning, and the description does nothing to differentiate from grant_skills_list or grant_skills_delete. This is borderline tautology.
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?
There is no when-to-use guidance, no mention of the sibling tools (grant_skills_list, grant_skills_delete), and no prerequisites such as required permissions or whether the skill/org/project must already exist. The reader must infer all context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_skills_deleteDelete skill grantADestructiveIdempotentInspect
Deletes only this project grant. The skill, its revisions, the target project, and other grants are retained, and there are no dependency blockers.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| grantID | Yes | ||
| skillID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, yet the description adds the genuinely useful context the annotations cannot: exactly what survives the deletion (skill, its revisions, target project, other grants) and that there are no dependency blockers. That is a precise blast-radius statement, which is the highest-value disclosure for a destructive tool.
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?
A single tight sentence, front-loaded with the action and its scope, with every clause carrying new information (scope, retained entities, no blockers). No 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?
The blast radius is well covered, but for a destructive, three-parameter mutation with 0% schema description coverage and no output schema, the description omits parameter semantics and any note on the result of the call. Adequate but with a real gap on the ID triple.
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 0% across three required parameters, and the description supplies no mapping or meaning for grantID, skillID, or orgID. Phrases like 'this project grant' and 'the target project' loosely gesture at the parameters but never clarify which ID selects what, so it fails to compensate for the coverage gap.
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 ('Deletes only this project grant') and immediately delimits the blast radius, which separates it from siblings like skills_delete (deletes the skill itself) and grant_skills_add/grant_skills_list. An agent can distinguish it from every sibling 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?
Usage is implied rather than stated: an agent can infer this revokes a skill grant from a project, but the description never says when to prefer it over skills_delete, grant_skills_add, or grant_skills_list. No explicit conditions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grant_skills_listList skill grantsCRead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose a created timestamp. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| skillID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The one sentence adds a genuinely non-obvious behavioral fact — the default ordering (created_at desc, then id desc) — which is not stated in the schema. It says nothing about pagination behavior, result size, or what a grant record contains, so credit is limited.
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?
One short sentence with zero filler, so there is no bloat. However, it is not front-loaded: the sentence leads with an output detail rather than establishing what the tool is, which is the opposite of appropriate structure for a tool description.
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?
A six-parameter, two-required listing tool with no output schema needs at minimum a purpose statement and scoping context; neither is present. The description is not misleading, but it is far too thin for a tool whose siblings supply four near-identical grant lists.
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 67%, and the two undocumented properties are the required scoping keys orgID and skillID, which carry no description in the schema or the description. The description also never clarifies that sort overrides the stated default ordering, so it does not compensate for the coverage gap.
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 never states what the tool does — no verb, no resource, no scope. It only describes result ordering, which is a tautological supplement to the name/title rather than a statement of purpose. An agent must infer 'lists grants of a skill to something' purely from the tool name.
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?
There is no when-to-use guidance and no mention of alternatives, despite close siblings grant_skills_add, grant_skills_delete, and the parallel grant_machines_list / grant_models_list / grant_secrets_list / grant_pools_list tools. Nothing tells the agent when this list is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
machines_createConnect BYO machineDInspect
Connect a BYO machine
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | ||
| env | No | ||
| orgID | Yes | ||
| metadata | No | User-supplied metadata stored on a machine, provided directly or copied from the machine pool that provisions it. A restriction of Metadata that leaves room for one reserved pair - Omnara sets observed_platform on the machine to the platform reported by its daemon, so the key is reserved and at most 15 user pairs are accepted. | |
| secret_env | No | ||
| token_name | No | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| description | No | ||
| project_ids | No | ||
| display_name | Yes | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive write, but the description adds no behavioral context whatsoever: no mention of what a 'BYO machine' connection entails, what credentials or secrets are consumed, whether it is reversible, or how it relates to the org/project scope. The description carries none of the burden the sparse annotations leave open.
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?
It is short, but brevity here comes from under-specification rather than efficient information density. The single phrase adds nothing that the tool name and title do not already convey.
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 creation tool with 9 parameters, nested objects, low schema coverage, no output schema, and only sparse annotations, the description is wholly inadequate. An agent has no basis for choosing correct values for secret_env, project_ids, or metadata, nor for knowing what the call returns.
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 only 33% across 9 parameters, including nested objects (env, secret_env, metadata) and a reserved-key rule in metadata. The description mentions no parameters at all, so it does nothing to compensate for the undocumented fields.
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 is a verbatim restatement of the tool title, 'Connect a BYO machine'. While 'connect' is a verb and 'machine' is a resource, 'BYO' is unexplained jargon and nothing distinguishes this from siblings like machines_update, machines_get, or pools_create.
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?
There is no guidance on when to use this tool versus alternatives such as pools_create or machines_update, nor any stated prerequisites (e.g., needing an existing secret or project). The agent must infer everything from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
machines_deleteDelete machineADestructiveIdempotentInspect
Deletes a BYO machine, ends its active daemon runtimes and work, revokes its daemon tokens and project grants, and releases agent bindings. Pooled machines are managed through their machine pool and cannot be deleted through this route. There are no dependency blockers for a BYO machine.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| machineID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructive=true, idempotent=true and openWorld=false; the description goes well beyond that by itemising exactly what is destroyed (runtimes, in-flight work, daemon tokens, project grants, agent bindings) and confirming no dependency blockers exist. That is precisely the behavioural context an agent needs before issuing an irreversible delete.
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 tight sentences, front-loaded with the destructive scope and followed by the exclusion and the reassurance. Every clause carries information an agent would otherwise have to guess.
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 destructive, no-output-schema tool the description covers the blast radius and the eligibility constraint thoroughly. The only meaningful gap is operational: it doesn't state required permissions or whether the deletion is immediate versus soft, which matters for a high-impact call.
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 0% with two required parameters, so the description carries the burden — but it never names machineID or orgID, gives no format/pattern context (mch_..., org_...), and does not explain whether orgID is just a scope or has additional semantics. The mention of 'machine pool' hints at an alternative identifier path but is not tied to any parameter.
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 (deletes) and resource (BYO machine) and then enumerates the full cascade: daemon runtimes and work, daemon tokens, project grants, agent bindings. It also explicitly rules out a neighbouring resource class (pooled machines), so an agent can separate it from pools_delete at a glance.
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 when-not condition ('Pooled machines are managed through their machine pool and cannot be deleted through this route') and removes a common pre-flight worry by stating there are no dependency blockers for a BYO machine. It stops short of naming the sibling tool an agent should call instead for pooled machines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
machines_getGet machineCRead-onlyIdempotentInspect
Get machine
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| machineID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered elsewhere. The description adds nothing beyond that — no mention of auth requirements, error behavior for a missing machineID, or what happens with an orgID the caller can't access.
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?
Two words is not conciseness in a useful sense — it is under-specification. There is no front-loaded scope, precondition, or return information to earn 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?
For a two-required-parameter lookup with no output schema and no parameter descriptions, the definition should at minimum say what is retrieved and how the two identifiers relate. Neither is present, leaving the agent to infer everything except the safety hints.
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 0%: the two required parameters carry only regex patterns, no prose. The description does not explain that machineID identifies the machine and orgID scopes the lookup, so nothing compensates for the schema gap, though the parameter names are largely self-evident.
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?
Tautological: description restates name/title.
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?
There is no guidance on when to use this versus machines_list, machines_update, or grant_machines_list. The agent must infer the retrieval use case purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
machines_listList machinesCRead-onlyIdempotentInspect
Items are ordered by machine created_at descending, then machine id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| source_kind | No | Filter machines by source kind. Omit to include both BYO and pooled machines. | |
| machine_pool_id | No | Return only machines provisioned by this machine pool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true and openWorldHint=false, so the safety profile is fully covered. The description's one contribution is disclosing the default ordering (created_at desc, then id desc), which is genuinely useful when the sort parameter is omitted. It adds a small amount of context beyond the 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?
It is a single sentence with no padding, so there is no verbosity problem. However, the sentence chosen as the entire description carries an ordering detail rather than the essential purpose, so brevity here reflects under-specification rather than economical writing.
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 seven-parameter list tool with no output schema, the description omits any statement of what is returned, pagination expectations, or filter behavior, leaving the ordering note as the sole content. It is not adequate to tell an agent what calling this tool yields.
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 86%, so the schema already documents name, sort, limit, cursor, source_kind, and machine_pool_id in detail. The description only touches ordering, which loosely relates to the sort parameter's default, and adds no syntax or format information beyond the schema. Baseline 3 applies.
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 never states that the tool lists machines; it only describes the default ordering of items. The purpose is inferable solely from the name and title, which the description does nothing to confirm or extend. This is closer to an ordering footnote than a purpose statement.
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?
There is no guidance on when to use this tool versus siblings such as machines_get, pools_list, or grant_machines_list, and no conditions or prerequisites are mentioned. Nothing distinguishes this listing call from the other list operations in the toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
machines_updateUpdate machineCDestructiveInspect
Update machine execution defaults
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | ||
| env | No | ||
| orgID | Yes | ||
| machineID | Yes | ||
| secret_env | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, and the description adds nothing to that picture. It does not say whether the update replaces or merges existing defaults, whether fields are optional/partial, or what permissions are needed for a destructive, non-idempotent mutation. No contradiction with annotations, but near-zero added value.
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?
It is a single front-loaded fragment with zero padding, which is structurally fine. But for a 5-parameter destructive mutation the brevity reflects under-specification rather than disciplined conciseness.
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?
No output schema exists, so the description is the only place semantics could be filled in, and it leaves nested-object parameter behavior and required-parameter expectations unexplained. Annotations at least carry the safety profile, which keeps this above the floor, but the definition is far from complete for a tool of this complexity.
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 0% across 5 parameters, including two nested-object params (env, secret_env), so the schema does no explanatory work. The description offers only the loose hint that these are 'execution defaults' — it never clarifies cwd, env, secret_env, or the required orgID/machineID, so it fails to compensate for the coverage gap.
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 gives a verb ('Update') and a resource ('machine execution defaults'), so it is not a pure tautology of the name. However, 'execution defaults' is vague — it never names which fields (cwd, env, secret_env) are actually mutable, and it does not differentiate itself from siblings like machines_create or machines_get beyond the generic verb.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives or the machine_get/machines_list tools an agent would use to inspect state first. The agent is left to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_providers_catalogGet model provider catalogARead-onlyIdempotentInspect
Fetches the provider's live model catalog by validating the configured credential and probing the provider's /models endpoint. The call waits on the upstream provider, so it is slower than the other model provider config routes and can report failure as data.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| modelProviderConfigID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, and the description still adds meaningful traits: it blocks on the upstream provider (latency), validates the configured credential (a failure mode), and 'can report failure as data', which is important for how an agent should interpret the response. It does not discuss permissions or credential-rotation prerequisites, so 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?
Two sentences, zero filler, with the core action front-loaded and the latency/failure caveats after it. Every clause 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?
With no output schema, the description wisely warns that failures can arrive as data, which is the key interpretive detail an agent needs. The remaining gap is the unexplained parameters and no hint at return shape, but for a 2-param read-only tool this is close to complete.
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 0% for both required parameters, so the description carries the burden of explaining them and it says nothing about orgID or modelProviderConfigID. The patterned names are largely self-describing, but the description adds no semantics beyond 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?
Specific verb+resource: fetches the provider's live model catalog, and it explains the mechanism (validating the configured credential, probing the provider's /models endpoint). This clearly distinguishes it from the sibling model_providers_get (config retrieval) and models_list, which an agent can tell apart 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?
The sentence 'slower than the other model provider config routes' gives comparative guidance that steers an agent toward the cheaper config routes when a live catalog probe is not needed. However, it never names the alternative tool or states an explicit when-not condition, so usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_providers_createCreate model provider configAInspect
Create a model provider config, validate the configured credential where the provider exposes a validation endpoint, then probe the provider's /models endpoint. The result is returned as model_catalog; a failed probe does not fail creation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| preset | No | ||
| headers | No | Extra HTTP headers sent with every request to this provider. Values are stored and returned as plain text; use secret_headers for keys and tokens. | |
| base_url | No | Provider endpoint base URL. Normal API mode requires a public HTTPS endpoint; localhost and loopback endpoints are accepted only when the API is running in insecure dev mode. | |
| auth_kind | No | ||
| api_format | No | ||
| api_variant | No | ||
| auth_options | No | Non-secret authentication settings. Use an empty object with bearer_token. With api_key_header, set {"header_name":"..."}; Anthropic Messages defaults to {"header_name":"x-api-key"}. With sigv4, set the AWS signing service and region. | |
| endpoint_path | No | URL path under base_url. Defaults to /responses for OpenAI Responses, /chat/completions for Chat Completions, and /messages for Anthropic Messages. | |
| secret_headers | No | Extra HTTP headers whose values come from org-owned generic secrets, mapping header names to secret references. | |
| idle_timeout_ms | No | Maximum wait for response headers or the next response bytes, in milliseconds. Heartbeats count as activity. Defaults to 300000 (5 minutes). Local response processing does not consume this idle budget. | |
| request_timeout_ms | No | Total deadline for one provider attempt, including reasoning and response streaming, in milliseconds. Defaults to 3600000 (60 minutes). Retries have separate deadlines. | |
| credential_secret_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-readonly, non-idempotent, non-destructive create. The description adds real behavioral value beyond them: it discloses that the credential is validated when the provider exposes a validation endpoint, that /models is probed, that the catalog comes back as model_catalog, and that a failed probe does not fail creation. It stops short of stating permission requirements, duplicate-name failure behavior, or reversibility.
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?
Two tight sentences, front-loaded with the primary action and then the side effects and their failure semantics. No filler or restatement of the name.
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 tool with nested objects (auth_options, secret_headers, headers) and no output schema, the description covers the creation flow and return shape at a high level but leaves the parameter surface entirely to the schema. It is adequate for orientation, not for confident invocation of a complex configuration object.
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?
Fourteen parameters with only 57% schema description coverage, and the description mentions none of them. Parameters like preset, api_format, api_variant, auth_kind, orgID, and credential_secret_id are left to the schema alone, and the description does nothing to compensate for the uncovered ones or to explain how base_url/auth_kind/auth_options interact.
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 ('Create a model provider config') and goes further by naming the two post-creation behaviors it triggers (credential validation, /models probe). An agent can distinguish this from model_providers_update or model_providers_get 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?
Usage is implied by the name and the create semantics, but the description never says when to reach for this versus model_providers_update, when a `preset` should be used instead of explicit base_url/auth fields, or what the prerequisites (e.g. an existing secret) are. No exclusions or alternatives are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_providers_deleteDelete model provider configADestructiveIdempotentInspect
Deletes only the model provider config. Deletion is blocked while it has configured models. Cluster-managed provider configs cannot be deleted through this route.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| modelProviderConfigID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=false. The description adds genuine context beyond that: the deletion scope (config only), the model-dependency blocking rule, and the cluster-managed restriction, all of which affect whether the call will succeed.
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 short sentences, each carrying a distinct constraint (scope, model-blocking rule, cluster-managed exclusion) with no filler. Front-loaded with the core action.
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 destructive mutation with no output schema, the description covers the key operational risks (dependency blocking, cluster-managed exclusion) that annotations alone do not. It is nearly complete, missing only parameter-level detail.
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 0%, so neither orgID nor modelProviderConfigID is documented in the schema, and the description does not compensate by explaining either parameter's meaning or format beyond the descriptive names and regex patterns.
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 ("Deletes ... the model provider config") and the qualifier "only" distinguishes it from models_delete by scoping exactly what is removed. An agent can separate this from model_providers_update/get/list 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 clear preconditions: deletion is blocked while configured models exist, and cluster-managed configs cannot be deleted via this route. These are explicit when-not conditions, though no alternative tool is named for those blocked cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_providers_getGet model provider configCRead-onlyIdempotentInspect
Get model provider config
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| modelProviderConfigID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds nothing on top of that — no note on error behavior for unknown IDs, no auth/permission 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?
Brevity here is under-specification rather than conciseness; four words that duplicate the title carry no information beyond the function name. No front-loaded scoping or constraints because none exist.
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 simple read-only retrieval of two clearly named identifiers, the annotations and schema supply most of what an agent needs to invoke it, so the definition is minimally viable. It remains incomplete in that it says nothing about the returned config contents or failure modes.
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 0%, so the description must carry parameter meaning — and it supplies none. Both required parameters (orgID, modelProviderConfigID) are only inferable from their names and regex patterns in the schema, with no explanation of their relationship or provenance.
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?
Tautological: description restates name/title.
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?
No when-to-use guidance, no alternatives named. Nothing indicates when to call this rather than model_providers_list or model_providers_catalog, nor that it requires a specific ID returned from a prior create/list call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_providers_listList model provider configsARead-onlyIdempotentInspect
List model provider configs with server-side filtering, sorting, and cursor pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-destructive, idempotent read operation, so the safety profile is covered. The description adds that filtering/sorting/pagination happen server-side, which is genuinely useful behavioral context, but it says nothing about default page size, ordering defaults, or any access constraints on orgID scope.
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?
A single front-loaded sentence naming the resource and its three query capabilities, with zero filler. It would be hard to trim without losing information.
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 list tool with annotations covering the safety profile and an 80%-documented schema, this covers the essentials; the cursor description in the schema even implies the next_cursor return field. It stops short of noting anything about the required orgID scope or default result ordering.
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 80%, so the schema already explains name (glob), sort, limit, and cursor in detail. The description only re-summarizes those capabilities at a high level and adds nothing about the required orgID parameter, which is undocumented in the schema. Baseline 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?
States a specific verb ('List') and resource ('model provider configs'), which is unambiguous. It does not differentiate itself from closely named siblings such as model_providers_catalog or model_providers_get, but the list semantics are clear from the name and description combined.
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 mention of server-side filtering, sorting, and cursor pagination implies how the tool is meant to be used (querying a collection), but there is no explicit when-to-use guidance and no reference to alternatives like model_providers_get or the catalog tool. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_providers_updateUpdate model provider configDDestructiveIdempotentInspect
Update model provider config
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| headers | No | Extra HTTP headers sent with every request to this provider. Values are stored and returned as plain text; use secret_headers for keys and tokens. Replaces all headers when provided. | |
| base_url | No | Provider endpoint base URL. Normal API mode requires a public HTTPS endpoint; localhost and loopback endpoints are accepted only when the API is running in insecure dev mode. | |
| auth_kind | No | ||
| auth_options | No | Non-secret authentication settings. Use an empty object with bearer_token. With api_key_header, set {"header_name":"..."}. With sigv4, set the AWS signing service and region. | |
| endpoint_path | No | URL path under base_url. This changes where requests are sent, not which API format Omnara speaks. | |
| secret_headers | No | Extra HTTP headers whose values come from org-owned generic secrets, mapping header names to secret references. Replaces all secret headers when provided. | |
| idle_timeout_ms | No | Maximum wait for response headers or the next response bytes, in milliseconds. Heartbeats count as activity. Local response processing does not consume this idle budget. | |
| request_timeout_ms | No | Total deadline for one provider attempt, including reasoning and response streaming, in milliseconds. Retries have separate deadlines. | |
| credential_secret_id | No | ||
| modelProviderConfigID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered by structured fields; the description adds nothing on top. It does not disclose the notable replace-semantics behavior implied by the schema (headers and secret_headers are said to replace all existing values), nor any permission requirements.
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?
It is short, but this is under-specification rather than conciseness: the single sentence carries no content and wastes the opportunity to front-load scope or requirements. Every sentence should earn its place, and this one merely echoes the title.
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 destructive 11-parameter mutation across a nested config object with no output schema, the description is completely inadequate. It leaves the agent with no notion of required identifiers, replacement semantics, or validation constraints that the schema only partially spells out.
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?
With 11 parameters and only 64% schema description coverage, the description provides zero parameter meaning to compensate for the undocumented parameters (auth_kind, credential_secret_id, modelProviderConfigID). The rich field-level docs live in the schema, and the description adds nothing.
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?
Tautological: description restates name/title.
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?
There is no guidance on when to use this tool versus siblings, nor any mention of prerequisites such as needing an existing modelProviderConfigID or orgID. Nothing steers an agent between update/create/get in the model_providers_* family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_createCreate configured modelCInspect
Create configured model
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| supports_tools | No | Whether this configured model can receive tool definitions and emit tool calls. Agent configs with enabled tools are rejected when this is false. | |
| input_modalities | No | Input types this configured model accepts. Omnara recognizes text, image, and file; an empty list leaves capabilities unspecified. | |
| max_output_tokens | No | Optional known output-token ceiling. Omitted capacity remains unknown; selecting a discovered model can supply its published ceiling. Explicit values must not exceed the provider's supported limit. | |
| output_modalities | No | Output types this configured model can return. Omnara currently consumes text output. | |
| supports_reasoning | No | Whether Omnara should use this model's reasoning features. For OpenAI Responses, this also enables encrypted reasoning replay for stateless calls. | |
| api_variant_options | No | Extra top-level JSON fields to include in provider requests for this configured model. Use this for provider-specific settings that Omnara does not expose as typed fields, such as OpenRouter `provider` routing or sampling parameters. Omnara still controls the fields it needs to run the agent correctly, including the model, prompt/messages, streaming, tools, output-token limit, and selected reasoning policy. Provider passthrough values for those fields are ignored. For OpenRouter routing options, see https://openrouter.ai/docs/guides/routing/provider-selection and general request parameters at https://openrouter.ai/docs/api/reference/parameters. Omnara-managed OpenRouter providers accept only sampling, reasoning, and per-model routing options here. | |
| provider_model_slug | Yes | Exact provider model slug sent to the provider endpoint. Free-pool, `:online`, and preset model ids are not accepted on Omnara-managed OpenRouter providers. | |
| context_window_tokens | Yes | Context budget for input and output tokens. Triggers compaction when estimated input exceeds the remaining budget after output and safety reserves. The turn fails if compaction cannot make it fit. | |
| modelProviderConfigID | Yes | ||
| default_cache_retention | No | Prompt-cache preference for model requests; `short` when omitted. `short` applies the route's default caching (explicit cache breakpoints where the provider requires them) and, where the route accepts one, a stable conversation key for cache-aware routing. `long` prefers the route's extended cache lifetime where one exists (currently Anthropic's one-hour cache, which on Bedrock requires Claude 4.5 or newer) and behaves like `short` elsewhere. `none` sends no Omnara-managed cache controls or conversation key; providers may still cache prefixes on their own. | |
| default_reasoning_effort | No | Default reasoning effort to send for models/API formats that support effort-style reasoning controls. Requires supports_reasoning=true. When supported_reasoning_efforts is present, this value must be listed there. | |
| default_max_output_tokens | No | Optional normal per-request output allowance. Discovery never populates this field. When omitted, requests use the known output ceiling. If both are absent, Messages uses 64000 tokens; other formats omit the allowance. Runtime allowances are fitted to available context. | |
| supported_reasoning_efforts | No | Reasoning effort values this configured model accepts. Requires supports_reasoning=true when non-empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds nothing on top: no mention of required auth/org scoping, validation failure modes, what is created or returned, or whether the operation is idempotent. For a 15-parameter creation tool, this is a real gap.
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 words with no waste, but the brevity is under-specification rather than conciseness. There is no front-loaded intent beyond the title, and no sentence earns additional informational value.
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 tool with 15 parameters, a nested object parameter, five required fields, and no output schema, the description is completely inadequate. Nothing tells the agent about dependencies between fields (e.g., supported_reasoning_efforts requiring supports_reasoning), which the schema only partially encodes, and no return expectation is set.
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 87%, so the schema itself already documents nearly every parameter in depth (including constraints like provider_model_slug rejection of free-pool ids and reasoning-effort coupling). The description provides zero parameter meaning beyond that, which lands at the baseline of 3 when the schema carries the load.
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?
Tautological: description restates name/title.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives. An agent cannot tell from this text whether a model must first be registered via model_providers_create, or when to prefer models_update over recreating. No guidance is offered at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_deleteDelete configured modelADestructiveIdempotentInspect
Deletes only the configured model. Deletion is blocked while it has active project grants. Cluster-managed configured models cannot be deleted through this route.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| configuredModelID | Yes | ||
| modelProviderConfigID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true and idempotent=true, so the safety profile is covered. The description adds value beyond that by disclosing two concrete failure modes (active project grants block deletion; cluster-managed models are out of scope), which is genuinely 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?
Three compact sentences, front-loaded with the core action and then the constraints. No filler or 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?
For a destructive mutation with no output schema, the description covers scope and blocking conditions well, and annotations carry the destructive/idempotent profile. It stops short of describing the success response or required permissions/authentication, a minor gap.
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 0% for three required ID parameters, each only carrying a regex pattern. The description offers no information about what configuredModelID, modelProviderConfigID, or orgID refer to or how they relate, so it fails to compensate for the schema gap.
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: 'Deletes only the configured model.' The word 'only' plus the two scope caveats sharpen it against siblings like model_providers_delete, models_update, or machines_delete, though it never names the neighboring model tools explicitly.
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?
Provides real preconditions — deletion is blocked with active project grants, and cluster-managed configured models cannot be deleted via this route — which tell the agent when the call will fail. It does not, however, point to alternatives (e.g. how to delete a cluster-managed model) or contrast with models_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_listList configured modelsCRead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| modelProviderConfigID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds ordering semantics (created_at descending, then id descending), which is useful behavioral context beyond annotations. It does not mention authentication, rate limits, or pagination return behavior, so it is only a partial addition.
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 single sentence is concise and does earn its place by disclosing sort order. However, it is not front-loaded with the tool's purpose, and for a four-parameter list tool the structure omits essential context. Brevity without purpose makes it feel incomplete rather than optimally concise.
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?
There is no output schema, so the description should carry more of the return and pagination story, yet it only describes ordering. Required parameters orgID and modelProviderConfigID remain unexplained, and the tool's core purpose is absent. Given the complexity of paginated list tools, this is inadequate.
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 50%: limit and cursor are documented, but orgID and modelProviderConfigID have no schema description. The tool description adds no parameter meaning at all, so it fails to compensate for the undocumented required IDs. It only describes ordering, which is not a parameter.
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 never states what the tool does; it only reports sort order for returned items. The name and title imply 'list configured models', but the description itself supplies no verb or resource. This falls short of a purpose statement and does nothing to distinguish models_list from siblings like models_create or models_update.
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?
There is no guidance on when to use this tool versus alternatives. Siblings such as models_create, models_update, models_delete, and model_providers_list exist, but the description gives no conditions, prerequisites, or exclusions. An agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_updateUpdate configured modelCDestructiveIdempotentInspect
Update configured model
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| supports_tools | No | Whether this configured model can receive tool definitions and emit tool calls. Agent configs with enabled tools are rejected when this is false. Omitted keeps the current value. | |
| input_modalities | No | Input types this configured model accepts. Omnara recognizes text, image, and file; an empty list leaves capabilities unspecified. | |
| configuredModelID | Yes | ||
| max_output_tokens | No | Known output-token ceiling for this model. Omitted keeps the current value. Null clears it to unknown for every API format. | |
| output_modalities | No | Output types this configured model can return. Omnara currently consumes text output. | |
| supports_reasoning | No | Whether Omnara should use this model's reasoning features. For OpenAI Responses, this also enables encrypted reasoning replay for stateless calls. Omitted keeps the current value. | |
| api_variant_options | No | Extra top-level JSON fields to include in provider requests for this configured model. Use this for provider-specific settings that Omnara does not expose as typed fields, such as OpenRouter `provider` routing or sampling parameters. Omnara still controls the fields it needs to run the agent correctly, including the model, prompt/messages, streaming, tools, output-token limit, and selected reasoning policy. Provider passthrough values for those fields are ignored. For OpenRouter routing options, see https://openrouter.ai/docs/guides/routing/provider-selection and general request parameters at https://openrouter.ai/docs/api/reference/parameters. Omnara-managed OpenRouter providers accept only sampling, reasoning, and per-model routing options here. | |
| provider_model_slug | No | Exact provider model slug sent to the provider endpoint. Free-pool, `:online`, and preset model ids are not accepted on Omnara-managed OpenRouter providers. | |
| context_window_tokens | No | Context budget for input and output tokens. Triggers compaction when estimated input exceeds the remaining budget after output and safety reserves. The turn fails if compaction cannot make it fit. | |
| modelProviderConfigID | Yes | ||
| default_cache_retention | No | Prompt-cache preference for model requests; `short` when omitted. `short` applies the route's default caching (explicit cache breakpoints where the provider requires them) and, where the route accepts one, a stable conversation key for cache-aware routing. `long` prefers the route's extended cache lifetime where one exists (currently Anthropic's one-hour cache, which on Bedrock requires Claude 4.5 or newer) and behaves like `short` elsewhere. `none` sends no Omnara-managed cache controls or conversation key; providers may still cache prefixes on their own. | |
| default_reasoning_effort | No | Default reasoning effort to send for models/API formats that support effort-style reasoning controls. Requires supports_reasoning=true. When supported_reasoning_efforts is present, this value must be listed there. | |
| default_max_output_tokens | No | Optional per-request output allowance unless a project or agent overrides it. Without a default or known ceiling, Messages uses 64000 tokens; other formats omit the allowance. | |
| supported_reasoning_efforts | No | Reasoning effort values this configured model accepts. Requires supports_reasoning=true when non-empty. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known. The description adds no behavioral context: it does not explain what gets changed, what required IDs mean, whether omitted fields are preserved, or how destructive effects behave. With annotations carrying the safety burden, the near-total absence of additional context merits a low 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?
The description is extremely short, but it is under-specified rather than concisely informative. It contains no structure or front-loaded useful information beyond the tool title, so it fails the 'every sentence earns its place' standard by having no substantive sentence at all.
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?
This is a destructive mutation tool with 16 parameters and a nested object schema. The description says nothing about required IDs, update semantics, nullable clearing behavior, or provider-specific restrictions. Although annotations and a detailed schema provide some scaffolding, the description is far too sparse for the tool's complexity.
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 81%, which is high, so the schema already documents most parameters in detail. The description adds no parameter meaning at all. When schema coverage is high, a baseline of 3 is appropriate even if the description contributes nothing.
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?
Tautological: description restates name/title.
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?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no context about what conditions make an update appropriate. The description offers nothing beyond the bare tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
orgs_createCreate organizationAInspect
Creates the organization and its local default resources atomically. An idempotency key determines the proposed organization ID; replaying it returns the existing organization. Without a key, each request is a fresh attempt. Optional default-provider provisioning begins after commit and retries asynchronously without failing organization creation.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the generic safety profile (readOnly=false, destructive=false, idempotent=false); the description goes well beyond that with atomicity of org plus default resources, replay semantics tied to an idempotency key, and the fact that optional provider provisioning happens post-commit, retries asynchronously, and never fails organization creation. That last point is exactly the kind of partial-failure behavior an agent could not infer from the schema or hints.
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 tight sentences, front-loaded with the core action and its atomic scope, then escalating to replay semantics and finally deferred async provisioning. Every sentence conveys a distinct operational fact; nothing is restated from the title, annotations, or schema.
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 carries the return-value burden and partially discharges it by stating that a replay returns the existing organization, but it never describes the shape of a first-time response (e.g., the new organization ID), which an agent needs to chain follow-up calls. Combined with the unaddressable idempotency-key mention, one small gap remains, but behavior for a single-parameter mutation tool is otherwise well 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 description coverage is 100% for the single 'name' parameter, so the baseline is 3 and the description adds no name-level semantics (length, normalization, allowed characters) beyond what the schema states. It also references an 'idempotency key' that does not appear anywhere in the input schema and which additionalProperties:false forbids, so the mention adds ambiguity rather than parameter clarity.
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 concrete verb+resource ('Creates the organization') and adds scope ('and its local default resources atomically'), so an agent immediately knows this is the org-creation entry point. It never names or contrasts a sibling, but none of the listed siblings is a competing org-creation tool, so the risk of misselection is low.
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?
Usage is implied by the verb, and the idempotency-key paragraph implicitly tells the agent when to supply a key (retry/replay safety) versus not ('without a key, each request is a fresh attempt'). However, there is no explicit when-to-use/when-not framing, no prerequisite or permission guidance, and no reference to alternatives such as orgs_list for verifying an existing organization.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
orgs_listList organizationsARead-onlyIdempotentInspect
Users get every organization they belong to; org API keys get the organization that issued them. Items are ordered by organization name ascending.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so safety is covered. The description earns credit beyond them by disclosing auth-dependent result scope (user key vs org API key) and a deterministic ascending-name ordering, which the annotations cannot express. It stops short of stating whether the result is truncated or paginated.
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?
Two sentences, both load-bearing: the first gives scope conditional on credentials, the second gives ordering. Scope is front-loaded with zero filler or restated name.
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 must carry the return contract, and it does reasonably well: it says what set is returned per auth mode and how items are ordered. It omits the shape of an organization item and any size/truncation limits, which is a minor gap for a simple list.
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 tool takes no parameters, so the baseline of 4 applies. Schema coverage is 100% (empty object), leaving nothing for the description to compensate for.
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 ('get every organization they belong to') and immediately qualifies the scope by authentication mode, which is the key ambiguity for a list tool with no filters. No sibling tool overlaps (no other orgs_* tool exists), so the agent can select it unambiguously.
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?
Usage is implied by the scope statement rather than stated: there is no when-to-use advice, no mention that this tool takes no filters, and no alternative named. With zero parameters and no filtering siblings, there is little to mis-route, but the description never explicitly frames call conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pools_createCreate machine poolAInspect
Creates a machine pool in the organization. The body carries the pool name, the provider (arker, blaxel, boxd, createos, daytona, freestyle, modal, tenki, or unikraft), the provider auth secret, default machine settings, and the per-machine and total CPU, memory, and machine-count limits the provider supports; the required fields depend on the provider. See the createMachinePool operation in the Omnara API reference at https://docs.omnara.com/api-reference for the full request schema.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| orgID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the write nature is covered; the description adds real value by enumerating the provider set and warning that required fields vary by provider. It omits whether re-invocation creates duplicates (idempotentHint=false), what the call returns, and how pool machines get provisioned, none of which the annotations convey.
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?
Two sentences, front-loaded with the action and then the body contents; the provider list and the reference link are packed in without filler. The second sentence is dense and run-on, but nothing is wasted.
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 complex mutation with nested oneOf provider variants, no output schema, and annotations already covering the safety profile, the description is complete enough: it covers the resource created, the body's major field groups, the provider-dependent required fields, and defers the full request schema to the linked API reference. Return value need not be described since no output schema exists and the reference is cited.
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?
With 0% schema description coverage on the body's properties, the description carries the parameter burden and does so reasonably: it names the pool name, provider, provider auth secret, default machine settings, and the per-machine/total CPU, memory, and machine-count limits. It does not explain orgID or the exact per-provider field matrix, but the provider-dependency caveat compensates substantially.
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 ('Creates a machine pool in the organization'), and the scope (organization) is explicit. It is trivially distinguishable from siblings pools_update, pools_delete, pools_get, and pools_list.
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?
Usage is only implied by the verb 'creates' — there is no explicit 'use this instead of X when Y', no prerequisites (e.g. required org permissions), and no note that pools_update should be used for changes to an existing pool. The provider-dependent required-field caveat is helpful context but is a schema fact, not usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pools_deleteDelete machine poolADestructiveIdempotentInspect
Deletes the machine pool and its pooled machines, revokes generated machine grants and project machine-pool grants, and stops processes that depended on those grants. Deleting a cluster-managed machine pool is rejected with 409 Conflict; there are no other dependency blockers.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| poolID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already flagging destructiveHint and idempotentHint, the description adds real value: it enumerates the destroyed entities (pooled machines, generated machine grants, project machine-pool grants), the stopped processes, and the one failure mode (409 on cluster-managed pools). This is behavior detail beyond what annotations carry.
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?
Two sentences, front-loaded with the primary destructive effect followed by the edge case, with zero filler. Every clause 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?
With no output schema, the description need not explain return values, and it fully covers the side effects and the one blocker for a destructive tool. An agent has enough to invoke it 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 0% and the description says nothing about orgID or poolID, their expected format, or scoping. It fails to compensate for the coverage gap, though the parameter names are fairly self-explanatory.
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 ('Deletes') and resource ('machine pool') and names the cascading scope (pooled machines, grants, processes). This is clearly distinguishable from siblings like pools_update, pools_list, and pools_get.
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 an explicit precondition for failure: cluster-managed pools are rejected with 409 Conflict, and it asserts there are no other dependency blockers. It does not name an alternative tool or spell out when to prefer another operation, but the constraint context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pools_getGet machine poolDRead-onlyIdempotentInspect
Get machine pool
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| poolID | Yes |
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 nothing beyond that — no mention of scope, error behavior (e.g. what happens for an unknown poolID), or return shape.
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 words carry no waste but also earn nothing — the single sentence is under-specification rather than effective conciseness, contributing no information an agent can act on.
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, two fully undocumented parameters, and a description that merely echoes the title, an agent has nothing beyond the annotations to confirm correct invocation. The definition is inadequate for even a simple lookup tool.
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 0% and the description supplies no parameter meaning at all. The patterns encode format but not semantics, so both orgID and poolID remain unexplained in description and schema alike.
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?
Tautological: description restates name/title.
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?
There is no guidance on when to use this tool versus pools_list or grant_pools_get, and no stated prerequisites. The only implied usage is that it fetches a single pool by ID, which an agent must infer from the required orgID/poolID parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pools_listList machine poolsARead-onlyIdempotentInspect
List machine pools with server-side filtering, sorting, and cursor pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by specifying that filtering and sorting are server-side and that pagination is cursor-based, which goes beyond the annotations and helps the agent understand the call semantics.
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 a single, front-loaded sentence with no wasted words. It communicates the core action and the key operational features immediately.
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 list tool with rich annotations and a highly descriptive input schema, the description covers the essential operation and pagination model. It does not describe the return payload or next_cursor behavior directly, but no output schema is provided and the cursor parameter documentation in the schema compensates for that gap.
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 80%, so the input schema already documents nearly all parameters thoroughly, including glob syntax, sort enums, limit bounds, and cursor usage. The description only generically references filtering, sorting, and pagination and does not add parameter-level meaning beyond the schema, so the baseline 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?
States a specific verb ('List') and resource ('machine pools'), and it is immediately distinguishable from sibling tools like pools_get, pools_create, and pools_update. The additional mention of filtering, sorting, and pagination clarifies the tool's scope without ambiguity.
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?
No explicit guidance is given about when to use this tool versus alternatives such as pools_get or other list tools. The description implies a list operation but does not state prerequisites, exclusion conditions, or when a different tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pools_updateUpdate machine poolBDestructiveIdempotentInspect
Tenant-managed pools support every request field. Cluster-managed pools only allow changes to default CPU and memory, environment and secret environment variables, provider-supported per-machine CPU and memory limits, and the idle deletion policy. Other cluster-managed changes are rejected with 409 Conflict.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| poolID | Yes | ||
| metadata | No | User-supplied metadata stored on a machine, provided directly or copied from the machine pool that provisions it. A restriction of Metadata that leaves room for one reserved pair - Omnara sets observed_platform on the machine to the platform reported by its daemon, so the key is reserved and at most 15 user pairs are accepted. | |
| default_cwd | No | ||
| description | No | ||
| max_total_cpu | No | ||
| max_machine_cpu | No | ||
| min_machine_cpu | No | ||
| provider_config | No | ||
| max_total_machines | No | ||
| default_machine_cpu | No | ||
| default_machine_env | No | Default environment for pool machines. A machine's environment, including resolved secret_env values, is applied to the provider machine at provisioning, so the provider_options startup_script and the daemon run with it, and is resolved again for each process at launch. | |
| max_total_memory_mb | No | ||
| max_machine_memory_mb | No | ||
| min_machine_memory_mb | No | ||
| provider_auth_secret_id | No | ||
| default_machine_memory_mb | No | ||
| delete_after_idle_minutes | No | Idle minutes before deleting a machine from this pool. Null clears the pool default; omitted leaves it unchanged. | |
| default_machine_secret_env | No | Default secret environment for pool machines, mapping env names to generic secret references. References are resolved to secret values wherever the machine environment is applied. | |
| runtime_protection_enabled | No | Whether Omnara should delete a pool machine when its provider remains running after its daemon becomes inactive. | |
| default_machine_provider_options | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description goes beyond them by disclosing the cluster-managed restriction set and the exact failure mode (409 Conflict) for disallowed changes. That is genuinely additive behavioral context, though it says nothing about permission requirements or reversibility.
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 tight sentences with the tenant-vs-cluster distinction front-loaded and the 409 consequence last. No filler, though the field enumeration could be trimmed and no example values are offered.
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 destructive mutation on a 22-parameter schema at 27% coverage, the description supplies the most important safety caveat (cluster-managed rejection) but leaves the bulk of parameters and any idempotency/merge semantics unexplained. No output schema, so return values need not be 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 only 27% across 22 parameters, so the description carries a heavy burden. It names a subset of editable fields (default CPU/memory, env and secret env vars, per-machine limits, idle deletion policy) but leaves most parameters (name, metadata, description, default_cwd, provider_config, *_total_* fields) undocumented in both schema and 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?
The name and title establish a specific verb+resource (update a machine pool), and the description adds meaningful scope by distinguishing tenant-managed vs cluster-managed pools. It never explicitly restates the update action or differentiates itself from siblings like pools_create/pools_delete, so a 4 rather than 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?
It implies usage by describing which fields are editable per pool type, but never states when to reach for this tool over alternatives (e.g. pools_create for new pools), nor any prerequisite/auth context. Useful constraint info, but no real routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_createCreate agent profileDInspect
Create agent profile
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| config | Yes | ||
| projectID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is a non-read-only, non-idempotent, non-destructive write, but the description adds no behavioral context of its own — no note on what gets created, whether duplicates are rejected, or what permissions are required. With annotations carrying the safety profile, this is a minimal but not misleading definition.
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?
A four-word sentence is technically concise but is under-specified rather than efficient — brevity here is a symptom of missing information, not editorial discipline.
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 mutation tool with four required parameters, three of them pattern-constrained IDs, and no output schema, the description supplies nothing an agent needs to call it correctly: not the meaning of the parameters, not the prerequisites, not the effect of the call.
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 only 25% (just the name field), and three required parameters (orgID, config, projectID) are documented only by regex patterns. The description makes no attempt to explain that these are opaque ID references or what values are valid, leaving the coverage gap entirely unaddressed.
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?
Tautological: description restates name/title.
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?
There is no when-to-use guidance, no mention of prerequisites (e.g. needing an existing config, org, and project), and no reference to the many related sibling tools such as profiles_update or profiles_delete. The agent is left to infer everything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_deleteDelete agent profileADestructiveIdempotentInspect
Deletes the profile, all of its profile versions, and any cron triggers targeting the profile. Agents launched from the profile are retained and keep running: each agent holds an immutable snapshot of the configuration it was launched with, so its reference to the profile becomes historical provenance only. Integration settings may retain the public profile ID; future launches fail as unavailable until those settings reference an available profile.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| agentProfileID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it discloses exactly what is destroyed (profile, all versions, cron triggers), what survives (launched agents run on an immutable snapshot), and residual side effects (integration settings retain the public ID and future launches fail until re-pointed). This is precisely the context an agent needs before an irreversible call.
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 cascade scope, then the retention guarantee and the integration caveat. Every sentence carries information; the final sentence is slightly dense but earns its place by warning about broken future launches.
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 no-output-schema delete tool, the description is complete: it covers the deletion scope, the survival semantics for dependent agents, and the downstream failure mode. Nothing an agent needs in order to invoke this correctly is missing, and the annotations cover safety and idempotency.
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 0%, so the description carries the burden of explaining the three IDs, and it does not discuss them at all. The parameter names (orgID, projectID, agentProfileID) plus their regex patterns are largely self-explanatory, so the gap is mild, but no format or scoping meaning is added beyond 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 and resource ('Deletes the profile') and immediately delimits scope by enumerating the cascade: profile versions and cron triggers. This distinguishes it cleanly from siblings like profiles_update, profiles_rename, and profiles_create, which mutate or create rather than destroy.
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 conveys the destructive extent, which implicitly helps an agent decide whether this is the right call versus a lighter tool like profiles_rename or agents_archive, but it never explicitly says when to use this over alternatives or names any sibling. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_getGet agent profileDRead-onlyIdempotentInspect
Get agent profile
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| projectID | Yes | ||
| agentProfileID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing on top of that – no note about requiring an existing profile, error behavior for missing IDs, or return shape.
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?
It is a single short sentence, but this is under-specification rather than conciseness – the brevity comes from omitting all substantive content, not from tight editing. There is nothing to front-load because nothing is said.
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 3-required-parameter lookup with no output schema, the description should at least state which resource instance is retrieved and how the IDs scope it. Annotations cover the safety profile, but the description is not complete enough for an agent to call this tool confidently.
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?
All three parameters (agentProfileID, orgID, projectID) have 0% schema description coverage and carry format patterns only. The description mentions none of them, so the agent gets no semantic explanation of the required identifiers and their scoping relationship.
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?
Tautological: description restates name/title.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as profiles_list (for enumeration) or agents_get (possibly overlapping resource). The agent must guess the boundary between this tool and its neighbors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_listList agent profilesCRead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes | ||
| stats_since | No | Start of the window `stats.usage` tallies, with `include_stats`. Omit to tally from the earliest recorded call. | |
| include_stats | No | Include each profile's `stats`, so a list can show instance counts and usage without a request per profile. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a read-only, idempotent, non-destructive, closed-world operation. The description adds only the default sort order (created_at descending, then id descending), which is marginally useful but omits richer behavioral details such as pagination behavior, filtering interplay, or the effect of include_stats. The ordering note is the sole addition beyond structured fields.
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 a single, efficient sentence with no waste. However, it is not front-loaded with the tool's purpose, which is absent entirely.
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 an 8-parameter list tool with no output schema and annotations covering safety, the description is incomplete: it omits what the tool returns, how pagination works, the role of required orgID/projectID, and when to use it. It addresses only default ordering.
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 75%, so most parameters are documented in the schema. The description adds the default ordering (created_at desc, id desc), which is not explicit in the schema, but it doesn't explain the sort parameter's override behavior or how it interacts with the default. Baseline 3 is appropriate given the schema already covers most semantics.
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 never states that this tool lists agent profiles; it only describes the ordering of items. The tool's actual purpose must be inferred from the name and title, which the description merely restates in behavioral terms. It is a tautological restatement rather than a clear verb+resource statement.
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?
There is no guidance on when to use this tool versus alternatives like agents_list or profiles_get. No context, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_renameRename agent profileDDestructiveInspect
Rename agent profile
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| projectID | Yes | ||
| agentProfileID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=false, and openWorldHint=false, so the safety profile is carried by structured data. The description contributes nothing further — no statement of why a rename is flagged destructive, what prior name is lost, or what permissions/scoping the orgID and projectID require.
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 words with no filler, but this is under-specification rather than conciseness — there is no front-loaded scope, target, or effect statement to earn the space it omits.
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?
A mutation tool with four required parameters, low schema coverage, and no output schema needs real description effort. The one-line restatement leaves an agent with nothing about required scoping, naming constraints beyond the schema, or the effect of the operation.
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 only 25%: just the 'name' parameter is documented, and only for allowed characters. The three ID parameters (agentProfileID, orgID, projectID) have patterns but no prose, and the description does not compensate by explaining which identifiers are needed or how the profile is located.
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?
Tautological: description restates name/title.
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?
No guidance about when to use this tool versus alternatives such as profiles_update, nor any prerequisites or exclusions. The agent must infer entirely from the name that this is the narrow path for changing an existing profile's display name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_updateUpdate agent profileDDestructiveInspect
Update agent profile
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| config | Yes | ||
| projectID | Yes | ||
| agentProfileID | Yes | ||
| expected_current_config_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered structurally. However, the description contributes zero behavioral context of its own: it does not mention that this overwrites configuration, what the required expected_current_config_id concurrency token implies, or any permissions needed. No contradiction with annotations, but no added value either.
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?
Brevity here is under-specification rather than conciseness. A single restated phrase cannot be considered front-loaded or well-structured when there is no substantive content to structure.
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?
A destructive, non-idempotent mutation with five required parameters, no output schema, and no parameter descriptions needs the description to carry the burden of behavior, preconditions, and parameter meaning. It carries none of it.
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?
Five required parameters at 0% schema description coverage, and the description explains none of them. The semantics of config, expected_current_config_id (clearly an optimistic-concurrency token), and the org/project scoping are left entirely undocumented.
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?
Tautological: description restates name/title.
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?
No when-to-use guidance, no prerequisites, and no reference to any alternative tool. An agent gets no signal about when profiles_update is preferred over profiles_rename or agents_update.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_createCreate projectCInspect
Create project
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing on top of that — no mention of validation rules, uniqueness constraints, or what is returned.
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?
Two words are technically concise but the brevity is under-specification rather than efficiency; there is no front-loaded information beyond the title the agent already sees.
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 mutation tool with two required parameters, an undocumented orgID reference, no output schema, and a large sibling namespace, the description leaves an agent without enough information to call it correctly or know what it produces.
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 only 50%: name is documented in the schema but orgID carries only a pattern regex with no prose explanation. The description does not compensate by explaining that orgID identifies the owning organization or that name must be unique.
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?
Tautological: description restates name/title.
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?
There is no guidance on when to create a project versus listing one, nor any prerequisites (org membership, quotas, permissions). The only sibling named in the family, projects_list, is never referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_listList projectsCRead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description does add one genuinely useful trait beyond annotations — the deterministic sort order (created_at desc, then id desc) — but omits pagination behavior and what a page returns.
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?
One efficient, front-loaded sentence with no waste. However, its brevity stems from under-specification rather than tight expression, so it is concise but not adequately informative.
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 list tool with no output schema, the description should convey what a project is and what the response contains, but it covers only ordering. Combined with an undocumented orgID, it is incomplete even for a simple read endpoint.
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?
With 67% schema description coverage, the schema documents limit and cursor but leaves orgID (pattern only) unexplained, and the description adds zero parameter meaning. It does not compensate for the coverage gap or clarify the org scoping requirement.
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 never states what the tool does; it only describes result ordering. The purpose ('list projects') is inferable solely from the name and title, making the description effectively silent on the core verb+resource.
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?
There is no guidance on when to use this tool versus alternatives like projects_create or other list endpoints, and no mention of prerequisites such as needing an org context. The single sentence provides no usage framing at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_createCreate secretDInspect
Create secret
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| owner | Yes | ||
| material | Yes | ||
| metadata | No | Arbitrary key-value metadata. Maximum 16 pairs, keys up to 64 characters, values must be strings of up to 512 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=false, so the mutation profile is covered structurally. The description adds nothing on top — no mention of the encryption/storage behavior implied by the schema (e.g. GitHub private key "Stored encrypted"), secret visibility, or whether creation overwrites existing secrets.
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?
A three-word phrase is technically concise but represents under-specification rather than efficient communication. Nothing is front-loaded because nothing is said.
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 tool whose schema contains nested discriminated unions, required orgID/owner/material/name, and a max-16-pair metadata object, and which has no output schema and no behavioral annotations beyond safety hints, the description is completely inadequate. An agent cannot determine valid owner/material combinations or required fields from it.
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 only 40%, and the description supplies no parameter meaning whatsoever. This is a serious gap for a schema with five parameters including two discriminated unions (owner: org/project/user; material: generic/aws_credentials/oauth_token_set/github_app_credentials) and a constrained metadata object.
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?
Tautological: description restates name/title.
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?
There is no indication of when to use this tool versus secrets_update (for modifying an existing secret) or grant_secrets_add (for granting access). No prerequisites, scope, or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_deleteDelete secretADestructiveIdempotentInspect
Deletes the secret and permanently destroys all of its versions and project grants; the ciphertext cannot be recovered. Deletion is blocked while the secret is the credential of a model provider config, machine pool, or integration.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| secretID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose destructiveHint=true and idempotentHint=true, but the description adds substantial behavioral detail beyond them: all versions and project grants are destroyed, the ciphertext is unrecoverable, and deletion has dependency-based blockers. This is exactly the kind of safety-critical context an agent needs for a destructive operation.
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?
Two tightly written sentences with no filler. The destructive consequence is front-loaded, followed immediately by the blocking conditions, so the most important information is not buried.
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 destructive delete tool with no output schema, the description covers the key side effects and preconditions well. It does not document the required identifiers, but their names and schema patterns provide basic guidance, leaving only a minor gap.
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 0% for two required parameters, and the description does not mention orgID or secretID at all. While their names are reasonably self-explanatory and the patterns indicate expected formats, the description does not compensate for the missing schema documentation as required when coverage is this low.
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 precise verb and resource ('Deletes the secret') and immediately specifies the destructive scope ('permanently destroys all of its versions and project grants'). This clearly distinguishes it from sibling tools like secrets_update or grant_secrets_delete.
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 a clear precondition for successful use: deletion is blocked while the secret is the credential of a model provider config, machine pool, or integration. It does not explicitly name an alternative tool to use in those blocked cases, so it falls short of the highest usage-guidance tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_getGet secretCRead-onlyIdempotentInspect
Get secret through ownership authority
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| secretID | Yes |
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 fully covered structurally. The phrase 'through ownership authority' weakly hints at a permission precondition but is too cryptic to count as disclosed behavior; nothing about error cases (missing/unauthorized secret) is given.
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?
It is a single six-word phrase with the verb+resource front-loaded, so nothing is padded. However, it is terse to the point of under-specification rather than genuine conciseness.
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?
A two-required-param getter with 0% schema coverage and no output schema leaves an agent without parameter meaning or return expectations. Rich annotations cover the safety side, but the description does not fill the remaining gaps.
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 0% for both params, so the description carries full responsibility to explain orgID and secretID. It says nothing about either parameter; only the schema's regex patterns hint at their format. This is a clear compensation gap.
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 verb+resource ('Get secret') is clear, but the qualifier 'through ownership authority' is opaque jargon that doesn't clarify scope or distinguish it from siblings like secrets_list or grant_secrets_list. An agent can recognize it retrieves a secret, but the mechanism phrasing adds confusion rather than precision.
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?
There is no when-to-use guidance, no exclusions, and no alternatives named. With both secrets_list and grant_secrets_list among the siblings, the description should route the agent, but it offers nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_listList secretsARead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending. Without an owner filter, returns the deduplicated union of organization secrets the caller may list, project secrets the caller may list, and the caller's own user secrets.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter secrets by material kind. | |
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| metadata | No | Metadata key/value filters, encoded as metadata[key]=value. | |
| owner_kind | No | Filter by the immutable owner kind. | |
| owner_project_id | No | Required with owner_kind=project and invalid with other owner kinds. | |
| mcp_oauth_flow_id | No | Filter to secrets that have a version created by this MCP OAuth flow. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description adds real value: deterministic ordering (created_at desc, then id desc) and the default-scope rule that an unfiltered call returns the deduplicated union of org, project, and user secrets the caller may list. It does not mention pagination limits or response shape, keeping it 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?
Two dense sentences with no filler; every clause carries information. Slightly better front-loading would lead with the scope rule rather than ordering, but nothing is wasted.
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 10-parameter list tool with no output schema and strong schema descriptions, the description covers the two things the schema cannot convey: ordering and default scope. Pagination and sort defaults are left to the schema, which is acceptable.
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 90%, so the 3 baseline already applies. The description goes further by explaining the effect of omitting the owner filter, which maps directly onto owner_kind/owner_project_id and tells the agent what an unset owner parameter actually does.
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 name and title ('secrets_list' / 'List secrets') make the verb+resource unambiguous, and the description refines it with ordering and scope semantics. It never explicitly states the purpose in prose and does not distinguish this from the sibling 'grant_secrets_list', so it stops short 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?
Usage is only implied: the description notes what happens 'without an owner filter', which hints that owner_kind/owner_project_id narrow the result. There is no explicit when-to-use guidance and no routing against alternatives such as secrets_get or grant_secrets_list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_updateUpdate secretCDestructiveInspect
Update secret metadata
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| orgID | Yes | ||
| metadata | No | Arbitrary key-value metadata. Maximum 16 pairs, keys up to 64 characters, values must be strings of up to 512 characters. | |
| secretID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is partly covered. The description adds nothing about the critical unknown: whether metadata is fully replaced or merged, what happens to omitted fields, or what makes this call destructive. For a non-idempotent mutation, that gap matters.
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 words, fully front-loaded with zero waste, but this is under-specification rather than effective conciseness for a four-parameter destructive mutation.
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?
No output schema, a nested metadata object, destructive and non-idempotent behavior, and half the parameters undocumented — yet the description supplies none of the missing semantics (replace-vs-merge, auth requirements, field-level effects).
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 only 50%: name and metadata are documented, but orgID and secretID carry only regex patterns with no prose. The description adds no parameter meaning at all, so it fails to compensate for the undocumented half.
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 verb (update) and resource (secret) plus a scoping qualifier (metadata), so an agent can infer that secret values cannot be changed here — a useful distinction from secrets_create/secrets_delete. However, it is minimal and does not distinguish this tool's role among the many *_update siblings or clarify whether 'metadata' includes the name field.
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?
No when-to-use guidance, no prerequisites, and no mention of alternatives such as secrets_create for new secrets or secrets_delete for removal. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skills_deleteDelete skillADestructiveIdempotentInspect
Deletes the skill together with all of its revisions and project grants; uploaded archive content is destroyed. No other resources are deleted. Deletion is blocked while an active agent's configuration references the skill.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| skillID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description goes further by enumerating exactly what is destroyed (revisions, project grants, archive content), what is explicitly NOT destroyed, and the failure condition that blocks deletion. That cascade-boundary and blocking detail is exactly the context annotations cannot express.
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, zero filler, and the most important fact (the cascading destruction) is front-loaded. Each sentence adds a distinct piece of information: scope of deletion, non-scope, and precondition.
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 destructive two-parameter delete with no output schema and annotations already covering idempotency/safety, the description supplies everything an agent needs to decide and act: cascade impact, blast-radius boundary, and the condition under which the call fails.
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 0% and the description never mentions orgID or skillID, so it contributes nothing about parameter meaning. The names and regex patterns are largely self-explanatory, which keeps this from being a 1, but with both parameters undocumented anywhere the description fails to compensate for the coverage gap.
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 (deletes) and resource (the skill) and immediately defines cascade scope: revisions, project grants, and uploaded archive content. This clearly separates it from siblings such as grant_skills_delete (removes a grant only) and skills_get/skills_list, without the agent needing to open 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?
The description does not route the agent between this tool and alternatives (e.g. removing a single grant via grant_skills_delete instead of destroying the skill). It does, however, disclose a real precondition — deletion is blocked while an active agent references the skill — which is a usable operational guideline but not a when-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skills_getGet skillCRead-onlyIdempotentInspect
Get skill through ownership authority
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | ||
| skillID | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that — 'ownership authority' is never explained (does it mean the caller must own the skill, or that results are scoped to owned skills?).
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?
It is a single short phrase with no padding, which is structurally clean, but the one sentence is cryptic rather than informative — brevity here reflects under-specification more than efficient communication.
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 should at least indicate what a skill record contains or how it relates to skills_list/grant_skills_*, but it does neither. For a two-parameter lookup tool in a large sibling set, this leaves an agent guessing at both inputs and return value.
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 0%, so the two required parameters (orgID, skillID) are documented only by regex patterns in the schema, with no plain-language meaning anywhere. The description does not explain that these are the organization and skill identifiers, leaving the description failing to compensate for the coverage gap.
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 verb+resource pair ('Get skill') is identifiable and matches the title, so an agent knows this retrieves a single skill record. However, the qualifying phrase 'through ownership authority' is opaque and does not clarify scope, nor does it distinguish this from skills_list or skills_delete in any concrete way.
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?
There is no statement of when to use this tool versus skills_list (to enumerate) or skills_delete, nor any prerequisite about needing org/skill identifiers or permissions. The 'ownership authority' phrase hints at an access condition but never states it as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skills_listList skillsARead-onlyIdempotentInspect
Items are ordered by created_at descending, then id descending. Without an owner filter, returns the deduplicated union of organization skills the caller may list, project skills the caller may list, and the caller's own user skills. Grants are managed separately and do not change ownership.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive glob over the list's logical name. `*` matches zero or more characters, `?` matches one character, and `\` escapes a wildcard. | |
| sort | No | Sort order for named resources that expose created and modified timestamps. | |
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| owner_kind | No | Filter by the immutable skill owner kind. | |
| owner_project_id | No | Required with owner_kind=project and invalid with other owner kinds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds real behavioral context the annotations can't: deterministic ordering (created_at desc, id desc), deduplication/union semantics across org/project/user scopes, and the fact that grants do not affect ownership.
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 tight sentences with no filler, and the grant/ownership clarification is a useful closing note. Front-loading is slightly off: the least important detail (tie-break ordering) leads, while the scope/default behavior that actually selects this tool comes second.
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 should describe what comes back; it hints at 'items' and their ordering but never mentions the paginated envelope (cursor/next_cursor) or the shape of returned skill records. The scoping and ordering semantics are well covered, but the return contract and pagination behavior are left unstated.
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 high (86%), so the baseline is 3, and the description earns an extra point by documenting default behavior the schema does not: omitting the owner filter yields the deduplicated union of org, project and user skills. It does not clarify sort, limit, cursor, or the glob name parameter beyond 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 conveys that this returns a collection of skills ('returns the deduplicated union of organization skills ... project skills ... user skills'), and it distinguishes its scope from the sibling grant_skills_list by noting grants are managed separately. However, it never states the verb+resource plainly ('list skills'); it relies on the name/title for the core action and spends its text on output semantics instead.
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 implicitly guides usage by explaining the default behavior when no owner filter is supplied, which tells an agent how results broaden. It never states when to prefer other siblings (e.g., skills_get for a single skill, grant_skills_list for grants) or any prerequisites, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tools_catalogGet tool catalogCRead-onlyIdempotentInspect
Get tool catalog
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond that — no hint about catalog size, caching, refresh behavior, or what a 'tool' entry represents.
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 text is short but only because it is under-specified rather than efficient — it repeats the title without adding a single piece of information. Brevity here is a symptom, not a virtue.
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 is the only place to learn what this returns, and it says nothing about the shape or contents of the catalog. For a discovery/catalog tool in a large sibling set, that leaves the agent guessing about the payload.
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 tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter-related gap exists.
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?
Tautological: description restates name/title.
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?
No when-to-use guidance, no alternatives named, no prerequisites. Although the zero-parameter signature makes invocation trivial, the definition offers nothing about the context in which an agent should reach for this catalog.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWho am IARead-onlyIdempotentInspect
Get the authenticated user and their organizations
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds return scope beyond that — the response contains both the user and their organizations — which is useful since there is no output schema. It does not mention auth failure behavior or response shape, keeping it short of 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?
A single front-loaded sentence with no filler; the resource and the payload scope are both stated up front.
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 zero-parameter, no-output-schema introspection tool, the description adequately covers what is returned. Some detail on the returned fields or shape would be needed for a 5, but the safety and behavioral context is already carried by the annotations.
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 tool takes zero parameters, so the baseline is 4 and there is no parameter semantics for the description to clarify.
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 ('Get the authenticated user and their organizations'), which is unambiguous and distinguishable from sibling list tools like orgs_list and profiles_list. An agent can tell this is an identity/introspection call 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?
There is no explicit when-to-use, when-not-to-use, or named alternative. Usage is implied by the zero-parameter, self-describing nature of the tool, which is enough for an agent to know it is called to learn the current identity, but no guidance is given versus e.g. orgs_list or profiles_list.
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.
75 tool updates
- First observed
agents_archive - First observed
agents_cancel - First observed
agents_events_list - First observed
agents_get - First observed
agents_input - First observed
agents_interactions_list - First observed
agents_interactions_resolve - First observed
agents_launch - First observed
agents_list - First observed
agents_update - First observed
configs_create - First observed
configs_get - First observed
crons_create - First observed
crons_delete - First observed
crons_get - First observed
crons_list - First observed
crons_update - First observed
grant_machines_add - First observed
grant_machines_delete - First observed
grant_machines_list - First observed
grant_models_add - First observed
grant_models_delete - First observed
grant_models_edit - First observed
grant_models_list - First observed
grant_pools_add - First observed
grant_pools_delete - First observed
grant_pools_edit - First observed
grant_pools_get - First observed
grant_pools_list - First observed
grant_secrets_add - First observed
grant_secrets_delete - First observed
grant_secrets_list - First observed
grant_skills_add - First observed
grant_skills_delete - First observed
grant_skills_list - First observed
machines_create - First observed
machines_delete - First observed
machines_get - First observed
machines_list - First observed
machines_update - First observed
model_providers_catalog - First observed
model_providers_create - First observed
model_providers_delete - First observed
model_providers_get - First observed
model_providers_list - First observed
model_providers_update - First observed
models_create - First observed
models_delete - First observed
models_list - First observed
models_update - First observed
orgs_create - First observed
orgs_list - First observed
pools_create - First observed
pools_delete - First observed
pools_get - First observed
pools_list - First observed
pools_update - First observed
profiles_create - First observed
profiles_delete - First observed
profiles_get - First observed
profiles_list - First observed
profiles_rename - First observed
profiles_update - First observed
projects_create - First observed
projects_list - First observed
secrets_create - First observed
secrets_delete - First observed
secrets_get - First observed
secrets_list - First observed
secrets_update - First observed
skills_delete - First observed
skills_get - First observed
skills_list - First observed
tools_catalog - First observed
whoami
TDQS
Scored across 75 tools
The set contains many parallel tool pairs such as models_delete vs grant_models_delete, pools_delete vs grant_pools_delete, and secrets_create vs grant_secrets_add, which could cause misselection without careful reading. Descriptions clarify boundaries, but the sheer number of tools with grant/non-grant and resource/action variations creates moderate ambiguity.
Nearly all tool names use snake_case with a resource-first pattern (e.g., agents_get, models_create, grant_pools_add), which is predictable and readable. Minor deviations exist: grants use add/edit while base resources use create/update, and a few tools like whoami or profiles_rename break the verb pattern.
75 tools is an extreme mismatch for a single MCP server. While the domain is broad, this count far exceeds typical well-scoped ranges (3–15) and is likely to overwhelm an agent's selection process.
Core resources like secrets, machines, pools, crons, and grants have near-complete CRUD coverage. However, notable gaps exist: no configs_list/update/delete, no projects_get/update/delete, no skills_create, and no models_get, which will limit several agent workflows.
Related MCP Connectors
Deploy and manage your apps, databases, storage, and scheduled jobs from your AI agent
Your AI Agent's Infrastructure Layer. Connect Claude, Copilot, Codex, or ChatGPT to 200+ managed open source services. Start databases, pipelines, and applications through natural language.
Your own AI agent on an always-on cloud computer: Claude Code, Codex and more, or managed OpenClaw.
Connect, monitor, and control AI agents — tasks, approvals, schedules, and governance.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables deployment of autonomous AI agents with memory and tool execution capabilities through a WebSocket-based MCP protocol. Provides production-ready infrastructure with REST API access, persistent state management, and extensible function registry for building self-hosted AI systems.-
- AlicenseBqualityDmaintenanceagent-mq is a message queue that enables AI coding agents to communicate with each other across sessions and machines. Agents can send messages, delegate tasks, and coordinate work — all through MCP tools. Supports Claude Code, Cursor, Codex, OpenClaw, and any MCP-compatible tool. UUID-based authentication with per-user data isolation. Self-hostable with Docker.72MIT
- AlicenseAqualityAmaintenanceThe infrastructure for AI teams: a self-hosted server that gives a fleet of agents shared semantic memory, tasks, direct messages, and session handoff. Any agent that speaks HTTP participates: Claude Code, AutoGen, raw API scripts, anything.479MIT
- AlicenseAqualityDmaintenanceStart, observe, and interact with Claude Managed Agents from any MCP client — launch an agent, watch its events, reply, approve the tools it wants to run, and stop it. Runs over stdio, HTTP, or AWS Lambda with pluggable auth.171MIT