GenAI Custom Models
Generated on 29 Jun 2026
This content is automatically generated from https://github.com/digitalocean-labs/mcp-digitalocean/blob/main/pkg/registry/genai-custom-models/README.md.
This package provides MCP tools for managing custom (bring-your-own) models on DigitalOcean’s GenAI platform.
Overview
The custom models tools enable users to:
- List custom models with status filtering and pagination
- Import models from HuggingFace or other sources
- Update model metadata (name, description, tags, and — for Spaces-imported models — input/output modalities, parameter count, license)
- Delete custom models
Tools
genai-custom-models-list
List custom models with optional status filter and pagination.
Arguments:
status(string, optional): Filter by status (STATUS_IMPORTING,STATUS_READY,STATUS_FAILED,STATUS_DELETED)page(number, optional): Page number (default: 1)per_page(number, optional): Results per page (default: 20)
Returns: JSON object with array of models and count
{
"models": [
{
"uuid": "...",
"name": "my-mistral-7b",
"status": "STATUS_READY",
"architecture": "MistralForCausalLM",
"source_type": "SOURCE_TYPE_HUGGINGFACE"
}
],
"count": 1,
"max_threshold": 10
}genai-custom-models-import
Import a custom model from an external source (e.g. HuggingFace). Starts an async import job.
Consent (required every import): Present import terms and obtain explicit consent (yes) before calling. Set accept_terms_and_conditions to true only after the user agrees. Consent is validated before Hugging Face commit_sha resolution or the DigitalOcean API. This applies to every import, including re-imports of the same model. The tool rejects omitted or false values.
Arguments:
name(string, optional): Display name (leading/trailing spaces are trimmed when provided)source_type(string, required):SOURCE_TYPE_HUGGINGFACE,SOURCE_TYPE_SPACES_BUCKET,SOURCE_TYPE_SDK_UPLOAD,SOURCE_TYPE_FINE_TUNINGsource_ref(object, required): Source reference withrepo_id,commit_sha(optional for HuggingFace; if omitted, fetched from Hugging Face Hub before the import API is called),access_type,hf_token(for private/gated)accept_terms_and_conditions(boolean, required): Must betrueafter explicit user consent in chatdescription(string, optional): Model descriptionpreferred_gpu_region(string, optional): Preferred GPU region (e.g.nyc3)tags(object, optional): Tags object with atagsarray of strings
Returns: JSON object with model, import job status, and validation steps
{
"model": { "uuid": "...", "name": "my-model", "status": "STATUS_IMPORTING" },
"import_job": { "uuid": "...", "status": "...", "files_total": 12, "files_done": 0 },
"validation_steps": [{ "name": "config_json", "passed": true }],
"error": ""
}genai-custom-models-update-metadata
Update the metadata of an existing custom model.
Arguments:
uuid(string, required): UUID of the custom modelname(string, optional): New namedescription(string, optional): New descriptiontags(object, optional): New tags object with atagsarrayinput_modalities(array of strings, optional): Input modalities the model accepts (e.g.["text", "image"]). Spaces-imported models only.output_modalities(array of strings, optional): Output modalities the model produces (e.g.["text"]). Spaces-imported models only.parameters(string, optional): Parameter count as a numeric string (e.g."7000000000"for 7B). Spaces-imported models only.license(string, optional): License identifier (e.g."apache-2.0"). Spaces-imported models only.
At least one updatable field must be provided.
Spaces-only capability fields. input_modalities, output_modalities, parameters, and license are auto-populated for HuggingFace imports and cannot be edited on those models — the backend rejects such requests with InvalidArgument. They are editable only for models with source_type = SOURCE_TYPE_SPACES_BUCKET, where the import path leaves them empty.
Modality semantics. When input_modalities or output_modalities is provided, the value replaces the existing list wholesale. Passing an empty array ([]) is rejected — a model must have at least one input and one output modality. To leave a modality list unchanged, simply omit the field.
Canonical modality vocabulary. The HuggingFace importer and existing catalog entries use this lowercase, singular set: text, image, audio, video. Prefer these tokens so Spaces-imported models stay aligned with HF-imported ones downstream.
Returns: JSON object with the updated model
genai-custom-models-delete
Delete a custom model by exact UUID or exact name.
Exact identifier: Provide uuid OR name (at least one). Only a full UUID or an exact model name deletes. Partial uuid or partial name returns candidates only — never deletes, even with a single match. Do not substitute values from a partial-match list.
Consent (required for every delete): Before calling with confirm_deletion: true, tell the user which model will be deleted (name and uuid), that deletion is permanent, and obtain explicit consent (yes).
Arguments:
name(string, optional): Exact custom model name (case-sensitive after trimming). Partial names return name matches only.uuid(string, optional): Exact full model UUID. Partial uuids return uuid matches only.confirm_deletion(boolean): Must betrueafter explicit user consent when performing a delete
Returns: JSON object with status on success
{
"status": "DELETE_CUSTOM_MODEL_STATUS_SUCCESS",
"error": ""
}Returns (name not exact): JSON object listing candidate models
{
"message": "no custom model with exact name \"llama\"; ask the user to provide the exact name ...",
"query": "llama",
"matches": [
{ "uuid": "...", "name": "my-llama-model", "status": "STATUS_READY" }
],
"query_field": "name",
"requires_exact_match": true,
"do_not_substitute_name_or_uuid_from_matches": true
}Custom Model Status Values
STATUS_IMPORTING: Model files are being importedSTATUS_READY: Model is ready for deploymentSTATUS_FAILED: Import failedSTATUS_DELETED: Model has been deleted
Source Types
SOURCE_TYPE_HUGGINGFACE: Import from HuggingFace HubSOURCE_TYPE_SPACES_BUCKET: Import from DigitalOcean SpacesSOURCE_TYPE_SDK_UPLOAD: Upload via SDKSOURCE_TYPE_FINE_TUNING: Result of fine-tuning
Access Types (for source_ref)
ACCESS_TYPE_PUBLIC: Publicly accessible modelACCESS_TYPE_PRIVATE: Private model (requires token)ACCESS_TYPE_GATED: Gated model (requires acceptance + token)
Workflow Example
1. Ask the user to accept import terms (storage cost, license, source). Wait for explicit yes.
2. Import a model from HuggingFace:
genai-custom-models-import
name: "my-mistral-7b"
source_type: "SOURCE_TYPE_HUGGINGFACE"
source_ref: { "repo_id": "mistralai/Mistral-7B-v0.1", "access_type": "ACCESS_TYPE_PUBLIC" }
accept_terms_and_conditions: true
3. Check import status by listing models:
genai-custom-models-list
status: "STATUS_IMPORTING"
4. Once ready, update metadata:
genai-custom-models-update-metadata
uuid: "<uuid from step 2>"
description: "Production model for customer support"
tags: { "tags": ["production", "v1"] }
5. For a Spaces-imported model, also fill in the capability fields the importer
could not infer:
genai-custom-models-update-metadata
uuid: "<spaces-model-uuid>"
input_modalities: ["text", "image"]
output_modalities: ["text"]
parameters: "7000000000"
license: "apache-2.0"
6. Confirm deletion with the user (permanent removal). Wait for explicit yes.
7. Delete using the exact name or uuid the user confirmed:
genai-custom-models-delete
name: "my-mistral-7b"
confirm_deletion: true
# or
genai-custom-models-delete
uuid: "<full-uuid>"
confirm_deletion: true