CCAPI
by ccapi.ai · remote · no sign-in to list tools · v1.0.1 · published by ai.ccapi
Image, video, music and text generation across 100+ models through one endpoint.
11 tools: 1 do something that can't be undone, 7 change things and 3 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone1Claude Code: ask: see these tools
- Changes things7Claude Code: ask: see these tools
- Only reads3Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http ccapi https://api.ccapi.ai/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnchat_completion
The server marks "chat_completion" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":false}; The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
11 tools
Can't be undone 1Claude Code: ask
chat_completionSend a conversation to any text model available through CCAPI (Claude, GPT, Gemini, DeepSeek, GLM, MiniMax, Kimi, Qwen…) and get the reply.1 finding
Why it is in this group
- The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "chat_completion" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":false}; The description's first verb is "send": a word for sending, and what is sent cannot be taken back.
Description, as the server wrote it Send a conversation to any text model available through CCAPI (Claude, GPT, Gemini, DeepSeek, GLM, MiniMax, Kimi, Qwen…) and get the reply. Useful for consulting a second model for a different perspective, running a cheap model over bulk work, or reaching a model the current client does not have configured. Responses are non-streaming.
Annotations the server declares
- idempotentHint: false
- readOnlyHint: true
Changes things 7Claude Code: ask
edit_imageEdit existing images according to an instruction, using the dedicated image edit endpoint.No findings
Why it is in this group
- The name "edit_image" says "edit": a word for a change.
Description, as the server wrote it Edit existing images according to an instruction, using the dedicated image edit endpoint. Provide at least one source image. For pure text-to-image, or for models that take references through the generation endpoint, use generate_image instead.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
- readOnlyHint: false
extend_musicContinue an existing song from a given timestamp, producing a longer version.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Continue an existing song from a given timestamp, producing a longer version. Requires the clip_id of a previously generated song, which appears in the 'raw' payload of a completed generate_music task. Asynchronous — poll with get_task.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
- readOnlyHint: false
generate_imageGenerate an image from a text prompt, optionally guided by reference images (image-to-image).No findings
Why it is in this group
- The name "generate_image" says "generate": a word for a change.
Description, as the server wrote it Generate an image from a text prompt, optionally guided by reference images (image-to-image). Returns image URLs directly. Most models finish in 10-60 seconds; if your client times out, set async=true to get a task_id you can poll instead. This call costs money — do not retry speculatively.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
- readOnlyHint: false
generate_lyricsWrite song lyrics from a description, without generating audio.No findings
Why it is in this group
- The name "generate_lyrics" says "generate": a word for a change.
Description, as the server wrote it Write song lyrics from a description, without generating audio. Useful as a first step before generate_music with custom=true, so the user can approve the words before paying for audio. Asynchronous — poll with get_task.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
- readOnlyHint: false
generate_musicGenerate a song with vocals or instrumental.No findings
Why it is in this group
- The name "generate_music" says "generate": a word for a change.
Description, as the server wrote it Generate a song with vocals or instrumental. Two modes: simple (custom=false) where you describe the song and the model writes the lyrics, or custom (custom=true) where you supply lyrics, title and style tags. Asynchronous — returns a task_id you poll with get_task; generation usually takes 30-120 seconds and normally yields two variations.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
- readOnlyHint: false
generate_videoGenerate a video from a text prompt, optionally driven by reference images (image-to-video, first/last frame).No findings
Why it is in this group
- The name "generate_video" says "generate": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
- readOnlyHint: false
upscale_imageIncrease the resolution of an existing image 2x with ccapi-upscale-v1.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Increase the resolution of an existing image 2x with ccapi-upscale-v1. Input must be between 256x256 and 1024x1024 and under 5 MB; for larger inputs, regenerate with a high-resolution model instead.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
- readOnlyHint: false
Only reads 3Claude Code: allow
get_balanceReport the remaining and used balance for this CCAPI key.No findings
Why it is in this group
- The name "get_balance" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- readOnlyHint: true
get_taskCheck the status of an asynchronous generation task submitted by generate_video, generate_music, generate_lyrics, extend_music, or generate_image with async=true.No findings
Why it is in this group
- The name "get_task" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- readOnlyHint: true
list_modelsList the AI models this CCAPI key can actually call, with their capability category and the MCP tool that drives them.No findings
Why it is in this group
- The name "list_models" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- idempotentHint: false
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http ccapi https://api.ccapi.ai/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__ccapi__get_balance",
"mcp__ccapi__get_task",
"mcp__ccapi__list_models"
],
"ask": [
"mcp__ccapi__chat_completion",
"mcp__ccapi__edit_image",
"mcp__ccapi__extend_music",
"mcp__ccapi__generate_image",
"mcp__ccapi__generate_lyrics",
"mcp__ccapi__generate_music",
"mcp__ccapi__generate_video",
"mcp__ccapi__upscale_image"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as ccapi. Review it before you use it.