CCAPI

Image, video, music and text generation across 100+ models through one endpoint.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
80%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,789Tokens (tool definitions)
~4.7 KBTypical response size
Moderate attention impact (1.40% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "url": "https://api.ccapi.ai/mcp"
    }
  }
}

Remote endpoints

https://api.ccapi.ai/mcpstreamable-http
https://api.ccapi.ai/mcp/imagestreamable-http
https://api.ccapi.ai/mcp/videostreamable-http
https://api.ccapi.ai/mcp/musicstreamable-http
https://api.ccapi.ai/mcp/textstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢generate_video(model, prompt, images, videos, audios, ...)

Generate a video from a text prompt, optionally driven by reference images (image-to-video, first/last frame). This is asynchronous: it returns a task_id you poll with get_task(platform='video'). Generation usually takes 30-180 seconds. Pass wait_seconds to have the server poll for you. Video generation is the most expensive capability here — confirm the prompt with the user before spending on retries.

Input Schema

{
  "type": "object",
  "properties": {
    "model": {
      "type": "string",
      "description": "Exact model name, e.g. doubao-seedance-2-0-260128, veo-3.1-quality or viduq3-pro. Call list_models with category 'video' if unsure."
    },
    "prompt": {
      "type": "string",
      "description": "Description of the video to generate."
    },
    "images": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "Optional reference image URLs. A single image is used as the first frame; use image_roles to control multiple."
    },
    "videos": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "Optional Seedance reference video URLs or asset:// URIs returned by the trusted asset catalog."
    },
    "audios": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "Optional Seedance reference audio URLs or asset:// URIs returned by the trusted asset catalog. Reference audio cannot be used alone."
    },
    "duration": {
      "type": [
        "null",
        "integer"
      ],
      "description": "Clip length in seconds. Model-dependent, typically 4-15; an unsupported value is rejected with a message naming the supported ones. Omit for the model default."
    },
    "resolution": {
      "type": "string",
      "description": "Output resolution: 480p, 720p (widest compatibility) or 1080p. Model-dependent."
    },
    "ratio": {
      "type": "string",
      "description": "Aspect ratio, e.g. 16:9, 9:16, 1:1, 21:9 or adaptive. Which values a model accepts varies; an unsupported one is rejected with a message naming the valid ones."
    },
    "generate_audio": {
      "type": [
        "null",
        "boolean"
      ],
      "description": "Generate a synchronised soundtrack. Only some models support this."
    },
    "image_roles": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "Role of each entry in images, positionally: first_frame, last_frame or reference_image."
    },
    "wait_seconds": {
      "type": [
        "null",
        "integer"
      ],
      "description": "Poll server-side for up to this many seconds (max 240) and return the finished video if it completes in time. Omit to return a task_id immediately."
    }
  },
  "required": [
    "model",
    "prompt"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "task_id": {
      "type": "string",
      "description": "Pass this to get_task together with platform to check progress."
    },
    "platform": {
      "type": "string",
      "description": "Always 'video'. Pass to get_task."
    },
    "status": {
      "type": "string",
      "description": "One of: queued, in_progress, completed, failed."
    },
    "model": {
      "type": "string",
      "description": "Model that accepted the request."
    },
    "video_urls": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "Finished video URLs, when the task completed within wait_seconds."
    },
    "note": {
      "type": "string",
      "description": "What to do next."
    }
  },
  "required": [
    "task_id",
    "platform",
    "status",
    "model",
    "note"
  ],
  "additionalProperties": false
}
🟢get_balance

Report the remaining and used balance for this CCAPI key. Useful before starting an expensive batch of generations, or to explain a quota failure to the user.

Input Schema

{
  "type": "object",
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "unlimited": {
      "type": "boolean",
      "description": "True when this token has no spending cap, in which case the amount fields are not meaningful."
    },
    "remaining_amount": {
      "type": "number",
      "description": "Remaining balance, in the account's display currency. Omitted when unlimited."
    },
    "used_amount": {
      "type": "number",
      "description": "Balance consumed to date, in the same unit."
    },
    "total_amount": {
      "type": "number",
      "description": "Remaining plus used. Omitted when unlimited."
    },
    "currency": {
      "type": "string",
      "description": "Unit of the amounts above, e.g. USD."
    },
    "note": {
      "type": "string",
      "description": "Guidance when the balance is low, unlimited, or scoped to a token."
    }
  },
  "required": [
    "unlimited",
    "used_amount",
    "currency"
  ],
  "additionalProperties": false
}
🟢get_task(platform, task_id, wait_seconds)

Check the status of an asynchronous generation task submitted by generate_video, generate_music, generate_lyrics, extend_music, or generate_image with async=true. Pass the platform and task_id exactly as they were returned. Status is one of queued, in_progress, completed or failed; poll every few seconds until it settles, or pass wait_seconds to have the server wait for you.

Input Schema

{
  "type": "object",
  "properties": {
    "platform": {
      "type": "string",
      "description": "Platform the task belongs to, exactly as returned by the submit tool: image, video, suno or producer."
    },
    "task_id": {
      "type": "string",
      "description": "Task identifier returned by the submit tool."
    },
    "wait_seconds": {
      "type": [
        "null",
        "integer"
      ],
      "description": "Poll server-side for up to this many seconds (max 240) and return once the task finishes. Omit for a single immediate status check."
    }
  },
  "required": [
    "platform",
    "task_id"
  ],
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "task_id": {
      "type": "string",
      "description": "The task this status refers to."
    },
    "platform": {
      "type": "string",
      "description": "Platform the task belongs to."
    },
    "status": {
      "type": "string",
      "description": "One of: queued, in_progress, completed, failed, unknown."
    },
    "progress": {
      "type": "string",
      "description": "Progress indication, when the backend reports one."
    },
    "result_urls": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "string"
      },
      "description": "Finished asset URLs. May expire; download anything worth keeping."
    },
    "fail_reason": {
      "type": "string",
      "description": "Why the task failed, when status is failed."
    },
    "note": {
      "type": "string",
      "description": "What to do next."
    },
    "raw": {
      "description": "Backend payload, for details this summary does not cover (lyrics text, per-clip metadata, seeds)."
    }
  },
  "required": [
    "task_id",
    "platform",
    "status"
  ],
  "additionalProperties": false
}
🟢list_models(category, search)

List the AI models this CCAPI key can actually call, with their capability category and the MCP tool that drives them. Call this before generating anything if you are unsure a model name is valid — availability depends on the key's group and changes over time. Never guess model names.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "Filter by capability. One of: text, image, video, music, embedding, other. Omit to list every model this key can use."
    },
    "search": {
      "type": "string",
      "description": "Case-insensitive substring match on the model name, e.g. 'claude' or 'seedance'."
    }
  },
  "additionalProperties": false
}

Output Schema

{
  "type": "object",
  "properties": {
    "models": {
      "type": [
        "null",
        "array"
      ],
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "The exact model name to pass to other tools."
          },
          "category": {
            "type": "string",
            "description": "Capability category: text, image, video, music, embedding or other."
          },
          "description": {
            "type": "string",
            "description": "Human-readable description, when the platform publishes one."
          },
          "vendor": {
            "type": "string",
            "description": "Upstream vendor, e.g. Anthropic, Google, Suno."
          },
          "groups": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "Token groups that can reach this model."
          },
          "endpoints": {
            "type": [
              "null",
              "array"
            ],
            "items": {
              "type": "string"
            },
            "description": "API endpoint families this model supports."
          },
          "tool": {
            "type": "string",
            "description": "Which MCP tool to call for this model. Absent means no MCP tool drives it — reach it through the REST API instead."
          }
        },
        "required": [
          "name",
          "category"
        ],
        "additionalProperties": false
      },
      "description": "Models available to the calling key."
    },
    "total": {
      "type": "integer",
      "description": "Number of models returned."
    },
    "note": {
      "type": "string",
      "description": "Guidance about the result set."
    }
  },
  "required": [
    "models",
    "total"
  ],
  "additionalProperties": false
}

Recommended Prompts

retrieve_data
Get details about [item] from CCAPI
Expected tools: get_balance
fetch_info
Fetch [information type] using CCAPI
Expected tools: get_balance
list_items
List all [items] available in CCAPI
Expected tools: list_models
browse_collection
Show me the [collection] from CCAPI
Expected tools: list_models
explore_workflow
List available [items], then get details for each one using CCAPI
Expected tools: list_modelsget_balance

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded11 tools
verifiedversion not recorded4 tools
verifiedversion not recorded4 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded11 tools
verifiedversion not recorded4 tools