ultralytics-mcp
This server is an MCP interface for Ultralytics Platform, covering computer-vision projects, datasets, models, training, prediction, exports, and deployments.
Projects: list, get, create, soft-delete, and search public projects on Ultralytics Explore.
Datasets: list, get, create, delete, snapshot/restore versions, list images, view class stats, get export links, and query auto-annotation status.
Dataset ingestion: start remote URL ingests and upload local archives, folders, or videos (with frame extraction) to datasets.
Auto-annotation: start and stop credit-billed auto-annotation runs, with class-mapping support for taxonomy mismatches.
Models: list, get, delete, download weights, and inspect metrics, training progress, evaluation plots, and run inference.
Training: start cloud training jobs from checkpoints or existing models (with cost and history-loss confirmations), and cancel running jobs.
Exports: create export jobs, list them, check status, and cancel active exports.
Deployments: list, get, check health, read logs/metrics, run inference through a deployment endpoint, and stop deployments.
Discoverability: check cloud GPU availability and explore public projects/datasets.
Provides tools for browsing, creating projects, datasets, models, running predictions, exports, monitoring training, and checking GPU availability on the Ultralytics platform.
Click 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., "@ultralytics-mcplist my projects"
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.
Ultralytics Platform MCP
MCP server for Ultralytics Platform workflows: projects, datasets, models, training, prediction, exports, and dataset uploads.
Independent community project. Not affiliated with or endorsed by Ultralytics.
Install · Tools · Safety · Troubleshooting
Try Asking
"Show me my Ultralytics projects and which datasets are ready to train on."
"Create a private project called
traffic-camsand upload./clips/junction.mp4as a dataset.""Fine-tune
yolo11nontraffic-camsfor 50 epochs.""Fine-tune
traffic-cams/detectoracrossday-shots, thennight-shots, in one run.""How is that training going? Show me the last 10 epochs of metrics."
"Run the trained model on
https://example.com/frame.jpg, then download the weights to./weights.""Move my
scratchproject to trash." (restorable for 30 days)
https://github.com/user-attachments/assets/449d051b-d162-4539-93c5-94be478303f0
Related MCP server: Unstructured API MCP Server
Installation
You need:
Node.js
>=20An Ultralytics Platform API key
ffmpegandffprobeonPATH, to upload a dataset from a local video fileClaude Code, Codex, or another MCP client that can launch stdio servers
Get an API key
Sign in at Ultralytics Platform, open
Settings -> API Keys, and create or copy a key. The official
API key docs cover
creation, usage, and revocation.
Environment variables
Variable | Required | Description |
| ✅ | Ultralytics API key. Expected format: |
| ❌ | Advanced: override API base URL. Default: |
Treat ULTRALYTICS_API_KEY as a bearer token. Pass it through your MCP client's
environment configuration only. Never paste real keys into prompts, scripts, or
committed config files. Project-scoped .mcp.json files are ignored by this repo
to reduce accidental key commits; if a key is exposed, revoke it in Ultralytics
Platform and create a replacement.
Standard config
Works in MCP clients that accept JSON stdio server definitions.
{
"mcpServers": {
"ultralytics": {
"command": "npx",
"args": ["-y", "ultralytics-mcp@latest"],
"env": {
"ULTRALYTICS_API_KEY": "ul_your_api_key_here"
}
}
}
}These examples track the latest published npm release. Restart your MCP client or session after upgrading, so the new server process picks up the latest package.
Add the standard config above through Antigravity settings, or by editing your configuration file directly.
claude mcp add ultralytics --env ULTRALYTICS_API_KEY=ul_your_api_key_here -- npx -y ultralytics-mcp@latestOr add a project-scoped server in repo-root .mcp.json:
{
"mcpServers": {
"ultralytics": {
"command": "npx",
"args": ["-y", "ultralytics-mcp@latest"],
"env": {
"ULTRALYTICS_API_KEY": "ul_your_api_key_here"
}
}
}
}Follow the MCP install guide with the standard config above.
codex mcp add ultralytics --env ULTRALYTICS_API_KEY=ul_your_api_key_here -- npx -y ultralytics-mcp@latestOr add it directly to ~/.codex/config.toml:
[mcp_servers.ultralytics]
command = "npx"
args = ["-y", "ultralytics-mcp@latest"]
[mcp_servers.ultralytics.env]
ULTRALYTICS_API_KEY = "ul_your_api_key_here"Important The install button writes a placeholder key. After installing, open your Cursor MCP config and replace
ul_your_api_key_herewith your Ultralytics API key, then restart Cursor.
To install manually, go to Cursor Settings -> MCP -> Add new MCP Server
(or edit ~/.cursor/mcp.json) and use the standard config above.
Follow the MCP install guide with the standard config above.
Important The install button writes a placeholder key. After installing, open your VS Code MCP config and replace
ul_your_api_key_herewith your Ultralytics API key, then restart VS Code.
To install manually, follow the MCP install guide, or use the VS Code CLI:
code --add-mcp '{"name":"ultralytics","command":"npx","args":["-y","ultralytics-mcp@latest"],"env":{"ULTRALYTICS_API_KEY":"ul_your_api_key_here"}}'Verify
Run claude mcp list or codex mcp list. You should see ultralytics among
the configured MCP servers.
Tools
See TOOLS.md for the full parameter reference, safety notes, local-path behavior, and examples for the tricky tools.
Safety
Projects and datasets are created private by default, even though the platform itself defaults to public
export_createrequiresconfirm_cost: truetraining_startrequiresconfirm_cost: true, plusconfirm_history_loss: truewhen restarting training on an existing model that already has a recorded run. That path replaces its status, epoch count, and per-epoch metric history irrecoverablyStarting a training job or an export is billable immediately, so the estimated cost and remaining balance are reported after the job starts, not before
training_startin checkpoint mode (a base checkpoint likeyolo11n.pt, not an existing model ref) with a single dataset creates the project model before the platform checks the checkpoint's task against the dataset'sIf that check fails, the model it already created is not deleted automatically. The error names the model; review it and delete it with
models_deleteif it is unwantedCancelling a running training job preserves the latest checkpoint and keeps the model
export_cancelproceeds only when it observes an export asqueuedorrunning, and refuses every other status, including unrecognized ones. Because the status check and the cancel request are not atomic, an export that finishes between them may have its artifact irreversibly deletedDeleting a project or dataset is a soft delete to trash, restorable for 30 days. Deleting a project reports the cascade count; deleting a dataset moves its images and annotations with it and leaves models trained on it unaffected
Ambiguous project or dataset refs fail instead of guessing
Signed upload and download URLs do not forward
AuthorizationLocal upload tools and
deployment_predictread files from the MCP client host; approve calls only for paths you expect to share with Ultralyticsmodel_downloadwrites to the requested local path; reviewoutput_pathandoverwritebefore approvingAdding a named YOLO ZIP (with
data.yamlclass names) to an existing dataset imports its labels and merges classesRe-ingest does not re-label images already in the dataset (use the annotation editor); re-uploading the same image under a different split can create a duplicate
Troubleshooting
Invalid API key
ULTRALYTICS_API_KEY must start with ul_ and contain exactly 40 hex
characters after the prefix.
Server not loading
Run claude mcp list or codex mcp list, then verify that npx and Node.js
are installed and that ULTRALYTICS_API_KEY reached the client — passed with
--env when adding the server, or set in ~/.codex/config.toml. In Claude
Code, claude mcp get ultralytics shows the resolved config.
To smoke-test the server on its own:
ULTRALYTICS_API_KEY=ul_your_api_key_here npx -y ultralytics-mcp@latestIf the command exits immediately with a config error, fix the environment first.
Platform API errors
For authentication, rate-limit, or endpoint behavior, compare against the official Ultralytics Platform REST API docs. When asking for help, include the tool name, request summary, response status, redacted response body, and a minimal reproduction. Do not include real API keys, signed URLs, private dataset contents, or private model artifacts.
Contributing
See CONTRIBUTING.md for setup, the check suite, and the live smoke test.
Available Tools
44 toolsauto_annotate_startA
Start an auto-annotation run on a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI, labelling it with a model given by owner/project/model, ul://owner/project/model, or slug with a project (state-changing, billable, may cost credits). Requires confirm_cost=true: there is no cost preview, no published rate, and a 402 signals insufficient credits; gauge magnitude with datasets_get (the unlabeled image count by default, the total count when include_annotated is true). Sends only modelId plus any of confidence, iou, class_mapping, and include_annotated the caller sets explicitly, omitting the rest so the server's own defaults (confidence 0.25, iou 0.7, include_annotated false, illustrative only) apply undisturbed. There is no imgsz parameter. class_mapping bridges a model/dataset class-taxonomy mismatch (for example a 1-class model against an 80-class dataset, which otherwise fails outright); it passes through with no length check. Labels are additive, never overwritten, so no overwrite confirmation is needed. Every start snapshots a dataset version before labelling, listed via datasets_get and undoable exactly with dataset_version_restore. Billing settles at run time, not at dismissal, so auto_annotate_stop does not refund a charge already incurred. Use auto_annotate_status to poll and auto_annotate_stop to cancel.
| Name | Required | Description | Default |
|---|---|---|---|
| iou | No | IoU threshold for generated labels. Omit to use the server default (currently 0.7). | |
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| project | No | Project ref required when model is given by slug. | |
| confidence | No | Confidence threshold for generated labels. Omit to use the server default (currently 0.25). | |
| confirm_cost | No | Must be true to allow a credit-costing auto-annotation run. | |
| class_mapping | No | Model class index -> dataset class index mapping, positioned by model class index. Required to bridge a class-taxonomy mismatch between the model and the dataset; passed through with no length check. | |
| include_annotated | No | Re-label images that already carry annotations. Omit to use the server default (currently false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false) by disclosing that the operation is state-changing and billable, requires confirm_cost, has no cost preview, and may return 402. It explains that only explicitly set parameters are sent, server defaults apply otherwise, class_mapping passes through with no length check, labels are additive, a dataset version is snapshotted, billing settles at run time, and auto_annotate_stop does not refund. This is exceptionally transparent and adds substantial value beyond the structured metadata. 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?
Though long, every sentence carries essential information: cost implications, parameter behavior, defaults, class_mapping purpose, additivity, versioning, billing timing, and status/cancel pointers. The structure is logical—core action, cost, parameter semantics, behavioral nuances, and lifecycle management. There is no fluff; each clause earns its place. The density is justified given the tool's complexity.
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 majority of what an agent needs: reference formats, cost and confirmation, parameter defaults and omissions, class_mapping usage, additive labeling, version snapshotting, billing timing, and related tools. However, it does not specify the return value or output format—there is no output schema, and the description never states what the tool returns (e.g., a run ID) that auto_annotate_status would poll. This is a minor gap given the tool's complexity, but it prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter's type and basic purpose. The description adds meaningful context: it explains the confirm_cost requirement, that only modelId and optionally confidence, iou, class_mapping, and include_annotated are sent (others omitted for server defaults), and that class_mapping bridges taxonomy mismatches with no length check. This goes beyond the schema's descriptive text, giving the agent operational semantics. It does not restate every parameter but adds value where nuance matters.
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 clear, specific verb-resource pairing: 'Start an auto-annotation run on a dataset... labelling it with a model...'. It explicitly lists the three accepted reference formats for both dataset and model, and differentiates from siblings by naming auto_annotate_status and auto_annotate_stop as the polling/cancelling counterparts. This is unambiguous and distinguishes the tool from its related operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: it mandates confirm_cost=true, explains how to gauge cost magnitude via datasets_get, and warns about insufficient-credit 402 errors. It also states when to use alternatives: 'Use auto_annotate_status to poll and auto_annotate_stop to cancel.' It clarifies that no overwrite confirmation is needed because labels are additive, and explicitly notes the absence of an imgsz parameter, preventing misuse. This is comprehensive and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_annotate_statusARead-only
Get an auto-annotation run's status for a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI. Surfaces activeJob and lastRun unmodified: both null means the dataset has never run one; activeJob carries progress for a run in flight; lastRun carries failed/stopped booleans plus results, or an error when the run failed.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly and non-destructive annotations by fully explaining the semantics of activeJob and lastRun, including null behavior, in-flight progress, failure/stopped flags, results, and error representation. This gives the agent a clear model of what the response means without needing an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The first sentence front-loads the tool's purpose and accepted input forms, and the second sentence delivers essential return-value semantics. 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?
Despite having no output schema, the description fully explains the observable return behavior: both fields null means no run yet, activeJob shows in-flight progress, and lastRun captures results or errors. Together with the read-only annotations and single fully documented parameter, this is complete enough for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the main description repeats the exact acceptable dataset reference forms already present in the schema: slug, owner/slug, or ul://owner/datasets/slug URI. Therefore, the description adds no new parameter meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get an auto-annotation run's status for a dataset.' It clearly identifies the target as a status-checking operation rather than a starting or stopping operation, distinguishing it from the sibling tools auto_annotate_start and auto_annotate_stop. The supported dataset reference forms are also stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for checking auto-annotation run status, but it does not explicitly state when to use it versus alternatives, nor does it mention exclusions such as 'use auto_annotate_start to begin a run.' The purpose is clear enough that an agent can infer the usage context, but explicit routing guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auto_annotate_stopADestructive
Stop or dismiss a dataset's auto-annotation run by slug, owner/slug, or a ul://owner/datasets/slug URI. Reads status first and refuses without calling the endpoint when no run is active, since there is nothing to stop. When a run is active it sends the request and surfaces the server's own action verbatim rather than inferring it: cancelled for an active run stopped mid-flight, dismissed for a terminal run's summary being cleared, or none if nothing acted on. Ships ungated, consistent with training_cancel and export_cancel: an off-switch is never gated. An undismissed terminal run does not block the next start, so this never strands anything; dismissal moves no money.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, readOnlyHint false), the description discloses substantial behavior: it reads status first and only calls the endpoint if a run is active; it surfaces the server's own action verbatim with possible values 'cancelled', 'dismissed', or 'none'; and it states the tool 'Ships ungated' and that dismissal 'moves no money.' This goes far beyond the structured annotation hints and gives the agent a precise mental model of side effects and response semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences long, but each sentence carries distinct behavioral or contextual information: purpose, pre-check behavior, response semantics, gating policy, and financial/non-blocking guarantees. It is front-loaded with the core purpose. A slight deduction because the final sentence about 'never strands anything' and 'moves no money' could be considered slightly redundant with the earlier 'refuses when no run is active,' though it does add reassurance.
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 cancellation tool with no output schema, the description covers all essential runtime behavior: when it acts, when it refuses, what actions it may report, gating status, and side-effect consequences (no money moves, no blocking of next start). There is no output schema, and the description effectively substitutes by explaining the server's verbatim action response. Nothing an agent needs to invoke or interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'dataset' parameter is already described as 'Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.' The description repeats this same format list at the start without adding new semantic detail. With full schema coverage, the baseline of 3 is appropriate; the description adds no parameter-specific value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Stop or dismiss a dataset's auto-annotation run.' It also enumerates the accepted reference formats and distinguishes the action from sibling tools like auto_annotate_status and auto_annotate_start. The phrase 'consistent with training_cancel and export_cancel' further classifies it as a cancel/off-switch tool.
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 this tool—when you want to stop or dismiss an auto-annotation run. It states 'Reads status first and refuses without calling the endpoint when no run is active,' which tells the agent this tool handles the status check internally. However, it does not explicitly name alternatives like auto_annotate_status for read-only checks, nor does it provide an explicit 'when not to use' condition, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_class_statsARead-only
Get per-class annotation counts for a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI. By default omits the bulky histogram and heatmap groups (image size, file size, format, points-per-annotation, bbox distributions, and location/dimension heatmaps), naming them in the summary; pass include_histograms: true to get the full payload unmodified.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| include_histograms | No | Include the histogram and heatmap groups omitted by default (image size, file size, format, points-per-annotation, bbox distributions, and location/dimension heatmaps). Off by default because the payload is large; the summary names the groups it omits. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, while the description adds valuable behavioral detail: the default response omits bulky histogram/heatmap groups, names them in the summary, and explains that include_histograms=true returns the full payload unmodified. This goes beyond the structured annotations and helps the agent anticipate payload size and result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences: the first states the core purpose and input formats; the second explains the default omission and the escape hatch. No filler or repetition of schema content appears.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter tool with no output schema, the description covers the essential invocation details: what the tool returns, how to identify the dataset, and the optional flag's effect. An agent has enough information to call it correctly without additional guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameter descriptions are already clear about dataset ref formats and the include_histograms behavior. The description reinforces these details but does not substantially add new meaning beyond the schema, which is expected when coverage is 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 uses a specific verb and resource: it gets per-class annotation counts for a dataset and lists the accepted reference formats (slug, owner/slug, ul:// URI). It clearly differs from sibling tools like datasets_get or explore_datasets, so an agent can tell what this tool is for without inspecting other definitions.
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 provides clear context for when to use the tool: when per-class annotation counts are needed, and it explains the dataset reference formats. It does not explicitly name alternatives or state when not to use this tool, but its purpose is specific enough that implied usage is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_exportARead-only
Get a time-limited export download link for a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI, for the latest export or one frozen version.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| version | No | Saved version number. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation read-only and non-destructive. The description adds useful behavioral context beyond that: the result is a time-limited download link rather than the export itself, and it can target either the latest version or a specific frozen version. This is meaningful additional disclosure despite not detailing link expiry or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence states the action, the output, the input formats, and the version behavior with no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with simple parameters and no output schema, the description covers the key return concept (time-limited download link) and the version selection behavior. It stops short of describing error cases or link expiry duration, but those are minor for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters, so the baseline is 3. The description goes further by explaining the accepted formats for 'dataset' (slug, owner/slug, ul:// URI) and clarifying that omitting 'version' yields the latest export while supplying it selects a frozen version. That adds real semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a time-limited export download link for a dataset.' It names the accepted reference forms (slug, owner/slug, ul://owner/datasets/slug URI) and the two retrieval modes (latest export or frozen version), which clearly sets it apart from sibling export operations like export_create, export_status, and exports_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?
The description conveys how to specify a dataset and choose between latest and frozen exports, but it does not explicitly state when to prefer this tool over export_create, export_status, or exports_list. Usage context is clear, but exclusions/alternatives are left to the agent to infer from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_images_listARead-only
List images in a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI with optional filtering.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum images to return. | |
| split | No | Dataset split to filter by, for example train, val, or test. | |
| offset | No | Images to skip. | |
| search | No | Image name or metadata search. | |
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| classIds | No | Class IDs to filter by. An empty array is treated as no filter (all images match), not as a filter that excludes everything. | |
| hasLabel | No | Filter by annotation state. | |
| includeImageUrls | No | Include signed full-size image URLs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds little behavioral detail beyond 'optional filtering' and accepted dataset references; it does not mention pagination defaults, result shape, or signed URL behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence contains the core verb, resource, accepted reference forms, and the existence of filters. Every word contributes 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 straightforward read-only list operation with 100% schema coverage and safety annotations, the description is largely sufficient. Minor gaps exist around return format and default pagination, but these are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The description mostly repeats the dataset reference formats already present in the schema and provides no additional meaning for the filter parameters beyond the generic phrase 'optional filtering.'
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 ('List'), names the resource ('images in a dataset'), and enumerates the accepted identifier formats (slug, owner/slug, URI). It is clearly distinct from sibling tools like datasets_list, which lists datasets rather than images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by naming its action and resource, but it does not explicitly state when to choose it over alternatives or mention any exclusions. The usage context is inferable but not directly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_ingestA
Start a remote URL ingest job for a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI. Defaults conflictPolicy to skip (the platform default is undocumented). Reports the queued job id with the dataset's current ingest status; use datasets_get to follow up.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| sourceUrl | Yes | Remote dataset archive or NDJSON URL. | |
| targetSplit | No | Target split for new images (overrides archive structure). | |
| conflictPolicy | No | Conflict policy, e.g. "skip" (default), "keep_both", or "replace". Server-validated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral details beyond the annotations: this starts an asynchronous job, returns a queued job id plus current ingest status, and defaults conflictPolicy to skip. It also notes that the platform default is undocumented. This compensates well for the lack of an output schema while remaining consistent with the non-idempotent, non-read-only 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 tight sentences with no filler. The action and accepted reference forms are front-loaded, followed by the default behavior and follow-up guidance. Every clause carries 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?
Given there is no output schema, the description adequately explains what the caller should expect: a queued job id plus current ingest status, and how to follow up. It covers the async nature and a key default. It could mention validation limitations or error behavior, but for a four-parameter ingest starter this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description adds value for conflictPolicy by stating the default is skip and noting the platform default is undocumented, but it does not add meaning for dataset, sourceUrl, or targetSplit beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Start a remote URL ingest job for a dataset,' then lists the accepted reference forms (slug, owner/slug, ul:// URI). This clearly distinguishes dataset_ingest from sibling upload and export 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 clearly frames the tool as the remote-URL ingest path, which differentiates it from local upload siblings like dataset_upload_file, dataset_upload_folder, and dataset_upload_video. It also gives an explicit follow-up instruction: 'use datasets_get to follow up.' It stops short of naming when-not-to-use alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datasets_createB
Create a dataset in your Ultralytics workspace. Defaults to private visibility (the platform defaults to public when visibility is omitted).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name. | |
| task | Yes | Dataset task. Server-validated; for example detect, segment, or classify. | |
| owner | No | Workspace owner; defaults to the account owner. | |
| dataset | Yes | URL slug for the new dataset (distinct from the display name given by name). | |
| classNames | No | Initial class names for the dataset. | |
| visibility | No | Visibility "private" (default) or "public". | |
| description | No | Dataset description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-idempotent, non-destructive operation. The description adds a visibility-default nuance, but it does not disclose duplicate behavior, failure modes, permissions, or response behavior. The parenthetical about platform defaults is also slightly ambiguous relative to the schema's stated visibility default.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler and a front-loaded purpose. The second sentence is useful but slightly awkwardly worded, preventing a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, 3 required, and no output schema, the description is minimally adequate but incomplete. It does not explain expected results, behavior on duplicates, or how it fits among sibling create/ingest/upload tools. The schema handles parameter meanings, but the surrounding operational context is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents all parameters. The description adds only a visibility-default note that is already captured by the schema's 'private (default)' description, so it does not materially extend parameter understanding.
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 action and resource: 'Create a dataset in your Ultralytics workspace.' It is clear and unambiguous versus siblings like projects_create or datasets_delete, but it does not explicitly name alternatives or contrast itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as dataset_ingest, dataset_upload_file, or dataset_version_create. No prerequisites, exclusions, or conditions are mentioned, so the usage context must be inferred from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datasets_deleteADestructive
Delete a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI. Deleting a dataset moves its images and annotations to trash with it; models trained on it are not deleted. Trashed items remain restorable for a bounded window.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, the description discloses critical side effects: images and annotations go to trash, models trained on the dataset are not deleted, and trashed items are restorable for a bounded window. This adds valuable behavioral context that an agent needs to know before invoking a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero filler. The first sentence front-loads the action and identifier formats; the second sentence concisely explains the consequences. Every sentence earns its place, and the structure is optimal for quick agent parsing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with one well-documented parameter and no output schema, the description covers everything an agent needs: how to specify the dataset, what happens to associated data (trash, models), and the restoration window. Nothing critical is missing 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?
The schema already provides full coverage (100%) of the single 'dataset' parameter with a description listing the same formats (slug, owner/slug, ul:// URI). The tool description repeats this information without adding new semantic meaning, so it does not compensate beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Delete') and the resource ('a dataset') along with the exact identifier formats (slug, owner/slug, ul:// URI). This clearly distinguishes it from sibling tools like datasets_list, datasets_get, and datasets_create, which serve different purposes.
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: when you want to delete a dataset. However, it does not explicitly state when to prefer this over alternatives (e.g., dataset_version_delete) or mention any conditions or exclusions. There is no explicit when/not guidance, but the context is clear enough for a straightforward delete operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datasets_getARead-only
Get details for one dataset by slug, owner/slug, or a ul://owner/datasets/slug URI.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the accepted identifier forms, but that is more parameter-related than behavioral; it does not disclose things like not-found behavior, authentication needs, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with no filler. The verb, resource, and the three accepted formats are all front-loaded and immediately actionable.
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 single-parameter read operation with annotations covering safety, the description is nearly complete. The only minor gap is that with no output schema, it does not describe the response structure, but 'details' conveys enough for an agent to know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the only parameter, 'dataset,' already documents the same slug, owner/slug, and URI formats. The description restates this information rather than adding meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('details for one dataset'), and clearly enumerates the acceptable reference formats. It is immediately distinguishable from sibling tools like datasets_list or explore_datasets.
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 single-dataset lookup by using 'one dataset,' but it does not explicitly state when to prefer this over sibling tools such as datasets_list or explore_datasets. No exclusions or alternative conditions are given, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
datasets_listBRead-only
List datasets in your Ultralytics workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | Workspace owner; defaults to the account owner. Takes precedence over username when both are given. | |
| username | No | Compatibility alias for owner. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no additional behavioral details beyond the obvious 'list' operation – it doesn't mention pagination, filtering, or the scope of datasets returned (e.g., owned vs. accessible).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with zero filler. The core purpose ('List datasets') is front-loaded, making it easy to scan. It could arguably be too sparse, but for a simple list operation it is appropriately sized.
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 tool's simplicity (no required params, no output schema), the description is adequate but has gaps. It doesn't explain the return format, whether pagination exists, or if it lists only owned datasets or all accessible ones. These missing details could leave an agent uncertain about the response structure.
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 provides 100% coverage for both parameters (owner and username), with clear descriptions. The tool description adds no extra meaning or nuance beyond what the schema already states, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'datasets', scoped to 'your Ultralytics workspace'. This is specific and unambiguous, distinguishing it from sibling tools like datasets_get (which retrieves a single dataset) and exports_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?
The description implies its use case (listing datasets) but provides no explicit guidance on when to choose it over alternatives or when not to use it. There's no mention of alternatives or exclusions, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_upload_fileA
Upload a local dataset archive through the signed-upload flow for a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI. Defaults conflictPolicy to skip (the platform default is undocumented). Reports the queued job id with the dataset's current ingest status; use datasets_get to follow up.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| file_path | Yes | Local path to dataset archive file. | |
| targetSplit | No | Target split for new images (overrides archive structure). | |
| conflictPolicy | No | Conflict policy, e.g. "skip" (default), "keep_both", or "replace". Server-validated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavior beyond the annotations: it uses the signed-upload flow, defaults conflictPolicy to skip, and reports a queued job id with ingest status rather than a synchronous completion. It also tells the agent how to follow up via datasets_get, which is valuable for an async upload operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the full functional description, default behavior, response expectation, and next step with no filler. The most important action and target are front-loaded, and every clause contributes 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 an async upload tool with no output schema, the description covers the essential operational details: what is uploaded, how the dataset is referenced, the conflict-policy default, what the response reports, and how to follow up. It does not explain the mechanics of the signed-upload flow, but that is likely a platform-level concern rather than a per-call requirement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains each parameter. The description adds context about the default conflictPolicy and the upload flow, but these mostly echo or slightly extend what is already in the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise action and resource: uploading a local dataset archive through a signed-upload flow, with dataset addressing formats explicitly listed. This clearly separates it from sibling upload tools like dataset_upload_folder and dataset_upload_video, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use case by focusing on local dataset archives and the signed-upload flow, but it never explicitly states when to choose this tool over dataset_upload_folder, dataset_upload_video, or dataset_ingest. The follow-up instruction to use datasets_get is useful but is not an alternative-selection guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_upload_folderA
Upload a local image folder as a zip through the signed-upload flow for a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI. Defaults conflictPolicy to skip (the platform default is undocumented). Reports the queued job id with the dataset's current ingest status; use datasets_get to follow up.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| folder_path | Yes | Local path to image folder. | |
| targetSplit | No | Target split for new images. Rejected if the folder itself has train/val/test subdirectories; use one or the other, not both. | |
| conflictPolicy | No | Conflict policy, e.g. "skip" (default), "keep_both", or "replace". Server-validated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, idempotent=false, destructive=false. The description adds meaningful behavior: the upload is asynchronous (queued job id), returns the dataset's current ingest status, and defaults conflictPolicy to skip. This goes beyond the structured annotations and helps the agent predict 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 two sentences, front-loaded with the core action and reference formats. It is mostly economical, though the parenthetical "(the platform default is undocumented)" adds some noise and slight confusion given the schema already documents the default.
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 tool with full schema coverage and no output schema, the description covers the essential behavioral flow: upload, queued job id, ingest status, and follow-up via datasets_get. It does not explain authentication details or exactly how the zip is formed, but the signed-upload mention and follow-up guidance are sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents dataset, folder_path, targetSplit, and conflictPolicy. The description mostly restates the dataset reference forms and conflictPolicy default that are already in the schema, adding little new parameter-level meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first phrase names a specific action and resource: "Upload a local image folder as a zip through the signed-upload flow for a dataset." It also states the supported reference forms. It does not explicitly contrast with sibling tools like dataset_upload_file or dataset_upload_video, but the folder-vs-file/video distinction is strongly implied.
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 useful context such as folder uploads, the signed-upload flow, conflictPolicy defaulting to skip, and following up via datasets_get. However, it does not state when to prefer this tool over dataset_upload_file/dataset_upload_video or when not to use it, so usage guidance remains implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_upload_videoA
Upload a local video as extracted frames through the signed-upload flow for a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI. Defaults conflictPolicy to skip (the platform default is undocumented). Reports the queued job id with the dataset's current ingest status; use datasets_get to follow up.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Maximum frame extraction rate in frames per second; may be reduced to keep the total within max_frames. | |
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| max_frames | No | Maximum number of frames to extract. | |
| video_path | Yes | Local path to source video file. | |
| targetSplit | No | Target split for new images (overrides archive structure). | |
| conflictPolicy | No | Conflict policy, e.g. "skip" (default), "keep_both", or "replace". Server-validated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavior beyond the false annotation hints: it mentions the signed-upload flow, that the operation reports a queued job id, and that it returns the dataset's current ingest status. It also calls out that conflictPolicy defaults to skip even though the platform default is undocumented. These are useful behavioral details not present in 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 sentences with no filler: one for the core action, one for the conflictPolicy default, and one for the response shape and follow-up. It is front-loaded with the most important action and keeps each sentence focused.
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 upload tool with no output schema, the description covers the return shape ('queued job id with current ingest status') and points to datasets_get for follow-up. It is complete for core invocation, though it lacks authentication requirements and comparison guidance against sibling upload tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the description need not compensate heavily. It does add one useful parameter-level detail: 'Defaults conflictPolicy to skip (the platform default is undocumented).' However, it does not enrich the semantics of fps, max_frames, targetSplit, dataset, or video_path beyond their schema descriptions.
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: 'Upload a local video as extracted frames through the signed-upload flow for a dataset.' It also specifies the accepted dataset reference formats and describes the video-to-frames nature, which distinguishes it from upload_file/upload_folder without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to choose this tool over siblings such as dataset_upload_file, dataset_upload_folder, or dataset_ingest. The only hint is post-usage: 'use datasets_get to follow up,' which is not an alternative-selection guideline. The intended use must be inferred from the action description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_version_createA
Create a frozen dataset version snapshot by slug, owner/slug, or a ul://owner/datasets/slug URI. If the dataset is unchanged since the previous snapshot the existing version is returned instead of a new one.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| description | No | Optional note describing this snapshot. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the agent knows it's a mutating, non-idempotent operation. The description adds valuable nuance by explaining that if the dataset is unchanged, the existing version is returned instead of a new one—this clarifies the non-idempotent behavior and the 'frozen' immutability. It does not cover permissions or rate limits, but the key behavioral trait is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both essential and front-loaded with the core action and the important exception. There is no filler or redundant phrasing. The structure is optimal for quick comprehension.
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 creation tool with two parameters, no nested objects, and no output schema, the description covers the essential usage, accepted reference formats, and the key behavioral nuance. It does not specify the return value, but given the lack of an output schema, that omission is acceptable for a create operation. The description is sufficient for an agent to call 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?
The schema already provides 100% coverage for both parameters, including descriptions for 'dataset' (slug, owner/slug, or URI) and 'description' (optional note). The tool description repeats the dataset reference formats but adds no new meaning beyond the schema. Since schema coverage is complete, the baseline of 3 applies; the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a frozen dataset version snapshot') and the resource (dataset) with multiple ways to specify it. It distinguishes itself from sibling tools like dataset_version_restore or datasets_get by focusing on creation. The special behavior (returning existing version if unchanged) further clarifies the tool's unique 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 clear context for when to use it (creating a snapshot) and the specific behavior when the dataset is unchanged. It does not explicitly name alternatives or exclusions, but the context is unambiguous enough for an agent to select it over other version-related tools. The lack of explicit 'use instead of' guidance keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset_version_restoreADestructive
Restore a dataset to a previously saved version by slug, owner/slug, or a ul://owner/datasets/slug URI, and an integer version number. Versions are listed via datasets_get (the versions array, already returned unprojected). This REPLACES the dataset's current images, labels, and splits with that snapshot outright: anything done since that version, including un-versioned manual annotation work, is discarded. Ships ungated anyway, since it is the undo tool — an auto-annotate run snapshots a version before labelling, so restoring that version undoes the run exactly, and a mistaken restore is itself recoverable by restoring a later version. Restore also reassigns image IDs: a pre-restore image ID still resolves afterward but returns an empty label array rather than a 404, so callers must re-list images (for example with dataset_images_list) after a restore instead of reusing held IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI. | |
| version | Yes | Version number to restore, as listed in datasets_get's versions array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the destructiveHint annotation by detailing exactly what is replaced (images, labels, splits), what is discarded (un-versioned manual annotation work), and the side effect on image IDs (held IDs resolve to empty label arrays rather than 404s). This is exemplary transparency for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but purposeful, with each sentence carrying important operational or recovery information. It could be slightly better structured with clearer separation between the core restore behavior and the post-restore re-listing guidance, but it remains efficient and front-loads the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent tool with no output schema, the description covers the full operational picture: how to invoke it, what happens destructively, how to undo a mistake, and what callers must do afterward (re-list images). No critical behavioral gap remains for an agent to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already explains both parameters: dataset reference formats and version number sourced from datasets_get. The description reinforces these details and adds that versions are 'already returned unprojected,' but it does not fundamentally change or extend parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Restore a dataset to a previously saved version') and clearly identifies the resource and the accepted reference formats (slug, owner/slug, or ul:// URI). It also ties the operation to version listing via datasets_get, making it easy to distinguish from related version and dataset 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 gives concrete usage context: it is positioned as the undo tool for auto-annotate runs, explains that restoring an auto-annotate snapshot reverts the run exactly, and notes that a mistaken restore can be recovered by restoring a later version. It does not enumerate explicit exclusions or when-not-to-use conditions, but the use case is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_getARead-only
Get details for one deployment by owner/deployment or a bare slug (owner defaults to the account owner). serviceUrl and deployedAt are null until the deployment reaches status ready.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | Yes | Deployment ref by owner/deployment or a bare slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is known. The description adds valuable context by disclosing that serviceUrl and deployedAt are null until the deployment reaches 'ready' status, which is not inferable from annotations or schema. This goes beyond the baseline.
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 sentences with no fluff. The core purpose is stated first, followed by a crucial behavioral note about null fields. Every word earns its place, and the structure is optimal for quick parsing.
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 single-parameter retrieval tool with annotations covering safety, the description is complete. It covers the reference format, the default owner, and the null-field behavior. No output schema exists, but the description doesn't need to detail return values for this straightforward operation. Nothing essential 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?
The schema describes the parameter as 'Deployment ref by owner/deployment or a bare slug,' but the description adds the critical default behavior ('owner defaults to the account owner'), which is not in the schema. This provides additional meaning beyond the schema, justifying a score above the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get details') and the resource ('one deployment'), and specifies how to reference it (owner/deployment or bare slug with default owner). This distinguishes it from deployments_list, which lists multiple deployments, and from deployment_health/logs/metrics, which target specific aspects.
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 how to specify the deployment, including the default owner behavior. While it doesn't explicitly mention alternatives like deployments_list or deployment_health, the singular focus on 'one deployment' implies its use for single-deployment detail retrieval. The lack of explicit 'when not to use' is a minor gap but the intent is inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_healthARead-only
Probe one deployment's health by owner/deployment or a bare slug (owner defaults to the account owner). status is the upstream HTTP status the health probe observed at the deployment's own service URL, not the status of this tool call.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | Yes | Deployment ref by owner/deployment or a bare slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only safety is covered. The description adds valuable context beyond that: it clarifies that the 'status' field refers to the upstream HTTP status at the deployment's service URL, not the tool call's status, and that the owner defaults to the account owner. This prevents a critical misunderstanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the primary purpose stated first and the critical caveat about 'status' placed second. Every phrase earns its place, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is present, so the description must convey the response shape. It explains the 'status' field but does not mention any other possible fields (e.g., timestamp, latency, error info) or behavior on missing deployments. For a simple health probe this is acceptable, but a bit more detail would improve 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 input schema provides a 100%-covered description of the single 'deployment' parameter. The tool description goes further by explaining the default behavior when a bare slug is used (owner defaults to the account owner), which is not stated in the schema and helps the agent construct correct invocations.
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 ('Probe') and a clear resource ('one deployment's health'), with the scope defined by owner/deployment or bare slug. It distinguishes itself from sibling deployment tools by focusing on health probing, which is semantically distinct from deployment_get, deployment_logs, or deployment_metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like deployment_get or deployment_metrics. The description provides a behavioral detail about the owner default but does not mention when a health probe is appropriate or when another sibling would be better, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_logsARead-only
Read log entries for one deployment by owner/deployment or a bare slug (owner defaults to the account owner). severity is passed through to the server unvalidated (illustrative values: DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY); an invalid value returns the server's own rejection message. limit defaults to 50, max 200. nextPageToken pages through older entries.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return (default 50, max 200). | |
| severity | No | Comma-separated log severity levels, passed through unvalidated (e.g. INFO or WARNING,ERROR). Exact match, not a minimum threshold. | |
| pageToken | No | Pagination token from a previous call's nextPageToken. | |
| deployment | Yes | Deployment ref by owner/deployment or a bare slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/destructive annotations by explaining that severity is passed through unvalidated, that an invalid value surfaces the server rejection message, that limit has explicit defaults and caps, and that nextPageToken pages toward older entries. These are meaningful runtime behaviors not visible in 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, front-loads the main purpose, and then efficiently covers the key parameter behaviors. Every sentence adds useful information with 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 read-only log retrieval tool with no output schema, the description is complete: it defines the target, owner resolution, severity semantics, limit bounds, and pagination. An agent has enough information to call the tool correctly and handle normal server behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 is appropriate. The description adds some value beyond the schema by noting that invalid severity values return the server's own rejection and that nextPageToken moves through older entries, which clarifies pagination direction. However, much of the parameter detail is already present in the schema descriptions.
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: 'Read log entries for one deployment.' It clarifies how the deployment is addressed (owner/deployment or bare slug) and naturally distinguishes this from sibling tools like deployment_metrics or deployment_health by focusing on log retrieval.
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 usage context is clear: this tool is for reading logs of a single deployment, with optional severity filtering, limit tuning, and pagination. It does not explicitly name alternatives or state when not to use it, but the purpose is specific enough that an agent can infer when it is the right sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_metricsARead-only
Read metrics for one deployment by owner/deployment or a bare slug (owner defaults to the account owner). The response is one of two shapes selected by sparkline: the default shape carries timeRange (a {start, end} object)/summary/timeSeries, sparkline=true carries requests24h (an array of per-hour points, not a total)/totalRequests/errorRate/avgLatencyMs. The two are never merged; which shape came back is returned as-is. range (e.g. 1h, 24h, 7d; default 24h) is passed through to the server unvalidated.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Time range, passed through unvalidated (e.g. 1h, 24h, 7d; default 24h). | |
| sparkline | No | When true, selects the compact sparkline shape (requests24h, totalRequests, errorRate, avgLatencyMs) instead of the detailed shape. | |
| deployment | Yes | Deployment ref by owner/deployment or a bare slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses the two mutually exclusive response shapes, the exact fields returned for each, and that 'range' is passed through unvalidated. This is significant behavioral context that helps the agent interpret results and anticipate server behavior without 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 dense and informative, front-loaded with the core purpose, then detailing response shapes and parameter behavior. While it is a longer paragraph, every sentence adds value and there is no redundancy, so it remains concise relative to the complexity it conveys.
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 two response shapes and the absence of an output schema, the description fully covers what an agent needs to know: the fields in each shape, the parameter that selects them, and the behavior of range. No critical information is missing for a read-only metrics 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?
With 100% schema coverage, the baseline is 3, but the description adds substantial meaning: it explains the deployment parameter's format (owner/deployment or bare slug), clarifies that sparkline toggles the response shape, and specifies the default and unvalidated nature of range. This goes well beyond the schema descriptions.
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 ('Read metrics') and the resource ('one deployment'), with specific identifiers ('by owner/deployment or a bare slug'). It distinguishes itself from siblings like deployment_health and deployment_logs by focusing on metrics, and the sibling list confirms it's a distinct read 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 clarifies what the tool does and the default owner behavior, but does not explicitly say when to prefer this over alternatives like deployment_health or deployment_logs. The context is clear enough for an agent to infer its use, but it lacks explicit exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_predictARead-only
Run inference through a deployment's own serving endpoint on a local image file, by owner/deployment or a bare slug (owner defaults to the account owner). Returns images/metadata verbatim, including undocumented metadata fields. No per-request cost is documented for this endpoint; costs follow the deployment's own resource configuration. A cold start on a scaled-to-zero deployment may respond slowly or with a 503 — check deployment_health rather than retrying blindly.
| Name | Required | Description | Default |
|---|---|---|---|
| iou | No | IoU threshold (0-0.95, server default applies if omitted). | |
| conf | No | Confidence threshold (0.01-1, server default applies if omitted). | |
| imgsz | No | Inference image size (32-1280, server default applies if omitted). | |
| imagePath | Yes | Local path to an image file (.jpg, .jpeg, .png, .webp, .bmp, .tif, .tiff). | |
| deployment | Yes | Deployment ref by owner/deployment or a bare slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the description adds significant extra context: it discloses that returns include undocumented metadata fields, that costs follow the deployment's resource configuration (no per-request cost), and that cold starts may cause slow responses or 503 errors with advice to check health. These details go beyond the annotations and are highly relevant for an agent invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core purpose, then covers return behavior, cost, and cold-start handling in a logical order. Every sentence contributes necessary information, making it highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (no output schema, annotations cover safety), the description is complete: it explains what the tool returns (images/metadata verbatim, including undocumented fields), cost implications, and a specific failure scenario (cold start) with recommended action. It also covers all required parameters' semantics through the schema and the added default-owner note. Nothing critical for an agent 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 100%, so the baseline is 3. The description adds semantic value beyond the schema for the 'deployment' parameter by noting that 'owner defaults to the account owner' when a bare slug is used—information not present in the schema. It also reiterates that imagePath is local, matching the schema. For iou, conf, and imgsz, it adds nothing beyond the schema, but the additional default-owner behavior justifies a slightly higher score.
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: 'Run inference through a deployment's own serving endpoint on a local image file'. It specifies the resource (deployment's endpoint) and the input (local image file), and clarifies how to reference the deployment (owner/deployment or bare slug with default owner). This distinguishes it from siblings like model_predict (model-based) and deployment_health (health check).
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 usage context: it explains how to specify the deployment and that the owner defaults to the account owner. It also provides a specific alternative: 'check deployment_health rather than retrying blindly' in the case of a cold start. While it doesn't explicitly contrast with model_predict, the deployment-specific nature is implied. The guidance is useful but could be more explicit about when to choose this over other inference tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployments_listARead-only
List model deployments in your Ultralytics workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | Workspace owner; defaults to the account owner. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the main safety profile. The description adds only the workspace scope and does not disclose additional behavior such as pagination, limits, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It states the action and scope efficiently, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with one optional documented parameter and annotations carrying the safety profile, the description is mostly complete. It lacks explicit output details or pagination behavior, but nothing critical is missing for invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single optional owner parameter is well documented in the schema with its default behavior. The description adds no extra meaning to the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('model deployments'), and scopes it to 'your Ultralytics workspace.' This clearly distinguishes it from related sibling tools like deployment_get, deployment_health, and models_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?
No guidance is given about when to use this tool instead of alternatives such as deployment_get or deployment_logs. There is no mention of exclusions, prerequisites, or when a different tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_stopADestructive
Stop a deployment by owner/deployment or a bare slug (owner defaults to the account owner). Sends only {action: stop}; the endpoint's start/resize/replace actions are unreachable from this tool. Stopping preserves the deployment's URL and configuration and still counts toward deployment quota; it is a money-off switch and ships ungated, consistent with training_cancel and export_cancel. Stopping an already-stopped deployment is rejected by the server (400) rather than treated as a success. Reversing this (start) is not available in this tool set.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | Yes | Deployment ref by owner/deployment or a bare slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides substantial behavioral detail beyond the annotations: it sends only {action: stop}, the server rejects already-stopped deployments with a 400 rather than succeeding, stopping preserves URL/configuration, and it still counts toward deployment quota. It also notes that it ships ungated, which the destructiveHint=true annotation doesn't convey. 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?
While the description is longer than average, every sentence earns its place: scope, unreachable actions, side effects, server behavior, quota impact, and reversal unavailability. It front-loads the core action (stop) and the default-owner behavior before diving into caveats, making it dense with useful information rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description is fully complete. It covers invocation (owner/deployment or slug, default owner), behavioral effects (quota, config/URL preservation), edge cases (already-stopped 400), endpoint constraints (only stop action), and the tool set's lack of a start counterpart. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter 'deployment' is already fully described in the schema ('Deployment ref by owner/deployment or a bare slug'). The description repeats this without adding extra semantics like format examples or validation rules, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Stop') and resource ('a deployment'), and identifies the exact input forms (owner/deployment or bare slug). It also distinguishes itself by noting the endpoint's start/resize/replace actions are unreachable, which sets it apart from sibling tools like deployment_start or deployment_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use this tool (to stop a deployment, acting as a money-off switch) and what happens with it, including that starting is unavailable in this tool set. It also references sibling tools like training_cancel and export_cancel as consistent with the ungated behavior, giving clear context for an agent choosing among tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_datasetsCRead-only
Search public datasets on Ultralytics Explore.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search term. | |
| sort | No | Sort order for results. Server-validated; for example stars or newest. | |
| task | No | Dataset task filters. Server-validated; for example detect or segment. | |
| offset | No | Results to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so the main behavioral safety profile is covered. The description adds very little beyond that, only scoping to public datasets, and does not mention result format, pagination, or any other runtime behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler and the key information is front-loaded. It is somewhat under-specified, but it is not verbose or poorly structured.
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 search tool with no output schema, the description is too thin. It does not explain what kind of results are returned, how to choose filters, or how this search relates to sibling tools. The annotations and schema cover safety and parameter names, but not enough operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters q, sort, task, and offset are already documented. The description adds no extra parameter semantics, but the schema carries the burden sufficiently, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Search'), the resource ('public datasets'), and the platform ('Ultralytics Explore'). It is distinguishable from siblings like datasets_list, though it does not explicitly contrast itself with explore_projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of related tools like datasets_list or explore_projects. The only usage signal is implied by the word 'search'; no conditions, exclusions, or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_projectsBRead-only
Search public projects on Ultralytics Explore.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search term. | |
| sort | No | Sort order for results. Server-validated; for example stars or newest. | |
| offset | No | Results to skip. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe query nature is covered. The description adds the 'public projects' scope, which is useful, but does not disclose result format, pagination behavior, or any rate limits. This is acceptable given 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?
A single sentence delivers the core purpose with no filler. The verb and resource are front-loaded, making it immediately scannable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool, the description plus the fully documented schema and safety annotations cover the essentials needed to invoke it correctly. The lack of an output schema and explicit result-format details is a minor gap, but not critical for 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 description coverage is 100%, with all three parameters (q, sort, offset) documented in the schema. The description does not add any parameter-level detail beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Search') and resource ('public projects on Ultralytics Explore'), making the tool's function immediately understandable. It is distinct enough from sibling tools like explore_datasets, though it does not explicitly name that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as explore_datasets or projects_list. The description implies search functionality but provides no exclusions, prerequisites, or context for choosing this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_cancelADestructive
Cancel an active export job for a model by owner/project/model, ul://owner/project/model, or slug with a project, plus the export id. Checks the export's status first and sends the cancellation only while it is still active, refusing on any terminal status; the same API verb deletes a finished export's artifact irreversibly instead of cancelling it. The status check cannot be atomic: an export that finishes between the check and the request will have its artifact deleted rather than cancelled, and that deletion cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. | |
| export_id | Yes | Export job id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses that the same API verb deletes a finished export's artifact irreversibly, that the status check is non-atomic, and that a race can cause deletion instead of cancellation. This is exactly the kind of behavioral nuance an agent needs and would not know from 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?
Three sentences, each earning its place: purpose, operational behavior, and the race-condition warning. The most important scoping information is front-loaded, and the destructive caveat is placed prominently. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive action with a race condition, the description fully covers how to identify the target, when cancellation is attempted, what terminal states mean, and the irreversible risk. The absence of an output schema is acceptable because return-value expectations are not necessary for safe invocation here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates the model reference forms and the need for project with slug, but adds no materially new parameter meaning beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Cancel an active export job for a model,' immediately distinguishing it from export_create and export_status. It also clarifies the addressing modes and the export id, and further disambiguates the dual cancel-vs-delete behavior. This is a precise, non-tautological purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for cancelling an export that is still active, and it explicitly says the operation refuses on any terminal status. It does not explicitly name alternatives such as export_status as the way to check status beforehand, so it stops short of full when-to-use-versus-alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_createA
Create a model export job by owner/project/model, ul://owner/project/model, or slug with a project (state-changing, may cost credits). The format is validated immediately by the server; task and architecture compatibility is only known when the job runs, so a queued export can still fail. Use export_status and exports_list for the real outcome. Requires confirm_cost=true.
| Name | Required | Description | Default |
|---|---|---|---|
| half | No | Legacy FP16 export precision flag. | |
| imgsz | No | Image size for export. | |
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| format | Yes | Requested export format (validated by the server). | |
| dynamic | No | Dynamic input shapes. | |
| project | No | Project ref required when model is given by slug. | |
| gpu_type | No | GPU type required for TensorRT engine exports. | |
| confirm_cost | No | Must be true to allow a credit-costing export job. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that the operation is state-changing and may cost credits, that format is validated immediately but compatibility is deferred until run time, and that a queued export can still fail. This gives the agent a realistic model of asynchronous behavior without 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?
Three dense sentences front-load the core action and cost implications, then cover failure modes and follow-up tools. 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 an async, state-changing operation with no output schema, the description covers cost, validation timing, deferred failures, and follow-up status checks. It does not mention the shape of the immediate response or how to obtain a job identifier, which is a minor gap given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mostly restates schema content such as model ref formats, server-side format validation, and confirm_cost requirement, adding little new semantic value beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a model export job'. It clearly distinguishes this from the sibling tools export_status, exports_list, and export_cancel by framing it as the state-changing creation step, and it reinforces the distinction by pointing to status/list tools for the outcome.
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 tells the agent to use export_status and exports_list for the real outcome, which is direct guidance on how this tool fits versus alternatives. It also states the prerequisite confirm_cost=true, giving concrete when-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exports_listBRead-only
List export jobs for a model by owner/project/model, ul://owner/project/model, or slug with a project.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds scoping context about which model references are accepted, but it does not disclose return shape, pagination, or ordering. This is acceptable given the low-risk read-only nature, but no meaningful behavioral depth is added 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?
A single, front-loaded sentence captures the operation, resource, and supported identifier formats with no filler. Every clause contributes necessary 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, read-only list operation with two parameters and good schema coverage, the description is mostly adequate. However, there is no output schema and no mention of return contents or pagination, and the lack of guidance relative to export_status leaves a meaningful context gap for an agent deciding which tool to invoke.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both the schema and the description explain the same model reference formats and the project requirement for slugs. The description restates rather than extends the schema, so it meets the baseline without adding new semantic 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 uses a specific verb ('List') and resource ('export jobs for a model'), and names the valid reference forms (owner/project/model, ul:// URI, or slug with project). It is clear, but it does not explicitly distinguish this tool from the sibling export_status, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what can be listed and the required reference forms, but gives no guidance about when to use this instead of export_status, export_create, or export_cancel. There are no explicit alternatives or exclusions, so an agent must infer the boundary between listings and status checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_statusARead-only
Get one export job's status for a model by owner/project/model, ul://owner/project/model, or slug with a project, plus the export id.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. | |
| export_id | Yes | Export job id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description's 'Get' is consistent with a safe read operation. The description adds no extra behavioral context such as polling semantics, response states, or authentication requirements, but the annotations cover the main safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loads the core action, and includes the essential addressing options without filler. Every phrase contributes to understanding what the tool does and how to invoke it.
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 status lookup, the description plus fully documented schema is largely sufficient to call the tool correctly. It does not explain the return format or what status values to expect, but the core invocation requirements are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description largely restates what the schema already says about model refs and export_id. It adds no new meaning beyond the schema, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get'), a specific resource ('one export job's status'), and the supported model reference forms. It is clearly distinct from the sibling exports_list, though it does not explicitly name alternatives.
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 provides useful usage prerequisites: model can be given by owner/project/model, ul:// URI, or slug requiring a project, and export_id is needed. However, it does not say when to prefer this over exports_list, export_create, or export_cancel, so the selection context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gpu_availabilityARead-only
Get current cloud-GPU stock status by GPU type.
| 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, openWorldHint=true, and destructiveHint=false. The description adds no additional behavioral context beyond confirming the tool's purpose. 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?
A single, well-structured sentence conveys the full purpose without superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and annotations cover the safety profile, the description provides all necessary context for a simple read query.
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 no parameters, so the description does not need to add parameter semantics. Baseline score of 4 is appropriate as there is nothing to document.
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 'Get' and clearly identifies the resource 'cloud-GPU stock status' with a qualifier 'by GPU type'. It distinguishes this tool from its siblings, which focus on datasets, models, and projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. However, the narrow focus on GPU availability and the sibling tools being about datasets and models imply its appropriate use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_downloadA
Download a trained model's weight file to an explicit local path by owner/project/model, ul://owner/project/model, or slug with a project.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. | |
| filename | No | Select which of the model's remote weight files to download by name; does not set the local output filename (use output_path for that). Omit to prefer best.pt, then the first available file. | |
| overwrite | No | Overwrite an existing file at output_path. | |
| output_path | Yes | Local destination path for downloaded model weights. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the description carries some burden. The description adds useful behavioral context: it downloads a file to a local path, and the filename parameter description explains the selection behavior ('Omit to prefer best.pt, then the first available file'). However, it doesn't disclose what happens if the file already exists without overwrite=true, or whether the download is resumable. The overwrite parameter is documented in the schema, so the description doesn't need to repeat it. The description adds value beyond annotations by clarifying the file selection behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core action (download weight file to local path) and then lists the accepted reference formats. Every word earns its place. The filename parameter description is also concise and informative. No fluff 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 download tool with 5 parameters, 100% schema coverage, and no output schema, the description is fairly complete. It explains the reference formats, the filename selection behavior, and the local destination. The main gap is that it doesn't state what happens on overwrite=false when the file exists, but that's a minor edge case. The tool is a straightforward file download, and the description covers the essential decision points.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 5 parameters. The description adds value by clarifying the relationship between model, project, and filename: it explains that slug requires project, and that filename does not set the local output filename. This goes beyond the schema descriptions. However, the description doesn't add much beyond what the schema already provides for output_path and overwrite. Baseline 3 for high coverage, plus the added clarification about slug/project and filename behavior, justifies a 4.
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 ('Download'), a specific resource ('a trained model's weight file'), and the destination ('to an explicit local path'). It also enumerates the three accepted reference formats (owner/project/model, ul:// URI, or slug with a project), which distinguishes it from sibling tools like models_get or model_predict. This is a clear, specific statement of 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 implies when to use this tool: when you need to download a model's weight file to a local path. It does not explicitly name alternatives or state when not to use it, but the context of sibling tools (models_get, model_predict, model_plots) makes the use case fairly clear. The description could be improved by explicitly saying 'use models_get to inspect model metadata instead' or similar, but the core usage context is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_metricsARead-only
Report a model's best-epoch and final-epoch evaluation metrics, labelled so one cannot be mistaken for the other (works for private and public projects). bestEpochMetrics is pulled explicitly from trainResults by matching its epoch field against bestEpoch, retrievable regardless of any include_history window; finalEpochMetrics is the model's top-level metrics field, observed live to always equal the last recorded epoch, never the best one. On a model with incoherent or missing training data (for example bestEpoch pointing past the recorded epochs), bestEpoch, bestFitness, and bestEpochMetrics are all reported as null rather than echoing the platform's unreliable raw values, and bestEpochNote explains why. include_train_args adds the full trainArgs object (111 keys observed live), omitted by default. include_history adds a metricsHistory-style curve and always states the window it covers, including when the full curve is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. | |
| history_last_n | No | Limit the history curve to the most recent N epochs (default 20). Truncates a long run to its tail; the response always reports the epoch window it covers, so a flat tail is not mistaken for a converged run. | |
| include_history | No | Include the epoch metrics history curve; omitted by default. | |
| include_train_args | No | Include the full trainArgs object; off by default because the platform returns roughly a hundred keys. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is rich in behavioral details: it explains that bestEpochMetrics is pulled explicitly from trainResults by matching epoch against bestEpoch, independent of include_history window. It also specifies that on incoherent training data, the tool returns nulls instead of echoing unreliable platform values, and that include_train_args adds a large object (111 keys). Even with annotations indicating read-only and non-destructive, the description adds crucial context about data integrity and return semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than typical but packed with necessary information. It front-loads the core purpose of distinguishing best vs final epoch metrics, and then elaborates on edge cases and flags. Every sentence adds value, though the length could be slightly trimmed without losing critical context. The structure is logical: purpose, detailed behavior, edge cases, optional parameters.
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 tool's complexity (distinguishing best/final metrics, handling edge cases), the description covers all necessary context. It explains the meaning of null returns, the behavior of include_history and include_train_args, and notes the epoch window reporting. Since there is no output schema, the description compensates well by detailing return semantics. An agent can call this tool correctly without ambiguity.
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 already has detailed descriptions for each parameter (100% coverage). The description adds semantics like 'omitted by default' for include_history and include_train_args, and clarifies the meaning of history_last_n's window reporting. It also explains the impact of include_train_args on performance, which goes beyond the schema's 'roughly a hundred keys'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports a model's best-epoch and final-epoch evaluation metrics, with a specific verb and resource. It explicitly differentiates the two metric sets, which is critical for agent understanding, and mentions it works for private and public projects. It stands out from sibling tools like model_plots and training_monitor because of this precise focus on epoch-level metrics, including handling of edge cases.
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: when you need a model's evaluation metrics at best and final epochs, especially to avoid confusion between the two. It also explains conditions like include_train_args and include_history, but does not explicitly say 'use this instead of X' or 'when not to use'. The context is clear, but exclusions and alternatives to siblings could be more explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_plotsARead-only
Report a model's evaluation plots (per-class pr_curve, f1_curve, precision_curve, recall_curve, confusion_matrix), which model_metrics and training_monitor do not surface. By default lists each plot's type and the shape of its fields (array lengths only, never the values) since one pr_curve alone can carry thousands of numbers on a multi-class model; pass type to get that one plot's data back exactly as the platform returned it, unmodified. Field shapes vary by type: pr_curve/f1_curve/precision_curve/recall_curve carry x/y (and pr_curve additionally ap); confusion_matrix carries a matrix field instead, not x/y/ap. Plot presence does not track training history: a model can have plots with no trainResults, or (rarely) plots: [] on an otherwise completed model.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Return this one plot's full data unmodified (e.g. pr_curve, confusion_matrix). Omit to list what's available. | |
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already declare readOnlyHint=true and destructiveHint=false, the description adds valuable behavioral context beyond annotations: it warns about the potentially large size of pr_curve data, explains that field shapes vary by type (pr_curve has ap, confusion_matrix has matrix), and clarifies that plot presence does not correlate with training history. This is rich, non-obvious behavior that an agent needs to know.
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 detailed but every sentence earns its place. It front-loads the purpose and key distinctions, then adds essential operational details (size warning, field structures, presence caveats) without redundancy. It is well-structured and not overlong.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description is remarkably complete. It covers what the tool returns, how to filter, the variability of fields, and edge cases like empty plots. An agent has everything needed to call 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?
The schema already has 100% coverage with descriptions for all three parameters, so schema is doing the heavy lifting. However, the description adds meaningful semantics about the 'type' parameter (e.g., that it returns data unmodified, and that field shapes vary), which goes beyond simple parameter definitions, earning a 4.
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 it reports evaluation plots with specific plot types listed, and differentiates from model_metrics and training_monitor by noting they do not surface these plots. This is a specific verb-resource pair with clear sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with model_metrics and training_monitor, telling the agent when to use this tool instead. It also provides clear guidance on default behavior vs. passing 'type', which is a usage guideline in itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_predictBRead-only
Run inference with a trained model on an image URL or base64 source (no local file paths).
| Name | Required | Description | Default |
|---|---|---|---|
| iou | No | IoU threshold used for NMS (0-0.95, server default applies if omitted). | |
| conf | No | Confidence threshold (0.01-1, server default applies if omitted). | |
| imgsz | No | Inference image size (32-1280, server default applies if omitted). | |
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| source | Yes | Image URL, raw base64-encoded image, or base64 data: URI (data:<mime>;base64,<payload>). Local file paths are not supported. | |
| project | No | Project ref required when model is given by slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds context that inference is performed on URL/base64 sources and explicitly excludes local file paths, but it does not describe output behavior, errors, or other runtime expectations. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that states the action, resource, accepted source formats, and key exclusion with no filler. The most important information is front-loaded and everything included adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description handles the core purpose and source input well, and the schema covers parameter details. However, with no output schema, no mention of the return payload or errors, and no differentiation from deployment_predict, the definition is functional but not fully complete for an agent deciding how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, documenting model, source, project, conf, iou, and imgsz. The description only restates the source constraints and model context already present in the schema, adding no new parameter-level meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Run inference') and resource ('with a trained model'), plus the accepted image source forms (URL or base64). It is specific and immediately understandable, though it does not explicitly distinguish itself from the sibling deployment_predict tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus deployment_predict or other inference-related siblings. The only directional constraint is 'no local file paths', which is more about the source parameter than about tool selection, so an agent is left to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_deleteADestructive
Soft-delete a model by owner/project/model, ul://owner/project/model, or slug with a project. Deleted models go to trash and remain restorable; weights, training history, and exports are removed only on permanent deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the annotations: deletion is soft, models go to trash, remain restorable, and weights/training history/exports are only removed on permanent deletion. This meaningfully clarifies the destructiveHint=true annotation and alerts an agent to the reversible nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single focused sentence front-loads the operation and reference formats, then appends the consequential trash/restore behavior. There is no filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive operation with complete schema descriptions and no output schema requirement, the description covers how to identify the model, the required project context for slugs, and the post-deletion state. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the description largely restates the model parameter's ref formats and the project requirement. It reinforces the parameter semantics but does not add new details beyond the input schema, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair, 'Soft-delete a model', and spells out the three accepted reference forms. It clearly differentiates this delete operation from read-only siblings like models_get/models_list and makes the soft-delete semantics immediately apparent.
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 context for when the tool is applicable: deleting a model by standard refs, and notes the project requirement for slugs. It does not name an alternative or state explicit when-not-to-use conditions, but the reference formats and trash behavior provide enough guidance for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_getARead-only
Get details for one model by owner/project/model, ul://owner/project/model, or slug with a project.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description does not add behavioral context beyond that, such as error behavior or response contents, but it does not contradict the annotations either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with no filler, front-loading the action and object before listing accepted input forms. Every word earns its place, and the structure is easy to scan.
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 single-model read operation with complete schema coverage and safety annotations, the description provides all identifier options needed to invoke it correctly. No output schema is present, but 'details' is sufficiently clear for this tool's 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 100%, so the input schema already documents both parameters fully. The description repeats the same identifier formats rather than adding new semantic value, meriting the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('details for one model'), and enumerates the exact identifier forms accepted. It clearly distinguishes this from sibling tools like models_list and model_download by focusing on a single model's details.
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: use this when you need details for a single model and have one of the supported ref formats. It does not explicitly name alternatives or exclusions, but the intent is obvious from the 'one model' wording and the ref requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
models_listARead-only
List models in a project by slug, owner/slug, or project ul:// URI.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project ref by slug, owner/slug, or ul:// URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no additional behavioral context such as pagination, return format, or rate limits, so it provides minimal value beyond what annotations already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with the action front-loaded and no redundant wording. Every word contributes to specifying the tool's purpose and input format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and no output schema, the description is complete: it specifies the input format and the action clearly, and the annotations cover the safety profile. Nothing essential for calling the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description repeats the parameter description verbatim ('Project ref by slug, owner/slug, or ul:// URI'), adding no new meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'List', the resource 'models', and the scope 'in a project', plus three explicit ways to specify the project (slug, owner/slug, ul:// URI). This clearly differentiates it from sibling tools like models_get (single model) and models_delete (destructive).
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 clear context on how to specify the project, but does not explicitly mention when to use this tool over alternatives. The context is sufficient for an agent to infer the use case (listing models) without confusion, though it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_createA
Create a project in your Ultralytics workspace. Defaults to private visibility (the platform defaults to public when visibility is omitted).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name. | |
| owner | No | Workspace owner; defaults to the account owner. | |
| project | Yes | URL slug for the new project (distinct from the display name given by name). | |
| visibility | No | Visibility "private" (default) or "public". | |
| description | No | Project description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the mutation profile (readOnlyHint=false), and the description adds a genuinely useful behavioral nuance: the tool defaults to private visibility while the platform would otherwise default to public when the field is omitted. This goes beyond structured fields and helps the agent avoid an unwanted public project.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the primary action is front-loaded, and the parenthetical about platform defaults earns its place because it prevents a costly mistake. Nothing unnecessary is included.
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 5 parameters are documented in the schema and annotations cover safety semantics, making basic invocation complete. However, the description omits uniqueness constraints, error behavior, or what happens if the project slug already exists—minor but real gaps for a create operation with 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?
Input schema coverage is 100%, and every parameter has a description. The description adds context for visibility by explaining the default behavior, but this largely mirrors the schema's 'private (default)' note. With full schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a project in your Ultralytics workspace.' It is unmistakably a creation operation, clearly distinct from sibling tools like projects_list, projects_get, and projects_delete without needing to inspect 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 intended use is implied by the action 'Create a project,' but the description offers no explicit when-to-use guidance or alternatives. It does not tell the agent when to prefer this over related project tools or mention exclusions, so usage context is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_deleteADestructive
Soft-delete a project by slug, owner/slug, or project ul:// URI. Deleted projects land in trash and remain restorable for a bounded window.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project ref by slug, owner/slug, or ul:// URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the deletion is soft and reversible, adding nuance beyond the destructiveHint annotation. It specifies that projects go to trash and remain restorable for a bounded window, which is critical behavioral context an agent needs to know before invoking a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the action and identification method, then provides outcome. No filler or redundancy; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with annotations covering safety and no output schema, the description is fully adequate. It explains what, how, and the post-deletion state, leaving no essential detail 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?
The schema already provides a complete description of the 'project' parameter (covering slug, owner/slug, and ul:// URI) with 100% coverage. The description merely restates this information without adding new meaning or syntax details, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (soft-delete), the resource (project), and the accepted identifiers (slug, owner/slug, or ul:// URI). It also specifies the outcome (lands in trash, restorable for a bounded window), distinguishing it from read-only and other delete 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 clearly establishes the tool's purpose for deleting projects, and the resource type makes it obvious which sibling it pairs with (e.g., projects_get vs projects_create). It does not explicitly mention when not to use or name alternatives, but the context is clear enough to infer correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_getARead-only
Get details for one project by slug, owner/slug, or project ul:// URI.
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | Project ref by slug, owner/slug, or ul:// URI. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no further behavioral details such as response shape, error behavior, or authorization requirements, but for a simple read operation the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the core action, and no filler. Every word 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 one-parameter read-only tool, the description provides enough to invoke it correctly. The main gap is that 'details' is fairly vague and there is no output schema, though that is a minor concern for a simple getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the parameter description already lists slug, owner/slug, and ul:// URI formats. The tool description essentially restates the same information, adding no new semantic meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get details') and a specific resource ('one project'), and it names the three accepted reference formats. This clearly distinguishes it from sibling tools like projects_list, which would return multiple projects.
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 makes it clear this is for retrieving a single project by an identifier, which gives an agent clear context for when to call it. It does not explicitly name alternatives or exclusions, so it stops short of a 5, but the intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_listARead-only
List computer-vision projects in your Ultralytics workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | Workspace owner; defaults to the account owner. Takes precedence over username when both are given. | |
| username | No | Compatibility alias for owner. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the workspace scope but does not disclose pagination, return shape, or default-owner behavior beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no redundant wording. The action and object are stated immediately, and every word contributes to the meaning.
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 with fully documented optional parameters and no required arguments, the description is sufficient for correct invocation. It does not explicitly describe the return format, but the verb 'List' conveys the output adequately and annotations cover side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with owner and username fully described, including defaults and precedence. The description adds no parameter-level meaning beyond the general workspace context, so the schema carries the 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?
The description uses the specific verb 'List' with a clear resource ('computer-vision projects') and scope ('your Ultralytics workspace'). This distinguishes it from sibling tools like datasets_list and exports_list, even though no alternative is explicitly named.
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 no guidance on when to use this tool versus alternatives such as explore_projects, projects_get, or projects_create. The intended use is only implied by the verb 'List', with no explicit when/when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
training_cancelADestructive
Cancel a running training job by owner/project/model, ul://owner/project/model, or slug with a project. Cancelling releases the compute instance; elapsed GPU time is still charged and the most recently uploaded checkpoint is preserved rather than discarded. This stops the job and does not delete the model.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description gives rich behavioral detail beyond the annotations: cancelling releases the compute instance, elapsed GPU time is still charged, the most recent checkpoint is preserved, and the operation does not delete the model. This meaningfully supplements the destructiveHint and readOnlyHint annotations and helps the agent anticipate side effects and billing consequences.
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 first sentence identifies the action and target; the second covers consequences; the third clarifies what the operation does not do. Every sentence earns its place without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent operation, the description covers the essential context: how to reference the model, what side effects occur, cost implications, checkpoint preservation, and that the model is not deleted. Combined with complete schema coverage and relevant annotations, nothing critical is missing for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `model` and `project` are already documented in the input schema. The description restates the accepted reference forms but does not add new parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Cancel a running training job.' It also distinguishes the tool from siblings by scoping it to training jobs and explicitly stating that stopping is not deletion of the model. This makes the tool's purpose immediately clear and distinct from training_start, training_monitor, and models_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains how to identify the target job via owner/project/model, ul:// URI, or slug with project, and notes the project requirement for slug references. It does not explicitly name alternative tools or when-not-to-use conditions, but the context strongly implies this is the cancellation action for training jobs, so 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.
training_monitorARead-only
Report a model's training status and progress (works for private and public projects). timing.elapsedMs is wall-clock since model creation, evaluated at request time: it tracks elapsed run time while training is active, but for a finished model it reflects the model's age, not training duration. Billed training time is computeCost.durationMs.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model ref by owner/project/model, ul:// URI, or slug (requires project). | |
| project | No | Project ref required when model is given by slug. | |
| history_last_n | No | Limit the history curve to the most recent N epochs (default 20). Truncates a long run to its tail; the response always reports the epoch window it covers, so a flat tail is not mistaken for a converged run. | |
| include_history | No | Include the epoch metrics history curve; omitted by default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and non-destructive. The escription adds substantive semantics: timing.elapsedMs is wall-clock since creation, evaluated at request time, and means different things for active vs finished models; computeCost.durationMs is billed time. This clarifies a genuine gotcha and goes well 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?
Three sentences, front-loaded with the core purpose, followed by two high-value timing clarifications. No filler; the nuance is necessary and placed compactly.
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 status-reporting tool without an output schema, the description gives the key output semantics (elapsedMs vs computeCost.durationMs) and points at history behavior through schema docs. It doesn't enumerate status values or the full response shape, but the available schema and annotations cover most invocation needs. This is slightly better than minimal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters have rich descriptions in the input schema, so schema coverage is 100%. The tool description adds no parameter-level meaning beyond the schema; it explains response fields instead. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The escription states a specific action ('Report a model's training status and progress') and resource (a model), which clearly distinguishes it from training_start and training_cancel. It does not explicitly name or differentiate from sibling getters likemodels_get or model_metrics, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'works for private and public projects' gives context, and 'Report...status/progress' implies a monitoring use case. However, no explicit when-to-use or when-not-to-use guidance is given, and no alternatives are named, so an agent must infer when training_monitor is preferred over models_get or model_metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
training_startADestructive
Start a cloud training job from an existing model or official YOLO base checkpoint (state-changing, may cost credits). The dataset is validated immediately, so an unusable dataset is rejected before any compute starts. In checkpoint mode a project model is created first, then the checkpoint's task is checked against the dataset's task: with a list of datasets this is checked for every entry before that model is created, but with a single dataset the check happens server-side when training starts, by which point the model already exists — a mismatch there still leaves that model behind, unrequested, and the error names it so it can be reviewed and deleted (models_delete) if unwanted. Starting is billable immediately: the platform has no cost preview before that, so the projected cost and remaining balance are only reported after the job starts. Training an existing model that already has a recorded run (any status past pending/untrained) replaces that model's status, epoch count, and per-epoch metric history the instant the new job starts, and that history cannot be recovered afterward; the previously uploaded weights survive. That path requires confirm_history_loss=true in addition to confirm_cost=true. Checkpoint mode never destroys an existing model's history since it always creates a new one, so it never needs confirm_history_loss — its own risk is the possible leftover model described above. An untrained or never-trained model needs no extra confirmation either. Use training_cancel to stop a job that is already running. Requires confirm_cost=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Run name for callbacks. | |
| batch | No | Images per batch: -1 targets about 60% GPU memory, a value between 0 and 1 sets a memory fraction, and a positive integer fixes the image count. | |
| imgsz | No | Target input size: square batches normally, or the long-side size with rect=true. | |
| model | Yes | Existing model ref, or official YOLO base checkpoint such as yolo11n.pt or yolo11n-seg.pt. Checkpoint mode auto-creates a project model. | |
| epochs | No | Maximum full passes over the training set. | |
| dataset | Yes | Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI, or a list of refs to fine-tune on sequentially. | |
| project | Yes | Project ref that owns the training job and resolved model. | |
| gpu_type | Yes | Cloud GPU type to allocate for training. | |
| train_args | No | Additional YOLO training arguments passed through to the platform. epochs, imgsz, batch, and name here are silently overridden by the matching top-level input when both are set; data and model are rejected outright if present here. | |
| confirm_cost | No | Must be true to allow a credit-costing training run. Starting is billable immediately; the platform has no cost preview before that, so the estimated cost and remaining balance are only reported after the job starts. | |
| confirm_history_loss | No | Must be true to restart training on an existing model that already has a recorded run. Doing so replaces that model's status, epoch count, and per-epoch metric history irrecoverably; the previously uploaded weights survive. Not required for an untrained model or for checkpoint mode, which creates a new model instead. Separate from confirm_cost. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and readOnlyHint=false, but the description goes far beyond that: it details exactly what is destroyed (status, epoch count, per-epoch metric history) and that it is irrecoverable; it discloses billing starts immediately with no cost preview; it reveals a side effect in checkpoint mode (leftover model) and names the delete tool. This is far richer than 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 long, but every sentence adds unique and essential information given the tool's complexity (multiple modes, destructive effects, cost). It is front-loaded with the purpose and then systematically explains edge cases. While slightly verbose, it avoids redundancy and is appropriately sized for the risk profile.
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 high complexity (11 parameters, nested objects, multiple modes), the description covers all calling requirements: prerequisites, side effects, confirmation flags, and failure modes. It does not describe the return value or output, which is a minor gap since no output schema is provided, but the agent has sufficient information to invoke and interpret the operation. Sibling tools like training_monitor partially fill the output 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 coverage is 100%, but the description adds critical parameter interplay: it clarifies that confirm_cost must be true, confirm_history_loss is required only for existing trained models, explains how train_args top-level conflicts are handled (silently overridden or rejected), and defines the semantics of dataset lists vs single dataset. This is substantial value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (start) and resource (cloud training job) and clearly distinguishes from siblings: it explicitly references training_cancel for stopping and mentions model_download, training_monitor, etc. indirectly. It differentiates from other training-related tools by describing its unique role as starting a 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 states when to use the tool (to start training) and provides explicit conditions: it explains when confirm_history_loss is needed vs not, how checkpoint mode differs, and when cost confirmation is mandatory. It even names training_cancel as the alternative for stopping a running job, giving clear routing.
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.
27 tool updates
v0.1.13- Changed
auto_annotate_start1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI."
- Changed
auto_annotate_status1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI."
- Changed
auto_annotate_stop1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI."
- Changed
dataset_class_stats2 fields changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI." - added
Input schema / properties / include_histograms / descriptionAdded value: +"Include the histogram and heatmap groups omitted by default (image size, file size, format, points-per-annotation, bbox distributions, and location/dimension heatmaps). Off by default because the payload is large; the summary names the groups it omits."
- Changed
dataset_export2 fields changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI." - added
Input schema / properties / version / descriptionAdded value: +"Saved version number."
- Changed
dataset_images_list8 fields changed- added
Input schema / properties / classIds / descriptionAdded value: +"Class IDs to filter by. An empty array is treated as no filter (all images match), not as a filter that excludes everything." - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI." - added
Input schema / properties / hasLabel / descriptionAdded value: +"Filter by annotation state." - added
Input schema / properties / includeImageUrls / descriptionAdded value: +"Include signed full-size image URLs." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum images to return." - added
Input schema / properties / offset / descriptionAdded value: +"Images to skip." - added
Input schema / properties / search / descriptionAdded value: +"Image name or metadata search." - added
Input schema / properties / split / descriptionAdded value: +"Dataset split to filter by, for example train, val, or test."
- Changed
dataset_ingest4 fields changed- changed
Input schema / properties / conflictPolicy / descriptionPrevious value: -"Conflict policy \"skip\" (default), \"keep_both\", or \"replace\"."New value: +"Conflict policy, e.g. \"skip\" (default), \"keep_both\", or \"replace\". Server-validated." - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI." - added
Input schema / properties / sourceUrl / descriptionAdded value: +"Remote dataset archive or NDJSON URL." - added
Input schema / properties / targetSplit / descriptionAdded value: +"Target split for new images (overrides archive structure)."
- Changed
dataset_upload_file3 fields changed- changed
Input schema / properties / conflictPolicy / descriptionPrevious value: -"Conflict policy \"skip\" (default), \"keep_both\", or \"replace\"."New value: +"Conflict policy, e.g. \"skip\" (default), \"keep_both\", or \"replace\". Server-validated." - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI." - added
Input schema / properties / targetSplit / descriptionAdded value: +"Target split for new images (overrides archive structure)."
- Changed
dataset_upload_folder3 fields changed- changed
Input schema / properties / conflictPolicy / descriptionPrevious value: -"Conflict policy \"skip\" (default), \"keep_both\", or \"replace\"."New value: +"Conflict policy, e.g. \"skip\" (default), \"keep_both\", or \"replace\". Server-validated." - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI." - added
Input schema / properties / targetSplit / descriptionAdded value: +"Target split for new images. Rejected if the folder itself has train/val/test subdirectories; use one or the other, not both."
- Changed
dataset_upload_video5 fields changed- changed
Input schema / properties / conflictPolicy / descriptionPrevious value: -"Conflict policy \"skip\" (default), \"keep_both\", or \"replace\"."New value: +"Conflict policy, e.g. \"skip\" (default), \"keep_both\", or \"replace\". Server-validated." - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI." - added
Input schema / properties / fps / descriptionAdded value: +"Maximum frame extraction rate in frames per second; may be reduced to keep the total within max_frames." - added
Input schema / properties / max_frames / descriptionAdded value: +"Maximum number of frames to extract." - added
Input schema / properties / targetSplit / descriptionAdded value: +"Target split for new images (overrides archive structure)."
- Changed
dataset_version_create2 fields changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI." - added
Input schema / properties / description / descriptionAdded value: +"Optional note describing this snapshot."
- Changed
dataset_version_restore1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI."
- Changed
datasets_create4 fields changed- added
Input schema / properties / classNames / descriptionAdded value: +"Initial class names for the dataset." - added
Input schema / properties / description / descriptionAdded value: +"Dataset description." - added
Input schema / properties / name / descriptionAdded value: +"Display name." - changed
Input schema / properties / task / descriptionPrevious value: -"Dataset task such as detect, segment, semantic, pose, obb, or classify."New value: +"Dataset task. Server-validated; for example detect, segment, or classify."
- Changed
datasets_delete1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI."
- Changed
datasets_get1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI."
- Changed
datasets_list2 fields changed- added
Input schema / properties / owner / descriptionAdded value: +"Workspace owner; defaults to the account owner. Takes precedence over username when both are given." - added
Input schema / properties / username / descriptionAdded value: +"Compatibility alias for owner."
- Changed
deployment_metrics1 field changed- changed
Input schema / properties / range / descriptionPrevious value: -"Time range, passed through unvalidated (one of 1h, 6h, 24h, 7d, 30d; default 24h)."New value: +"Time range, passed through unvalidated (e.g. 1h, 24h, 7d; default 24h)."
- Changed
explore_datasets4 fields changed- added
Input schema / properties / offset / descriptionAdded value: +"Results to skip." - added
Input schema / properties / q / descriptionAdded value: +"Search term." - added
Input schema / properties / sort / descriptionAdded value: +"Sort order for results. Server-validated; for example stars or newest." - added
Input schema / properties / task / descriptionAdded value: +"Dataset task filters. Server-validated; for example detect or segment."
- Changed
explore_projects3 fields changed- added
Input schema / properties / offset / descriptionAdded value: +"Results to skip." - added
Input schema / properties / q / descriptionAdded value: +"Search term." - added
Input schema / properties / sort / descriptionAdded value: +"Sort order for results. Server-validated; for example stars or newest."
- Changed
export_create3 fields changed- added
Input schema / properties / dynamic / descriptionAdded value: +"Dynamic input shapes." - added
Input schema / properties / half / descriptionAdded value: +"Legacy FP16 export precision flag." - added
Input schema / properties / imgsz / descriptionAdded value: +"Image size for export."
- Changed
model_download3 fields changed- added
Input schema / properties / filename / descriptionAdded value: +"Select which of the model's remote weight files to download by name; does not set the local output filename (use output_path for that). Omit to prefer best.pt, then the first available file." - added
Input schema / properties / overwrite / descriptionAdded value: +"Overwrite an existing file at output_path." - added
Input schema / properties / project / descriptionAdded value: +"Project ref required when model is given by slug."
- Changed
model_metrics3 fields changed- added
Input schema / properties / history_last_n / descriptionAdded value: +"Limit the history curve to the most recent N epochs (default 20). Truncates a long run to its tail; the response always reports the epoch window it covers, so a flat tail is not mistaken for a converged run." - added
Input schema / properties / include_history / descriptionAdded value: +"Include the epoch metrics history curve; omitted by default." - added
Input schema / properties / include_train_args / descriptionAdded value: +"Include the full trainArgs object; off by default because the platform returns roughly a hundred keys."
- Changed
model_predict3 fields changed- added
Input schema / properties / conf / descriptionAdded value: +"Confidence threshold (0.01-1, server default applies if omitted)." - added
Input schema / properties / imgsz / descriptionAdded value: +"Inference image size (32-1280, server default applies if omitted)." - added
Input schema / properties / iou / descriptionAdded value: +"IoU threshold used for NMS (0-0.95, server default applies if omitted)."
- Changed
projects_create2 fields changed- added
Input schema / properties / description / descriptionAdded value: +"Project description." - added
Input schema / properties / name / descriptionAdded value: +"Display name."
- Changed
projects_list2 fields changed- added
Input schema / properties / owner / descriptionAdded value: +"Workspace owner; defaults to the account owner. Takes precedence over username when both are given." - added
Input schema / properties / username / descriptionAdded value: +"Compatibility alias for owner."
- Changed
training_monitor2 fields changed- added
Input schema / properties / history_last_n / descriptionAdded value: +"Limit the history curve to the most recent N epochs (default 20). Truncates a long run to its tail; the response always reports the epoch window it covers, so a flat tail is not mistaken for a converged run." - added
Input schema / properties / include_history / descriptionAdded value: +"Include the epoch metrics history curve; omitted by default."
- Changed
training_start6 fields changed- added
Input schema / properties / batch / descriptionAdded value: +"Images per batch: -1 targets about 60% GPU memory, a value between 0 and 1 sets a memory fraction, and a positive integer fixes the image count." - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by slug, owner/slug, or ul:// URI, or a list of refs to fine-tune on sequentially."New value: +"Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI, or a list of refs to fine-tune on sequentially." - added
Input schema / properties / epochs / descriptionAdded value: +"Maximum full passes over the training set." - added
Input schema / properties / imgsz / descriptionAdded value: +"Target input size: square batches normally, or the long-side size with rect=true." - added
Input schema / properties / name / descriptionAdded value: +"Run name for callbacks." - added
Input schema / properties / train_args / descriptionAdded value: +"Additional YOLO training arguments passed through to the platform. epochs, imgsz, batch, and name here are silently overridden by the matching top-level input when both are set; data and model are rejected outright if present here."
41 tool updates
v0.1.12- Added
auto_annotate_start - Added
auto_annotate_status - Added
auto_annotate_stop - Added
dataset_class_stats - Changed
dataset_export1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by id, slug, username/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or ul:// URI."
- Changed
dataset_images_list1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by id, slug, username/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or ul:// URI."
- Changed
dataset_ingest2 fields changed- added
Input schema / properties / conflictPolicyAdded value: +{ + "description": "Conflict policy \"skip\" (default), \"keep_both\", or \"replace\".", + "type": "string" +} - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by id, slug, username/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or ul:// URI."
- Changed
dataset_upload_file2 fields changed- added
Input schema / properties / conflictPolicyAdded value: +{ + "description": "Conflict policy \"skip\" (default), \"keep_both\", or \"replace\".", + "type": "string" +} - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by id, slug, username/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or ul:// URI."
- Changed
dataset_upload_folder2 fields changed- added
Input schema / properties / conflictPolicyAdded value: +{ + "description": "Conflict policy \"skip\" (default), \"keep_both\", or \"replace\".", + "type": "string" +} - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by id, slug, username/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or ul:// URI."
- Changed
dataset_upload_video2 fields changed- added
Input schema / properties / conflictPolicyAdded value: +{ + "description": "Conflict policy \"skip\" (default), \"keep_both\", or \"replace\".", + "type": "string" +} - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by id, slug, username/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or ul:// URI."
- Changed
dataset_version_create1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by id, slug, username/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or ul:// URI."
- Added
dataset_version_restore - Changed
datasets_create5 fields changed- added
Input schema / properties / datasetAdded value: +{ + "description": "URL slug for the new dataset (distinct from the display name given by name).", + "type": "string" +} - added
Input schema / properties / ownerAdded value: +{ + "description": "Workspace owner; defaults to the account owner.", + "type": "string" +} - removed
Input schema / properties / slugRemoved value: -{ - "type": "string" -} - added
Input schema / properties / visibility / descriptionAdded value: +"Visibility \"private\" (default) or \"public\"." - changed
Input schema / requiredPrevious value: -[ - "name", - "task", - "slug" -]New value: +[ + "name", + "dataset", + "task" +]
- Changed
datasets_delete1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by id, slug, username/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or ul:// URI."
- Changed
datasets_get1 field changed- changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref by id, slug, username/slug, or ul:// URI."New value: +"Dataset ref by slug, owner/slug, or ul:// URI."
- Changed
datasets_list1 field changed- added
Input schema / properties / ownerAdded value: +{ + "type": "string" +}
- Added
deployment_get - Added
deployment_health - Added
deployment_logs - Added
deployment_metrics - Added
deployment_predict - Added
deployment_stop - Added
deployments_list - Added
export_cancel - Changed
export_create4 fields changed- changed
Input schema / properties / format / descriptionPrevious value: -"Requested export format."New value: +"Requested export format (validated by the server)." - added
Input schema / properties / gpu_type / descriptionAdded value: +"GPU type required for TensorRT engine exports." - changed
Input schema / properties / model / descriptionPrevious value: -"Model id, or slug when project is also provided."New value: +"Model ref by owner/project/model, ul:// URI, or slug (requires project)." - added
Input schema / properties / project / descriptionAdded value: +"Project ref required when model is given by slug."
- Changed
export_status4 fields changed- changed
Input schema / properties / export_id / descriptionPrevious value: -"24-character export job id."New value: +"Export job id." - added
Input schema / properties / modelAdded value: +{ + "description": "Model ref by owner/project/model, ul:// URI, or slug (requires project).", + "type": "string" +} - added
Input schema / properties / projectAdded value: +{ + "description": "Project ref required when model is given by slug.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "export_id" -]New value: +[ + "model", + "export_id" +]
- Changed
exports_list2 fields changed- changed
Input schema / properties / model / descriptionPrevious value: -"Model id, or slug when project is also provided."New value: +"Model ref by owner/project/model, ul:// URI, or slug (requires project)." - added
Input schema / properties / project / descriptionAdded value: +"Project ref required when model is given by slug."
- Changed
model_download1 field changed- changed
Input schema / properties / model / descriptionPrevious value: -"Model id, or slug when project is also provided."New value: +"Model ref by owner/project/model, ul:// URI, or slug (requires project)."
- Added
model_metrics - Added
model_plots - Changed
model_predict3 fields changed- changed
Input schema / properties / model / descriptionPrevious value: -"Model id, or slug when project is also provided."New value: +"Model ref by owner/project/model, ul:// URI, or slug (requires project)." - added
Input schema / properties / project / descriptionAdded value: +"Project ref required when model is given by slug." - changed
Input schema / properties / source / descriptionPrevious value: -"Image URL or base64 input string. Local file paths are not supported."New value: +"Image URL, raw base64-encoded image, or base64 data: URI (data:<mime>;base64,<payload>). Local file paths are not supported."
- Changed
models_delete1 field changed- changed
Input schema / properties / model / descriptionPrevious value: -"Model id, or slug when project is also provided."New value: +"Model ref by owner/project/model, ul:// URI, or slug (requires project)."
- Changed
models_get1 field changed- changed
Input schema / properties / model / descriptionPrevious value: -"Model id, or slug when project is also provided."New value: +"Model ref by owner/project/model, ul:// URI, or slug (requires project)."
- Changed
models_list1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Project ref by id, slug, username/slug, or ul:// URI."New value: +"Project ref by slug, owner/slug, or ul:// URI."
- Changed
projects_create5 fields changed- added
Input schema / properties / ownerAdded value: +{ + "description": "Workspace owner; defaults to the account owner.", + "type": "string" +} - added
Input schema / properties / projectAdded value: +{ + "description": "URL slug for the new project (distinct from the display name given by name).", + "type": "string" +} - removed
Input schema / properties / slugRemoved value: -{ - "type": "string" -} - added
Input schema / properties / visibilityAdded value: +{ + "description": "Visibility \"private\" (default) or \"public\".", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "name" -]New value: +[ + "name", + "project" +]
- Changed
projects_delete1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Project ref by id, slug, username/slug, or ul:// URI."New value: +"Project ref by slug, owner/slug, or ul:// URI."
- Changed
projects_get1 field changed- changed
Input schema / properties / project / descriptionPrevious value: -"Project ref by id, slug, username/slug, or ul:// URI."New value: +"Project ref by slug, owner/slug, or ul:// URI."
- Changed
projects_list1 field changed- added
Input schema / properties / ownerAdded value: +{ + "type": "string" +}
- Added
training_cancel - Changed
training_monitor3 fields changed- removed
Input schema / properties / include_metricsRemoved value: -{ - "type": "boolean" -} - changed
Input schema / properties / model / descriptionPrevious value: -"Model id, or slug when project is also provided."New value: +"Model ref by owner/project/model, ul:// URI, or slug (requires project)." - added
Input schema / properties / project / descriptionAdded value: +"Project ref required when model is given by slug."
- Changed
training_start5 fields changed- changed
Input schema / properties / confirm_cost / descriptionPrevious value: -"Must be true to allow a credit-costing training run."New value: +"Must be true to allow a credit-costing training run. Starting is billable immediately; the platform has no cost preview before that, so the estimated cost and remaining balance are only reported after the job starts." - added
Input schema / properties / confirm_history_lossAdded value: +{ + "description": "Must be true to restart training on an existing model that already has a recorded run. Doing so replaces that model's status, epoch count, and per-epoch metric history irrecoverably; the previously uploaded weights survive. Not required for an untrained model or for checkpoint mode, which creates a new model instead. Separate from confirm_cost.", + "type": "boolean" +} - added
Input schema / properties / dataset / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } +] - changed
Input schema / properties / dataset / descriptionPrevious value: -"Dataset ref used as training data for the job."New value: +"Dataset ref by slug, owner/slug, or ul:// URI, or a list of refs to fine-tune on sequentially." - removed
Input schema / properties / dataset / typeRemoved value: -"string"
1 tool update
v0.1.7- Added
models_delete
23 tool updates
v0.1.6- Added
dataset_export - Added
dataset_images_list - Changed
dataset_ingest1 field changed- added
Input schema / properties / dataset / descriptionAdded value: +"Dataset ref by id, slug, username/slug, or ul:// URI."
- Changed
dataset_upload_file2 fields changed- added
Input schema / properties / dataset / descriptionAdded value: +"Dataset ref by id, slug, username/slug, or ul:// URI." - added
Input schema / properties / file_path / descriptionAdded value: +"Local path to dataset archive file."
- Added
dataset_upload_folder - Added
dataset_upload_video - Added
dataset_version_create - Changed
datasets_create1 field changed- added
Input schema / properties / task / descriptionAdded value: +"Dataset task such as detect, segment, semantic, pose, obb, or classify."
- Changed
datasets_delete1 field changed- added
Input schema / properties / dataset / descriptionAdded value: +"Dataset ref by id, slug, username/slug, or ul:// URI."
- Changed
datasets_get1 field changed- added
Input schema / properties / dataset / descriptionAdded value: +"Dataset ref by id, slug, username/slug, or ul:// URI."
- Added
explore_datasets - Added
explore_projects - Changed
export_create3 fields changed- added
Input schema / properties / confirm_cost / descriptionAdded value: +"Must be true to allow a credit-costing export job." - added
Input schema / properties / format / descriptionAdded value: +"Requested export format." - added
Input schema / properties / model / descriptionAdded value: +"Model id, or slug when project is also provided."
- Changed
export_status1 field changed- added
Input schema / properties / export_id / descriptionAdded value: +"24-character export job id."
- Changed
exports_list1 field changed- added
Input schema / properties / model / descriptionAdded value: +"Model id, or slug when project is also provided."
- Changed
model_download2 fields changed- added
Input schema / properties / model / descriptionAdded value: +"Model id, or slug when project is also provided." - added
Input schema / properties / output_path / descriptionAdded value: +"Local destination path for downloaded model weights."
- Changed
model_predict2 fields changed- added
Input schema / properties / model / descriptionAdded value: +"Model id, or slug when project is also provided." - added
Input schema / properties / source / descriptionAdded value: +"Image URL or base64 input string. Local file paths are not supported."
- Changed
models_get2 fields changed- added
Input schema / properties / model / descriptionAdded value: +"Model id, or slug when project is also provided." - added
Input schema / properties / project / descriptionAdded value: +"Project ref required when model is given by slug."
- Changed
models_list1 field changed- added
Input schema / properties / project / descriptionAdded value: +"Project ref by id, slug, username/slug, or ul:// URI."
- Changed
projects_delete1 field changed- added
Input schema / properties / project / descriptionAdded value: +"Project ref by id, slug, username/slug, or ul:// URI."
- Changed
projects_get1 field changed- added
Input schema / properties / project / descriptionAdded value: +"Project ref by id, slug, username/slug, or ul:// URI."
- Changed
training_monitor4 fields changed- added
Input schema / properties / history_last_nAdded value: +{ + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" +} - added
Input schema / properties / include_historyAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / include_metricsAdded value: +{ + "type": "boolean" +} - added
Input schema / properties / model / descriptionAdded value: +"Model id, or slug when project is also provided."
- Changed
training_start6 fields changed- added
Input schema / properties / confirm_cost / descriptionAdded value: +"Must be true to allow a credit-costing training run." - added
Input schema / properties / dataset / descriptionAdded value: +"Dataset ref used as training data for the job." - added
Input schema / properties / gpu_type / descriptionAdded value: +"Cloud GPU type to allocate for training." - added
Input schema / properties / model / descriptionAdded value: +"Existing model ref, or official YOLO base checkpoint such as yolo11n.pt or yolo11n-seg.pt. Checkpoint mode auto-creates a project model." - added
Input schema / properties / project / descriptionAdded value: +"Project ref that owns the training job and resolved model." - added
Input schema / properties / train_argsAdded value: +{ + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" +}
2 tool updates
v0.1.2- Added
dataset_ingest - Added
dataset_upload_file
3 tool updates
v0.1.1- Added
datasets_create - Added
datasets_delete - Added
projects_delete
15 tool updates
v0.1.0- First observed
datasets_get - First observed
datasets_list - First observed
export_create - First observed
export_status - First observed
exports_list - First observed
gpu_availability - First observed
model_download - First observed
model_predict - First observed
models_get - First observed
models_list - First observed
projects_create - First observed
projects_get - First observed
projects_list - First observed
training_monitor - First observed
training_start
TDQS
Scored across 44 tools
Every tool targets a distinct resource/action pair, and even close pairs like model_predict vs deployment_predict or training_monitor vs model_metrics are clearly separated by purpose. No two tools plausibly do the same thing.
Most names follow a resource_verb shape (datasets_list, projects_create, deployment_stop), but the set mixes in verb_resource names (exports_list, export_create, explore_projects) and noun-phrase exceptions (gpu_availability, auto_annotate_status). The result is readable but not a single predictable convention.
44 tools is well above the 25+ threshold and creates a heavy selection surface for an agent. The breadth of domains partially justifies the count, but many near-duplicate upload variants and per-resource CRUD tools inflate the surface.
Projects, datasets, models, training, and exports have solid lifecycle coverage, and auto-annotation is unusually complete. However, deployment support has a notable dead end: deployment_stop exists but there is no deployment_create or start to reverse it, and update/restore operations for projects and datasets are missing.
Maintenance
Related MCP Connectors
Run AI models, create deployments, and manage predictions via cloud API
- MorphedOAuthapp.morphed
Create AI images and videos, manage projects and credits, and use workspace campaign context.
Discover, run, inspect, build, test, and privately reuse AI workflows.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI systems like Claude and Cursor to directly manage Railway projects, deployments, services, environment variables, and monitor logs through natural language commands.92 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with the Unstructured API to manage data workflows, including creating and managing source connectors (S3, Azure, Google Drive, etc.), destination connectors (Weaviate, Pinecone, MongoDB, etc.), and workflows for document processing and data pipelines.-
- FlicenseNot gradedqualityDmaintenanceEnables programmatic management of a Dify instance, including datasets, apps, and tools.-

Coreshub MCP Serverofficial
AlicenseNot gradedqualityDmaintenanceEnables interaction with the CoreHub cloud platform to manage containers, EPFS filesystems, distributed training, and inference services through MCP tools.10MIT