RunComfy MCP
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@RunComfy MCPlist my ComfyUI deployments"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
RunComfy MCP
MCP server for the RunComfy platform — Serverless API (ComfyUI), Model API, and Trainer API. Manage deployments, run hosted models, train LoRAs, and retrieve results from AI assistants like Claude, Cursor, and Windsurf.
Endpoint: https://mcp.runcomfy.com/mcp
Docs: docs.runcomfy.com/mcp
What it does
31 tools mirroring the RunComfy docs 1:1, across three products plus your account balance.
Serverless API (ComfyUI) — your own workflows on dedicated endpoints
Docs: docs.runcomfy.com/serverless
Category | Tools |
Deployment management |
|
Inference |
|
Advanced |
|
Model API — hosted catalog models, on demand
Docs: docs.runcomfy.com/model-apis
Category | Tools |
Catalog |
|
Inference |
|
No deployment to manage and per-request billing. list_models browses the
catalog by keyword or capability (category=image-to-video), get_model
returns one model's input schema — property types, defaults, enums, and
ranges — and run_model runs it. So an assistant can go from "make me a
video" to a valid request without leaving the tools or guessing a parameter.
Entries also carry description, base_price_usd per price_unit, and a
model_url to the model's page.
model_id is the identifier shown on the model's page at
runcomfy.com/models, slashes included — e.g.
blackforestlabs/flux-1-kontext/pro/edit. File inputs must be public HTTPS URLs.
Trainer API — datasets and AI Toolkit LoRA training
Docs: docs.runcomfy.com/trainer-apis
Category | Tools |
Datasets |
|
Dataset uploads |
|
Training jobs |
|
Typical flow: create a dataset → upload media and matching .txt captions →
poll until READY → submit a job with an AI Toolkit YAML config → poll status
→ pull checkpoints from the result.
Because the server runs remotely it cannot read local files. Upload media it
can reach over HTTP with upload_dataset_file_from_url, write captions inline
with upload_dataset_text_file, and for local or >150 MB files use
get_dataset_upload_urls and PUT the bytes to the signed URL yourself.
Account
Category | Tools |
Balance |
|
One wallet funds all three products. get_balance reports what is left, in
balance_usd for reading and balance_microdollars (millionths of a dollar)
for exact threshold checks. It is served from api.runcomfy.net rather than
mirrored per product, because there is only one figure to report.
Crossing between them
A trained LoRA runs without any deployment: pass its base model's model_id
to run_model and the LoRA as an input, e.g.
{"lora": {"path": "my_first_lora_3000.safetensors"}} — either a name from
your LoRA Assets or a public
URL such as a checkpoint from get_training_job_result. For a dedicated
endpoint with chosen hardware, deploy it and use the Serverless tools instead.
Related MCP server: ComfyUI MCP
Quick setup
Every client authenticates with a RunComfy API token from your Profile page. Two ways to supply it:
API token header — works in any Streamable HTTP client. Simplest, and the only option for clients without a browser OAuth flow.
Browser OAuth — no token in a config file. Supported by Claude.ai and by local clients that register a loopback callback, such as Claude Code.
Claude Code
Token header (one command, nothing else to do):
claude mcp add --transport http runcomfy https://mcp.runcomfy.com/mcp --header "Authorization: Bearer YOUR_RUNCOMFY_TOKEN"Or browser OAuth — omit the header, then run /mcp inside Claude Code and pick
Authenticate:
claude mcp add --transport http runcomfy https://mcp.runcomfy.com/mcp--transport http is the Streamable HTTP transport. streamable-http is not a
value Claude Code accepts, and single-dash -transport / -header are not
either — both forms fail before the server is ever contacted.
Check it with claude mcp list, which should show runcomfy: connected.
Claude.ai
Add https://mcp.runcomfy.com/mcp in Settings → Connectors → Add custom
connector, then select Connect. Claude discovers RunComfy's OAuth 2.1
endpoints, opens a RunComfy consent page, and asks for one of the API tokens
shown in your RunComfy Profile. The token
is validated by RunComfy and encrypted inside the MCP authorization grant; it
is never returned to Claude.
Cursor
.cursor/mcp.json:
{
"mcpServers": {
"runcomfy": {
"url": "https://mcp.runcomfy.com/mcp",
"headers": { "Authorization": "Bearer YOUR_RUNCOMFY_TOKEN" }
}
}
}VS Code (Copilot)
.vscode/mcp.json:
{
"servers": {
"runcomfy": {
"type": "http",
"url": "https://mcp.runcomfy.com/mcp",
"headers": { "Authorization": "Bearer YOUR_RUNCOMFY_TOKEN" }
}
}
}Windsurf
Settings → MCP:
{
"mcpServers": {
"runcomfy": {
"serverUrl": "https://mcp.runcomfy.com/mcp",
"headers": { "Authorization": "Bearer YOUR_RUNCOMFY_TOKEN" }
}
}
}Any other client
URL:
https://mcp.runcomfy.com/mcpTransport: Streamable HTTP
Auth:
Authorization: Bearer <token>on every request, or OAuth 2.1 with a loopback redirect URI
Troubleshooting
Symptom | Cause |
| The token is wrong, expired, or truncated on copy. Generate a new one in Profile — the response body names the fix. |
| No |
| The client registered a non-loopback, non-hosted redirect URI. Use the token header instead. |
| The configured URL must be exactly |
| RunComfy's API could not be reached to verify the token. Retry. |
| More than 600 token-authenticated requests a minute from one IP. |
Revoke access by regenerating the token in your RunComfy Profile. That invalidates the token header and any OAuth grant built on it, because every MCP request revalidates the token upstream.
Architecture
MCP Client ──RunComfy API token──┐
│ Cloudflare Worker (/mcp)
MCP Client ──MCP OAuth token─────┤ validates the credential, resolves
│ it to one user's RunComfy token
▼
Cloudflare Container
(Python FastMCP app)
│ request-scoped RunComfy credential
┌───────────────┼───────────────┐
▼ ▼ ▼
api.runcomfy.net model-api. trainer-api.
(Serverless) runcomfy.net runcomfy.net
(Model) (Trainer)One RunComfy token authenticates all three products, so the same credential resolution covers every tool.
Both credential kinds converge on the same request-scoped identity header
before the container is reached. They are told apart by shape: OAuth access
tokens are always userId:grantId:secret, and a RunComfy API token never
contains a colon.
Cloudflare Worker (
src/index.ts) — OAuth 2.1 authorization server and protected-resource boundary. Missing, invalid, expired, or wrong-audience credentials are rejected before MCP initialization or tool discovery.Direct API token (
src/index.ts) — a RunComfy Profile token presented asAuthorization: Beareris revalidated againstapi.runcomfy.neton every request, rate-limited per source IP, and never forwarded as-is.OAuth consent (
src/oauth-bridge.ts) — validates an existing RunComfy Profile token, stores it only in encrypted OAuth grant data, and issues a separate audience-bound MCP access token. Dynamic client registration accepts loopback callbacks (Claude Code and other local clients) plus an exact allowlist of hosted client callbacks.Python container (
server.py) — FastMCP app with 31 tools across the Serverless, Model, and Trainer APIs. It has no shared/operator credential and fails closed unless the authenticated edge supplies the current user's request-scoped RunComfy token.Cloudflare Container auto-starts on first request, sleeps after 10 minutes idle.
Project layout
.github/workflows/deploy.yml CI: typecheck, test, deploy to Cloudflare
src/index.ts Cloudflare Worker entrypoint
src/oauth-bridge.ts OAuth consent and RunComfy token validation
server.py MCP tool definitions (31 tools)
runcomfy_client.py RunComfy API clients (serverless, model, trainer)
container_app.py ASGI middleware (request IDs, token forwarding)
container_entrypoint.py Uvicorn startup
container_runtime.py Env validation, structured logging
wrangler.jsonc Cloudflare Worker + Container config
Dockerfile Container image
.env.example Local dev configLocal development
# Python 3.11+
python3.11 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
python -m container_entrypointLocal endpoints:
http://127.0.0.1:8000/healthzhttp://127.0.0.1:8000/mcp
The local Python endpoint intentionally has no shared fallback credential. Protected tool calls must go through the authenticated Worker boundary.
Deploy
Pushing to main deploys automatically via .github/workflows/deploy.yml:
typecheck, Worker tests, and container tests must pass, then
wrangler deploy --containers-rollout immediate ships the Worker and the
Python container together. Pull requests run the same checks without
deploying. The workflow can also be run by hand from the Actions tab.
One repository secret is required:
Secret | Purpose |
| A token with Edit Cloudflare Workers permission on the account in |
| Optional. |
To deploy by hand (requires Cloudflare Workers Paid plan with Containers enabled):
npm install
npm run check
npm test
npx wrangler deploy --containers-rollout immediateThe MCP endpoint goes live at https://mcp.runcomfy.com/mcp (custom domain configured in wrangler.jsonc).
Environment variables and bindings
There is deliberately no shared RunComfy API-key secret. OAuth state is kept
in the OAUTH_KV binding and every upstream request is tied to the user who
authorized the OAuth grant.
Worker vars (in wrangler.jsonc)
Name | Default | Description |
|
| Durable Object instance name |
|
| Max wait for container start |
|
| Max wait for port ready |
|
| Max request body size |
| Current submission token | Public OpenAI domain-verification token, served verbatim at |
| 600 / 60s | Per-IP cap on API-token-authenticated |
|
| Serverless API base URL |
|
| Model API base URL |
|
| Trainer API base URL |
Local Python dev (.env file)
Name | Required | Description |
| No | Override Serverless base URL (default: |
| No | Override Model API base URL (default: |
| No | Override Trainer API base URL (default: |
| No | Path prefix for MCP mount (default: empty) |
Available Tools
31 toolscall_instance_proxyADestructiveInspect
Call a ComfyUI backend endpoint on a live instance.
Backs ``POST /prod/v2/deployments/{deployment_id}/instances/{instance_id}/proxy/{path}``.
Get the instance_id from ``get_request_status`` once the status is
``in_progress``. Common target: ``api/free`` with
``{"unload_models": true}`` to free GPU memory.
| Name | Required | Description | Default |
|---|---|---|---|
| instance_id | Yes | ||
| request_body | No | ||
| deployment_id | Yes | ||
| comfy_backend_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the read/write risk profile is covered separately. The description adds useful context about calling a live instance and a common side effect (unloading models to free GPU memory), but it doesn't go beyond that into broader behavioral detail like failure modes or mutability of the instance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact, information-dense sentences with no filler. The main action is front-loaded, the route contract is given, and the practical usage example is placed last so the critical guidance comes 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?
The description covers the prerequisite (getting the instance_id), the route, and a common realistic use case. Since there is no output schema, it doesn't explain the return value, but for a proxy call tool this is acceptable; the main missing piece is any note about error handling or response shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden and largely succeeds: instance_id is sourced from get_request_status, comfy_backend_path is illustrated by 'api/free', request_body is shown with a concrete JSON payload, and deployment_id appears in the route. This gives an agent enough to invoke the tool correctly.
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: 'Call a ComfyUI backend endpoint on a live instance,' and it backs this with the exact POST route pattern. It also gives a concrete common target ('api/free') that distinguishes this proxy-call action from the surrounding status/management 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?
It gives explicit contextual guidance: obtain instance_id from get_request_status once status is in_progress, and use api/free to free GPU memory. It provides a clear when-to-use scenario, though it does not explicitly mention when not to use this tool or compare it to an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_model_requestADestructiveIdempotentInspect
Cancel a queued Model API request.
Backs ``POST /v1/requests/{request_id}/cancel``. Returns
``cancelled`` if accepted, ``not_cancellable`` if the request is
already in progress or finished.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the destructive and idempotent behavior; the description adds the exact return tokens ('cancelled' vs 'not_cancellable') and the state boundary (queued vs in-progress/finished), going beyond the structured fields. No contradiction with 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 sentences, action and endpoint first, return behavior second. Every sentence contributes; no filler or redundant restatement of 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 one-parameter cancellation tool with no output schema, this is complete: it names the operation, the endpoint, the accepted state, and the exact response tokens. An agent has enough to select, invoke, and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry parameter meaning. The endpoint path indicates request_id is the identifier of the queued Model API request to cancel, but the description gives no format, source, or further constraints, so it only partially compensates.
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 ('Cancel'), resource ('queued Model API request'), and the backing endpoint, and the 'queued' qualifier distinguishes it from cancel_request and cancel_training_job by scope. It also states the possible outcomes, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly says this applies to queued Model API requests and that in-progress or finished requests are not cancellable, which tells an agent when the call will succeed. It does not explicitly name sibling alternatives, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_requestADestructiveIdempotentInspect
Cancel a queued or running request.
Backs ``POST /prod/v1/deployments/{deployment_id}/requests/{request_id}/cancel``.
Returns ``cancelled`` if accepted, ``not_cancellable`` if already done.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description doesn't need to restate mutation. It adds valuable behavior beyond the annotations: the two return values ('cancelled' vs 'not_cancellable') and the fact that already-done requests are tolerated, which concretely explains the idempotency semantics. No contradiction with the annotation set.
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 each one earning its place: the core action, the underlying endpoint for traceability, and the expected return values. The most important behavioral signal is front-loaded in the first sentence. There is 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 low-complexity tool with two simple required parameters, the description covers the essential flow: target state, accepted outcome, and already-complete outcome. Annotations cover safety. Minor gaps remain — no error behavior for invalid/nonexistent request IDs and no indication of how request_id is obtained — but nothing that blocks correct invocation in the main path. Given low complexity, this is nearly 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 effectively 0% — properties have only titles ('Request Id', 'Deployment Id') with no descriptions. The description partially compensates by embedding both parameters in the endpoint URL, showing deployment_id identifies the deployment and request_id identifies the request to cancel. However, it provides no format, type nuance, or guidance on obtaining valid IDs, so it doesn't fully carry the documentation burden.
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 action ('Cancel') against a clearly scoped resource ('a queued or running request'), and the endpoint path (/prod/v1/deployments/{deployment_id}/requests/...) distinguishes it from the similarly-named sibling cancel_training_job, which targets training jobs rather than deployment requests. The scope qualifier (queued or running) adds precision beyond the bare 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?
The intended use case is implied by the first sentence — use this when a deployment request is queued or running and needs to be cancelled — but there is no explicit when-not-to-use guidance and no comparison against cancel_training_job, which is the most likely confusion point. The endpoint makes routing inferable, but the description leaves the alternative selection entirely to interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_training_jobADestructiveIdempotentInspect
Cancel a queued or running training job.
Backs ``POST /prod/v1/trainers/ai-toolkit/jobs/{job_id}/cancel``.
Progress stops, but ``get_training_job_result`` still returns any
checkpoints produced so far.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds meaningful behavioral detail: 'Progress stops' and checkpoints remain available via get_training_job_result. It also documents the exact backing endpoint. No contradiction with annotations 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?
The description is three concise sentences with the primary action front-loaded. The endpoint and the post-cancellation behavior each add distinct, non-redundant value. 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?
Given the simplicity of the operation and the annotations already covering idempotency and destructiveness, the description is complete. It states what the tool cancels, what endpoint it backs, what happens to progress, and how to retrieve prior outputs. No critical gap remains for an agent 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 coverage is 0%, so the description must compensate, but there is only one parameter: job_id. The endpoint path includes {job_id}, and the description indirectly clarifies that job_id identifies the training job to cancel. However, no format, source, or additional guidance for job_id is provided. For a self-evident single identifier, this is adequate but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Cancel a queued or running training job.' This clearly identifies the action and scope, distinguishing it from sibling tools such as get_training_job_status, resume_training_job, and edit_training_job. Even without naming siblings, the 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?
The description clearly implies when to use the tool: when a training job is queued or running and needs cancellation. It also provides a useful behavioral contrast by noting that get_training_job_result still returns checkpoints, guiding the agent to a complementary tool after cancellation. It does not explicitly enumerate exclusions or alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_datasetAInspect
Create an empty training dataset.
Backs ``POST /prod/v1/trainers/datasets``. The new dataset starts in
``DRAFT``; upload files into it, then poll ``get_dataset_status``
until it reaches ``READY`` before submitting a training job.
Args:
name: Human-readable name, unique within the account. This is
the ``dataset_name`` an AI Toolkit config references as
``/app/ai-toolkit/datasets/{dataset_name}``. Omit to let
RunComfy generate one.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-read-only/non-destructive behavior, so the description adds value by disclosing that the dataset starts in DRAFT state, that files must be uploaded before it becomes READY, and that the name is unique within the account. It also clarifies the omission behavior: RunComfy generates a name. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the one-line purpose, the endpoint mapping, the lifecycle instructions, and the parameter documentation. It is detailed but not padded, and the most actionable information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one optional parameter, the description covers creation, initial state, next steps, and naming semantics. The only notable gap is that it does not state what the API returns (e.g., a dataset ID or generated name), which would be useful when name is omitted and the agent needs to reference the dataset afterward. Still, the workflow is clear enough 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 coverage is 0%, but the description fully compensates by documenting the only parameter, name: it is human-readable, unique within the account, used as the dataset_name in AI Toolkit config paths, and optional with auto-generation behavior. This is a model example of the description carrying the parameter-semantics burden that the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Create an empty training dataset.' It clearly distinguishes itself from sibling dataset tools by emphasizing 'empty' and 'training dataset', and from lifecycle tools like get_dataset_status and submit_training_job by framing this as the initial creation step.
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 a clear workflow: create the dataset, upload files, poll get_dataset_status until READY, then submit a training job. This effectively tells the agent when to use this tool and what comes next. However, it does not explicitly say when not to use it or contrast it with alternative dataset-creation paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_deploymentADestructiveInspect
Create a Serverless API (ComfyUI) deployment.
Backs ``POST /prod/v2/deployments``. For LoRA deployments, create
via the runcomfy.com UI instead.
Args:
name: Human-readable name.
workflow_id: UUID of the ComfyUI workflow.
workflow_version: Version label, e.g. "v1".
hardware: One of TURING_16, AMPERE_24, AMPERE_48, ADA_48_PLUS,
AMPERE_80, ADA_80_PLUS, HOPPER_141.
min_instances: 0..30. Warm instance floor (billable if > 0).
max_instances: 1..60. Concurrency ceiling.
queue_size: >= 0. Pending requests before scaling up.
keep_warm_duration_in_seconds: >= 0. Idle timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| hardware | No | AMPERE_48 | |
| queue_size | No | ||
| workflow_id | Yes | ||
| max_instances | No | ||
| min_instances | No | ||
| workflow_version | Yes | ||
| keep_warm_duration_in_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, potentially destructive operation, so the description does not need to repeat that. It adds valuable behavioral context beyond the annotations, such as min_instances being billable when greater than zero, queue_size triggering scaling, and keep_warm_duration acting as an idle timeout. It omits some details like reversibility, but the cost/side-effect transparency is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary action and endpoint, then a one-sentence exclusion for LoRA, followed by a compact scannable Args block. Every sentence earns its place and no space is wasted on fluff.
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 create operation with no output schema, the description covers the endpoint, all parameter constraints, billing implications, and the key LoRA exclusion. It only omits minor operational context such as the expected response shape or prerequisites like the workflow being published, but these are not critical for selecting and invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the only source of parameter meaning. It fully compensates by documenting all eight parameters, providing ranges ('0..30', '1..60', '>= 0'), enumerating valid hardware values, and giving an example version label. This is exactly what an agent needs to call the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a Serverless API (ComfyUI) deployment.' It clearly identifies the operation, the backing endpoint, and distinguishes this creation tool from the dataset, model, and training tools in the sibling 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 explicitly states when not to use this tool: 'For LoRA deployments, create via the runcomfy.com UI instead.' This gives a clear exclusion and alternative while the opening sentence establishes the standard use case for non-LoRA ComfyUI deployments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_datasetADestructiveIdempotentInspect
Permanently delete a training dataset.
Backs ``DELETE /prod/v1/trainers/datasets/{dataset_id}``. This
cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the deletion is permanent and cannot be undone, adding crucial behavioral context beyond the annotations' destructiveHint. It also specifies the backing endpoint, providing technical clarity. This is consistent with the annotations (no contradiction).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—two sentences with the key fact front-loaded. The endpoint reference adds specificity without verbosity, and there is no redundant 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 simple delete operation, the description covers the essential behavioral context (permanence) and the endpoint. It does not describe the response or explicitly guide usage alternatives, but given the simplicity and the annotations covering idempotency, it is largely 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?
The schema has 0% description coverage, and the description only implies the parameter via the endpoint path ({dataset_id}). It does not explain the format, source, or any constraints of dataset_id, which is insufficient for a tool with an undocumented 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 clearly states the action ('Permanently delete') and the specific resource ('a training dataset'), distinguishing it from sibling delete tools like delete_deployment. It also references the exact REST endpoint, leaving no ambiguity about what operation is performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context—use this tool when deleting a training dataset—but does not explicitly mention alternatives or when not to use it. It provides a clear scope (training dataset) without exclusion, which is adequate but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_deploymentADestructiveIdempotentInspect
Permanently delete a deployment.
Backs ``DELETE /prod/v2/deployments/{deployment_id}``. This cannot
be undone. Consider ``update_deployment(is_enabled=false)`` to pause
instead.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructiveHint and readOnly=false, so the bar is lower. The description adds meaningful context beyond the hints by stating the operation is permanent, cannot be undone, and backs an HTTP DELETE endpoint. No contradiction with 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?
Three short sentences, front-loaded with the core purpose and then the caveat and alternative. 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 one-parameter delete operation with no output schema, the description covers what it does, the endpoint it maps to, irreversibility, and a safer alternative. Nothing an agent needs 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 coverage is 0%, so the description needed to explain deployment_id, but it only echoes the parameter name inside the endpoint URL. The input schema's title 'Deployment Id' provides as much information as the description; no format, source, or selection guidance is added.
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 'Permanently delete a deployment,' which names a specific verb (delete), the resource (deployment), and the permanent nature of the operation. It is clearly distinct from sibling update_deployment and other deployment tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends update_deployment(is_enabled=false) as an alternative for pausing, and underscores that deletion cannot be undone. This gives an agent a clear decision rule for choosing delete over the pause alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_training_jobADestructiveInspect
Replace the config of a non-running training job.
Backs ``POST /prod/v1/trainers/ai-toolkit/jobs/{job_id}/edit``. Only
works while the job is ``STOPPED``, ``CANCELED``, or ``FAILED``, and
``config.name`` in the new YAML must still match the original job's
name. GPU type and count are chosen at resume time, so call
``resume_training_job`` afterwards to re-queue with the new config.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| config_file | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only state destructiveHint=true and readOnlyHint=false. The description goes further by specifying what gets destroyed (the existing config), the exact job states under which destruction is allowed, and the deferral of GPU selection to resume time. This meaningfully clarifies the operation's side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no wasted words. The core purpose is front-loaded, and each subsequent sentence adds essential constraints or sequencing information. The structure is easy to parse and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no output schema, the description covers the core action, state preconditions, name-matching constraint, and the required resume step. It falls slightly short on error behavior and a precise definition of config_file format, but is otherwise sufficient for an agent 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 coverage is 0%, so the description must compensate. It does clarify that config_file is the new YAML and that config.name inside it must match the original job's name, but it does not explicitly define job_id or specify whether config_file is a path or inline content. Meaning is added, but not complete for both 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 'Replace the config of a non-running training job', a crisp verb+resource+scope statement. It is clearly distinguishable from siblings like submit_training_job, cancel_training_job, and resume_training_job, and is reinforced by the concrete endpoint it backs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit preconditions are given, including only working when the job is STOPPED, CANCELED, or FAILED, and the requirement that config.name must match the original job's name. It also directs the agent to call resume_training_job afterwards, making the expected sequence explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceARead-onlyIdempotentInspect
Get the account's remaining RunComfy balance.
Backs ``GET /prod/v2/balance``. One wallet funds every product, so
this is the figure Serverless deployments, ``run_model`` requests,
and training jobs all draw down — and the one that gets checked
before work is allowed to start.
Returns ``balance_usd`` for reading and ``balance_microdollars``
(millionths of a dollar) for exact arithmetic.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context by noting the balance is shared across products and that it gates work from starting, while the return-field explanation clarifies what the agent can expect. This exceeds the annotation baseline without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The first sentence states the operation directly, and the following sentences add relevant context about shared usage and return value units without losing focus.
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 parameterless balance query with no output schema, the description is complete: it explains the account-level scope, when this value matters, and the exact return fields (balance_usd and balance_microdollars) with their intended uses. Nothing essential is missing for an agent to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there is nothing for the description to explain about input semantics. The baseline for zero parameters is 4, and the description focuses its extra detail on return value semantics instead, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Get') and resource ('account's remaining RunComfy balance'). It distinguishes this tool from siblings by explaining that this is the account-wide balance shared across deployments, run_model, and training jobs, so the agent can tell it apart from any per-resource operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to call it: before work is allowed to start and when checking the shared wallet drawn down by multiple product areas. It does not name an alternative tool, but no sibling provides this exact balance operation, so the contextual trigger is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dataset_statusAIdempotentInspect
Get a dataset's status and its successfully uploaded files.
Backs ``GET /prod/v1/trainers/datasets/{dataset_id}/status``.
Lifecycle: ``DRAFT`` → ``UPLOADING`` → ``READY`` (or ``FAILED``,
which sets ``error``). Only ``READY`` datasets can be mounted by a
training job. Files still uploading or failed do not appear in
``files``.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Get' and 'Backs GET /prod/v1/trainers/datasets/{dataset_id}/status', clearly presenting a read-only operation. The annotations declare readOnlyHint=false, which contradicts that characterization. Because the description conflicts with the annotation, behavioral transparency must be scored as 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, no filler. The main purpose is front-loaded, the endpoint mapping is compact, and the lifecycle is given as a concise chain. Every sentence contributes useful 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?
The description covers the lifecycle states, the error field, file filtering, and the practical consequence of mounting. With no output schema, it reasonably explains return behavior. It is only slightly incomplete in not detailing the shape of files or error objects, and the contradiction with readOnlyHint prevents full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, dataset_id, is present in the schema with type and title. The description embeds dataset_id in the endpoint path but adds no additional format, constraints, or usage semantics beyond what the schema already makes clear. Baseline 3 applies because schema coverage of this single parameter is effectively complete.
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 clear verb ('Get'), a specific resource ('a dataset's status and its successfully uploaded files'), and the lifecycle behavior. It is easily distinguished from sibling status tools because it is explicitly scoped to datasets and references the exact endpoint.
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 lifecycle explanation and the statement that 'Only READY datasets can be mounted by a training job' provide useful context for when to use this tool. However, it does not explicitly mention alternatives or state when not to use it versus other status tools like get_training_job_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dataset_upload_urlsAInspect
Get signed upload URLs for dataset files the server cannot fetch.
Backs ``POST /prod/v1/trainers/datasets/{dataset_id}/get-upload-endpoint``.
Use this for local files and for anything over 150 MB: the caller
PUTs each file's bytes to the returned ``upload_url`` using the
returned ``method`` and ``headers``.
Args:
dataset_id: Target dataset.
filename_to_byte_size: Map of filename → exact size in bytes,
e.g. ``{"img_0001.jpg": 2000000, "img_0001.txt": 12000}``.
The signature is derived from the size, so a wrong value is
rejected by storage at PUT time.
Signed URLs are short-lived; call this again for a fresh one if it
expires. After every PUT succeeds, poll ``get_dataset_status`` until
the dataset is ``READY``.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | ||
| filename_to_byte_size | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations: it discloses that signed URLs are short-lived, that a stale URL should be re-fetched, that the signature is derived from the byte size so incorrect values fail at PUT time, and that the caller should poll get_dataset_status until READY. This gives agents a realistic model of the operation's lifecycle.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and each subsequent sentence adds necessary usage or behavioral information. The Args section is compact, and the workflow guidance about short-lived URLs and polling 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 tool with no output schema, the description gives everything an agent needs: what to pass, what comes back (upload_url, method, headers), how to use those values, and what to do after uploads succeed. The full lifecycle from request to READY 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?
With 0% schema description coverage, the description is the sole source of parameter meaning. It defines dataset_id as the target dataset and gives a concrete example for filename_to_byte_size, including the critical detail that exact byte sizes are required because the signature is derived from them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: it gets signed upload URLs for dataset files the server cannot fetch. This clearly separates it from siblings like upload_dataset_file_from_url and upload_dataset_text_file by emphasizing local files and server-unfetchable content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool for local files and for anything over 150 MB. It also communicates the alternative scenario ('server cannot fetch'), implying when a different upload path should be used, and explains the PUT workflow that follows.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_deploymentARead-onlyIdempotentInspect
Get one deployment by ID.
Backs ``GET /prod/v2/deployments/{deployment_id}``.
Set include_payload=true to inspect the deployed workflow graph
(workflow_api_json) and default overrides — use the node IDs and
input names to build the ``overrides`` for ``submit_request``.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment_id | Yes | ||
| include_readme | No | ||
| include_payload | No |
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 behavioral detail about include_payload, including what will be returned (workflow_api_json and default overrides) and how those outputs are meant to be used. No contradiction with 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?
Three sentences, all of which earn their place: the core purpose, the API endpoint, and a concrete usage note. No filler or repetition of schema fields. The purpose is front-loaded, and the downstream submit_request hint is dense but valuable.
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, three-parameter GET tool, the description is largely complete: it identifies the resource, the key flag, and the downstream use case. It does not cover include_readme behavior or the response shape, and there is no output schema to fill that gap, but the remaining ambiguity is minor given the annotations and low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains deployment_id implicitly ('by ID') and describes include_payload's effect in detail, but include_readme is not mentioned at all. The schema provides only types and defaults, leaving one parameter without meaningful semantic guidance.
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 'Get one deployment by ID', which specifies a concrete verb, resource, and selection criterion. This clearly distinguishes the tool from list_deployments (list all) and create/update/delete deployment (mutations). The explicit endpoint mapping reinforces the purpose.
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 actionable usage context: set include_payload=true when you need the workflow graph and overrides for submit_request. It does not explicitly contrast with list_deployments or state when to use other deployment tools, which keeps this at a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modelARead-onlyIdempotentInspect
Get one hosted model's input schema.
Backs ``GET /v1/models/{model_id}``. The ``input_schema`` is the
JSON Schema for ``run_model``'s ``inputs`` — property types,
defaults, enums, and min/max ranges — so read it before building a
request rather than guessing parameter names. Properties whose
``format`` is ``image_uri``/``video_uri``/``audio_uri`` take a
public HTTPS URL.
Also returns ``description``, ``categories``, ``base_price_usd``
per ``price_unit``, and ``model_url``.
Args:
model_id: The model's identifier, slashes included, e.g.
``blackforestlabs/flux-1-kontext/pro/edit``. Find one with
``list_models``.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only/idempotent/non-destructive; the description adds the input_schema structure, URL-format requirements for media properties, and the extra returned fields (description, categories, base_price_usd, model_url). It also clarifies slash-containing model IDs, matching realistic usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and endpoint, then gives targeted return/usage details. Each sentence adds functional value; the Args section is compact.
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 idempotent GET with one parameter, the description covers what is returned, how to construct the argument, and why to call this before run_model. The lack of an output schema is mitigated by listing the returned fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates: model_id is explained with slashes included, a concrete example, and how to discover valid IDs via list_models. No parameter meaning is left to guesswork.
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 ('Get one hosted model's input schema') and clearly separates it from list_models (listing) and run_model (execution). The endpoint mapping and key returned field reinforce what the tool uniquely provides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to read this before building a run_model request instead of guessing parameter names, and directs it to list_models for finding model_id. This gives both a when-to-use rule and a sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_request_resultARead-onlyIdempotentInspect
Fetch a completed Model API request's outputs.
Backs ``GET /v1/requests/{request_id}/result``. The ``output`` shape
is defined by the model's Output schema; any hosted asset URLs found
in it are also flattened into ``output_urls``.
This is for ``run_model`` requests. Serverless deployment requests
use ``get_request_result`` instead.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful behavioral detail beyond annotations: the output shape follows the model's Output schema, and hosted asset URLs are flattened into output_urls. This informs the agent about the response structure without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with each sentence serving a distinct purpose: primary action, output/behavior detail, and usage scoping relative to a sibling. There is no filler or repetition of schema 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?
Given a single obvious parameter, rich read-only annotations, and no output schema, the description is complete. It covers the endpoint, the output shape, the output_urls flattening behavior, and the sibling alternative, which is everything an agent needs to correctly invoke this 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?
The schema offers only a bare 'request_id' string with no description, so the description must compensate for 0% schema coverage. The description does this by showing request_id in the endpoint path and explaining that it refers to a run_model request. This gives the agent enough semantic understanding to select and supply the correct ID, even if it doesn't detail how to obtain that ID.
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 precise verb and object: 'Fetch a completed Model API request's outputs.' It clearly names the underlying endpoint and distinguishes this tool from the closely related sibling get_request_result by specifying it covers run_model, not serverless, requests. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states this tool is for run_model requests and explicitly routes serverless deployment requests to get_request_result instead. It also signals that it should be used for completed requests, giving the agent clear conditions for when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_model_request_statusARead-onlyIdempotentInspect
Poll a Model API request's current status.
Backs ``GET /v1/requests/{request_id}/status``.
Lifecycle: ``in_queue`` → ``in_progress`` → ``completed`` /
``cancelled``. While ``in_queue`` the payload also carries
``queue_position``.
This is for ``run_model`` requests. Serverless deployment requests
use ``get_request_status`` instead.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds valuable behavioral context beyond annotations by documenting the lifecycle states (in_queue → in_progress → completed/cancelled) and the queue_position payload detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core action, and every sentence earns its place. It includes endpoint mapping, lifecycle details, queue_position behavior, and sibling differentiation without wasted prose.
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 one-parameter polling tool with no output schema, the description gives enough context: lifecycle states, queue_position, and alternative tool usage. It could have explicitly noted that the final result should be fetched via get_model_request_result after completion, but this is a minor omission rather than a blocking gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single request_id parameter. It does so contextually by identifying the request as a run_model request and showing the endpoint path containing request_id, but it does not explicitly state where the ID comes from or its format. Still, the meaning is largely inferable.
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 ('Poll') and identifies the resource ('a Model API request's current status'), backed by the exact REST endpoint. It also distinguishes this tool from the sibling get_request_status, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when this tool applies: 'This is for run_model requests.' It also tells the agent when not to use it and names the correct alternative: 'Serverless deployment requests use get_request_status instead.' This is clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_request_resultARead-onlyIdempotentInspect
Fetch a completed request's outputs.
Backs ``GET /prod/v1/deployments/{deployment_id}/requests/{request_id}/result``.
Output URLs are hosted for 7 days.
This is for ``submit_request`` requests on a deployment. Model API
requests from ``run_model`` use ``get_model_request_result``.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds meaningful behavioral context beyond that: it documents the backing REST endpoint and the 7-day hosting window for output URLs. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each earning its place: the main purpose is front-loaded, then the endpoint, then the retention policy and routing distinction. There is no filler or 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 simple read tool with two straightforward path parameters and all safety annotations present, the description covers purpose, endpoint, result lifetime, and sibling routing. It does not specify the exact response structure, but the 'output URLs' mention gives an agent a usable expectation of what the result contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the endpoint line embeds both parameters as path placeholders, which helps an agent infer that deployment_id and request_id are required path identifiers. The description only implicitly connects request_id to submit_request and does not explain how to obtain the IDs or any format constraints, so it partially compensates for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch a completed request's outputs.' It also names the sibling tool for model API requests, get_model_request_result, so an agent can distinguish between the two request-result tools without opening their 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?
The description explicitly scopes this tool to submit_request requests on a deployment and states that run_model requests should use get_model_request_result instead. This gives the agent both a clear when-to-use and when-not-to-use signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_request_statusARead-onlyIdempotentInspect
Poll a request's current status.
Backs ``GET /prod/v1/deployments/{deployment_id}/requests/{request_id}/status``.
Lifecycle: ``in_queue`` → ``in_progress`` → ``completed`` / ``cancelled``.
This is for ``submit_request`` requests on a deployment. Model API
requests from ``run_model`` use ``get_model_request_status``.
| Name | Required | Description | Default |
|---|---|---|---|
| request_id | Yes | ||
| deployment_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds meaningful behavioral context beyond that: the status lifecycle (in_queue → in_progress → completed/cancelled), the fact that it backs a GET endpoint, and that it applies only to submit_request operations. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no filler. The core operation is front-loaded, followed by the endpoint, lifecycle, and use-case distinction. Every sentence earns its place and adds either operational or routing 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 low-complexity, read-only polling tool, the description covers purpose, lifecycle, endpoint, and the sibling distinction. It does not detail response structure or error states, but no output schema exists and the annotations already cover safety. The remaining gaps are minor for an agent selecting and calling this 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 0%, so the description carries the burden. It partially compensates by showing the endpoint template with {deployment_id} and {request_id}, implying both are path identifiers, and by stating that this is for submit_request requests, which indicates where request_id comes from. It doesn't describe value formats, but the parameter names and context are sufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Poll a request's current status.' It names the backed endpoint and the status lifecycle, and explicitly distinguishes this tool from get_model_request_status, so an agent can tell them apart 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?
The description says exactly when to use this tool: 'This is for submit_request requests on a deployment.' It also names the alternative for model API requests from run_model: use get_model_request_status. This is explicit routing guidance with no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_job_resultARead-onlyIdempotentInspect
Fetch a training job's artifacts as hosted URLs.
Backs ``GET /prod/v1/trainers/ai-toolkit/jobs/{job_id}/result``.
Returns checkpoints (``.safetensors``), the resolved config, and
sample outputs. Safe to call while the job is still ``RUNNING`` —
the artifact list grows over time — and after a ``FAILED`` or
``CANCELED`` job to recover whatever was produced.
Feed a checkpoint URL to ``run_model`` as
``{"lora": {"path": "<url>"}}`` to run inference on it.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, idempotent, and non-destructive. The description adds meaningful behavioral context by explaining that results grow over time during execution and that partial artifacts remain available after failure or cancellation, which is not inferable from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core action appears first, followed by return contents, lifecycle timing, and a practical usage example. Every sentence adds useful information without repeating the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with no output schema, the description covers what is returned, when it is safe to call, and how to consume the result downstream. An agent has enough information to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only job_id with 0% description coverage. The description adds context by embedding job_id in the endpoint URL and framing it as the ID of a training job, but it does not describe how to obtain it or any format constraints. The parameter is self-descriptive enough for a minimum viable score, but the description does not compensate richly for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch a training job's artifacts as hosted URLs.' It then enumerates what is returned (checkpoints, resolved config, sample outputs), making the tool's purpose unmistakable and clearly distinct from sibling status or cancellation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when it is safe to call: while the job is RUNNING (artifact list grows over time) and after FAILED or CANCELED jobs to recover produced artifacts. It also gives downstream usage guidance by explaining how to feed a checkpoint URL to run_model. It does not explicitly contrast against get_training_job_status, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_training_job_statusARead-onlyIdempotentInspect
Poll a training job's status and step progress.
Backs ``GET /prod/v1/trainers/ai-toolkit/jobs/{job_id}/status``.
Lifecycle: ``IN_QUEUE`` → ``RUNNING`` → ``STOPPED`` (finished or
preempted), ``FAILED`` (``error`` explains why), or ``CANCELED``.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/non-destructive annotations, the description adds a precise state machine: IN_QUEUE → RUNNING → STOPPED (finished or preempted), FAILED (with error explaining why), or CANCELED. This gives the agent actionable expectations about observable behavior without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the action is stated first, followed by a useful endpoint reference and a concise lifecycle list. 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 single-parameter polling tool with rich annotations, the description is nearly complete: it defines the purpose, endpoint, and all terminal states. It could go slightly further by describing the shape of step-progress data or advising on polling intervals, but those are minor gaps given the lifecycle is fully specified.
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 schema only provides job_id as a required string, and the description adds minimal extra meaning by placing job_id in the backed endpoint path and referring to 'a training job's status.' However, it does not explain how to obtain job_id, its format, or any constraints, so it only partially compensates for the sparse 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 and resource: 'Poll a training job's status and step progress.' It also gives the backed endpoint and a full lifecycle, making the tool's role clear and distinguishable from siblings like get_training_job_result and get_model_request_status.
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 clearly conveys that this tool is for polling status and step progress, and the lifecycle states tell the caller when a job has reached a terminal state. It does not explicitly enumerate alternatives or exclusions, but the polling context is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_datasetsARead-onlyIdempotentInspect
List training datasets in the caller's account.
Backs ``GET /prod/v1/trainers/datasets``. Use it to find the
``id`` (for upload/status/delete calls) and the ``name`` (for the
``folder_path`` in an AI Toolkit config). The listing carries no
per-file detail — use ``get_dataset_status`` for a dataset's files.
Args:
include_raw: Return each dataset's unabridged payload instead of
the compact summary. Larger response.
| Name | Required | Description | Default |
|---|---|---|---|
| include_raw | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safe-read nature is covered. The description adds meaningful behavioral context: the caller-scoped listing, the compact vs. unabridged payload distinction, the larger response with include_raw, and the lack of per-file detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-sentence summary, an endpoint reference with practical usage hints, a sibling-tool pointer, and a parameter explanation. Every sentence earns its place; there is 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 simple read-only list tool with one optional parameter and no output schema, the description covers the essential context: scope, endpoint, how to use the results, what it does not contain, and where to go for more detail. An agent has enough to invoke it correctly and interpret its purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameter, and it does. It explains that include_raw returns 'each dataset's unabridged payload instead of the compact summary' and warns about the larger response, going well beyond the bare parameter name and default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List training datasets in the caller's account.' It clearly distinguishes this list operation from related tools by noting that it provides no per-file detail and explicitly points to get_dataset_status for file-level information.
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 concrete use cases: find the dataset id for upload/status/delete calls and the name for a folder_path in AI Toolkit config. It also explicitly states when to use an alternative: 'use get_dataset_status for a dataset's files.' This leaves little ambiguity for an agent deciding between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deploymentsARead-onlyIdempotentInspect
List Serverless API deployments in the caller's account.
Backs ``GET /prod/v2/deployments``.
Args:
ids: Optional list of deployment IDs to filter to.
include_payload: Include workflow_api_json, overrides, and
object_info_url for each deployment. Larger response.
include_readme: Include the deployment's README markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| include_readme | No | ||
| include_payload | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds helpful behavioral detail beyond annotations, such as 'include_payload' producing a 'larger response' and including specific fields, and 'include_readme' adding README content. It does not describe pagination or return shape, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-line summary, the backed endpoint, then a short Args block. Every sentence contributes useful information, with no filler or repetition of 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 simple read-only listing tool with three optional parameters, the description is nearly complete. It covers scope, filtering, and optional response enrichment, and the annotations handle the safety profile. The only minor gap is that it does not mention pagination or the default response shape, though the lack of an output schema makes this less critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter documentation, and it does. It explains that ids filters the result, include_payload controls specific extra fields and warns of a larger response, and include_readme adds README markdown. This adds real meaning beyond the raw schema types and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'List Serverless API deployments in the caller's account.' It clearly identifies the operation as listing deployments, specifies the account scope, and is distinct from sibling tools like get_deployment and create_deployment.
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 context for listing deployments and documents optional filter flags, but it does not explicitly say when to prefer get_deployment for a single deployment or when not to use this tool. The purpose is clear enough that an agent can infer usage, but it lacks explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_model_categoriesARead-onlyIdempotentInspect
List the capability categories models are grouped into.
Backs ``GET /v1/models/categories``. Returns values such as
``text-to-image`` and ``image-to-video`` — pass one to
``list_models(category=...)``.
| 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, so the safety profile is covered. The description adds useful behavioral context beyond annotations by stating that the tool returns category value strings with examples (text-to-image, image-to-video) and that the result feeds list_models. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loads the core purpose, and provides only the essential extra details: endpoint backing and how the output is consumed. Every sentence adds value 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 zero-parameter listing tool with strong annotations and no output schema, the description is complete. It explains what is returned, gives concrete example values, and tells the agent how to use the result downstream with list_models(category=...).
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 has zero parameters and the schema is effectively complete at 100% coverage, so there are no parameter semantics to document. The description still adds meaning by indicating the operation is an unfiltered listing of categories, which aligns with the empty input 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 and resource: 'List the capability categories models are grouped into.' It clearly distinguishes this from sibling list_models by stating that the returned values are meant to be passed to list_models(category=...), making the tool's role 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?
The description provides clear usage context: this tool is the source for valid category values used with list_models(category=...). It does not explicitly discuss when not to use it, but for a zero-parameter discovery tool with no close sibling, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsARead-onlyIdempotentInspect
Browse the hosted models that run_model can run.
Backs ``GET /v1/models`` on the Model API. Start here when you know
what you want to generate but not which ``model_id`` provides it.
Each entry carries the ``model_id`` for ``run_model``, a
``display_name`` and ``description``, what it costs
(``base_price_usd`` per ``price_unit``), a ``model_url`` to the
model's page, and its ``inputs`` / ``required_inputs``.
Args:
search: Case-insensitive match on id, display name, or
description — e.g. "kontext", "upscale", "lip sync".
category: Capability filter, e.g. ``text-to-image``,
``image-to-video``. Use ``list_model_categories`` for the
full set.
kind: How the model runs — ``model``, ``workflow``, or
``inference``. Orthogonal to ``category``; filter on
``category`` unless you specifically care how it executes.
include_schema: Return each model's full ``input_schema``
inline. Much larger response — prefer ``get_model`` for a
single model, and use this only when comparing many.
limit: Page size, 1..500.
offset: Rows to skip. ``total`` is the unpaged count.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| offset | No | ||
| search | No | ||
| category | No | ||
| include_schema | No |
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 value beyond that: the exact entry shape (model_id, display_name, description, base_price_usd per price_unit, model_url, inputs/required_inputs), pagination semantics ('total is the unpaged count'), and the response-size consequence of include_schema ('Much larger response'). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long (~200 words) but every section earns its place: one-sentence purpose, API mapping, return-entry shape, then tight per-parameter docs. It is front-loaded with the purpose and use case before details. The only deduction is that the Args block could have lived in the schema, but given 0% schema coverage, embedding it in the description was the correct choice.
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 return-shape paragraph compensates well by listing what each entry carries. Filtering, search case-insensitivity, category source, kind values, pagination, and the include_schema tradeoff are all covered. Minor gaps remain — no statement about result ordering or how filters combine — but these are small against the overall completeness for a 6-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden — and it fully compensates. All 6 parameters are documented with meaningful semantics: search gives match targets and concrete examples, category gives capability examples and a pointer to list_model_categories, kind enumerates allowed values and notes orthogonality to category, and limit/offset specify bounds and paging behavior. This exceeds what a bare schema would provide.
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?
Opens with a specific verb+resource+scope: 'Browse the hosted models that run_model can run.' This immediately distinguishes it from siblings like get_model (single fetch), run_model (execution), and list_model_categories (taxonomy). The 'Backs GET /v1/models' mapping and the 'Start here when you know what you want to generate but not which model_id provides it' framing make the intent unmistakable.
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 explicit when-to-use guidance ('Start here when you know what you want to generate but not which model_id provides it') and names alternatives with conditions: 'Use list_model_categories for the full set' of categories, and 'prefer get_model for a single model, and use this only when comparing many' for include_schema. An agent is routed correctly without opening schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_training_jobADestructiveInspect
Resume a stopped training job from its latest checkpoint.
Backs ``POST /prod/v1/trainers/ai-toolkit/jobs/{job_id}/resume``.
Reuses the same ``job_id`` rather than creating a new job, and
restarts from the highest-step checkpoint (from step 0 if none
exists). Useful after a preemption; for a ``FAILED`` job, read
``error`` from the status first and fix the cause — often via
``edit_training_job`` — before resuming.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate readOnlyHint=false and destructiveHint=false. Beyond that, the description adds meaningful context: the tool restarts from the highest-step checkpoint, falls back to step 0 if none exists, and reuses the same job_id. This gives the agent a clear behavioral model without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. It includes useful caveats about checkpoint selection and FAILED jobs, and references the underlying API endpoint for context. It is not overly verbose, though the two-paragraph layout could be slightly tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's main behavior, prerequisites (stopped job), checkpoint behavior, and how to handle FAILED jobs. It also points to edit_training_job as an alternative step. Missing details like return values are acceptable given the simple single-parameter schema and 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 schema only documents job_id as a required string. The description adds semantic value by clarifying that job_id refers to an existing stopped job and that no new job is created. This helps the agent understand the parameter's role beyond the schema's minimal 'Job Id' title.
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: 'Resume a stopped training job from its latest checkpoint.' It also clearly distinguishes itself from sibling tools by stating it reuses the same job_id rather than creating a new job, which separates it from submit_training_job and edit_training_job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: 'Useful after a preemption.' It also provides guidance for when not to resume immediately, instructing the agent to read the error for a FAILED job and fix the cause, often via edit_training_job, before resuming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_modelADestructiveInspect
Run a hosted RunComfy model on demand — no deployment needed.
Backs ``POST /v1/models/{model_id}`` on the Model API. Returns a
``request_id`` immediately; poll with ``get_model_request_status``
and fetch outputs with ``get_model_request_result``.
Args:
model_id: The model's identifier exactly as shown on its page at
runcomfy.com/models, e.g.
``blackforestlabs/flux-1-kontext/pro/edit``. Slashes are part
of the ID.
inputs: Request body matching the model's Input schema (model
page → API → Input schema), e.g.
``{"prompt": "a cat", "aspect_ratio": "16:9", "seed": 42}``.
wait_for_completion: If true, poll until done and return the
result inline.
timeout_seconds: Max wait when wait_for_completion=true.
File inputs must be publicly accessible HTTPS URLs that a plain
unauthenticated GET can fetch, e.g.
``{"image_url": "https://example.com/photo.webp"}``.
To run a Trainer LoRA without deploying it, call the LoRA's *base
model* ID here and pass the LoRA in the body, e.g.
``{"lora": {"path": "my_first_lora_3000.safetensors"}}`` — either a
LoRA name from your RunComfy LoRA Assets or a public URL.
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | No | ||
| model_id | Yes | ||
| timeout_seconds | No | ||
| wait_for_completion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it returns a request_id immediately, that wait_for_completion poll and returns the result inline, and that file inputs must be publicly accessible HTTPS URLs. It also explains the LoRA body format. While the destructiveHint annotation implies side effects, the description doesn't mention billing/credit implications, so it's not fully transparent but is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, endpoint mapping, explicit Args section, and useful supplementary notes. It is somewhat long, but each sentence adds operational value such as file URL requirements and LoRA usage, so 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 4-parameter async execution tool with no output schema, the description covers the main workflow, parameter semantics, file constraints, and the LoRA special case. It doesn't mention error conditions or credit implications, but the core information an agent needs to invoke and poll correctly 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 coverage is 0%, but the description compensates thoroughly: model_id includes exact format and examples with the note about slashes, inputs explains the Input schema reference and gives a concrete example, and wait_for_completion/timeout_seconds are behaviorally defined. This goes far beyond the bare schema titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Run a hosted RunComfy model on demand — no deployment needed.' It also names the backing endpoint (POST /v1/models/{model_id}) and the immediate return value, making the tool's function unmistakable and distinguishing it from deployment/management 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?
It gives clear when-to-use context: run a hosted model without deploying. It also prescribes the follow-up workflow by pointing to get_model_request_status and get_model_request_result. It does not explicitly say 'use submit_request for deployed endpoints,' but the 'no deployment needed' contrast and async workflow guidance are sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_requestADestructiveInspect
Submit an async inference request to a deployment.
Backs ``POST /prod/v1/deployments/{deployment_id}/inference``.
Args:
deployment_id: Target deployment.
overrides: Partial graph keyed by node_id, e.g.
``{"6": {"inputs": {"text": "a cat"}}}``.
Use ``get_deployment(include_payload=true)`` to discover
node IDs and input names.
workflow_api_json: Advanced — run a different workflow without
updating the deployment. Omit ``overrides`` in this mode.
extra_data: E.g. ``{"api_key_comfy_org": "comfyui-..."}`` for
ComfyUI Core API nodes.
webhook_url: Push-based updates instead of polling.
webhook_intermediate_status: Fire webhooks on every status
change, not just terminal.
wait_for_completion: If true, poll until done and return the
result inline.
timeout_seconds: Max wait when wait_for_completion=true.
File inputs: pass a public HTTPS URL or Base64 data URI directly
in the overrides value, e.g.
``{"189": {"inputs": {"image": "https://example.com/photo.jpg"}}}``
or ``{"189": {"inputs": {"image": "data:image/jpeg;base64,/9j..."}}}``.
| Name | Required | Description | Default |
|---|---|---|---|
| overrides | No | ||
| extra_data | No | ||
| webhook_url | No | ||
| deployment_id | Yes | ||
| timeout_seconds | No | ||
| workflow_api_json | No | ||
| wait_for_completion | No | ||
| webhook_intermediate_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as non-read-only and destructive; the description aligns and adds useful behavior: async execution, optional polling, webhook callbacks, and the ability to run a workflow without updating the deployment. No contradiction between description and 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?
Despite covering eight parameters and multiple modes, the description is tightly structured with a leading purpose line, an endpoint reference, and a compact Args list. Examples earn their place 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?
All parameters, prerequisites, file encoding options, and the wait/webhook modes are covered, so an agent can construct valid calls. The main gap is that the default async return shape is not stated; the description only explains the return when wait_for_completion=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 coverage is 0%, so the description carries the full burden, and it documents all eight parameters with concrete examples, mode constraints, and file input formats. This far exceeds what the bare 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?
The first sentence names a specific action and resource: 'Submit an async inference request to a deployment,' and the endpoint reference pins down the operation. It does not explicitly call out sibling tools like run_model or get_request_status, so it narrowly misses top marks for 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?
The description gives practical context: use get_deployment to discover node IDs, omit overrides when using workflow_api_json, and choose webhooks instead of polling. It does not explicitly state when to choose this tool over run_model or when to use get_request_status afterward, but the submission flow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_training_jobADestructiveInspect
Submit an AI Toolkit training job (typically LoRA training).
Backs ``POST /prod/v1/trainers/ai-toolkit/jobs``. The job mounts a
``READY`` dataset and runs the config you supply. Training runs for
hours — this returns as soon as the job is queued; track it with
``get_training_job_status`` and pull artifacts with
``get_training_job_result``.
Args:
config_file: The complete AI Toolkit YAML config as a string.
Two paths in it are fixed by the platform:
``training_folder`` must be ``/app/ai-toolkit/output``, and
the dataset's ``folder_path`` must be
``/app/ai-toolkit/datasets/{dataset_name}`` where
``dataset_name`` is the dataset's ``name`` (not its id).
gpu_type: ``ADA_80_PLUS`` (H100) or ``HOPPER_141`` (H200).
gpu_count: 1 for single-GPU (default), or 8 for multi-GPU.
Multi-GPU is only supported on ``ADA_80_PLUS``.
gpu_id: Optional specific GPU selector, e.g. ``"#1"``.
| Name | Required | Description | Default |
|---|---|---|---|
| gpu_id | No | ||
| gpu_type | No | ADA_80_PLUS | |
| gpu_count | No | ||
| config_file | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this is a non-read, potentially destructive action, and the description adds meaningful behavior beyond that: it returns as soon as the job is queued, mounts a READY dataset, runs the supplied config, and has platform-fixed paths. It does not elaborate on the exact destructive or cost implications, but it provides solid context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence establishes the purpose, the second sentence explains asynchrony and the tracking workflow, and the Args section gives each parameter a tight, useful explanation. Nothing in the description is filler, and the length is justified by the complexity of the operation and the lack of schema-level parameter descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the READY dataset requirement, asynchronous queue behavior, tracking via get_training_job_status, artifact retrieval via get_training_job_result, and all GPU/config constraints. It does not explicitly state the return shape, such as the job ID used for later tracking, which would be more important here since 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?
Schema description coverage is 0%, so the description carries the full parameter burden. It explains config_file as a complete YAML string with mandatory fixed paths, defines gpu_type values as H100/H200, specifies gpu_count 1 vs 8 with the ADA-only multi-GPU constraint, and describes gpu_id as an optional selector. Every parameter receives actionable detail.
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: 'Submit an AI Toolkit training job', notes it typically covers LoRA training, and names the exact endpoint. It is clearly distinguishable from the status, result, cancel, and resume 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 description gives clear workflow context: training runs for hours, the call returns once queued, and subsequent tracking uses get_training_job_status and get_training_job_result. It does not explicitly compare against alternatives like submit_request or run_model, so it falls short of fully explicit 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.
update_deploymentADestructiveInspect
Partially update a deployment.
Backs ``PATCH /prod/v2/deployments/{deployment_id}``. Only pass the
fields you want to change. Set is_enabled=false to pause;
true to re-enable.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| hardware | No | ||
| is_enabled | No | ||
| queue_size | No | ||
| deployment_id | Yes | ||
| max_instances | No | ||
| min_instances | No | ||
| workflow_version | No | ||
| keep_warm_duration_in_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description explains PATCH-like partial update behavior and documents the is_enabled toggle semantics (false pauses, true re-enables). This adds meaningful behavioral context; no contradiction with readOnlyHint=false or destructiveHint=true is present.
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 with no filler. The core purpose is front-loaded, the HTTP method grounding is useful, and each sentence adds meaningful guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has nine parameters, no output schema, and a destructive annotation, yet the description omits return behavior, consequences of destructive updates, and semantics for most parameters. It gives enough to make a basic partial update call but not enough for confident use of the broader parameter surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description only clarifies is_enabled and the generic 'only pass fields you want to change' rule. The remaining eight parameters such as name, hardware, queue_size, min_instances, and max_instances receive no semantic explanation beyond their titles, so the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Partially update a deployment' and maps to PATCH /prod/v2/deployments/{deployment_id}, identifying the specific verb and resource. It is distinct from create/delete/list deployment sibling tools and conveys the partial-update semantics.
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?
'Only pass the fields you want to change' gives useful invocation guidance and implies this is for modifying an existing deployment. However, it does not explicitly say when to use this instead of create_deployment or delete_deployment, nor does it name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_dataset_file_from_urlADestructiveInspect
Add one file to a dataset by fetching it from a public URL.
Downloads ``source_url`` and forwards the bytes to
``POST /prod/v1/trainers/datasets/{dataset_id}/upload``.
Args:
dataset_id: Target dataset.
source_url: Publicly reachable HTTPS URL for an image, video, or
caption ``.txt`` file. Must be under 150 MB.
filename: Name to store it under. Defaults to the URL's
basename. For LoRA training each image/video needs a caption
``.txt`` with the *same base name* — ``img_0001.jpg`` pairs
with ``img_0001.txt``.
Re-uploading the same filename overwrites the previous copy. For
files the caller holds locally, or anything over 150 MB, use
``get_dataset_upload_urls`` and PUT the bytes directly instead.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| dataset_id | Yes | ||
| source_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark the operation as destructive and read-write, and the description adds concrete behavioral detail: 'Re-uploading the same filename overwrites the previous copy.' It also discloses that the tool downloads the source URL and forwards the bytes to an upload endpoint, which is useful beyond what the 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?
The purpose is front-loaded in the first sentence, followed by a structured Args block and a short caveat about alternatives. Every sentence contributes necessary information such as endpoint, parameters, constraints, overwrite behavior, and fallback routing, with no fluff.
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 upload tool with no output schema, the description covers all invocation-relevant context: target dataset, source URL, filename semantics, size limit, overwrite hazard, and the alternative tool. The response body is not specified, but that is not essential for correctly calling the 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?
Even though schema description coverage is 0%, the description's Args section fully compensates. It explains `dataset_id` as the target, `source_url` with format and size constraints, and `filename` with default basename behavior and LoRA caption-pairing semantics. This adds meaning the raw schema cannot.
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 opening sentence states a specific action: 'Add one file to a dataset by fetching it from a public URL,' with a clear verb, resource, and method. The description also names the sibling alternative `get_dataset_upload_urls` at the end, making it distinguishable from other dataset upload tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: for publicly reachable URLs under 150 MB. It also provides the counter-case, saying that for locally held files or anything over 150 MB, one should use `get_dataset_upload_urls` and PUT the bytes directly instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_dataset_text_fileADestructiveInspect
Add a text file — normally a caption — to a dataset.
Backs ``POST /prod/v1/trainers/datasets/{dataset_id}/upload`` with
inline text, so captions can be written without hosting a file.
Args:
dataset_id: Target dataset.
filename: Must share the base name of the media it captions:
``img_0001.jpg`` → ``img_0001.txt``.
text: Caption body.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| filename | Yes | ||
| dataset_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true, but the description only says 'Add' and does not clarify whether uploading a filename that already exists overwrites, errors, or creates a duplicate. No side effects, overwrite behavior, or mutation details are disclosed, leaving an important behavioral gap for a tool marked as destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the purpose, then gives endpoint context and a tight parameter list. Every sentence earns its place, and the filename example replaces longer prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-string-parameter upload, the description covers what, how, and the filename convention, and the annotations cover safety. The main missing piece is behavior when an existing caption file shares the same filename, especially 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 0%, so the description carries the full burden and succeeds. It documents all three parameters, including the critical filename constraint with a concrete example (img_0001.jpg → img_0001.txt), which is essential for correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action and resource: 'Add a text file — normally a caption — to a dataset.' It also distinguishes itself by emphasizing inline text uploads 'without hosting a file,' which separates it from the sibling upload_dataset_file_from_url. This is specific, unambiguous, and differentiable.
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 a clear use context: write captions inline rather than hosting files. It implies the alternative (hosting a file) without explicitly naming upload_dataset_file_from_url or stating a when-not rule. The guidance is useful but not fully explicit about alternatives.
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.
31 tool updates
v1.1.0- First observed
call_instance_proxy - First observed
cancel_model_request - First observed
cancel_request - First observed
cancel_training_job - First observed
create_dataset - First observed
create_deployment - First observed
delete_dataset - First observed
delete_deployment - First observed
edit_training_job - First observed
get_balance - First observed
get_dataset_status - First observed
get_dataset_upload_urls - First observed
get_deployment - First observed
get_model - First observed
get_model_request_result - First observed
get_model_request_status - First observed
get_request_result - First observed
get_request_status - First observed
get_training_job_result - First observed
get_training_job_status - First observed
list_datasets - First observed
list_deployments - First observed
list_model_categories - First observed
list_models - First observed
resume_training_job - First observed
run_model - First observed
submit_request - First observed
submit_training_job - First observed
update_deployment - First observed
upload_dataset_file_from_url - First observed
upload_dataset_text_file
TDQS
Scored across 31 tools
Tools are grouped by resource with clear action prefixes, so deployments, datasets, models, and training jobs are generally easy to tell apart. The main ambiguity risk is the parallel request-status/result/cancel tools for deployment requests versus model API requests, which require careful reading to avoid misselection.
All tool names follow a consistent snake_case verb_noun pattern, e.g., create_deployment, list_datasets, submit_training_job, cancel_model_request. Even longer names like upload_dataset_file_from_url and get_dataset_upload_urls stay predictable and readable.
At 31 tools, this is a heavy surface and exceeds the 25+ threshold for too many tools. The tools are well organized into deployment, dataset, model, and training clusters, but the MCP would be easier to navigate if split into separate per-domain servers.
Core platform workflows are well covered: deployment CRUD plus inference lifecycle, model discovery and execution, dataset creation and upload, and training job submission/status/result/cancel/resume/edit. The notable gaps are the lack of a list_training_jobs tool and no way to list past requests, though agents can work around these by capturing IDs from submission calls.
Maintenance
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for ComfyUI — text-to-image, variations, img2img refine, upscale, image proxy, and workflow runner.1585 npm1MIT
- FlicenseNot gradedqualityBmaintenanceMCP server that connects local ComfyUI to AI agents, enabling natural language control of ComfyUI for creating workflows, generating images, and managing the queue.-
- AlicenseNot gradedqualityDmaintenanceMCP server that enables AI agents to control a local ComfyUI instance for image generation, allowing workflow understanding, parameter modification, execution, and model discovery.23 npm3Apache 2.0
- AlicenseBqualityBmaintenanceMCP server that dynamically exposes each enabled ComfyUI workflow as a tool with JSON Schema, supports job submission with wait and idempotency, file uploads, and resource metadata, with both stdio and authenticated Streamable HTTP transports.35MIT