# Ultralytics Platform MCP (npm · ultralytics-mcp)

MCP server for Ultralytics Platform projects, datasets, training, prediction, exports, and models.

- Trust score: 87/100 (high trust)
- Change this week: +6
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-16

## Components

- npm · `ultralytics-mcp`: 87/100 (this document), [markdown](https://verifymcp.io/servers/amanharshx-ultralytics-mcp/ultralytics-mcp.md), [page](https://verifymcp.io/servers/amanharshx-ultralytics-mcp/ultralytics-mcp)

## Channel facts

- Registry: `npm`
- Package: `ultralytics-mcp`
- Version: `0.1.14`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-16.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 31 of 94 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to amanharshx/ultralytics-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 7 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 73/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 7002 tokens (~159/item across 44 items; 44 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 47/100
  - Stability observed for 14 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 44 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Ultralytics Platform MCP server?

Ultralytics Platform MCP runs locally as an npm package, launched with npx -y ultralytics-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add amanharshx-ultralytics-mcp -- npx -y ultralytics-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "amanharshx-ultralytics-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "ultralytics-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "amanharshx-ultralytics-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "ultralytics-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add amanharshx-ultralytics-mcp -- npx -y ultralytics-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "amanharshx-ultralytics-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "ultralytics-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add amanharshx-ultralytics-mcp --command npx --arg -y --arg ultralytics-mcp
```

### Hermes

```yaml
mcp_servers:
  amanharshx-ultralytics-mcp:
    command: "npx"
    args: ["-y", "ultralytics-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "amanharshx-ultralytics-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "ultralytics-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add amanharshx-ultralytics-mcp -t stdio -c npx -a -y ultralytics-mcp
```

### Other

```json
{
  "mcpServers": {
    "amanharshx-ultralytics-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "ultralytics-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-15 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-13 (score 86, +5)

- [functional improvement] Stability: unverified → 0.37

### 2026-10-03 (score 81, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-02 (score 66)

First indexed and scored.

## MCP tools (44)

### `projects_list` (~86 tokens)

List computer-vision projects in your Ultralytics workspace.

Input parameters:

- `limit` (number): Maximum projects to return. Omit for the server default (currently 20); the API currently accepts up to 500.
- `owner` (string): Workspace owner; defaults to the account owner. Takes precedence over username when both are given.
- `username` (string): Compatibility alias for owner.

### `projects_get` (~46 tokens)

Get details for one project by slug, owner/slug, or project ul:// URI.

Input parameters:

- `project` (string, required): Project ref by slug, owner/slug, or ul:// URI.

### `explore_projects` (~57 tokens)

Search public projects on Ultralytics Explore.

Input parameters:

- `offset` (integer): Results to skip.
- `q` (string, required): Search term.
- `sort` (string): Sort order for results. Server-validated; for example stars or newest.

### `datasets_list` (~52 tokens)

List datasets in your Ultralytics workspace.

Input parameters:

- `owner` (string): Workspace owner; defaults to the account owner. Takes precedence over username when both are given.
- `username` (string): Compatibility alias for owner.

### `datasets_get` (~57 tokens)

Get details for one dataset by slug, owner/slug, or a ul://owner/datasets/slug URI.

Input parameters:

- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.

### `explore_datasets` (~78 tokens)

Search public datasets on Ultralytics Explore.

Input parameters:

- `offset` (integer): Results to skip.
- `q` (string, required): Search term.
- `sort` (string): Sort order for results. Server-validated; for example stars or newest.
- `task` (array): Dataset task filters. Server-validated; for example detect or segment.

### `dataset_images_list` (~176 tokens)

List images in a dataset by slug, owner/slug, or a ul://owner/datasets/slug URI with optional filtering.

Input parameters:

- `classIds` (array): Class IDs to filter by. An empty array is treated as no filter (all images match), not as a filter that excludes everything.
- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `hasLabel` (boolean): Filter by annotation state.
- `includeImageUrls` (boolean): Include signed full-size image URLs.
- `limit` (number): Maximum images to return.
- `offset` (number): Images to skip.
- `search` (string): Image name or metadata search.
- `split` (string): Dataset split to filter by, for example train, val, or test.

### `dataset_export` (~82 tokens)

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.

Input parameters:

- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `version` (number): Saved version number.

### `dataset_class_stats` (~176 tokens)

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.

Input parameters:

- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `include_histograms` (boolean): 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 pay…

### `auto_annotate_status` (~116 tokens)

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.

Input parameters:

- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.

### `models_list` (~97 tokens)

List models in a project by slug, owner/slug, or project ul:// URI. Model quality is not included; use model_metrics, which validates the platform's best-epoch fields.

Input parameters:

- `limit` (number): Maximum models to return. Omit for the server default (currently 20); the API currently accepts up to 100.
- `project` (string, required): Project ref by slug, owner/slug, or ul:// URI.

### `models_get` (~95 tokens)

Get details for one model by owner/project/model, ul://owner/project/model, or slug with a project. Model quality (best epoch and fitness) is not included; use model_metrics, which validates the platform's best-epoch fields.

Input parameters:

- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.

### `gpu_availability` (~20 tokens)

Get current cloud-GPU stock status by GPU type.

### `deployments_list` (~33 tokens)

List model deployments in your Ultralytics workspace.

Input parameters:

- `owner` (string): Workspace owner; defaults to the account owner.

### `deployment_get` (~60 tokens)

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.

Input parameters:

- `deployment` (string, required): Deployment ref by owner/deployment or a bare slug.

### `deployment_health` (~72 tokens)

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.

Input parameters:

- `deployment` (string, required): Deployment ref by owner/deployment or a bare slug.

### `deployment_logs` (~181 tokens)

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.

Input parameters:

- `deployment` (string, required): Deployment ref by owner/deployment or a bare slug.
- `limit` (integer): Max entries to return (default 50, max 200).
- `pageToken` (string): Pagination token from a previous call's nextPageToken.
- `severity` (string): Comma-separated log severity levels, passed through unvalidated (e.g. INFO or WARNING,ERROR). Exact match, not a minimum threshold.

### `deployment_metrics` (~222 tokens)

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.

Input parameters:

- `deployment` (string, required): Deployment ref by owner/deployment or a bare slug.
- `range` (string): Time range, passed through unvalidated (e.g. 1h, 24h, 7d; default 24h).
- `sparkline` (boolean): When true, selects the compact sparkline shape (requests24h, totalRequests, errorRate, avgLatencyMs) instead of the detailed shape.

### `deployment_predict` (~211 tokens)

Run inference through a deployment's own serving endpoint on a local image or video 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.

Input parameters:

- `conf` (number): Confidence threshold (0.01-1, server default applies if omitted).
- `deployment` (string, required): Deployment ref by owner/deployment or a bare slug.
- `imagePath` (string, required): Local path to an image or video file, uploaded as-is. The server decides which formats it accepts.
- `imgsz` (number): Inference image size (32-1280, server default applies if omitted).
- `iou` (number): IoU threshold (0-0.95, server default applies if omitted).

### `training_monitor` (~358 tokens)

Report a model's training status and progress (works for private and public projects). reportedCurrentEpoch, reportedProgressPercentage, and etaMs are the training job's own counters, passed through verbatim; after a run ends reportedCurrentEpoch can count a post-training evaluation as an epoch, so it may be one higher than the epochs actually trained, with reportedProgressPercentage inflated to match, and etaMs can stay nonzero. With no training job, progress is reported unavailable rather than inferred. resultRecordCount counts trainResults records, which are not epochs: a history can include a post-training evaluation record, duplicate or missing epoch numbers, and records out of epoch order. lastReportedMetrics is the last record in API order with its reported epoch, not necessarily the latest epoch. Model quality (best epoch, the model's reported metrics) belongs to model_metrics. 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.

Input parameters:

- `history_last_n` (integer): Limit the history to the last N records in API order (default 20). Truncates a long run to its tail; the response always reports the window it covers (record counts and the min/max reported epoch), s…
- `include_history` (boolean): Include the trainResults history (per-record epoch and metrics); omitted by default.
- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.

### `model_metrics` (~381 tokens)

Report a model's best training epoch and its reported metrics, labelled so neither can be mistaken for the other (works for private and public projects). bestEpoch, bestFitness, and bestEpochMetrics are stated only when exactly one trainResults record has the reported bestEpoch and that record's fitness exactly equals the reported bestFitness; otherwise all three are null and bestEpochNote keeps the platform's raw values and says why (older Ultralytics versions reported the last epoch as bestEpoch). reportedMetrics is the model's top-level metrics field verbatim; the API does not say which evaluation produced it (on finished Platform-trained runs observed live it matches the post-training evaluation of the best checkpoint, not the last training epoch), so it makes no epoch claim. resultRecordCount counts trainResults records, not epochs. include_train_args adds the full trainArgs object (111 keys observed live), omitted by default. include_history adds the last N records in API order and always states the window it covers, with record counts, the min/max reported epoch, and duplicate and missing epoch numbers in that range.

Input parameters:

- `history_last_n` (integer): Limit the history to the last N records in API order (default 20). Truncates a long run to its tail; the response always reports the window it covers (record counts and the min/max reported epoch), s…
- `include_history` (boolean): Include the trainResults history (per-record epoch and metrics); omitted by default.
- `include_train_args` (boolean): Include the full trainArgs object; off by default because the platform returns roughly a hundred keys.
- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.

### `model_plots` (~246 tokens)

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.

Input parameters:

- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.
- `type` (string): Return this one plot's full data unmodified (e.g. pr_curve, confusion_matrix). Omit to list what's available.

### `model_predict` (~264 tokens)

Run inference with a trained model on an image URL or base64 image (`source`), or on a local image or video file (`file_path`). Give exactly one.

Input parameters:

- `conf` (number): Confidence threshold (0.01-1, server default applies if omitted).
- `file_path` (string): Local path to an image or video file, uploaded as-is. The server decides which formats and sizes it accepts.
- `imgsz` (number): Inference image size (32-1280, server default applies if omitted).
- `iou` (number): IoU threshold used for NMS (0-0.95, server default applies if omitted).
- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.
- `source` (string): Image URL, base64-encoded image (standard or URL-safe; optional padding; ASCII whitespace ignored), or base64 data: URI (data:<mime>;base64,<payload>). Base64 is uploaded as an image file, bypassing…

### `exports_list` (~70 tokens)

List export jobs for a model by owner/project/model, ul://owner/project/model, or slug with a project.

Input parameters:

- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.

### `export_status` (~89 tokens)

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.

Input parameters:

- `export_id` (string, required): Export job id.
- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.

### `model_download` (~153 tokens)

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.

Input parameters:

- `filename` (string): 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.
- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `output_path` (string, required): Local destination path for downloaded model weights.
- `overwrite` (boolean): Overwrite an existing file at output_path.
- `project` (string): Project ref required when model is given by slug.

### `projects_create` (~105 tokens)

Create a project in your Ultralytics workspace. Defaults to private visibility (the platform defaults to public when visibility is omitted).

Input parameters:

- `description` (string): Project description.
- `name` (string, required): Display name.
- `owner` (string): Workspace owner; defaults to the account owner.
- `project` (string, required): URL slug for the new project (distinct from the display name given by name).
- `visibility` (string): Visibility "private" (default) or "public".

### `projects_delete` (~59 tokens)

Soft-delete a project by slug, owner/slug, or project ul:// URI. Deleted projects land in trash and remain restorable for a bounded window.

Input parameters:

- `project` (string, required): Project ref by slug, owner/slug, or ul:// URI.

### `datasets_create` (~141 tokens)

Create a dataset in your Ultralytics workspace. Defaults to private visibility (the platform defaults to public when visibility is omitted).

Input parameters:

- `classNames` (array): Initial class names for the dataset.
- `dataset` (string, required): URL slug for the new dataset (distinct from the display name given by name).
- `description` (string): Dataset description.
- `name` (string, required): Display name.
- `owner` (string): Workspace owner; defaults to the account owner.
- `task` (string, required): Dataset task. Server-validated; for example detect, segment, or classify.
- `visibility` (string): Visibility "private" (default) or "public".

### `auto_annotate_start` (~519 tokens)

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.

Input parameters:

- `class_mapping` (array): 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.
- `confidence` (number): Confidence threshold for generated labels. Omit to use the server default (currently 0.25).
- `confirm_cost` (boolean): Must be true to allow a credit-costing auto-annotation run.
- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `include_annotated` (boolean): Re-label images that already carry annotations. Omit to use the server default (currently false).
- `iou` (number): IoU threshold for generated labels. Omit to use the server default (currently 0.7).
- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.

### `auto_annotate_stop` (~180 tokens)

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.

Input parameters:

- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.

### `dataset_version_create` (~91 tokens)

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.

Input parameters:

- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `description` (string): Optional note describing this snapshot.

### `dataset_version_restore` (~242 tokens)

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.

Input parameters:

- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `version` (integer, required): Version number to restore, as listed in datasets_get's versions array.

### `datasets_delete` (~88 tokens)

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.

Input parameters:

- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.

### `dataset_ingest` (~159 tokens)

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.

Input parameters:

- `conflictPolicy` (string): Conflict policy, e.g. "skip" (default), "keep_both", or "replace". Server-validated.
- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `sourceUrl` (string, required): Remote dataset archive or NDJSON URL.
- `targetSplit` (string): Target split for new images (overrides archive structure).

### `dataset_upload_file` (~162 tokens)

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.

Input parameters:

- `conflictPolicy` (string): Conflict policy, e.g. "skip" (default), "keep_both", or "replace". Server-validated.
- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `file_path` (string, required): Local path to dataset archive file.
- `targetSplit` (string): Target split for new images (overrides archive structure).

### `dataset_upload_folder` (~182 tokens)

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.

Input parameters:

- `conflictPolicy` (string): Conflict policy, e.g. "skip" (default), "keep_both", or "replace". Server-validated.
- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `folder_path` (string, required): Local path to image folder.
- `targetSplit` (string): Target split for new images. Rejected if the folder itself has train/val/test subdirectories; use one or the other, not both.

### `dataset_upload_video` (~204 tokens)

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.

Input parameters:

- `conflictPolicy` (string): Conflict policy, e.g. "skip" (default), "keep_both", or "replace". Server-validated.
- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `fps` (number): Maximum frame extraction rate in frames per second; may be reduced to keep the total within max_frames.
- `max_frames` (integer): Maximum number of frames to extract.
- `targetSplit` (string): Target split for new images (overrides archive structure).
- `video_path` (string, required): Local path to source video file.

### `models_delete` (~92 tokens)

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.

Input parameters:

- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.

### `deployment_stop` (~138 tokens)

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.

Input parameters:

- `deployment` (string, required): Deployment ref by owner/deployment or a bare slug.

### `export_create` (~240 tokens)

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.

Input parameters:

- `confirm_cost` (boolean): Must be true to allow a credit-costing export job.
- `dynamic` (boolean): Dynamic input shapes.
- `format` (string, required): Requested export format (validated by the server).
- `gpu_type` (string): GPU type required for TensorRT engine exports.
- `imgsz` (number): Image size for export.
- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.
- `quantize` (number|string): Export precision. Server-validated; for example 16 or "fp16" for FP16, 8 or "int8" for INT8. Omit to let the exporter choose.

### `export_cancel` (~162 tokens)

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.

Input parameters:

- `export_id` (string, required): Export job id.
- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.

### `training_start` (~655 tokens)

Start a cloud training job from an existing model or official YOLO base checkpoint (state-changing, may cost credits). Trains on exactly one dataset and requires epochs. 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 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 training result 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.

Input parameters:

- `batch` (number): 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.
- `confirm_cost` (boolean): 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 afte…
- `confirm_history_loss` (boolean): 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 training result history irrecoverably; the previously up…
- `dataset` (string, required): Dataset ref by slug, owner/slug, or a ul://owner/datasets/slug URI.
- `epochs` (integer, required): Maximum full passes over the training set.
- `gpu_type` (string, required): Cloud GPU type to allocate for training.
- `imgsz` (number): Target input size: square batches normally, or the long-side size with rect=true.
- `model` (string, required): Existing model ref, or official YOLO base checkpoint such as yolo11n.pt or yolo11n-seg.pt. Checkpoint mode auto-creates a project model.
- `name` (string): Run name for callbacks.
- `project` (string, required): Project ref that owns the training job and resolved model.
- `train_args` (object): 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 re…

### `training_cancel` (~105 tokens)

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.

Input parameters:

- `model` (string, required): Model ref by owner/project/model, ul:// URI, or slug (requires project).
- `project` (string): Project ref required when model is given by slug.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/amanharshx-ultralytics-mcp/ultralytics-mcp#diagnostics

## Score history

- 2026-10-16: 87
- 2026-10-15: 87
- 2026-10-14: 86
- 2026-10-13: 86
- 2026-10-12: 81
- 2026-10-04: 81
- 2026-10-03: 81
- 2026-10-02: 66

## Common questions

### What is the Ultralytics Platform MCP server?

Ultralytics Platform MCP is listed in the public MCP registry as io.github.amanharshx/ultralytics-mcp. MCP server for Ultralytics Platform projects, datasets, training, prediction, exports, and models. This page covers its npm package (ultralytics-mcp).

### Is the Ultralytics Platform MCP server safe to use?

Ultralytics Platform MCP scores 87 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 16 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Ultralytics Platform MCP server expose?

Ultralytics Platform MCP exposes 44 tools: projects_list, projects_get, explore_projects, datasets_list, datasets_get, and 39 more. Their descriptions and schemas cost roughly 7,002 tokens of context every time the server is loaded.

### Is the Ultralytics Platform MCP server still maintained?

Ultralytics Platform MCP is still listed as active in the MCP registry. We last reached this channel on 16 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Ultralytics Platform MCP server under?

Ultralytics Platform MCP declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/ultralytics-mcp
- Socket report: https://socket.dev/npm/package/ultralytics-mcp
- Repository: https://github.com/amanharshx/ultralytics-mcp
- Changelog RSS feed: https://verifymcp.io/servers/amanharshx-ultralytics-mcp/ultralytics-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/amanharshx-ultralytics-mcp/ultralytics-mcp.json
- HTML version of this page: https://verifymcp.io/servers/amanharshx-ultralytics-mcp/ultralytics-mcp
