Build on ABCD Studio
ABCD Studio is an AI film studio. Developers reach every studio — image, video, character vault and publishing — through one MCP (Model Context Protocol) JSON-RPC endpoint, so you can drive ABCD from your own apps, agents (Claude, ChatGPT, Cursor) and pipelines.
Platform overview
- One endpoint:
POST https://abcdstudio.ai/api/mcpspeaks JSON-RPC 2.0. - Tools, not resources: you call named tools (
generate_image,generate_video,poll_job, …) rather than REST resources. - Async by design: generation tools return a
job_id; poll it withpoll_jobuntilstatus: "complete". - Scoped keys: each API key is limited to the scopes you grant it.
Supported use cases
Batch image/video generation, agent-driven film pipelines, character-consistent asset lookup from your Vault, and auto-publishing finished reels to the public feed.
Authentication
Create a key in your Developer Portal. Keys look like mcp_live_… and are shown once — store it securely. Send it on every request:
POST /api/mcp HTTP/1.1
X-API-Key: mcp_live_YOUR_KEY
Content-Type: application/jsonKeys carry scopes that gate which tools they can call:
| Scope | Unlocks |
|---|---|
image_gen | generate_image, poll_job |
video_gen | generate_video, poll_job |
vault_read | search_vault, get_character |
publish | publish_asset |
film_pipeline, audio_edit | advanced pipeline & audio tools |
Quick start
- Create an ABCD account and sign in.
- Open the Developer Portal and generate an API key with the
image_genscope. - Make your first call:
curl -sS -X POST 'https://abcdstudio.ai/api/mcp' \
-H 'Content-Type: application/json' \
-H 'X-API-Key: mcp_live_YOUR_KEY' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"generate_image","arguments":{"prompt":"cinematic still: neon-lit rainy alley","aspect_ratio":"16:9"}}}'Sample response:
{
"jsonrpc": "2.0",
"id": 1,
"result": { "job_id": "job_abc123", "status": "queued" }
}Then poll until it's done:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"status": "complete",
"progress": 100,
"assets": [{ "asset_id": "asset_abc123", "url": "https://.../image.png", "kind": "image" }]
}
}Tools reference
List all tools and their schemas at runtime with the tools/list method. Each tool below is called via tools/call.
generate_imagescope: image_genStart an image generation job. Returns a job_id you poll with poll_job.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "generate_image",
"arguments": {
"prompt": "cinematic still: neon-lit rainy alley, wide lens",
"aspect_ratio": "16:9"
}
}
}generate_videoscope: video_genStart a video generation job. Returns a job_id.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "generate_video",
"arguments": {
"prompt": "slow dolly-in on a rusting spacecraft, dust motes in a sunbeam",
"duration_seconds": 5,
"aspect_ratio": "16:9"
}
}
}poll_jobscope: image_gen / video_genPoll a job. Returns status, progress and (on completion) an assets array.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "poll_job",
"arguments": {
"job_id": "job_abc123"
}
}
}search_vaultscope: vault_readFull-text search across your Vault. Filter by kind = image | video.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_vault",
"arguments": {
"query": "spaceship",
"kind": "image",
"limit": 5
}
}
}get_characterscope: vault_readFetch a single character asset — portrait, sheet and style notes.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_character",
"arguments": {
"character_id": "char_abc123"
}
}
}publish_assetscope: publishPublish a Vault asset to the public feed.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "publish_asset",
"arguments": {
"asset_id": "asset_abc123",
"title": "My cinematic reel",
"visibility": "public"
}
}
}Rate limits
Each key has a per-minute request cap (RPM). The default is 60 RPM; higher limits are available per key. Every response carries live budget headers:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1718000000Exceeding the cap returns HTTP 429 with a Retry-After header. Back off and retry after the reset window.
Error handling
Errors follow the JSON-RPC 2.0 error shape:
{
"jsonrpc": "2.0",
"id": 1,
"error": { "code": -32602, "message": "Invalid params: 'prompt' is required" }
}| Situation | Signal |
|---|---|
| Missing / invalid key | HTTP 401 |
| Key lacks the tool's scope | HTTP 403 |
| Bad params | JSON-RPC -32602 |
| Unknown method/tool | JSON-RPC -32601 |
| Rate limited | HTTP 429 + Retry-After |
Webhooks
Register webhook endpoints in the Developer Portal to be notified when long-running jobs finish. Events:
job_completed_image— an image job finishedjob_completed_video— a video job finishedjob_failed— a job failedwebhook.test— a test ping you trigger from the portal
Each delivery includes an X-ABCD-Event header and an X-ABCD-Signature: sha256=… HMAC of the raw body. Failed deliveries retry up to 3 times at 15s intervals. Verify the signature:
import hashlib, hmac
def verify(secret: str, body: bytes, header: str) -> bool:
expected = "sha256=" + hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, header or "")
# In your handler: verify(WEBHOOK_SECRET, raw_body, request.headers["X-ABCD-Signature"])MCP integration guide
ABCD is a standards-compliant MCP server, so any MCP client can connect. Point your client at https://abcdstudio.ai/api/mcp and authenticate with your key.
Claude Desktop
{
"mcpServers": {
"abcd-studio": {
"url": "https://abcdstudio.ai/api/mcp",
"headers": { "X-API-Key": "mcp_live_YOUR_KEY" }
}
}
}The Developer Portal auto-generates ready-to-paste configs for Claude Desktop, the OpenAI Responses API and Codex. Prefer a personal, zero-config URL? Use the Connect flow for a tokenised MCP URL.
Client SDKs
Official SDKs wrap the JSON-RPC calls so you never hand-write a request. All three expose the same methods: generate_image, generate_video, poll_job, wait_for_job, search_vault, get_character, publish_asset.
Python
pip install abcd-studioNode.js (Node 18+)
npm install @abcd-studio/sdkC# / .NET (.NET 8+)
dotnet add package AbcdStudioSource for all SDKs lives in the repo under /sdks/python, /sdks/node and /sdks/dotnet — installable from source today, and from PyPI / npm / NuGet once published.
Best practices
- Security: keep keys server-side, never in client bundles. Rotate keys periodically and revoke unused ones from the portal.
- Rate limits: read
X-RateLimit-Remainingand back off on429with exponential retry. - Scopes: mint the narrowest scope set a key needs.
- Polling: poll
poll_jobevery 2–5s rather than tight loops; prefer webhooks for completion. - Production: handle both HTTP-level (401/403/429) and JSON-RPC-level errors; log the
idyou sent for correlation.
Ready to build?
Generate a key and fire your first call in minutes.
