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 | Organization ID (org_...). | |
| agentID | Yes | Agent ID (agt_...). | |
| projectID | Yes | Project ID (proj_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is exceptionally rich about destroy-vs-retain semantics (what is torn down, what survives, no-op on already-archived), which goes well beyond the annotations. However, it contradicts the annotations on idempotency: it states that archiving an already-archived agent 'is a no-op that returns the agent unchanged', which is exactly the idempotent behavior that idempotentHint=false denies. The rest (destructiveHint=true, readOnlyHint=false, openWorldHint=false) is consistent, so this is a partial rather than total contradiction, but it is a real inconsistency an agent could act on.
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 definition is front-loaded with the verb and the full effect list, followed by retention guarantees and then the idempotent no-op case, in a deliberate order. Despite its length, every clause carries distinct operational information (nothing is restated from the name, title, or schema), so no sentence 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 destructive, three-id mutation tool with no output schema, the description covers effects, retention, listing visibility, and repeat-call behavior – enough to call it safely. Remaining gaps are modest: no indication of required authorization/grants, or what happens if runtime cancellation is asynchronous or fails partway through the teardown sequence.
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 documented in the schema with patterns and descriptions, so schema coverage is 100% and the baseline is 3. The description adds nothing parameter-specific – it never mentions ids, scoping, or which org/project must own the agent – so it neither compensates nor is required 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?
The description names a specific verb+resource (archive the agent) and then enumerates the exact scope of that verb: runtime cancellation, queued inputs, processes, pending wakeups, machine bindings, pooled machines, cron triggers. It implicitly separates itself from siblings like agents_cancel by making clear that this is a lifecycle retirement operation, not a runtime-only cancellation, and the retention semantics ('event history stay readable by id', 'leave listings') further pin down what 'archive' means here.
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 would read this as 'use me to retire an agent while keeping its history', and the no-op note gives a re-invocation condition. However, there is no explicit when-to-use/when-not-to-use guidance against the nearest alternative, agents_cancel, nor any statement of prerequisites or permissions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_cancelCancel agentADestructiveInspect
Stops the agent's current turn: cancels its unfinished tool calls and open interactions, stops processes whose run_command hasn't returned yet, and discards pending steering messages. The agent stays active and keeps its queued messages, and processes whose run_command already returned keep running. Returns affected false and changes nothing when no turn is in progress.
| 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 | Organization ID (org_...). | |
| agentID | Yes | Agent ID (agt_...). | |
| projectID | Yes | Project ID (proj_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation by specifying exactly what is destroyed (unfinished tool calls, open interactions, pending steering, in-flight processes) and, critically, what survives (agent stays active, queued messages retained, already-returned processes keep running). It also discloses the no-op return contract ('affected false'), which the annotations cannot 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?
Three tightly packed sentences, front-loaded with the core action, then the survival semantics, then the edge case. Every clause carries information an agent needs to decide whether and how to call the tool; nothing is redundant.
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 turn-cancellation tool with no output schema, the description covers the mutation scope, the post-condition state of the agent, and the no-op response ('affected false'). Combined with annotations and a fully documented schema, an agent has everything needed 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 100% and the four parameters (agentID, orgID, projectID, actor) are fully documented in the schema, so the baseline of 3 applies. The description adds no parameter-level syntax or format detail beyond what the schema already states.
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 ('Stops the agent's current turn') and immediately enumerates the exact scope: unfinished tool calls, open interactions, in-flight run_command processes, and pending steering messages. This is distinguishable at a glance from siblings like agents_archive or agents_input, which act on the agent's lifecycle or feed it input rather than halting an in-progress turn.
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 triggering context (a turn must be in progress) and the null condition ('Returns affected false and changes nothing when no turn is in progress'). It does not explicitly contrast itself with alternatives such as agents_archive or agents_input, so the routing guidance is implicit rather than spelled out.
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 | Organization ID (org_...). | |
| agentID | Yes | Agent ID (agt_...). | |
| projectID | Yes | Project ID (proj_...). | |
| 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, so the safety profile is covered. The description goes beyond them with real behavioral detail: exclusive boundaries, which cursor field each direction yields, and the explicit precedence rule that before_sequence overrides after_sequence. It stops short of stating the page-size ceiling or end-of-log behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense segments with the core behavior front-loaded and no filler; every clause carries information. The semicolon-chained construction is slightly run-on, which keeps it from a 5.
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 must carry return-value context. It helpfully names next_after_sequence and next_before_sequence, but never explains what those cursors contain, when they are absent at the log's end, or how the returned event objects are shaped — a notable gap for a paginated list 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 coverage is 100%, so baseline is 3; the description earns above baseline by adding the precedence rule between after_sequence and before_sequence, which the schema does not state, plus the direction each boundary implies. It adds no detail for limit, orgID, agentID, or projectID 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 opens with a specific verb+resource ('Returns one page of agent events') and adds the ordering guarantee ('chronological within the page'), which an agent can act on immediately. It does not distinguish itself from lookalike siblings such as agents_interactions_list or agents_get, 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?
It clearly explains how to drive forward vs backward pagination and which parameter wins on conflict, which is genuine invocation guidance. But it never says when to choose this tool over a sibling (e.g. interactions vs events), so usage against alternatives 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_getGet agentARead-onlyIdempotentInspect
Returns one agent's state, model, profile, current config ID, activity (running, waiting_on_interaction, idle, or archived), attached machines, and MCP connection states. The conversation isn't included.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| agentID | Yes | Agent ID (agt_...). | |
| projectID | Yes | Project ID (proj_...). |
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 genuine value beyond that by scoping what is and is not returned ('The conversation isn't included'), preventing an agent from assuming it can read transcripts after this call. No auth or rate-limit context is added, 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?
Two sentences, zero filler. The positive return list is front-loaded and the exclusion clause is placed last where it reads as a caveat rather than a delay.
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 bears the burden of describing return values – and it does so explicitly by enumerating state, model, profile, config ID, activity enum values, machines, and MCP connection states, plus the negative 'conversation isn't included'. For a simple, fully-documented-parameter read tool, nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – all three identifiers are documented with their org_/agt_/proj_ prefixes and regex patterns – so the schema carries parameter semantics. The description adds nothing about parameter meaning or interaction, which is the correct baseline of 3 when the schema does the heavy lifting.
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 ('Returns one agent's state, model, profile...') and enumerates the exact fields returned, which is far more informative than a generic 'get'. The word 'one' implicitly separates it from agents_list, so an agent can distinguish the two without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the shape of the tool (fetch a single agent), but there is no explicit when-to-use guidance, no prerequisite note (e.g., that agentID/orgID/projectID must come from agents_list or a launch call), and no mention of siblings like agents_events_list as alternatives for activity history.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_inputSend agent inputAInspect
Sends a message to an agent and returns the stored input. Queued messages (the default) wait until the agent is ready for new work; steering messages reach it at its next model call.
| 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 | Organization ID (org_...). | |
| agentID | Yes | Agent ID (agt_...). | |
| projectID | Yes | Project ID (proj_...). | |
| 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 and openWorldHint=true, so the safety profile is covered. The description adds genuine timing behavior (queued waits until the agent is ready; steering lands at the next model call), but says nothing about permissions, side effects on the agent's current turn, or limits.
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, purpose front-loaded, and the second sentence spends its words on the one non-obvious decision (delivery mode). 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?
With seven parameters, nested objects, media blocks and no output schema, the description covers purpose and delivery semantics but is thin on interaction with the sibling interaction tools and on what "stored input" is retrievable as. The rich schema carries most of the remaining burden, so 3 is the minimum-viable level.
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 baseline is 3. The description goes beyond the bare delivery_mode enum by defining what "queued" and "steering" actually mean and which is the default, adding meaning the schema alone does not convey.
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 ("Sends a message to an agent") plus the effect ("returns the stored input"), so the agent knows exactly what the call does. It does not explicitly differentiate itself from adjacent siblings such as agents_interactions_resolve or agents_cancel, 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?
The description explains the two delivery modes and establishes queued as the default, which is real usage context. However it never states when to prefer this tool over siblings, nor when steering is the right choice versus queued beyond a bare timing distinction.
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 interactionsARead-onlyIdempotentInspect
Lists an agent's permission prompts and ask_question questions, oldest first, with each one's form and answers. state filters by open, resolved, or canceled.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | Organization ID (org_...). | |
| state | No | ||
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| agentID | Yes | Agent ID (agt_...). | |
| projectID | Yes | Project ID (proj_...). | |
| 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, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: results are ordered 'oldest first', each entry carries its form and answers, and state filters by open/resolved/canceled. No return format for pagination is given, but it meaningfully enriches the read 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?
Two compact sentences, front-loaded with the verb and resource, then the ordering/content and the state filter. No filler; every phrase carries 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?
With no output schema, the description usefully states what is returned (each interaction's form and answers) and the ordering. For a 7-parameter read tool with high schema coverage and clear annotations, this is nearly complete, though it could mention pagination behavior expected of cursor/limit.
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 most parameters (limit, cursor, IDs) are already documented in the schema. The description reinforces the state filter by naming its three enum values, but adds little beyond what the enum already supplies. Baseline 3 for high schema coverage 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 and resource ('Lists an agent's permission prompts and ask_question questions') and even describes the returned content (form and answers). It's clear what the tool does, but it doesn't differentiate itself from the sibling agents_interactions_resolve, which an agent might confuse it with.
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 use case (listing an agent's pending prompts/questions) and explains the state filter values, which hints at when to use it. However, it gives no explicit when-not guidance and never points to the sibling agents_interactions_resolve for handling those interactions.
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 interactionAInspect
Answers an open permission prompt or question so the paused agent resumes, and returns the resolved interaction. Send one answer per question with zero-based option_indices; permission prompts use 0 for Allow and 1 for Deny.
| 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 | Organization ID (org_...). | |
| agentID | Yes | Agent ID (agt_...). | |
| answers | Yes | ||
| projectID | Yes | Project ID (proj_...). | |
| interactionID | Yes | Interaction ID (int_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-readonly, non-idempotent, open-world mutation, so safety is covered. The description adds real context beyond that: the side effect (the paused agent resumes) and the return ('returns the resolved interaction'). It does not address retry/idempotency behavior for a tool flagged idempotentHint=false, which keeps it below 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 tight sentences, front-loaded with the action and its effect, followed by the answer-format rules that an agent needs before calling. No filler or repetition of structured fields.
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 5-required-param mutation with nested objects and no output schema, the description covers purpose, side effect, and the awkward answer-index convention well. It stops short of explaining failure modes (e.g. answering an already-resolved interaction) or what the returned interaction contains, which would round it 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?
Schema coverage is 83%, so the baseline is 3, but the description genuinely adds semantics the schema lacks: option_indices are zero-based, exactly one answer is sent per question, and permission prompts map 0=Allow / 1=Deny. The schema only constrains indices as non-negative integers, so this mapping is new information.
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 and resource: it 'answers an open permission prompt or question so the paused agent resumes.' That is far more precise than a restated title and tells the agent exactly what effect the call has. It never names a sibling (e.g. agents_interactions_list or agents_input), so it falls short of the 5 criterion requiring explicit sibling differentiation.
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 context is clear: this is the call that un-pauses an agent stuck on an open prompt or question. However, it states no exclusions or alternatives (e.g. when to use agents_input instead of resolving an existing interaction), so the agent must infer the boundary from the description alone.
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 | Organization ID (org_...). | |
| 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 | Agent config ID (acfg_...). | |
| message | No | Optional initial text message. Mutually exclusive with initial_input. | |
| profile | No | ||
| projectID | Yes | Project ID (proj_...). | |
| 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?
Annotations already declare readOnly=false, destructive=false, openWorld=true, idempotent=false, but the description adds substantive behavior the agent cannot get elsewhere: the whole operation is one atomic transaction, permissions differ per capability, and idempotency-key replay returns the existing agent without applying the new retry body or re-resolving integration references. That is exactly the extra context annotations cannot 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?
Three dense but front-loaded sentences: core action first, then permission conditions, then replay semantics. Every sentence carries information, though the middle sentence packs two distinct permission rules that could be split for faster scanning.
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, nested-object, no-output-schema mutation tool, the description covers atomicity, permissions, and replay well, but omits the profile-launch path present in the schema and never says what a successful launch returns (the new agent). Those gaps are modest given the rich schema descriptions.
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 91%, so the schema already documents nearly every parameter in detail, and the description's parameter mentions (tools, subscriptions, interaction handlers, initial input) largely restate the schema. It adds only marginal framing, so 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+resource ('launch') and enumerates exactly what the launch transaction can carry: agent-local integration tools, subscriptions, interaction handlers, and an attributed initial text input. An agent can distinguish this from siblings like agents_get, agents_update, agents_input, or configs_create 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 permission context for two modes ('adding integration capabilities requires project management permission; launching an existing config requires agent operate permission'), which implies when each mode applies, but never states when to use config vs config_source vs profile, nor names an alternative tool. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_listList agentsARead-onlyIdempotentInspect
Lists the project's agents with their current activity, newest first by default. Archived agents and subagents are excluded unless requested.
| 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 | Organization ID (org_...). | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes | Project ID (proj_...). | |
| 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 readOnly, idempotent, and non-destructive, covering the safety profile. The description adds useful default-exclusion behavior for archived agents and subagents, but doesn't mention pagination behavior or the inclusion of usage data despite that being a parameter.
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 with zero waste, front-loading the primary action and default behavior. 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 list tool with rich schema coverage and read-only annotations, the description is nearly complete. It covers scope and defaults, but could mention that results are paginated with cursors, a key aspect for an agent consuming the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already well-documented in the schema. The description adds only minor context about default sorting and exclusion, not enriching parameter meaning beyond what the schema provides.
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 the project's agents') and adds scope detail about activity and ordering. It is clearly distinguishable from siblings like agents_get (single agent) and agents_archive (mutation).
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 default behavior and a condition for expanding results (archived/subagents excluded unless requested), which implicitly guides filtering. However, it doesn't name alternatives like agents_get for fetching a single agent, so explicit routing to siblings is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
agents_updateUpdate agent configADestructiveInspect
Replaces an active agent's config without restarting its conversation and returns the new agent_config. Model, instruction, and tool changes apply at the agent's next model call; machine changes apply immediately, stopping processes on removed machines and deleting the agent's machines from removed pools. Send the complete config, not a patch.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| source | Yes | Agent config source as YAML or JSON text, or, with source_format json, as a JSON object. | |
| agentID | Yes | Agent ID (agt_...). | |
| projectID | Yes | Project ID (proj_...). | |
| source_format | Yes | Format of source: yaml or json. | |
| expected_current_config_id | No | Agent config ID (acfg_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, it discloses exactly what is destroyed (processes stopped on removed machines, machines deleted from removed pools), the timing of changes (model/instruction/tool at next model call vs machine changes immediately), and the return value. This is rich behavioral context the annotations cannot 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?
Three sentences, front-loaded with the core action and scope, followed by timing/destruction details and the invocation rule. Every sentence carries distinct information with 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?
Despite no output schema, the description states what is returned (the new agent_config), covers destructive side effects and change timing, and specifies the full-config requirement. Nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning about the 'source' parameter: it must be a complete config rather than a partial patch, clarifying replacement semantics. That elevates it above the schema-only baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Replaces an active agent's config') and distinguishes itself from siblings like agents_launch and configs_create by scoping to an already-active agent. An agent can tell this is a config mutation on a live agent 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?
It gives a clear invocation rule ('Send the complete config, not a patch') and context that the target is an active agent whose conversation is not restarted, which helps separate it from launch/create flows. It stops short of naming an explicit alternative or a when-not condition, so it is strong but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configs_createCreate agent configAInspect
Compiles and saves an immutable agent config (instruction, model, tools, machine_sources, and more) from YAML or JSON and returns it. Sending the same source again returns the existing config, as long as its names still resolve to the same resources.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| source | Yes | Agent config source as YAML or JSON text, or, with source_format json, as a JSON object. | |
| projectID | Yes | Project ID (proj_...). | |
| source_format | Yes | Format of source: yaml or json. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring the safety profile (writes, non-destructive, closed-world), the description adds real context: configs are immutable, the call returns the compiled config, and resubmitting the same source deduplicates to the existing config as long as name references still resolve. That dedup caveat sits in mild tension with idempotentHint=false, but the qualification ('as long as its names still resolve') keeps it from being a hard contradiction. Auth requirements, error behavior on unresolved names, and rate limits are unstated.
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 front-loaded with the operative verb and resource, no filler, and the surprising resubmission semantics placed after the core action. 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?
No output schema exists, but the description states the compiled config is returned, so the agent knows what comes back. For a four-required-parameter creation tool whose schema is fully self-documented, the only meaningful omissions are failure modes (e.g., unresolved resource names) and permission requirements.
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% and all four required parameters (orgID, projectID, source, source_format) carry their own descriptions, so the baseline is 3. The description clarifies that source is YAML or JSON and implies the returned/created entity is the config itself, but adds no new syntax or constraint detail 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 precise verb and resource ('Compiles and saves an immutable agent config') plus the accepted input forms (YAML or JSON) and names representative config fields (instruction, model, tools, machine_sources). It is trivially distinguishable from the only related sibling, configs_get, without opening either 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 guidance, no prerequisites, and no routing to alternatives such as configs_get for reading an existing config. The resubmission sentence is a behavioral guarantee rather than a usage rule, so the agent must infer when to reach for this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configs_getGet agent configARead-onlyIdempotentInspect
Returns one agent config: its compiled definition with names resolved to IDs, and its source if it was saved with one. Configs Omnara derives on its own, such as those for subagents and integration launches, have no source.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| agentConfigID | Yes | Agent config ID (acfg_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuine behavioral context beyond that: it explains that derived configs (subagents, integration launches) have no source, pre-empting a null field the caller would otherwise be surprised by.
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, no waste, with the primary behavior front-loaded and the derived-config edge case following. 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?
With no output schema, the description carries the return-value burden and does so reasonably, covering the compiled definition and the source field. It is complete for a simple idempotent getter, though it never states whether a missing config errors or returns empty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three IDs are already documented with patterns in the schema. The description adds no parameter-level detail, warranting 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?
States a specific verb and resource (Returns one agent config) and clarifies the payload shape (compiled definition with names resolved to IDs, plus source). It is instantly distinguishable from configs_create, though it never names or contrasts a sibling 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?
The description explains what the tool returns but gives no when-to-use guidance, no prerequisites, and no alternatives for retrieving configs. An agent must infer usage entirely from the resource noun.
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 | Organization ID (org_...). | |
| target | Yes | What each firing does: type agent sends the message to an existing agent, type profile launches a new agent from a profile, and type integration hands the firing to an integration, such as a new Slack or Discord thread. | |
| enabled | No | Whether the trigger fires on schedule; false pauses it. | |
| timezone | No | IANA time zone the schedule is evaluated in. | |
| projectID | Yes | Project ID (proj_...). | |
| 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 only declare the safety profile (not read-only, not destructive, not idempotent, open-world). The description adds genuinely useful behavior the annotations cannot convey: the source of launched agents (profile's current config), what gets sent on each firing, and the missed-firing coalescing rule including that only the oldest missed time fires. It omits permission/auth requirements and failure handling, so it is strong but not exhaustive.
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 before the per-target behavior and the coalescing rule. The final sentence is long but every clause conveys distinct scheduling semantics; no filler or restated title text.
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, nested-object, open-world mutation tool with no output schema, the description covers the call's runtime effect and scheduling edge case well while annotations carry the safety profile and the schema carries parameter detail. Minor gaps remain around auth/permission requirements and the required-vs-omitted status of message_template per target type, but nothing critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all eight parameters, including the target discriminator and message_template semantics. The description restates the target-type meanings already present in the schema and adds no new syntax, defaults, or format detail beyond that, so the 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?
States a specific verb and resource ('Creates a cron trigger that fires on a schedule') and immediately distinguishes its behavior from the sibling crons_update/delete/get/list family. It goes further by explaining what the three target types actually do on each firing, so an agent understands the effect of the 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?
The description explains what each target type does, which implicitly guides selection of the `target` value, but it never states when to reach for crons_create versus crons_update or other trigger-management siblings, nor any prerequisites (e.g., that a profile/agent must already exist). Usage context 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.
crons_deleteDelete cron triggerADestructiveIdempotentInspect
Deletes a cron trigger so it never fires again; there is no undo. Agents it already launched keep running.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| cronTriggerID | Yes | Cron trigger ID (cron_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description still adds two traits the annotations cannot express: irreversibility ('there is no undo') and the non-obvious side effect that already-launched agents keep running.
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 dense sentence with the irreversible consequence and the residual side effect front-loaded; nothing is wasted and nothing needed is omitted.
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-ID delete tool with no output schema and full annotation coverage, this is close to complete: it conveys the destructive, permanent nature and what survives. Only the absence of any routing guidance to a less drastic sibling holds it back.
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% with three documented ID patterns, so the schema carries the full parameter burden. The description adds no additional meaning about the required orgID/projectID/cronTriggerID scoping.
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 (cron trigger) plus the effect ('never fires again'), which cleanly separates it from crons_create, crons_get, crons_list and crons_update 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?
No explicit when/when-not guidance and no alternative is named (e.g., whether updating or disabling is preferable). The stated effect implies a use case, but nothing helps the agent decide between this and sibling mutation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crons_getGet cron triggerARead-onlyIdempotentInspect
Returns one cron trigger: its target, schedule, timezone, message template, enabled flag, and firing state (last_fired_at, next_fire_at, and any failure since the last successful firing).
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| cronTriggerID | Yes | Cron trigger ID (cron_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description goes further by disclosing the exact return payload, including firing state (last_fired_at, next_fire_at) and any failure since the last successful firing — meaningful behavioral context that annotations cannot carry, and there is no output schema to do it 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?
One sentence, front-loaded with the action and scope, then the returned fields. 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 read-only getter with three fully documented parameters and no output schema, the description carries the return-value burden well by listing the payload fields. It omits edge behavior such as not-found or unauthorized responses, which is a minor gap rather than a blocker.
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%: all three required IDs carry pattern and format documentation. The description adds nothing about parameters, which is acceptable when the schema fully documents them, so the 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?
States a specific verb and resource ("Returns one cron trigger") and enumerates the fields it yields, which clearly separates it from crons_list. It stops short of explicitly naming the sibling alternative, but the singular scope makes the distinction obvious.
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: an agent infers this is the single-item retrieval for a known cron trigger ID, with crons_list for enumeration and crons_update for changes. There is no explicit when-to-use, prerequisite, or when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crons_listList cron triggersARead-onlyIdempotentInspect
Lists the project's cron triggers, newest first by default, filterable by name, agent, profile, or integration. Each item includes its schedule and next_fire_at.
| 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 | Organization ID (org_...). | |
| 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 | Project ID (proj_...). | |
| 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 cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the description only needs to add beyond that. It does add two useful traits: the default sort ('newest first') and the per-item return contents ('schedule and next_fire_at'), which is valuable since no output schema exists. Pagination behavior is left unmentioned.
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, and the most decision-relevant facts (what is listed, default ordering, filter axes, returned fields) are front-loaded in that order.
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 9 parameters and no output schema, the description usefully covers what each item contains, which is the main gap an agent would otherwise face. It stops short of mentioning pagination/cursor usage or result counts, so it is strong but not fully 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 100%, so every parameter is already documented in the schema; the description's list of filter dimensions maps onto name, agent_id, agent_profile_id and integration_id but adds no syntax or format detail beyond them. Baseline 3 is appropriate when the schema carries the 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?
States a specific verb and resource ('Lists the project's cron triggers') plus scope, default ordering, and the dimensions it can be filtered by, which is enough to separate it from crons_get and crons_create. It does not explicitly name a sibling alternative, so it falls short of the top band.
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?
'filterable by name, agent, profile, or integration' implies when the tool is useful, and 'newest first by default' hints at the default behavior, but there is no explicit when-to-use versus crons_get or any stated prerequisite for the required orgID/projectID. Usage is left to inference.
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 | Organization ID (org_...). | |
| target | No | What each firing does: type agent sends the message to an existing agent, type profile launches a new agent from a profile, and type integration hands the firing to an integration, such as a new Slack or Discord thread. | |
| enabled | No | Whether the trigger fires on schedule; false pauses it. | |
| timezone | No | IANA time zone the schedule is evaluated in. | |
| projectID | Yes | Project ID (proj_...). | |
| cronTriggerID | Yes | Cron trigger ID (cron_...). | |
| 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 readOnlyHint=false, so the mutation risk is known. The description adds genuinely new behavioral context beyond them: the target field is immutable and retargeting requires delete-and-recreate. It does not describe auth/permission requirements or partial-update 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?
Two tight sentences, no filler, with the primary action front-loaded and the immutability caveat immediately following. 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?
For a mutation tool with no output schema but rich annotations and full schema coverage, the description supplies the key caveat (immutable target) an agent needs before calling. It omits which fields are optional on update and whether omitted fields are preserved, which is a minor gap given the schema documents defaults.
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% with 9 well-documented parameters, so the schema carries the semantic load and a baseline of 3 applies. The description reinforces the target immutability constraint, which is useful, but adds little on the other 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 gives a specific verb ('Updates') plus the updatable facets ('schedule, message template, or enabled state'), which is enough to distinguish it from crons_create and crons_delete. It is slightly incomplete against the schema, which also permits updating 'name' and 'timezone', but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the when-not case: 'The target is immutable; delete the trigger and create a new one to retarget.' That routes the agent to crons_delete + crons_create for retargeting. It does not spell out prerequisites or when to prefer update over recreating for other fields, so it falls short of a full 5.
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 projectAInspect
Lets a project's agent configs use one BYO machine by name and returns the grant with the machine's record. Pooled machines can't be granted this way and return 404.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| 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 | Project ID (proj_...). | |
| machine_id | Yes | Machine ID (mch_...). | |
| description | No | Optional note about this grant. |
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 still adds real value beyond them by disclosing the failure mode for pooled machines (404) and confirming that a grant record plus the machine record 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 sentences, no filler, with the core action and its main constraint front-loaded before the edge-case behavior.
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 no output schema, the description covers the effect, the return content and one key error condition. It stops short of noting permission requirements or what happens on a repeat grant given idempotentHint=false, which is the remaining 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 100%, so the schema already documents all five parameters including format patterns and metadata limits. The description adds nothing about parameters and mildly conflicts with the schema by saying the machine is referenced 'by name' when the required parameter is machine_id (mch_...), not a name.
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 ('Lets a project's agent configs use one BYO machine'), and explicitly scopes it to BYO machines as opposed to pooled ones, which separates it from grant_pools_add and the grant_machines_* siblings.
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 'Pooled machines can't be granted this way and return 404' clause gives an explicit when-not condition and implicitly routes pooled-machine grants elsewhere, but it never names the alternative tool (e.g. grant_pools_add) the way a 5 would.
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 | Organization ID (org_...). | |
| grantID | Yes | Project machine grant ID (pmg_...). | |
| projectID | Yes | Project ID (proj_...). |
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 adds genuinely new context beyond them: dependent processes are stopped as a side effect, the machine resource survives, and there are no dependency blockers preventing the delete. It stops short of noting permissions 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 short sentences, no filler, with the primary action stated first and consequences following. 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 destructive three-ID delete with full schema coverage and rich annotations, the description covers what is destroyed, what is preserved, and the side effects. No output schema exists and none is needed; only auth/permission expectations 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 description coverage is 100% with clear patterns for grantID, orgID, and projectID, so the schema fully documents the inputs. The description adds no parameter-level meaning, so the 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?
States a specific verb and resource ('Removes the project's access to the machine') and immediately disambiguates from the adjacent machines_delete by noting 'The machine itself is retained.' An agent can distinguish this from grant_machines_add/list and machines_delete 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?
The purpose implies the usage context (revoking a project's machine grant), but there is no explicit when-to-use, when-not, or named alternative among the many grant_* and machines_* siblings. Guidance is inferred 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_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 | Organization ID (org_...). | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes | Project ID (proj_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: these grants are 'explicit' and 'can be deleted directly,' and pool-derived access is out of scope — information an agent cannot derive 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?
Two short sentences with no filler; the primary scope statement is front-loaded and the exclusion follows immediately. 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 fully documented parameters, no output schema, and annotations carrying the safety profile, the description supplies the one thing the structured fields lack: the distinction between explicit and pool-derived grants. Return format and pagination are handled by the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% across all six parameters, including glob semantics, sort enum, cursor pagination, and ID patterns, so the schema does the heavy lifting. The description adds no parameter-level detail beyond what is already documented, which is the baseline 3 case.
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 ('Lists explicit machine grants') and immediately scopes what is and isn't included by contrasting explicit grants with pool-derived access. It does not name a specific sibling tool, but the resource is unambiguous within the grant_machines_* 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?
It tells the agent the condition under which this list is the right one (explicit grants) and where the excluded case lives ('Pool-derived machine access is managed through project machine pool grants'), effectively routing the agent to the pool-grant tools. No explicit named alternative tool or prerequisites, so not a full 5.
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 projectAInspect
Lets a project's agent configs use a configured model and returns the new grant. Optional overrides can narrow the model for that project (lower token limits, tools or reasoning turned off, fewer reasoning efforts or modalities) and set its per-request defaults within those limits.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| 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 a non-read-only, non-idempotent, non-destructive mutation. The description adds genuine value beyond that: overrides can only narrow the model (lower limits, disable tools/reasoning, fewer efforts/modalities) and set per-request defaults within those limits, and it states it returns the new grant.
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 the core action first and the override behavior second. It is dense but not padded; no filler sentences.
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 tool with 92% schema coverage and no output schema, the description covers what the tool does, the narrowing semantics of the optional fields, and the return value. Gaps remain on permission requirements and duplicate/idempotency behavior, but the annotations partially cover the safety profile.
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 92%, so the baseline is 3. The description adds a useful conceptual layer by grouping the override params as narrowing-only and distinguishing model-wide limits from per-request defaults, helping the agent understand how the 10 optional fields relate rather than treating them in isolation.
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 names a specific verb (grant) and resource (configured model to a project) and states the outcome ('returns the new grant'). It is clearly distinguishable from grant_models_delete and grant_models_edit by name and effect, though it never names a sibling 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?
There is no explicit when-to-use guidance or routing to grant_models_edit/grant_models_delete, nor any prerequisites (permissions, existing grant behavior). The 'optional overrides can narrow the model' clause hints at constraints but does not tell the agent when this tool is the right choice.
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 | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| modelGrantID | Yes | Project model grant ID (pmog_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint/idempotentHint annotations by disclosing the live-policy effect: new launches can no longer select the model and already-running agents lose access on their next call. It also confirms the model itself is retained and that there are no dependency blockers, which is exactly the context an agent needs before a destructive 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, zero filler, and the effect on live policy is front-loaded right after the action statement. Every sentence carries distinct 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 destructive mutation with no output schema, the description covers what is destroyed (the grant), the scope and timing of the effect, and what is preserved, while annotations supply the safety profile. Nothing essential is left implicit.
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% with patterns documented for all three IDs, so the schema already carries parameter semantics. The description adds no parameter-level detail (e.g. how to obtain a modelGrantID), so the baseline of 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?
States a specific verb and resource ('Removes the project's access to the configured model') and clearly separates itself from the sibling grant_models_add/edit/list family. An agent knows exactly which operation this is 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?
The description implies when this applies (revoking a project's model access) and spells out the consequence, but it never names an alternative such as grant_models_edit or a condition for choosing between them. Usage is inferable 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_models_editUpdate project model grantADestructiveInspect
Updates the project's overrides for the configured model. Omitted fields keep their current values; null, or [] for supported_reasoning_efforts, input_modalities, and output_modalities, clears an override so the project inherits from the configured model. Agents already using the model apply the updated overrides on their next model call. Updates are validated against the configured model's current revision but not against agent configs, so narrowing below a config's model settings, such as its context_window_tokens or reasoning effort, makes that agent's next model call fail.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| modelGrantID | Yes | Project model grant ID (pmog_...). | |
| 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?
Annotations already flag destructiveHint=true and non-idempotent, and the description adds substantial context beyond them: partial-update semantics (omitted fields retained), the null/[] clearing behavior for specific fields, that changes take effect on the agent's next model call, and the critical failure mode where narrowing below an agent config breaks its next call. This is exactly the behavioral disclosure an agent cannot infer from 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 core purpose is front-loaded, followed by three dense, non-redundant sentences covering clearing semantics, propagation timing, and the failure mode. Every sentence earns its place with 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?
For a 13-param mutation tool with no output schema, the description covers the behaviorally important edge cases: partial update, override clearing, propagation timing, and validation/failure scope. Annotations carry the safety profile, so nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 92%, so the baseline is 3, but the description adds meaning the schema lacks: which specific parameters support null/[] clearing (supported_reasoning_efforts, input_modalities, output_modalities) and that omission preserves current values. It does not cover the remaining params, but the added clearing semantics are the high-value ones.
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: updating the project's overrides for the configured model. The grant_models_* siblings (add/delete/list) are clearly differentiated by the 'overrides' framing, so an agent can pick this tool 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?
Explains the operational contract for omitted vs null vs [] values, which is effectively guidance on how to invoke it correctly. It does not, however, explicitly name when to prefer this over grant_models_add/delete or state exclusions, so it falls short of full when/when-not routing.
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 grantsARead-onlyIdempotentInspect
Lists the configured models a project can use, most recently granted first by default, with each grant's overrides and the model's name and provider config.
| 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 | Organization ID (org_...). | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes | Project ID (proj_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds real value beyond that by stating the default ordering ('most recently granted first by default') and describing what each returned grant contains, which the annotations do not 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?
A single front-loaded sentence that packs purpose, default ordering, and payload shape without waste. It is slightly dense and could be split for scannability, but every clause carries 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?
There is no output schema, so the description compensates by summarizing the return payload, and pagination/filtering are fully covered by the schema. Combined with annotations covering the safety profile, this is nearly complete; only explicit sibling routing and prerequisites are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters (including glob semantics for name and cursor pagination) are already documented in the schema, giving a baseline of 3. The description only implicitly touches the sort default and adds no syntax or format detail beyond what the schema provides.
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?
Names a specific verb (Lists) and resource (configured models a project can use / grants), and distinguishes itself from the sibling models_list and model_providers_list by scoping to project grants. It also previews the payload (overrides, model name, provider config), so an agent can tell it apart from add/delete/edit siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance, no exclusions, and no named alternatives (e.g., use models_list for the full catalog vs this tool for project grants). The project-scoped phrasing implies context but the agent must infer when this tool is the right choice.
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 projectAInspect
Lets a project create machines from a machine pool, optionally with its own defaults and usage caps within the pool's limits, and returns the grant. No machines are created by this call.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| 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 | Project ID (proj_...). | |
| default_cwd | No | Default working directory for processes on this project's machines from the pool. | |
| description | No | Optional note about this grant. | |
| max_total_cpu | No | Maximum total CPU across this project's live machines from the pool. | |
| machine_pool_id | Yes | Machine pool ID (mpo_...). | |
| max_machine_cpu | No | Largest CPU count one of this project's machines can request. | |
| min_machine_cpu | No | Smallest CPU count one of this project's machines can request. | |
| max_total_machines | No | Maximum number of live machines this project can have from the pool. | |
| default_machine_cpu | No | Default CPU count for machines this project creates from the pool, overriding the pool's default. | |
| max_total_memory_mb | No | Maximum total memory in MB across this project's live machines from the pool. | |
| max_machine_memory_mb | No | Largest memory in MB one of this project's machines can request. | |
| min_machine_memory_mb | No | Smallest memory in MB one of this project's machines can request. | |
| default_machine_memory_mb | No | Default memory in MB for machines this project creates from the pool, overriding the pool's default. | |
| 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 | Provider-specific options layered over the pool's provider options for this project's machines. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (non-read-only, non-destructive, non-idempotent, closed-world). The description adds real behavioral context beyond them: the grant is returned, per-project defaults and caps are bounded by the pool's own limits, and critically that no machines are materialized by the call. It stops short of stating required permissions or what happens on a duplicate grant.
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 front-loads the core action, then the optional capability, then the return value, and closes with the negative constraint. No filler and nothing repeated from the 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?
For a 19-parameter mutation with nested overlays and no output schema, the description covers the high-level effect adequately and says the grant is returned. It omits prerequisites (permissions, whether a grant already existing is an error) and gives no hint that the overlays merge over pool defaults, which is left entirely to the schema.
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% across all 19 properties, so the schema already documents every field, including the min/max/default CPU and memory semantics. The description only gestures at these collectively as 'its own defaults and usage caps within the pool's limits', adding no syntax or precedence detail 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 names a specific verb and resource: it grants a machine pool to a project so the project can create machines from it, and states the result (returns the grant). This clearly separates it from grant_pools_edit/delete/list and from machines_create. It does not, however, explicitly contrast itself with the closest siblings by 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 named alternative (e.g. grant_pools_edit for changing limits, grant_pools_list for inspection). The only usage-adjacent signal is the exclusion 'No machines are created by this call', which rules out one mistaken intent but doesn't route the agent between tools.
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 | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| poolGrantID | Yes | Project machine pool grant ID (pmpg_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint/idempotentHint annotations by disclosing cascade effects: machine grants generated through the pool grant are revoked and dependent processes are stopped, while the pool itself survives. It also states there are no dependency blockers, which is exactly the risk information an agent needs before a destructive 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?
Two dense sentences with zero filler; the destructive consequence is front-loaded and the reassuring non-effects (pool retained, no blockers) follow. 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?
For a destructive tool with an output schema absent and annotations limited to boolean hints, the description fully covers what is destroyed, what is preserved, and whether blockers exist. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all three IDs documented (orgID, projectID, poolGrantID with patterns), so the schema carries full parameter meaning. The description adds no additional parameter syntax or format detail, making the baseline 3 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 specific verbs and resource: removes the project's access to the machine pool and revokes the associated grants. It also distinguishes itself from the sibling pools_delete by explicitly noting 'The pool itself is retained', so an agent can tell it apart 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?
The purpose is clear, but there is no explicit when-to-use or when-not guidance and no named alternative among the grant_pools_* and pools_delete siblings. Usage is implied by the tool name 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_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 | Organization ID (org_...). | |
| 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 | Project ID (proj_...). | |
| default_cwd | No | Default working directory for processes on this project's machines created from the pool after this change. | |
| description | No | Optional note about this grant. | |
| poolGrantID | Yes | Project machine pool grant ID (pmpg_...). | |
| max_total_cpu | No | Maximum total CPU across this project's live machines from the pool. | |
| max_machine_cpu | No | Largest CPU count one of this project's machines can request. | |
| min_machine_cpu | No | Smallest CPU count one of this project's machines can request. | |
| max_total_machines | No | Maximum number of live machines this project can have from the pool. | |
| default_machine_cpu | No | Default CPU count for machines this project creates from the pool, overriding the pool's default. | |
| max_total_memory_mb | No | Maximum total memory in MB across this project's live machines from the pool. | |
| max_machine_memory_mb | No | Largest memory in MB one of this project's machines can request. | |
| min_machine_memory_mb | No | Smallest memory in MB one of this project's machines can request. | |
| default_machine_memory_mb | No | Default memory in MB for machines this project creates from the pool, overriding the pool's default. | |
| 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 | Env overlay merged over the pool's default_machine_env for machines this project creates from the pool afterward; 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 this project creates from the pool afterward; a null entry removes the key. | |
| default_machine_provider_options_overlay | No | Provider-specific options layered over the pool's provider options for this project's machines. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false; the description goes well beyond that by explaining PATCH semantics (omitted fields unchanged, null clears an override and restores pool inheritance), whole-object replacement for overlays/metadata, and the key consequence that existing machines keep their config while new launches pick up the new defaults/limits. It does not cover permissions or reversibility, so it lands just short of the top.
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 tightly packed sentences, each carrying a distinct rule (scope, PATCH semantics, replacement semantics, effect on existing vs new machines), with the core action front-loaded. No filler or restatement of the tool 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 19-parameter mutation with nested objects and no output schema, the description covers the hard parts: partial update semantics, inheritance clearing, and how changes propagate to machines. It is let down slightly by not mentioning authorization scope or what the call returns, but the behaviorally risky aspects are all 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 100%, so the baseline is 3, but the description adds genuine meaning the schema does not: the general omitted/null/cleared-override contract and the fact that overlay objects and metadata are replaced whole rather than merged. That materially improves how an agent would populate the nullable limit and overlay 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 opens with a specific verb+resource: 'Updates the grant's overrides and limits.' Combined with the tool name, an agent can immediately tell this is a mutation of an existing machine-pool grant rather than a get/list/add/delete operation, and 'overrides and limits' accurately scopes what is being edited.
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 this is the tool for changing an existing grant and even explains inheritance behavior relative to the pool, but it never states when to pick it over grant_pools_add/delete or grant_models_edit, nor any preconditions or exclusions. Usage is inferable rather than explicit.
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 grantARead-onlyIdempotentInspect
Returns one project's grant for a machine pool, with the defaults and limits it sets on top of the pool's own. Null fields set no override, so the pool's value applies.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| poolGrantID | Yes | Project machine pool grant ID (pmpg_...). |
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 genuinely useful semantics the annotations cannot: null fields mean no override and the pool's value applies, which shapes how the agent reads the result.
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, no filler, with the core purpose front-loaded and the override semantics placed second where it belongs. Every clause carries 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?
There is no output schema, so the description must carry return-shape burden; it does explain that the grant supplies defaults and limits and that nulls mean no override, which is the key interpretive fact. It stops short of enumerating the response fields, a minor gap for a read tool whose annotations already cover safety.
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% with all three IDs (org_/proj_/pmpg_) documented including patterns, so the schema does the heavy lifting. The description clarifies the relationship between project, pool and grant conceptually but adds no per-parameter detail beyond what the schema provides, so the 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?
States a specific verb ('Returns') and resource ('one project's grant for a machine pool'), and the word 'one' plus the singular key set distinguishes it from grant_pools_list and grant_pools_edit without opening either schema. It also conveys the semantic layer of the resource (defaults/limits on top of the pool's 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?
The singular, ID-keyed retrieval implies usage for fetching a single known grant, which is adequate for a simple getter. However, it never explicitly says when to use this versus grant_pools_list, nor mentions prerequisites such as the caller already needing the pmpg_ ID.
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 grantsARead-onlyIdempotentInspect
Lists the machine pools a project can create machines from, one grant per pool, most recently granted first by default.
| 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 | Organization ID (org_...). | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes | Project ID (proj_...). | |
| 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 destructiveHint=false, so the safety profile is covered. The description adds useful context beyond structured fields: one grant per pool and default ordering most-recently-granted-first. It stops short of richer behavioral detail such as pagination or failure modes.
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 that establishes the resource and the key behavioral default with no wasted words.
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 conveys what is returned (one grant per pool) and the default ordering, which covers the essentials for a list tool. It omits detail about the shape of a grant record, but the sibling grant_pools_get covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters (name glob, sort enum, limit, cursor, IDs). The description adds no parameter-level detail, which is the correct baseline when the schema does the heavy lifting.
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 (Lists) and resource (machine pool grants a project can create machines from), which is clear enough to separate it from grant_pools_add/get/delete. It does not explicitly name those siblings, but the semantics of 'grant' vs 'get' is discernible.
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 list-nature of the endpoint, but there is no explicit when-to-use or when-not-to-use guidance, nor any pointer to grant_pools_get for a single grant. The default ordering note hints at default behavior but not selection criteria.
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 projectAInspect
Shares a secret with another project so that project's resources can use it, and returns the grant; ownership doesn't change.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| secretID | Yes | Secret ID (sec_...). | |
| target_project_id | Yes | Project ID (proj_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false. The description adds genuinely useful context beyond them: 'ownership doesn't change' clarifies this is a non-transferring share, and 'returns the grant' discloses the response. It stops short of covering re-grant/idempotency behavior or required permissions.
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 sentence, front-loaded with the action and recipient, with the two most important caveats (resource usability, ownership unchanged) packed into the same sentence. 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?
For a three-required-param mutation with no output schema, the description covers the action, the effect on the target project, the ownership invariant, and the return value. It omits permission requirements and duplicate/repeat-grant behavior, which keeps it just short of fully 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 100%: all three parameters carry format descriptions and patterns (org_..., sec_..., proj_...). The description adds no parameter-level detail, 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?
The description states a specific verb (shares/grants), the resource (a secret), and the target (another project), plus the consequence (that project's resources can use it). It is clearly distinguishable from grant_secrets_delete and grant_secrets_list by verb alone, though it never explicitly names those siblings.
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 clause 'so that project's resources can use it' gives an implied use context, but there is no explicit guidance on when to prefer this over alternatives or on prerequisites (e.g., admin permissions, whether the target project must exist). 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.
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 | Organization ID (org_...). | |
| grantID | Yes | Secret grant ID (sgr_...). | |
| secretID | Yes | Secret ID (sec_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it specifies the exact blast radius (only the grant is removed) and what survives (secret, its versions, target project, other grants), and rules out dependency blockers. This is the kind of destructive-operation detail an agent needs before calling a delete that annotations alone (destructiveHint/idempotentHint) cannot 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?
A single tight sentence, front-loaded with the verb and the object and immediately qualified by scope and retention. Zero 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?
For a destructive 3-param delete with no output schema, the description covers scope, retention, and absence of blockers, which is nearly all an agent needs. A note on authorization/permissions would make it fully 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 coverage is 100% with each of the three IDs documented, including format patterns, so the schema does the heavy lifting. The description adds no parameter-level detail (e.g., cross-org semantics), so 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?
States a specific verb (Deletes) and resource (project grant), and the word 'only' plus the enumeration of what is retained (secret, versions, target project, other grants) distinguishes it from grant_secrets_add/list and secrets_delete. It does not explicitly name those siblings, 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?
The description gives clear context for the operation by clarifying scoping (deletes only the grant) and confirming there are no blockers, implying it is safe to invoke without dependency resolution. It does not explicitly state when to prefer it over revoking access another way, but the implied usage is unambiguous.
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 grantsARead-onlyIdempotentInspect
Lists the projects a secret is shared with, one grant per project, most recently shared first by default.
| 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 | Organization ID (org_...). | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| secretID | Yes | Secret ID (sec_...). |
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 and the bar is lower. The description still adds genuine behavioral context not present in the annotations: the return cardinality (one grant per project) and the default ordering (most recently shared first), which the schema's sort enum does not state as a default.
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 sentence with the key facts front-loaded (what it lists, granularity, default ordering) and no filler. It is efficient, though for a six-parameter paginated list it is arguably too sparse to fully carry its load.
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 usefully states what is returned (one grant per project) and the default ordering, which an agent needs to interpret results correctly. Pagination behavior is left to the schema's cursor parameter, so nothing critical is missing, but the description does not tie the pieces together.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (name glob, sort, limit, cursor, orgID, secretID) is already fully documented in the schema. The description adds no parameter-level syntax or constraint beyond what the schema provides, so the 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?
States a specific verb (Lists) and resource (the projects a secret is shared with), and clarifies the granularity ('one grant per project'), which distinguishes it from grant_secrets_add/delete. However, it never names or contrasts itself with the sibling grant lists (machines/models/pools/skills), so sibling differentiation is left implicit.
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 phrase 'most recently shared first by default' implies the sort parameter can override ordering, but there is no explicit when-to-use guidance, no statement of when to prefer this over the other grant_*_list tools, and no note on pagination handling. 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_skills_addGrant skill to projectAInspect
Shares a skill with another project so its agent configs can attach it, and returns the grant; ownership doesn't change.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| skillID | Yes | Skill ID (skl_...). | |
| target_project_id | Yes | Project ID (proj_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false and readOnlyHint=false, so the safety profile is covered; the description adds genuine context beyond them by noting that ownership does not change and that the grant is returned. It stops short of warning that idempotentHint=false means repeat calls create additional grants, which would have made this 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 sentence that front-loads the action and packs the target, the downstream effect and the ownership invariant without 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?
For a three-parameter mutation with no output schema, the description usefully notes that it returns the grant and that ownership is unaffected. It leaves out any permission or authorization prerequisite for granting a skill across projects, which is the one meaningful 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 100%, with orgID, skillID and target_project_id each documented with format hints, so the schema carries the parameter burden. The description adds no syntax, format or selection detail beyond what the schema already provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('shares a skill'), the resource (a skill) and the scope (with another project), plus the effect ('so its agent configs can attach it'). It is trivially distinguishable from its siblings grant_skills_delete and grant_skills_list, whose names already mark the differing operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the agent can infer this is the tool for making a skill attachable by another project's agent configs. There is no explicit when-to-use framing, no when-not-to-use clause, and no reference to grant_skills_list or grant_skills_delete as alternatives.
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 | Organization ID (org_...). | |
| grantID | Yes | Skill grant ID (skg_...). | |
| skillID | Yes | Skill ID (skl_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so safety is covered structurally. The description adds genuine value beyond them: an explicit blast radius (skill, revisions, target project and other grants are retained) and the guarantee of "no dependency blockers", which tells the agent the call should succeed cleanly.
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, no filler, and the destructive scope is front-loaded in the first clause. 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?
With rich annotations and fully documented parameters, the description only needs to convey scope and side effects, which it does. It does not address failure modes (e.g. grant not found) but no output schema exists, so return-value coverage is not required.
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% and each of the three required IDs carries its own format pattern and description. The description adds no parameter-level detail, so the 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?
States a specific verb ("Deletes") and a narrowly scoped resource ("only this project grant"), which implicitly distinguishes it from skills_delete by making clear the skill itself is untouched. It stops short of naming grant_skills_add or grant_skills_list, so the routing is inferable 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?
There is no when-to-use statement, no prerequisites (e.g. required permissions), and no named alternative. Usage is only implied by the scope constraint that the skill and other grants survive, which an agent must interpret on its own.
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 grantsBRead-onlyIdempotentInspect
Lists the projects a skill is shared with, one grant per project, most recently shared first by default.
| 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 | Organization ID (org_...). | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| skillID | Yes | Skill ID (skl_...). |
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. The description adds useful behavioral context — one grant per project and the default ordering — but says nothing about pagination or the structure of a grant. With annotations carrying safety, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly written sentence that front-loads the resource and then the notable behavioral detail. It is appropriately sized and wastes no words, though it is short enough to leave a little room unexploited.
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 rich annotations and full schema coverage, the safety and parameter story is handled elsewhere, and the description covers cardinality and ordering. However, with no output schema it does not describe what a grant actually contains (e.g. permissions or scope), leaving that gap unfilled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented. The only value the description adds is the default sort order ('most recently shared first'), which the generic sort enum description does not state. That is a marginal addition over the schema, so baseline 3 holds.
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 the projects a skill is shared with', which is precisely what a skill grant is. It distinguishes this read operation from the grant_skills_add/delete siblings by implication, though it never names them. Clear purpose, but no explicit sibling differentiation.
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 resource name (you call it when you need to see where a skill is shared), and 'most recently shared first by default' hints at default behavior. However, there is no explicit when-to-use guidance, no when-not, and no named alternatives such as grant_skills_add.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
machines_createConnect BYO machineAInspect
Registers a machine you run yourself and returns its daemon token for installing omnarad on it; the token is shown only in this response. The machine stays offline until its daemon connects. project_ids grants it to those projects in the same call, and their agent configs reference it by display_name.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Default working directory for processes started on the machine. | |
| env | No | Environment variables set for processes started on the machine. | |
| orgID | Yes | Organization ID (org_...). | |
| 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 | Environment variable names mapped to secret IDs (sec_...) whose values are set for processes started on the machine. | |
| token_name | No | Human-readable name. Spaces and punctuation are allowed; leading or trailing whitespace and invisible or control characters are not. | |
| description | No | Optional description of the machine. | |
| project_ids | No | Projects to grant the machine to in the same call (up to 100). | |
| 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?
Beyond the annotations (write, non-idempotent, non-destructive), the description discloses critical behavior: the daemon token is returned and 'shown only in this response' (one-time secret visibility), the machine 'stays offline until its daemon connects', and project_ids grants the machine to projects in the same call. These are non-obvious traits that directly affect how an agent should handle the result.
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 definition is front-loaded with the core action and what it returns, and every clause carries information. It is somewhat dense with semicolon-chained clauses, but nothing is filler and the most important fact (one-time token) appears early.
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 correctly explains the return (a one-time daemon token). For a 9-parameter tool with nested objects, it covers the critical behaviors and the non-obvious project_ids/display_name linkage; remaining parameter details (cwd, env, secret_env, metadata) are well documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema for project_ids (granting projects in the same call) and the display_name relationship ('their agent configs reference it by display_name'), which is not stated in the schema. It adds real value without covering every 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 states a specific verb and resource ('Registers a machine you run yourself') and immediately clarifies the BYO nature versus the pool/provisioning siblings. It also tells the agent what the call produces (a daemon token for installing omnarad). An agent can distinguish it from machines_update, machines_get, and pools_create 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?
'Registers a machine you run yourself' implies the BYO use case versus pool-provisioned machines, but no explicit when-to-use/when-not or named alternative is given. The project_ids note describes an in-call side effect rather than routing guidance. Usage context is present but must be inferred.
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 | Organization ID (org_...). | |
| machineID | Yes | Machine ID (mch_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the description goes further by enumerating the concrete side effects: ending daemon runtimes and work, revoking daemon tokens and project grants, and releasing agent bindings. This is rich behavioral context beyond what annotations provide.
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 dense sentences, each earning its place: the scope of what is deleted, the exclusion for pooled machines, and the dependency note. No waste and 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 two-parameter mutation tool with full schema coverage and annotations covering the safety profile, the description supplies the missing piece: the cascade of side effects and the applicability boundary. Nothing an agent needs to call this correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both machineID and orgID with their patterns. The description adds no parameter-level detail, so the baseline of 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 states a specific verb and resource ('Deletes a BYO machine') and immediately distinguishes this tool from the machines_delete route for pooled machines, routing the agent to the machine pool instead. This differentiation from related tools is exactly what an agent needs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when this tool applies (BYO machines) and when it does not (pooled machines, which go through their machine pool), plus notes there are no dependency blockers. This is clear when-to-use/when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
machines_getGet machineARead-onlyIdempotentInspect
Returns one active machine's full record: connection state, execution defaults (secret IDs only, never values), metadata, and the latest failure report. Machines in other lifecycle states, such as pool machines still provisioning, aren't returned.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| machineID | Yes | Machine ID (mch_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds real value on top: secrets are surfaced as IDs and never values (a privacy guarantee), the latest failure report is included, and non-active lifecycle states are excluded from results. It stops short of saying what happens when the target machine isn't active (error vs empty).
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, zero filler, with the returned payload front-loaded and the scoping caveat following as a qualifier.
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's enumeration of returned fields does the necessary work and covers the important non-obvious one (secret IDs, not values). The only gap is failure behavior for a non-active or nonexistent machine, which an agent must guess.
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% and both required parameters (orgID, machineID) carry their own patterns and descriptions, so the schema fully carries parameter semantics. The description adds no syntax or constraint detail beyond that, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns one active machine's full record') and enumerates the payload: connection state, execution defaults, metadata, latest failure report. The singular 'one machine' plus the active-only scope cleanly separates it from machines_list without needing to name the sibling.
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 when this is appropriate by limiting results to active machines, and notes that provisioning/pool machines won't come back. However, it never names an alternative (e.g. machines_list to discover IDs, or how to inspect non-active machines), so the agent must infer routing from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
machines_listList machinesARead-onlyIdempotentInspect
Lists the machines the caller can see, both BYO and pooled, newest first by default, with each one's connection state. Items are summaries without execution defaults or metadata.
| 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 | Organization ID (org_...). | |
| 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 readOnly/idempotent/non-destructive, but the description goes further by disclosing the default sort ('newest first') and, importantly, that items are summaries lacking execution defaults or metadata - a real expectation-setting detail since there is no output schema. It does not discuss pagination behavior beyond what the cursor param implies.
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 with no filler; scope and default ordering are front-loaded and the payload caveat closes it out. 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 compensates by describing what each item contains (summary plus connection state, omitted execution defaults/metadata) and the default ordering. Missing only pagination/return-envelope detail, which is minor given the cursor parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (name glob, sort, limit, cursor, source_kind, machine_pool_id, orgID) is already documented in the schema. The description only echoes the source_kind default ('both BYO and pooled') and the sort default, adding little beyond structured 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?
States a specific verb+resource (lists machines) plus scope (the caller can see), coverage (BYO and pooled), default ordering, and the payload trait (connection state). An agent can distinguish it from machines_get and machines_create by the verb, though it never names a sibling 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?
There is no guidance on when to reach for this versus machines_get for a single machine, or grant_machines_list for permission-scoped listings. Usage is only implied by 'lists ... the caller can see'; 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.
machines_updateUpdate machineADestructiveInspect
Updates a machine's execution defaults: working directory, environment variables, and secret environment variables. env and secret_env replace the whole map, and changes apply to processes started afterward.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Default working directory for processes started on the machine. | |
| env | No | Environment variables set for processes started on the machine. | |
| orgID | Yes | Organization ID (org_...). | |
| machineID | Yes | Machine ID (mch_...). | |
| secret_env | No | Environment variable names mapped to secret IDs (sec_...) whose values are set for processes started on the machine. |
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. The description adds genuinely non-obvious behavior beyond the annotations: env and secret_env replace the whole map (not merge), and changes only affect processes started afterward. It does not mention auth/permission requirements, 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 tight sentences, front-loaded with what is updated and then the two highest-risk behavioral facts (replace semantics, propagation timing). 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?
For a 5-parameter mutation tool with nested objects, no output schema, and annotations covering safety, the description supplies the critical replace-semantics and timing details. It omits permission requirements and behavior of omitted fields (e.g. whether cwd is unchanged when not passed), so it is not fully 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 coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: env and secret_env are whole-map replacements rather than merges, and the update is scoped to future processes. cwd and the ID parameters are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (updates) and resource (a machine's execution defaults) and enumerates the affected fields (cwd, env, secret_env). It is clear enough to distinguish from machines_create/delete/get/list, though it does not explicitly name or contrast those siblings.
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, nor any prerequisites (required orgID/machineID, permission or grant requirements). The sentence about changes applying to later processes is behavioral, not usage-routing guidance.
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 | Organization ID (org_...). | |
| modelProviderConfigID | Yes | Model provider config ID (mpc_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered; the description adds genuinely useful behavior beyond that — it validates credentials, waits on the upstream provider (latency warning), and can surface upstream failure as ordinary data rather than an error. That failure-as-data disclosure is exactly the kind of gotcha an agent needs.
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 with zero waste: the first front-loads what the tool does and how, the second adds the behavioral caveats (slowness, failure-as-data). 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?
With annotations covering the safety profile and the description covering latency and the failure-as-data return behavior, an agent has what it needs to call this correctly despite the absence of an output schema. Return structure is left implicit, but the main return gotcha is flagged.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both required parameters are fully described with ID patterns, so the schema carries the parameter burden. The description adds only the loose implication that modelProviderConfigID holds the credential being validated — no syntax or format beyond the schema, matching 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?
States a specific verb and resource — "Fetches the provider's live model catalog" — and distinguishes itself from the sibling config routes by revealing the mechanism: validating the configured credential and probing /models. An agent can tell this apart from model_providers_get/list without opening either 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 positions itself against "the other model provider config routes" and flags that it is slower, which implies when it is and isn't the right choice (live data vs. cheap config reads). It stops short of naming a specific alternative (e.g. model_providers_get or models_list) or an explicit when-not-to-use condition, so it is clear context rather than full routing guidance.
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 | Organization ID (org_...). | |
| preset | No | Built-in provider settings: openai, openrouter, or anthropic. A preset fills in api_format, api_variant, base_url, endpoint_path, auth_kind, and auth_options, so omit those when using one. | |
| 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 | How the credential is sent: bearer_token, api_key_header, or sigv4 (AWS). | |
| api_format | No | Wire protocol the model endpoint speaks: openai-responses, openai-chat-completions, or anthropic-messages. | |
| api_variant | No | Provider-specific flavor of the API format: default, openrouter, or bedrock. | |
| 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 | Secret ID (sec_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the mutation profile (readOnly=false, destructive=false, idempotent=false); the description adds real behavioral detail beyond that: credential validation against the provider's validation endpoint, a probe of /models, and the important guarantee that a failed probe does not fail creation. It stops short of covering auth/permission requirements or what happens on partial 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?
Two tightly packed sentences with zero filler; the creation act is front-loaded and the failure-tolerance caveat is placed last, where it matters most.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, nested-object mutation with no output schema, the description usefully names the return artifact (model_catalog) and discloses the validation/probe side effects. It omits credential/permission prerequisites and any pointer to the update path, but the core call-time behavior is 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%, so every one of the 14 parameters is already documented, including the preset's role in filling api_format/base_url/auth_kind. The description adds no parameter-level meaning beyond the schema, so the 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 states a specific verb and resource ('Create a model provider config') and distinguishes itself from sibling mutations by describing the creation-time validation and probing sequence. An agent can tell this apart from model_providers_update or model_providers_catalog 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?
It implies when creation is appropriate by enumerating what creation entails, but never names alternatives (e.g. model_providers_update for existing configs) or states preconditions such as needing an existing credential secret and orgID. Usage is inferable but not spelled out.
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 | Organization ID (org_...). | |
| modelProviderConfigID | Yes | Model provider config ID (mpc_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds genuinely useful preconditions the annotations cannot convey — the configured-models block and the cluster-managed restriction — which is real added value, though it doesn't describe failure response or how to resolve the block.
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, no filler, with the core action front-loaded ahead of the two constraints. Efficient, though the constraints could be tightened into a single clause.
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 two-parameter delete with no output schema, the description covers the key risk: when the call will fail. Return/error format is not addressed, but with annotations carrying the destructive/idempotent profile, an agent has what it needs to decide whether to invoke.
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?
Both parameters are fully documented in the schema (100% coverage) with patterns and prefix conventions. The description adds no additional parameter meaning, so the baseline of 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?
States a specific verb and resource ('Deletes ... the model provider config') and the qualifier 'only' signals that associated models are not removed, implicitly distinguishing it from siblings like models_delete. The distinction is implied rather than named explicitly, so it falls just 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 when-not conditions: deletion is blocked while configured models exist, and cluster-managed provider configs cannot be deleted through this route. It does not name an alternative route or tool for those blocked cases, so guidance is clear but not fully routing.
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 configARead-onlyIdempotentInspect
Returns one model provider config's stored settings; secret values are never returned. The provider isn't contacted, so the response doesn't list its models.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| modelProviderConfigID | Yes | Model provider config ID (mpc_...). |
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), yet the description adds two non-obvious traits: secrets are redacted from the response and the provider is not contacted, so models will be absent. It does not mention error behavior for invalid/missing IDs, which keeps 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?
Two tight sentences with no filler, front-loaded with what is returned before the caveats about what is omitted. Every clause carries 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?
With no output schema, the description does the important work of telling the agent what will and will not appear in the response (no secrets, no models). It stops short of sketching the remaining returned fields or failure modes, which for a two-parameter read tool is 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 100% and both parameters carry their own format pattern documentation, so the schema does the work. The description adds no meaning about modelProviderConfigID or orgID beyond what the schema states.
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 model provider config's stored settings') and the singular scope distinguishes it from the sibling model_providers_list. An agent can pick it out of the six model_providers_* tools 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?
The singular 'one ... config' implies the fetch-by-ID use case, but the description never states when to use this versus model_providers_list or model_providers_catalog, nor any prerequisites such as needing a valid org-scoped ID. Usage is left to inference.
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 | Organization ID (org_...). | |
| 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. The description adds one useful behavioral fact not in annotations: filtering, sorting, and pagination are performed server-side rather than client-side. It stops short of describing return shape or paging edge behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words; the capability list is compact and immediately readable. It is perhaps too terse to be a 5, since it trades away any differentiating or routing detail for brevity.
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, org-scoped listing tool with full schema coverage and annotations covering safety, the description supplies enough context to invoke it correctly. The absence of an output schema is a minor gap, but listing return shape is predictable and next_cursor is already described in the cursor parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the five parameters is documented in detail (glob syntax, sort enum, cursor, limit), so the schema carries the burden. The description only generically echoes filtering/sorting/pagination without adding syntax or constraints beyond the schema, matching 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?
States a specific verb (List) and resource (model provider configs) and enumerates the capabilities (filtering, sorting, pagination). It is clearly a collection endpoint rather than a single-resource get/create, though it doesn't explicitly name sibling tools like model_providers_get or model_providers_catalog for contrast.
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 listing intent is implied clearly by the name and description, and 'cursor pagination' hints at how to page. However, there is no explicit when-to-use guidance versus model_providers_get or models_list, and no statement of prerequisites beyond the schema's required orgID.
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 configADestructiveIdempotentInspect
Updates a model provider config's connection settings, such as its credential and headers, and returns the updated config; omitted fields keep their values. The credential secret is checked to exist and match auth_kind, but the provider isn't contacted, so a credential the provider rejects isn't caught here.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| 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 | How the credential is sent: bearer_token, api_key_header, or sigv4 (AWS). | |
| 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 | Secret ID (sec_...). | |
| modelProviderConfigID | Yes | Model provider config ID (mpc_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes meaningfully beyond the annotations: it discloses partial-update semantics (omitted fields retain values), the validation boundary (credential must exist and match auth_kind but the provider is never contacted), and that the updated config is returned. It does not explain the destructiveHint=true behavior the annotations imply—that headers and secret_headers are replaced wholesale—nor any auth/permission requirements, so it is strong but incomplete.
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 compact sentences, front-loaded with the action, and the second sentence earns its place by flagging the validation caveat. No filler, though 'such as its credential and headers' is slightly redundant given the schema enumerates the fields.
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 mutation with nested objects and no output schema, the description covers the update semantics, validation scope, and return value adequately. It leaves out the wholesale replacement of headers/secret_headers and any permission or idempotency context, which matters given destructiveHint=true.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the per-parameter meaning (base_url, auth_kind, auth_options, timeouts, secret_headers) is already documented in the schema. The description adds only the cross-cutting partial-update rule, not parameter-level syntax, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: it updates a model provider config's connection settings (credential, headers) and returns the updated config. The verb cleanly separates it from model_providers_create/get/delete by name, but the description itself never names a sibling or draws an explicit boundary, 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 by the word 'Updates' plus the partial-update note ('omitted fields keep their values'). There is no explicit when-to-use guidance, no statement of required org permissions/setup, and no routing to alternatives such as model_providers_create or model_providers_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_createCreate configured modelAInspect
Adds a provider model to this provider config under the name agent configs use as model.name, and returns it. The model slug isn't checked against the provider's catalog, and no project can use the model yet.
| 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 | Organization ID (org_...). | |
| 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 | Model provider config ID (mpc_...). | |
| 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, idempotentHint=false, and destructiveHint=false. The description adds genuine behavioral context beyond them: the slug is NOT validated against the provider's catalog, and the new model is not yet usable by any project (implying further grants/config are needed). It also notes it returns the created model.
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 with the core verb+resource front-loaded and the two important caveats (no catalog validation, not yet usable) trailing. Every clause carries information; 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 15-parameter mutation with a nested object and no output schema, the description is compact but covers the key behavioral consequences, and the schema carries full parameter detail. What is thin is return-value description ('returns it') in the absence of an output schema, plus no mention of required permissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 15 parameters is already documented in the schema. The description adds no parameter-level detail (e.g., about context_window_tokens or api_variant_options) beyond what the schema provides, so baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Adds a provider model to this provider config') and clarifies the naming role ('the name agent configs use as model.name'). It implicitly separates this from model_providers_create (which creates the config itself) and models_update, though it never names a sibling 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?
Usage is only implied: the model is added 'to this provider config,' so a provider config must already exist. There is no explicit statement of when to choose this tool over model_providers_create or models_update, and no exclusions are given.
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 | Organization ID (org_...). | |
| configuredModelID | Yes | Configured model ID (mdl_...). | |
| modelProviderConfigID | Yes | Model provider config ID (mpc_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond the annotations: the active-project-grant blocking rule and the cluster-managed exclusion. It does not describe the return value or error behavior, keeping it at 4.
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 core action front-loaded and constraints following. No filler or repetition. Slightly terse on the exclusion clause, but 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?
No output schema exists, but the description needn't explain return values; it does cover the destructive nature, the blocking precondition, and the route limitation, which are the key facts for a delete tool. Missing only error/response behavior, which is minor here.
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%, with orgID, configuredModelID, and modelProviderConfigID each documented in the schema, so the baseline is 3 per the rules. The description references the configured model but adds no parameter-level format or relationship detail beyond what the schema provides.
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.' This distinguishes it from siblings like models_update, models_create, and models_list, though it does not explicitly name any sibling. The 'only the configured model' phrasing clarifies scope but is slightly ambiguous about what else might exist.
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 concrete conditions that govern usage: deletion is blocked while active project grants exist, and cluster-managed configured models cannot be deleted through this route. These are meaningful preconditions an agent needs. No alternative tool is named, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_listList configured modelsARead-onlyIdempotentInspect
Lists the models configured under one model provider config, newest first, with each model's slug, token limits, and reasoning support.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | Organization ID (org_...). | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| modelProviderConfigID | Yes | Model provider config ID (mpc_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuine context beyond that: the newest-first ordering and the per-item payload (slug, token limits, reasoning support), which matters because there is no output schema. Pagination behavior is left to the schema rather than described.
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; ordering, scope, and returned fields are packed in without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage, no output schema, and annotations carrying the safety profile, the description supplies the return-field content the agent otherwise could not know. Pagination is deferred entirely to the schema, which is a minor gap rather than a missing requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so limit, cursor, orgID, and modelProviderConfigID are fully documented structurally. The description adds only the implicit notion that results are scoped to one provider config; it does not clarify cursor/limit semantics beyond the schema, so the 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?
States a specific verb ("Lists") plus resource and scope ("models configured under one model provider config"), which separates it from models_create/update/delete and model_providers_list. It stops short of explicitly naming the sibling it is not, so it lacks the active sibling differentiation that would earn 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?
There is no when-to-use / when-not-to-use guidance and no mention of neighboring tools such as model_providers_catalog or grant_models_list. The provider-config scoping is the only cue about appropriate use, which is thin given how many list-style siblings exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_updateUpdate configured modelADestructiveIdempotentInspect
Updates a configured model's settings and returns the updated model; omitted fields keep their values. Agents already using the model pick up the change on their next model call. The update isn't checked against project grants or agent configs, so lowering a limit below their overrides or turning off tools or reasoning they rely on makes those agents' next model call fail.
| 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 | Organization ID (org_...). | |
| 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 | Configured model ID (mdl_...). | |
| 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 | Model provider config ID (mpc_...). | |
| 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?
Well beyond the annotations: it discloses partial-update semantics ('omitted fields keep their values'), live propagation timing, the fact that no grant/agent-config validation runs, and the concrete failure mode when a limit or capability is lowered. Annotations only signal destructive/idempotent; the description explains the blast radius.
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 return, followed by propagation and hazard. The final sentence is long but each clause carries distinct consequence information rather than 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 16-parameter mutation with no output schema, it covers the return value, propagation behavior, and failure consequences. Combined with idempotentHint/destructiveHint annotations and full schema coverage, little is missing, though the interaction with grants is mentioned only as an absence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's only parameter-level addition, 'omitted fields keep their values', largely duplicates per-field text already in the schema ('Omitted keeps the current value'), so it adds little new meaning.
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 ('Updates a configured model's settings and returns the updated model'), and the resource wording ('configured model') distinguishes it from siblings like models_create, models_delete, and model_providers_update. An agent can tell what entity this mutates 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 operating context: changes propagate on the agent's next model call, and lowering limits or disabling tools/reasoning can break dependent agents. It never explicitly routes the agent to an alternative tool (e.g. models_create vs models_update), so exclusions are absent, but the risk framing is strong.
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 poolBInspect
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 | Pool definition. name, provider, provider_auth_secret_id, default_machine_provider_options, and max_total_machines are always required; which default machine size and CPU and memory limits are required depends on the provider; Blaxel pools reject CPU fields. | |
| orgID | Yes | Organization ID (org_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, non-idempotent write, so the safety profile is covered. The description adds useful behavior — provider-dependent required fields, incl. that Blaxel-style providers vary — but says nothing about validation failures, permission requirements, or side effects of creating the pool.
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 purpose is front-loaded and every sentence carries information, though the second sentence is a long semicolon-chained clause that is dense rather than elegant. A doc link is included, which is appropriate for a provider-dependent 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?
For a high-complexity mutation tool with nested objects and no output schema, the description covers the purpose, the provider variability, and points to the authoritative request schema. The main gap is the absence of any creation prerequisites or post-creation 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?
Top-level schema coverage is 100%, so the baseline is 3, but the description goes further by enumerating the nine providers and the categories of fields the nested body carries, which meaningfully helps an agent assemble the polymorphic request beyond what the raw schema spells out.
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 enumerates the body's contents, so the agent knows exactly what the call does. It does not explicitly differentiate itself from pools_update/pools_list/pools_get, but the create semantics are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g. needing an existing provider auth secret), and no mention of alternatives such as pools_update. The only near-usage note ('required fields depend on the provider') is really a parameter fact, leaving selection context entirely to inference.
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 | Organization ID (org_...). | |
| poolID | Yes | Machine pool ID (mpo_...). |
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 by spelling out exactly what is destroyed (pooled machines), what is revoked (machine grants, project machine-pool grants), and what side effect follows (processes stopped). It also discloses the specific failure condition (409 for cluster-managed pools), which 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?
The core effect is front-loaded in the opening clause and every clause carries distinct information (scope, grant revocation, process stopping, error case). The single long sentence with an internal semicolon is information-dense but slightly harder to scan than a split structure would be.
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 tool with no output schema, the description covers everything an agent needs before invoking: what is removed, the cascading revocations, the process impact, and the one rejection case. Nothing material is left to inference.
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 both orgID and poolID, including regex patterns and format hints, so the schema already carries parameter meaning. The description adds no additional per-parameter syntax or constraint detail, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Deletes) and resource (the machine pool) and then enumerates the exact cascade: pooled machines, generated machine grants, project machine-pool grants, and dependent processes. It is clearly distinguishable from the many sibling delete tools (machines_delete, grant_pools_delete, crons_delete) because it states its own blast radius.
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 an explicit precondition/refusal case — a cluster-managed pool returns 409 Conflict — plus the reassurance that no other dependency blockers exist. It does not name an alternative tool (e.g., pools_update to detach a cluster-managed pool first), so it stops short of the when-not-and-alternative guidance a 5 would require.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pools_getGet machine poolARead-onlyIdempotentInspect
Returns one machine pool's configuration and current usage: provider, default machine settings, CPU, memory, and machine-count limits, and idle deletion policy.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| poolID | Yes | Machine pool ID (mpo_...). |
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 contributes real value by disclosing what data comes back, but says nothing about auth requirements, behavior for an unknown poolID, or freshness of the 'current usage' figures.
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 returned-field enumeration is dense and every clause carries 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?
With no output schema, the description usefully enumerates the returned fields, which is exactly what an agent needs to know about the payload. Only minor gaps remain (error behavior, permission requirements) for an otherwise simple two-parameter read 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 100% with both orgID and poolID documented including their ID patterns, so the schema carries the parameter burden. The description adds no additional meaning about the identifiers, which is the expected baseline here.
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 machine pool's configuration and current usage') and enumerates the returned facets (provider, machine settings, CPU, memory, limits, idle deletion policy). It is unmistakably a single-resource getter, though it never names pools_list as the alternative for enumerating pools.
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 phrase 'one machine pool's' implies a lookup-by-ID use case versus a list operation, which is the only usage signal present. There is no explicit statement of when to prefer this over pools_list or what prerequisites (e.g., permission to read the pool) apply.
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 | Organization ID (org_...). | |
| 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 carry readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context that filtering/sorting/pagination are server-side and cursor-based, but says nothing about page limits, ordering guarantees, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the resource and the three key capabilities, with zero filler or restated boilerplate.
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 endpoint with a fully described schema this is close to sufficient, but it omits that orgID is required scoping and gives no hint of the returned item shape, which matters since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the enum, glob syntax, cursor semantics, and limits are all documented in the schema. The description adds no per-parameter meaning beyond that, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("List machine pools") that is clearly distinct from the singular pools_get and the mutating pools_create/update/delete siblings. It does not explicitly name those alternatives, but the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb "List"; there is no statement of when to prefer this over pools_get for a single pool or over grant_pools_list, and no prerequisites described. Adequate but leaves routing to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pools_updateUpdate machine poolADestructiveIdempotentInspect
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 | Organization ID (org_...). | |
| poolID | Yes | Machine pool ID (mpo_...). | |
| 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 | Default working directory for processes on machines created from the pool after this change. | |
| description | No | Optional description of the pool. | |
| max_total_cpu | No | Maximum total CPU across the pool's live machines. | |
| max_machine_cpu | No | Largest CPU count a single machine in the pool can use. | |
| min_machine_cpu | No | Smallest CPU count a single machine in the pool can use. | |
| provider_config | No | Provider-specific settings for the pool. | |
| max_total_machines | No | Maximum number of live machines in the pool. | |
| default_machine_cpu | No | Default CPU count for new machines in the pool. | |
| 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 | Maximum total memory in MB across the pool's live machines. | |
| max_machine_memory_mb | No | Largest memory in MB a single machine in the pool can use. | |
| min_machine_memory_mb | No | Smallest memory in MB a single machine in the pool can use. | |
| provider_auth_secret_id | No | Secret ID (sec_...). | |
| default_machine_memory_mb | No | Default memory in MB for new machines in the pool. | |
| 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 | Provider-specific options applied to new machines in the pool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true, readOnly=false, and openWorld=false. The description adds valuable behavioral detail beyond annotations by explaining pool-type-dependent field restrictions and the 409 Conflict outcome for disallowed cluster-managed changes.
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 with no filler, front-loading the permissive tenant-managed case before the restrictive cluster-managed case. The structure is logical and efficient, though it does not open with the explicit operation verb itself.
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 tool with 22 parameters and no output schema, the description supplies the essential constraint that determines whether the call will succeed or fail. Annotations cover safety and idempotency, while schema descriptions cover individual parameters and update semantics, leaving little critical information missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 22 parameters are already documented in the schema. The description groups some updatable field categories (default CPU/memory, environment variables, idle deletion policy) but does not add syntax, format, or edge-case meaning beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name and title establish the action (update) and resource (machine pool), and the description adds the crucial distinction between tenant-managed and cluster-managed pools. It does not repeat a generic verb, but it clearly frames the operation as applying changes to a pool with field-level constraints.
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 clear conditions for when changes are accepted versus rejected: tenant-managed pools allow every field while cluster-managed pools allow only specific fields and reject others with 409 Conflict. It does not name sibling alternatives such as pools_create or machines_update, but it gives strong context for successful invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_createCreate agent profileBInspect
Creates a named profile that points at an agent config and returns the profile with its current config.
| 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 | Organization ID (org_...). | |
| config | Yes | Agent config ID (acfg_...). | |
| projectID | Yes | Project ID (proj_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the mutation profile is covered. The description usefully adds that the created profile is returned with its current config, but it does not disclose the consequence of idempotentHint=false (e.g., whether duplicate names are allowed) or any auth/error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It conveys the action, the entity, its link to a config, and the return value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly notes what is returned, which an agent needs. It falls short only on creation-time edge cases (name uniqueness, duplicate handling, failure modes) for a non-idempotent create.
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%: each of the four parameters has format details (org_, acfg_, proj_ patterns) documented in the schema. The description only restates that the profile 'points at an agent config' and is 'named', adding no semantics beyond what the schema already supplies, so the 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?
States a specific verb (creates) and resource (named profile) and clarifies the linkage to an agent config. It does not explicitly contrast itself with siblings like profiles_update or profiles_rename, but 'create' is unambiguous enough that an agent can distinguish it from the other profile operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description never says when to use this tool versus profiles_update, profiles_rename, or profiles_get, nor does it state prerequisites such as needing an existing agent config ID. The only implicit guidance is the word 'Creates'.
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 | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| agentProfileID | Yes | Agent profile ID (aprf_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/idempotent, but the description goes well beyond them: it names the cascaded entities (versions, cron triggers), states that running agents are retained via immutable snapshots, and warns that integration settings may hold a stale public profile ID causing future launches to fail as unavailable. That is exactly the side-effect disclosure a mutation tool needs.
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 cascade scope, then consequences for agents and integrations. No sentence is filler; each adds a distinct operational fact.
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, everything an agent needs is present: what is destroyed, what survives, and the downstream breakage risk. Annotations cover the safety profile and the schema covers parameters, so no meaningful gap remains.
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% and all three IDs are documented with patterns in the schema, so the schema carries the parameter burden. The description adds no syntax or format detail beyond that, making 3 the correct baseline.
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?
Starts with a specific verb+resource and immediately scopes the cascade: the profile, all profile versions, and cron triggers targeting it. That cascade detail distinguishes it from sibling deletes like crons_delete and from non-destructive siblings like profiles_rename and profiles_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?
Usage is implied by the destructive cascade description, but there is no explicit when-to-use or when-not-to-use guidance, and no pointer to a softer alternative (e.g., rename/update or archive) for callers who don't want cascade deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_getGet agent profileARead-onlyIdempotentInspect
Returns one agent profile with its current config, current_config_id, and current_generation.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| agentProfileID | Yes | Agent profile ID (aprf_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds that the response includes current config, current_config_id, and current_generation, which is useful beyond the annotations, but it says nothing about not-found/error behavior or pagination.
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 returned fields are listed compactly and 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?
For a simple get-by-ID tool with no output schema, the description supplies the key return fields and annotations cover the operation's safety semantics. It stops short of describing failure behavior or the shape of the nested config, but is nearly complete for an operation this simple.
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% and all three parameters carry their own pattern-constrained descriptions, so the schema does the heavy lifting. The description adds no syntax or format detail beyond what the schema already documents, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: it returns a single agent profile, and the word 'one' implicitly distinguishes it from the profiles_list sibling. It does not explicitly name the alternative sibling, but the retrieval-by-identity purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetch a specific profile. There is no explicit when-to-use statement, no guidance on obtaining the required org/project/profile IDs, and no exclusions stating when profiles_list or profiles_update would be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_listList agent profilesARead-onlyIdempotentInspect
Lists the project's agent profiles, newest first by default, filterable by name. Items include a summary of each profile's current config, not its full compiled definition.
| 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 | Organization ID (org_...). | |
| cursor | No | Opaque pagination cursor from a previous response's next_cursor. Omit for the first page. | |
| projectID | Yes | Project ID (proj_...). | |
| 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 readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds useful domain context beyond annotations: default ordering is newest first, results can be filtered by name, and returned items contain config summaries rather than full compiled definitions.
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 concise sentences that are front-loaded with the core action and then immediately clarify result scope. No sentence is wasted or repetitive.
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 eight-parameter list tool with full schema coverage and rich safety annotations, the description is mostly complete: it explains scope, default ordering, filtering, and return-content limits. It could mention pagination or the optional stats parameters, but those are covered adequately by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all parameters. The description adds marginal value by noting name filtering and default newest-first ordering, but it does not add syntax, format, or interaction details beyond what the schema already provides.
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 (Lists) and resource (the project's agent profiles), plus scope (project's) and default ordering (newest first). It does not explicitly name a sibling such as profiles_get or agents_list to distinguish itself, but the list-versus-single distinction is inherent.
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: it describes what is listed and that it can be filtered by name, so an agent can infer this is for browsing project profiles. It does not state when to use this over profiles_get or agents_list, nor does it give any exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_renameRename agent profileADestructiveInspect
Renames an agent profile without changing its config. Agents and cron triggers reference the profile by ID and keep working, but configs that name the profile under subagents must use the new name the next time they're compiled.
| 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 | Organization ID (org_...). | |
| projectID | Yes | Project ID (proj_...). | |
| agentProfileID | Yes | Agent profile ID (aprf_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true and idempotentHint=false but say nothing about referential consequences. The description adds real behavioral context beyond the annotations: agents and cron triggers reference by ID and survive the rename, while configs naming the profile under subagents must be recompiled. That non-obvious downstream effect is exactly what the agent needs, though permissions/rollback are unaddressed.
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 sentence, front-loaded with the core action and config-preservation guarantee, followed by the downstream referential behavior. Every clause earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-param mutation with full schema coverage and no output schema, the description supplies the missing behavioral dimension (what happens to references) and stays concise. It could note whether the old name is reserved or whether duplicate names are rejected, but the essential call-time context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including the NFC normalization and whitespace constraints on name. The description adds no parameter-level detail beyond that, which is the expected baseline 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?
Specific verb+resource ('Renames an agent profile') with an immediate scoping clause ('without changing its config') that distinguishes it from profiles_update. An agent can differentiate this from the sibling profiles_update without opening either 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 implies when to use it (name change only, not config change) by contrasting with config mutation, which is useful implied guidance. However, it never explicitly names an alternative like profiles_update or states when not to use this tool, so an agent must infer the routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
profiles_updateUpdate agent profileADestructiveInspect
Points a profile at a different agent config. Existing agents keep their current config; agents launched from the profile afterward use the new one. Fails with 409 unless expected_current_config_id matches the profile's current config.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| config | Yes | Agent config ID (acfg_...). | |
| projectID | Yes | Project ID (proj_...). | |
| agentProfileID | Yes | Agent profile ID (aprf_...). | |
| expected_current_config_id | Yes | Agent config ID (acfg_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=false, and the description adds substantive context beyond them: propagation timing (existing vs. newly launched agents) and an optimistic-concurrency precondition (409 unless expected_current_config_id matches). That last detail is a genuine behavioral disclosure not derivable from annotations or 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?
Three dense sentences, each earning its place: the action, the propagation effect, and the failure condition — ordered from most to least central. No filler or restatement of the tool 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 five-required-parameter mutation tool with no output schema, the description covers the operation, its effect on dependent agents, and its failure mode. It does not mention authorization requirements or what the response returns, but the return value need not be explained absent an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for expected_current_config_id — explaining it functions as a compare-and-swap guard whose mismatch triggers a 409. That goes beyond the schema's terse 'Agent config ID' description, though the other four IDs get no added explanation.
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 combination ('Points a profile at a different agent config') that clearly distinguishes it from siblings like profiles_rename, profiles_create, and profiles_delete. An agent can identify the operation 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?
Clearly explains the semantics of when the change takes effect (new launches use the new config; existing agents keep theirs) and names the 409 failure precondition. It does not, however, explicitly contrast itself with sibling tools such as profiles_rename or configs_create, so routing between alternatives 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.
projects_createCreate projectAInspect
Creates a project, makes the caller its admin, and returns it. The new project has no grants to organization models, machines, skills, or secrets.
| 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 | Organization ID (org_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, non-open-world, so the safety profile is covered. The description goes beyond them by disclosing real side effects: the caller is granted admin, the project is returned, and it carries no grants to org models, machines, skills, or secrets — which tells the agent follow-up grant calls are needed. It does not flag duplicate-name behavior despite idempotentHint=false.
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 return, followed by the one piece of non-obvious state (empty grants). Every clause carries information and nothing is padded.
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-parameter create tool with no output schema, the description covers the action, the caller's resulting role, the returned object, and the initial grant state. It leaves out uniqueness constraints on name and error behavior, which are minor for a tool this simple.
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% and both parameters (name, orgID) are well documented in the schema, including normalization and pattern constraints. The description adds no parameter-level detail, so the 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?
States a specific verb and resource ("Creates a project") and adds the two most important outcomes: the caller becomes admin and the project starts with no grants. It does not explicitly contrast with the only related sibling (projects_list), but the create/list distinction is unambiguous from the 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?
No when-to-use or when-not-to-use guidance, and no mention of alternatives or prerequisites beyond the implicit orgID requirement. An agent learns what the tool does but nothing about when it is the right call versus, say, grant_machines_add or other setup steps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_listList projectsBRead-onlyIdempotentInspect
Lists the projects the caller can access in the organization, newest first, with the caller's permissions on each.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return in one page. | |
| orgID | Yes | Organization ID (org_...). | |
| 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 context beyond that: results are access-scoped to the caller and ordered 'newest first,' and each item carries the caller's permissions. It omits pagination behavior, which the schema handles.
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 covering resource, scope, ordering, and return content with no wasted words. Front-loaded with the action and resource.
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 list tool with annotations covering the safety profile and full schema documentation of all three params, the description supplies enough: resource, access scope, ordering, and per-item content. No output schema exists, so return-value explanation is not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so orgID, limit, and cursor are fully documented in the schema. The description adds no parameter syntax or format detail, so 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?
States a specific verb (Lists) and resource (projects), and scopes it to 'the projects the caller can access in the organization.' The projects_* family has no competing read siblings, so the resource name alone is distinguishing, though it does not explicitly contrast with projects_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?
No explicit when-to-use or when-not-to-use guidance, and no alternatives are named. Usage is only implied by the verb 'Lists.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_createCreate secretAInspect
Creates an encrypted secret holding one credential and returns its metadata; the value is never returned. owner sets whether the organization, a project, or the caller owns it.
| 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 | Organization ID (org_...). | |
| owner | Yes | Who owns the secret: {"kind":"org"}, {"kind":"project","project_id":"proj_..."}, or {"kind":"user"}. The owner cannot change later. | |
| material | Yes | The secret's value. kind selects its shape: generic, oauth_token_set, aws_credentials, or github_app_credentials. | |
| 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 and destructiveHint=false, but the description adds genuinely new facts: the secret is encrypted, the write returns only metadata, the value is never returned, and owner is fixed at creation. It omits auth/permission requirements, which keeps 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 compact sentences with the creation fact and the no-return guarantee front-loaded. The trailing owner sentence is mildly redundant with the schema's own owner description, so it is efficient rather than flawless.
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 nested, polymorphic 5-parameter mutation with no output schema, the description covers the essentials an agent cannot get from the schema: encryption at rest, metadata-only response, no value readback, and immutable ownership. Material-shape guidance and permission requirements are left to the schema, which is acceptable given 100% coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The sentence about owner restates the org/project/caller choice already encoded in the oneOf discriminator and its description, and the description says nothing about the four material kinds (generic, oauth_token_set, aws_credentials, github_app_credentials) that the schema documents.
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 an encrypted secret holding one credential') and clarifies scope ('one credential'), which cleanly separates it from secrets_get/list/update/delete siblings. It never names a sibling or explicitly contrasts with them, 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 note that the value is never returned hints that reading a stored value is out of scope, and the owner immutability hints at pre-creation planning. There is no explicit when-to-use, no when-not-to-use, and no pointer to secrets_update for changing an existing secret.
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 | Organization ID (org_...). | |
| secretID | Yes | Secret ID (sec_...). |
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 by disclosing the exact blast radius (all versions and project grants), the irrecoverability of the ciphertext, and the preconditions that cause the call to fail. This is precisely the extra context an agent needs before invoking 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 sentences, no filler. The destruction scope is front-loaded ahead of the blocking condition, so the highest-risk fact is read first.
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-parameter delete tool with full schema coverage and annotations covering the safety profile, the description supplies everything an agent needs: what is destroyed, that it is irreversible, and the conditions under which the call is refused. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (orgID, secretID) are fully documented with patterns, so the baseline is 3. The description adds no parameter-level detail, but none is needed.
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 secret), and immediately scopes it as a cascading hard delete of all versions and project grants. This is clearly distinguishable from secrets_update/secrets_get and from grant_secrets_delete, which manipulates grants rather than the secret itself.
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 an explicit when-not condition: deletion is blocked while the secret backs a model provider config, machine pool, or integration. It does not name alternative tools (e.g., grant_secrets_delete for revoking access without destroying the secret), so the routing guidance is strong but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
secrets_getGet secretARead-onlyIdempotentInspect
Returns a secret's owner, kind, name, and current version; the secret value is never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| secretID | Yes | Secret ID (sec_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description adds genuinely new context the annotations cannot express: that the secret value itself is never returned, which is the single most important behavioral fact for an agent calling this.
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 carrying the return fields followed by the key exclusion clause; every clause earns its place and there is 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?
No output schema exists, so the description must carry the return contract, and it does so by enumerating the returned fields and explicitly ruling out the secret value. Only minor gaps remain, such as error behavior for an unknown secretID.
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% and both orgID and secretID carry their own format descriptions and patterns, so the baseline is 3. The description adds no syntax, scoping or format detail beyond what the schema already documents.
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 (returns) and resource (a secret), and enumerates exactly which fields come back (owner, kind, name, current version). It implies single-object retrieval but never names secrets_list as the contrasting alternative, so sibling differentiation is left implicit rather than stated.
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 singular 'a secret's ...' plus two required IDs implies lookup-by-identifier, but there is no explicit when-to-use statement, no prerequisite guidance, and no routing to alternatives such as secrets_list for browsing.
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 | Organization ID (org_...). | |
| 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 description adds real value beyond them: a deterministic ordering guarantee (created_at desc, then id desc) and permission-scoped, deduplicated default result semantics. It does not cover pagination behavior, but with annotations present this is a solid contribution.
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, no filler, every clause carrying load-bearing information about ordering and default scope.
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 listing tool with no output schema, the description covers default scope and ordering but says nothing about pagination results (next_cursor, limit interaction) or the filter dimensions, leaving the agent to infer those 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 coverage is 100%, so baseline is 3. The description resolves something the schema leaves implicit: the default sort order applied when the sort parameter is omitted, which is meaningful for an agent deciding whether to pass sort.
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/title pair (secrets_list / List secrets) plus the description's scope statement make it clear this enumerates secrets in an org, and the 'deduplicated union of organization, project, and user secrets' line distinguishes it from a single-scope read. However, the description never states the plain verb+resource itself and does not distinguish this from the similarly named sibling 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?
It implies when the default scope applies ('without an owner filter...'), which nudges the agent toward owner_kind for narrowing, but it gives no explicit when-to-use/when-not guidance and never names an alternative 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 secretADestructiveInspect
Renames a secret or replaces its metadata, and returns the updated secret without its value. The value, kind, and owner can't be changed here. References use the secret ID, so renaming doesn't break them.
| 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 | Organization ID (org_...). | |
| 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 | Secret ID (sec_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: the response omits the secret value, and references by secret ID survive a rename. It also discloses that metadata is replaced rather than merged, which aligns with destructiveHint=true. It doesn't state permission requirements or what happens to unlisted metadata keys on partial updates.
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: purpose first, constraints second, reference-safety consequence last. No filler and nothing repeated from the 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?
Covers mutation scope, immutability of sensitive fields, and response shape (value omitted) despite there being no output schema. Minor gaps remain: metadata merge-vs-replace semantics for omitted keys and error behavior for invalid IDs are 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 coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: only name and metadata are mutable, and name changes are safe because references key on secretID. That directly informs how to use the two optional 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+resource and narrows scope precisely: 'Renames a secret or replaces its metadata.' It also names what the tool cannot touch (value, kind, owner), which cleanly separates it from secrets_create, secrets_delete, and secrets_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?
The description gives clear when-to-use context (rename or metadata change) and an implicit when-not by stating that value, kind, and owner are immutable here — meaning those require a different tool. It doesn't explicitly name the alternative sibling (e.g., secrets_create/delete) for changing a value, so it stops short of a 5.
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 | Organization ID (org_...). | |
| skillID | Yes | Skill ID (skl_...). |
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 well beyond them by enumerating exactly what is destroyed (revisions, project grants, uploaded archive content) and what is explicitly not deleted. The blocking condition on active agent references is additional operational context the annotations cannot 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?
Three short sentences, each doing distinct work: what is destroyed, what is spared, and what blocks the operation. The most important information (cascade scope) is front-loaded with 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?
For a two-parameter destructive tool with no output schema, the description covers the full risk surface an agent needs: destruction scope, negative scope, and the precondition that can abort the call. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both orgID and skillID fully documented (including ID patterns), so the schema carries parameter semantics entirely. The description adds no further meaning about the identifiers, which is the expected baseline when the schema does the heavy lifting.
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 scopes the cascade: all revisions and project grants. This distinguishes it from skills_get/skills_list and from the sibling grant_skills_delete, which removes a grant rather than the skill itself.
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 a real precondition rather than a vague hint: deletion is blocked while an active agent's configuration references the skill, so an agent knows the call can fail for that reason. It does not, however, name an alternative tool or spell out the remediation path (e.g. updating the agent config first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skills_getGet skillARead-onlyIdempotentInspect
Returns one skill with its latest SKILL.md text and file listing.
| Name | Required | Description | Default |
|---|---|---|---|
| orgID | Yes | Organization ID (org_...). | |
| skillID | Yes | Skill ID (skl_...). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive, closed-world operation, so the safety profile is covered. The description adds genuinely new context by disclosing the return contents (latest SKILL.md text plus file listing), which matters because no output schema 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?
A single front-loaded sentence with no filler; the resource and its return payload are stated immediately. 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?
For a two-parameter read tool whose parameters are fully specified in the schema and whose annotations cover the safety profile, the remaining gap is describing the return format. The description does sketch the return (SKILL.md text, file listing), though without structure or pagination detail given there is no output schema.
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?
Both orgID and skillID are fully documented in the schema with format patterns, giving 100% coverage, so the schema carries the burden. The description adds no extra meaning about the identifiers, making 3 the correct baseline.
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 ('Returns one skill') and names the payload (latest SKILL.md text and file listing), so it is clearly distinguishable from a generic getter. It does not explicitly contrast with the neighbouring skills_list or skills_delete, which keeps it 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?
'Returns one skill' implies single-item retrieval by ID, which is implied usage rather than an explicit when-to-use rule. Nothing tells the agent when to prefer this over skills_list, and there are no stated prerequisites or exclusions.
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 | Organization ID (org_...). | |
| 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 declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. Beyond that, the description adds genuinely useful behavior: deterministic ordering (created_at desc, then id desc), deduplication across three ownership scopes, permission-bounded visibility ('the caller may list'), and the fact that grants are orthogonal to 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, each carrying distinct information (ordering, default scope, grant independence). It is front-loaded with a secondary detail (ordering) rather than the primary purpose, 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?
With 7 parameters at full schema description coverage and no output schema, the description covers the non-obvious parts of the contract: ordering, deduplication, and visibility scoping. Pagination behavior is left to the cursor/limit schema fields, which is acceptable, though it does not describe the shape of returned items.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: what happens when no owner filter is supplied (the deduplicated union) and that owner_kind reflects an immutable owner, clarifying the meaning of the enum beyond its label.
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 skills (the union of org, project, and user skills) and the title supplies the verb 'List'. It also signals separation from grant-related surfaces via 'Grants are managed separately', giving some sibling differentiation against grant_skills_list, but it never names skills_get or explains the list-vs-get distinction.
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 clause 'Without an owner filter, returns the deduplicated union...' implies that owner_kind/owner_project_id narrow the result, and 'Grants are managed separately' steers the agent away from grant listing. However, there is no explicit when-to-use statement or call-out of the alternative tools (skills_get, grant_skills_list) that an agent would weigh.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tools_catalogGet tool catalogARead-onlyIdempotentInspect
Lists the built-in tools agent configs can use, with each tool's description and permission settings, plus the permission modes for custom and MCP tools.
| 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 openWorldHint=false, so safety is covered. The description adds value by disclosing the payload shape: per-tool description and permission settings, plus permission modes for custom and MCP tools. It says nothing about pagination or volume, which is a minor gap for a catalog listing.
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 compact sentence, front-loaded with the verb and resource, with the detail about returned content following. No filler, no 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?
With no output schema, the description carries the burden of describing the return value, and it does specify descriptions, permission settings, and permission modes. It is complete enough to call correctly, though it could note whether custom/MCP tools themselves are listed or only their permission 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?
The tool takes zero parameters, so description-based parameter semantics are not applicable; the baseline for a no-param tool is 4. The description correctly implies the tool is unconditional rather than filtered.
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 concrete verb (Lists) and resource (built-in tools agent configs can use) plus what each entry contains. It is clearly distinct from inventory siblings like model_providers_catalog or skills_list, though it never explicitly names a neighboring tool to sharpen the boundary.
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: call it when you need to know which built-in tools an agent config can reference and what permission modes apply. There is no explicit when/when-not guidance or named alternative, but the topic is narrow enough that context is reasonably inferable.
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.
71 tool updates
v0.1.1- Changed
agents_archive3 fields changed- added
Input schema / properties / agentID / descriptionAdded value: +"Agent ID (agt_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
agents_cancel3 fields changed- added
Input schema / properties / agentID / descriptionAdded value: +"Agent ID (agt_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
agents_events_list3 fields changed- added
Input schema / properties / agentID / descriptionAdded value: +"Agent ID (agt_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
agents_get3 fields changed- added
Input schema / properties / agentID / descriptionAdded value: +"Agent ID (agt_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
agents_input3 fields changed- added
Input schema / properties / agentID / descriptionAdded value: +"Agent ID (agt_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
agents_interactions_list3 fields changed- added
Input schema / properties / agentID / descriptionAdded value: +"Agent ID (agt_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
agents_interactions_resolve4 fields changed- added
Input schema / properties / agentID / descriptionAdded value: +"Agent ID (agt_...)." - added
Input schema / properties / interactionID / descriptionAdded value: +"Interaction ID (int_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
agents_launch4 fields changed- added
Input schema / properties / config / descriptionAdded value: +"Agent config ID (acfg_...)." - added
Input schema / properties / config_source / properties / source_format / descriptionAdded value: +"Format of source: yaml or json." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
agents_list2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
agents_update5 fields changed- added
Input schema / properties / agentID / descriptionAdded value: +"Agent ID (agt_...)." - added
Input schema / properties / expected_current_config_id / descriptionAdded value: +"Agent config ID (acfg_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)." - added
Input schema / properties / source_format / descriptionAdded value: +"Format of source: yaml or json."
- Changed
configs_create3 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)." - added
Input schema / properties / source_format / descriptionAdded value: +"Format of source: yaml or json."
- Changed
configs_get3 fields changed- added
Input schema / properties / agentConfigID / descriptionAdded value: +"Agent config ID (acfg_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
crons_create4 fields changed- added
Input schema / properties / enabled / descriptionAdded value: +"Whether the trigger fires on schedule; false pauses it." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)." - added
Input schema / properties / target / descriptionAdded value: +"What each firing does: type agent sends the message to an existing agent, type profile launches a new agent from a profile, and type integration hands the firing to an integration, such as a new Slack or Discord thread."
- Changed
crons_delete3 fields changed- added
Input schema / properties / cronTriggerID / descriptionAdded value: +"Cron trigger ID (cron_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
crons_get3 fields changed- added
Input schema / properties / cronTriggerID / descriptionAdded value: +"Cron trigger ID (cron_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
crons_list2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
crons_update5 fields changed- added
Input schema / properties / cronTriggerID / descriptionAdded value: +"Cron trigger ID (cron_...)." - added
Input schema / properties / enabled / descriptionAdded value: +"Whether the trigger fires on schedule; false pauses it." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)." - added
Input schema / properties / target / descriptionAdded value: +"What each firing does: type agent sends the message to an existing agent, type profile launches a new agent from a profile, and type integration hands the firing to an integration, such as a new Slack or Discord thread."
- Changed
grant_machines_add4 fields changed- added
Input schema / properties / description / descriptionAdded value: +"Optional note about this grant." - added
Input schema / properties / machine_id / descriptionAdded value: +"Machine ID (mch_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_machines_delete3 fields changed- added
Input schema / properties / grantID / descriptionAdded value: +"Project machine grant ID (pmg_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_machines_list2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_models_add2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_models_delete3 fields changed- added
Input schema / properties / modelGrantID / descriptionAdded value: +"Project model grant ID (pmog_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_models_edit3 fields changed- added
Input schema / properties / modelGrantID / descriptionAdded value: +"Project model grant ID (pmog_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_models_list2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_pools_add15 fields changed- added
Input schema / properties / default_cwd / descriptionAdded value: +"Default working directory for processes on this project's machines from the pool." - added
Input schema / properties / default_machine_cpu / descriptionAdded value: +"Default CPU count for machines this project creates from the pool, overriding the pool's default." - added
Input schema / properties / default_machine_memory_mb / descriptionAdded value: +"Default memory in MB for machines this project creates from the pool, overriding the pool's default." - added
Input schema / properties / default_machine_provider_options_overlay / descriptionAdded value: +"Provider-specific options layered over the pool's provider options for this project's machines." - added
Input schema / properties / description / descriptionAdded value: +"Optional note about this grant." - added
Input schema / properties / machine_pool_id / descriptionAdded value: +"Machine pool ID (mpo_...)." - added
Input schema / properties / max_machine_cpu / descriptionAdded value: +"Largest CPU count one of this project's machines can request." - added
Input schema / properties / max_machine_memory_mb / descriptionAdded value: +"Largest memory in MB one of this project's machines can request." - added
Input schema / properties / max_total_cpu / descriptionAdded value: +"Maximum total CPU across this project's live machines from the pool." - added
Input schema / properties / max_total_machines / descriptionAdded value: +"Maximum number of live machines this project can have from the pool." - added
Input schema / properties / max_total_memory_mb / descriptionAdded value: +"Maximum total memory in MB across this project's live machines from the pool." - added
Input schema / properties / min_machine_cpu / descriptionAdded value: +"Smallest CPU count one of this project's machines can request." - added
Input schema / properties / min_machine_memory_mb / descriptionAdded value: +"Smallest memory in MB one of this project's machines can request." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_pools_delete3 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / poolGrantID / descriptionAdded value: +"Project machine pool grant ID (pmpg_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_pools_edit17 fields changed- added
Input schema / properties / default_cwd / descriptionAdded value: +"Default working directory for processes on this project's machines created from the pool after this change." - added
Input schema / properties / default_machine_cpu / descriptionAdded value: +"Default CPU count for machines this project creates from the pool, overriding the pool's default." - added
Input schema / properties / default_machine_env_overlay / descriptionAdded value: +"Env overlay merged over the pool's default_machine_env for machines this project creates from the pool afterward; a null entry removes the key." - added
Input schema / properties / default_machine_memory_mb / descriptionAdded value: +"Default memory in MB for machines this project creates from the pool, overriding the pool's default." - added
Input schema / properties / default_machine_provider_options_overlay / descriptionAdded value: +"Provider-specific options layered over the pool's provider options for this project's machines." - added
Input schema / properties / default_machine_secret_env_overlay / descriptionAdded value: +"Secret env overlay merged over the pool's default_machine_secret_env for machines this project creates from the pool afterward; a null entry removes the key." - added
Input schema / properties / description / descriptionAdded value: +"Optional note about this grant." - added
Input schema / properties / max_machine_cpu / descriptionAdded value: +"Largest CPU count one of this project's machines can request." - added
Input schema / properties / max_machine_memory_mb / descriptionAdded value: +"Largest memory in MB one of this project's machines can request." - added
Input schema / properties / max_total_cpu / descriptionAdded value: +"Maximum total CPU across this project's live machines from the pool." - added
Input schema / properties / max_total_machines / descriptionAdded value: +"Maximum number of live machines this project can have from the pool." - added
Input schema / properties / max_total_memory_mb / descriptionAdded value: +"Maximum total memory in MB across this project's live machines from the pool." - added
Input schema / properties / min_machine_cpu / descriptionAdded value: +"Smallest CPU count one of this project's machines can request." - added
Input schema / properties / min_machine_memory_mb / descriptionAdded value: +"Smallest memory in MB one of this project's machines can request." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / poolGrantID / descriptionAdded value: +"Project machine pool grant ID (pmpg_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_pools_get3 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / poolGrantID / descriptionAdded value: +"Project machine pool grant ID (pmpg_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_pools_list2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_secrets_add3 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / secretID / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / target_project_id / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_secrets_delete3 fields changed- added
Input schema / properties / grantID / descriptionAdded value: +"Secret grant ID (sgr_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / secretID / descriptionAdded value: +"Secret ID (sec_...)."
- Changed
grant_secrets_list2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / secretID / descriptionAdded value: +"Secret ID (sec_...)."
- Changed
grant_skills_add3 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / skillID / descriptionAdded value: +"Skill ID (skl_...)." - added
Input schema / properties / target_project_id / descriptionAdded value: +"Project ID (proj_...)."
- Changed
grant_skills_delete3 fields changed- added
Input schema / properties / grantID / descriptionAdded value: +"Skill grant ID (skg_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / skillID / descriptionAdded value: +"Skill ID (skl_...)."
- Changed
grant_skills_list2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / skillID / descriptionAdded value: +"Skill ID (skl_...)."
- Changed
machines_create8 fields changed- added
Input schema / $defs / ProjectID / descriptionAdded value: +"Project ID (proj_...)." - added
Input schema / $defs / SecretID / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / cwd / descriptionAdded value: +"Default working directory for processes started on the machine." - added
Input schema / properties / description / descriptionAdded value: +"Optional description of the machine." - added
Input schema / properties / env / descriptionAdded value: +"Environment variables set for processes started on the machine." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / project_ids / descriptionAdded value: +"Projects to grant the machine to in the same call (up to 100)." - added
Input schema / properties / secret_env / descriptionAdded value: +"Environment variable names mapped to secret IDs (sec_...) whose values are set for processes started on the machine."
- Changed
machines_delete2 fields changed- added
Input schema / properties / machineID / descriptionAdded value: +"Machine ID (mch_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
machines_get2 fields changed- added
Input schema / properties / machineID / descriptionAdded value: +"Machine ID (mch_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
machines_list1 field changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
machines_update6 fields changed- added
Input schema / $defs / SecretID / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / cwd / descriptionAdded value: +"Default working directory for processes started on the machine." - added
Input schema / properties / env / descriptionAdded value: +"Environment variables set for processes started on the machine." - added
Input schema / properties / machineID / descriptionAdded value: +"Machine ID (mch_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / secret_env / descriptionAdded value: +"Environment variable names mapped to secret IDs (sec_...) whose values are set for processes started on the machine."
- Changed
model_providers_catalog2 fields changed- added
Input schema / properties / modelProviderConfigID / descriptionAdded value: +"Model provider config ID (mpc_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
model_providers_create7 fields changed- added
Input schema / $defs / SecretID / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / api_format / descriptionAdded value: +"Wire protocol the model endpoint speaks: openai-responses, openai-chat-completions, or anthropic-messages." - added
Input schema / properties / api_variant / descriptionAdded value: +"Provider-specific flavor of the API format: default, openrouter, or bedrock." - added
Input schema / properties / auth_kind / descriptionAdded value: +"How the credential is sent: bearer_token, api_key_header, or sigv4 (AWS)." - added
Input schema / properties / credential_secret_id / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / preset / descriptionAdded value: +"Built-in provider settings: openai, openrouter, or anthropic. A preset fills in api_format, api_variant, base_url, endpoint_path, auth_kind, and auth_options, so omit those when using one."
- Changed
model_providers_delete2 fields changed- added
Input schema / properties / modelProviderConfigID / descriptionAdded value: +"Model provider config ID (mpc_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
model_providers_get2 fields changed- added
Input schema / properties / modelProviderConfigID / descriptionAdded value: +"Model provider config ID (mpc_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
model_providers_list1 field changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
model_providers_update5 fields changed- added
Input schema / $defs / SecretID / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / auth_kind / descriptionAdded value: +"How the credential is sent: bearer_token, api_key_header, or sigv4 (AWS)." - added
Input schema / properties / credential_secret_id / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / modelProviderConfigID / descriptionAdded value: +"Model provider config ID (mpc_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
models_create2 fields changed- added
Input schema / properties / modelProviderConfigID / descriptionAdded value: +"Model provider config ID (mpc_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
models_delete3 fields changed- added
Input schema / properties / configuredModelID / descriptionAdded value: +"Configured model ID (mdl_...)." - added
Input schema / properties / modelProviderConfigID / descriptionAdded value: +"Model provider config ID (mpc_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
models_list2 fields changed- added
Input schema / properties / modelProviderConfigID / descriptionAdded value: +"Model provider config ID (mpc_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
models_update3 fields changed- added
Input schema / properties / configuredModelID / descriptionAdded value: +"Configured model ID (mdl_...)." - added
Input schema / properties / modelProviderConfigID / descriptionAdded value: +"Model provider config ID (mpc_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
pools_create3 fields changed- added
Input schema / $defs / SecretID / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / body / descriptionAdded value: +"Pool definition. name, provider, provider_auth_secret_id, default_machine_provider_options, and max_total_machines are always required; which default machine size and CPU and memory limits are required depends on the provider; Blaxel pools reject CPU fields." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
pools_delete2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / poolID / descriptionAdded value: +"Machine pool ID (mpo_...)."
- Changed
pools_get2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / poolID / descriptionAdded value: +"Machine pool ID (mpo_...)."
- Changed
pools_list1 field changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
pools_update17 fields changed- added
Input schema / $defs / SecretID / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / default_cwd / descriptionAdded value: +"Default working directory for processes on machines created from the pool after this change." - added
Input schema / properties / default_machine_cpu / descriptionAdded value: +"Default CPU count for new machines in the pool." - added
Input schema / properties / default_machine_memory_mb / descriptionAdded value: +"Default memory in MB for new machines in the pool." - added
Input schema / properties / default_machine_provider_options / descriptionAdded value: +"Provider-specific options applied to new machines in the pool." - added
Input schema / properties / description / descriptionAdded value: +"Optional description of the pool." - added
Input schema / properties / max_machine_cpu / descriptionAdded value: +"Largest CPU count a single machine in the pool can use." - added
Input schema / properties / max_machine_memory_mb / descriptionAdded value: +"Largest memory in MB a single machine in the pool can use." - added
Input schema / properties / max_total_cpu / descriptionAdded value: +"Maximum total CPU across the pool's live machines." - added
Input schema / properties / max_total_machines / descriptionAdded value: +"Maximum number of live machines in the pool." - added
Input schema / properties / max_total_memory_mb / descriptionAdded value: +"Maximum total memory in MB across the pool's live machines." - added
Input schema / properties / min_machine_cpu / descriptionAdded value: +"Smallest CPU count a single machine in the pool can use." - added
Input schema / properties / min_machine_memory_mb / descriptionAdded value: +"Smallest memory in MB a single machine in the pool can use." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / poolID / descriptionAdded value: +"Machine pool ID (mpo_...)." - added
Input schema / properties / provider_auth_secret_id / descriptionAdded value: +"Secret ID (sec_...)." - added
Input schema / properties / provider_config / descriptionAdded value: +"Provider-specific settings for the pool."
- Changed
profiles_create3 fields changed- added
Input schema / properties / config / descriptionAdded value: +"Agent config ID (acfg_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
profiles_delete3 fields changed- added
Input schema / properties / agentProfileID / descriptionAdded value: +"Agent profile ID (aprf_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
profiles_get3 fields changed- added
Input schema / properties / agentProfileID / descriptionAdded value: +"Agent profile ID (aprf_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
profiles_list2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
profiles_rename3 fields changed- added
Input schema / properties / agentProfileID / descriptionAdded value: +"Agent profile ID (aprf_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
profiles_update5 fields changed- added
Input schema / properties / agentProfileID / descriptionAdded value: +"Agent profile ID (aprf_...)." - added
Input schema / properties / config / descriptionAdded value: +"Agent config ID (acfg_...)." - added
Input schema / properties / expected_current_config_id / descriptionAdded value: +"Agent config ID (acfg_...)." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / projectID / descriptionAdded value: +"Project ID (proj_...)."
- Changed
projects_create1 field changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
projects_list1 field changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
secrets_create4 fields changed- added
Input schema / $defs / ProjectID / descriptionAdded value: +"Project ID (proj_...)." - added
Input schema / properties / material / descriptionAdded value: +"The secret's value. kind selects its shape: generic, oauth_token_set, aws_credentials, or github_app_credentials." - added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / owner / descriptionAdded value: +"Who owns the secret: {\"kind\":\"org\"}, {\"kind\":\"project\",\"project_id\":\"proj_...\"}, or {\"kind\":\"user\"}. The owner cannot change later."
- Changed
secrets_delete2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / secretID / descriptionAdded value: +"Secret ID (sec_...)."
- Changed
secrets_get2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / secretID / descriptionAdded value: +"Secret ID (sec_...)."
- Changed
secrets_list1 field changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
- Changed
secrets_update2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / secretID / descriptionAdded value: +"Secret ID (sec_...)."
- Changed
skills_delete2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / skillID / descriptionAdded value: +"Skill ID (skl_...)."
- Changed
skills_get2 fields changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)." - added
Input schema / properties / skillID / descriptionAdded value: +"Skill ID (skl_...)."
- Changed
skills_list1 field changed- added
Input schema / properties / orgID / descriptionAdded value: +"Organization ID (org_...)."
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
Most tools target a distinct resource and action, with self-descriptive names like agents_list, model_providers_create, and grant_models_add. Potential confusion exists around agent lifecycle (agents_archive vs. agents_cancel), configuration concepts (agents_update vs. configs_create vs. profiles_update), and grant_* operations versus their underlying resources, but detailed descriptions clarify boundaries.
The set almost uniformly follows a snake_case resource_action pattern (e.g., agents_get, machines_delete, pools_update), which is predictable and readable. Minor deviations such as whoami, catalog as an action, and profiles_rename slightly break the pattern but do not undermine overall consistency.
With 75 tools, the server is far beyond the typical 3–15 well-scoped range and well past the 50+ threshold for extreme mismatch. This volume makes the surface unwieldy for an agent and suggests many operations should be consolidated or grouped.
Some resources have full lifecycle coverage (profiles, crons, secrets, machines, pools), but significant gaps remain: projects lack get/update/delete, skills lack create/update, configs lack list/delete, and several grant families lack get/edit operations. These missing operations will force agents to work around incomplete workflows for core entities.
Maintenance
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