Skip to main content
ArtEmotion/MCP Setup
Quick connectMCP Endpoint

Every modern MCP client now speaks Streamable HTTP + OAuth — paste the URL, approve in your browser, done. No API key, no install, no Node.js. Desktop clients still ship a local npx mode as a fallback for offline use.

URLhttps://mcp.artemotion.ai/api/mcp
Claude.ai
remote
Custom Integrations → paste URL → OAuth
Claude Desktop
remote
Custom Connectors → paste URL → OAuth · stdio fallback
Cursor
remote
.cursor/mcp.json → URL only → OAuth · stdio fallback
Windsurf
remote
mcp_config.json → URL only → OAuth · stdio fallback
VS Code
remote
Copilot Agent → mcp.json {"type":"http"} · stdio fallback
Zed
remote
context_servers → URL entry · stdio fallback
Continue.dev
remote
config.json transport: streamable-http · stdio fallback
CLI / other
stdio
npx artemotion-mcp · or HTTP if your SDK supports it

Connect from your client

Pick your MCP-aware editor or AI client. Each tab has the exact JSON snippet to paste and one-line instructions.

Connect directly using our hosted MCP endpoint — no npm install, no Node.js, no API key to copy. The server implements MCP 2025-03-26 Streamable HTTP with OAuth 2.0 authorization: paste the URL, your client opens a browser tab, you log in once, done.

MCP Endpoint

https://mcp.artemotion.ai/api/mcp

Auth: OAuth 2.0 — your client handles it automatically. No header needed.

Claude.ai

Settings → IntegrationsAdd custom integration.

  • Paste https://mcp.artemotion.ai/api/mcp as the Integration URL — nothing else.
  • Claude.ai detects the OAuth server automatically and opens a browser tab.
  • Log in with your ArtEmotion account and click Approve.
  • Claude will now call ArtEmotion tools automatically whenever you ask it to generate images, videos, audio, or 3D assets.

Cursor (remote)

Add to .cursor/mcp.json — just the URL, no headers:

.cursor/mcp.json
// .cursor/mcp.json  — no API key needed, OAuth handles auth
{
  "mcpServers": {
    "artemotion": {
      "url": "https://mcp.artemotion.ai/api/mcp"
    }
  }
}

Cursor opens a browser tab on first use. After you authorize, the token is stored automatically.

Prefer a static API key instead?
.cursor/mcp.json (API key)
// .cursor/mcp.json  — static API key (alternative)
{
  "mcpServers": {
    "artemotion": {
      "url": "https://mcp.artemotion.ai/api/mcp",
      "headers": { "Authorization": "Bearer ae_live_…" }
    }
  }
}

Windsurf

mcp_config.json
// ~/.codeium/windsurf/mcp_config.json  — no API key needed
{
  "mcpServers": {
    "artemotion": {
      "serverUrl": "https://mcp.artemotion.ai/api/mcp"
    }
  }
}

Windsurf opens the OAuth consent screen on first connect. Approve once and you're set.

Prefer a static API key instead?
mcp_config.json (API key)
// ~/.codeium/windsurf/mcp_config.json  — static API key (alternative)
{
  "mcpServers": {
    "artemotion": {
      "serverUrl": "https://mcp.artemotion.ai/api/mcp",
      "headers": { "Authorization": "Bearer ae_live_…" }
    }
  }
}

Any HTTP-capable MCP client

Point the client at https://mcp.artemotion.ai/api/mcp. If it supports OAuth 2.0 discovery, it will handle auth automatically via /.well-known/oauth-authorization-server. Clients that don't support OAuth can still connect with a static Authorization: Bearer ae_live_… header using an API key from Settings → API Keys.

NEW What's new in 0.6

Upload & LoRA
upload_image + generate_with_lora close the image-input loop. Now you can attach a reference photo or LoRA-style any generation from within the chat.
Studio tools
6 one-call image tools — erase objects, remove backgrounds, upscale, restore photos, create headshots, inpaint regions.
Community & Ratings
list_community_gallery / share_to_gallery / rate_model — the model can now browse, publish, and curate the community gallery.
Pipelines, end-to-end
save_pipeline + run_pipeline close the loop. Scaffold a plan, save it, run it server-side — the runner walks every node, deducts credits per-step, and returns all output URLs.
Library write surface
create_folder / delete_folder / move_generation / delete_generation. The LLM can now curate, not just browse.
Active job ops
list_jobs surfaces every queued / processing job in the last 30 min. cancel_job stops a runaway generation.
Usage analytics
get_usage totals credits + jobs over 1h / 24h / 7d / 30d, broken out by output kind and top-spending models.
Save-to-library mode
Pass save_to_library: true on combine_videos and start_edit — the mp4 gets hosted and returned as a URL instead of raw bytes.
Cost cap + webhooks
start_generation now accepts max_credits (reject if estimate exceeds it) and webhook_url (skip polling, FAL pings you on completion).
Multimodal enhance
enhance_prompt takes an optional image_url — the LLM looks at the image before rewriting the prompt, so “make this image's prompt more cinematic” just works.

0.3 Earlier — discover & recommend

Full catalog access
Browse every model in MODEL_CAPS — not just try-on / vision. Filter by kind, search by name ("nano banana", "flux"), sort by price.
Price-aware sorting
Every model now carries a base_credits estimate. Ask for the cheapest, priciest, best, popular or newest with one parameter.
LLM model recommender
recommend_model hands Claude/Gemini a candidate shortlist and gets back the best pick + a 1-sentence reason + 4 alternatives.
AI scene scaffolder
scaffold_pipeline turns "30-second YouTube intro about coffee" into a structured plan — N scene prompts, music description, voice script.
Any-model generation
start_generation runs any model in the catalog — t2i, i2i, t2v, i2v, v2v, TTS, music, 3D. Same job/poll/result flow as the existing tools.
Stitch into one mp4
combine_videos concatenates clips with optional music + voice mixed in, producing a single faststart mp4.

Prerequisites

  • Node.js 20 or newer — required by the MCP server. Already installed on most dev machines.
  • An ArtEmotion API key — generate one at Settings → API keys. Keys look like ae_live_….
  • Credits on your account — each generation deducts from your balance, same as the REST API. list_*, recommend_model, and scaffold_pipeline don't cost credits.

Available tools

The hosted MCP endpoint exposes 81 tools. Tools are grouped by intent — Discover, Generate, Pipeline, Mix, Account & Library, Utility, LoRA & advanced, Job recovery, Studio tools, and Community & ratings.

Discover

list_models
GET /api/v1/models?catalog=full
Browse every model. Filters: kind, search. Sorts: cheapest / priciest / best / popular / newest. Each entry includes base_credits.
recommend_model
POST /api/v1/recommend
Describe the task, optionally pass prefer: best | cheapest | popular | newest. An LLM picks one model with a reason + 4 alternatives.
list_tryon_models
GET /api/v1/models (legacy)
Curated try-on catalog with garment-type coverage. Kept for back-compat with older clients.
list_vision_models
GET /api/v1/vision
Curated vision catalog: VQA, captioning, OCR, object detection, NSFW classification.

Generate

start_generation
POST /api/v1/generate
Run any model in the catalog. Accepts native fal fields (prompt, image_url, video_url, aspect_ratio, duration, num_images, …) + an extra escape hatch.
start_tryon
POST /api/v1/tryon
Specialised try-on entry point — person + garment URLs in, job id out.
start_vision
POST /api/v1/vision
Image → text. VQA, captioning, OCR, detection, moderation.
get_job
GET /api/v1/jobs/:id
One-shot status check (queued / processing / completed / failed).
wait_for_job
polls get_job
Blocks until a terminal state, returns the result inline so the model sees the asset URL directly.

Pipeline + Mix

scaffold_pipeline
POST /api/v1/scaffold
Plain-English brief in, structured plan out — N scene prompts, optional music prompt, optional narration script. No credits charged; pay when you submit each scene to start_generation.
save_pipeline
POST /api/v1/pipelines
Persist a {nodes, edges} document. Pass id for idempotent overwrite. Pairs with scaffold_pipeline: scaffold → save → run.
run_pipeline
POST /api/v1/pipelines/run
Server-side execution. Walks every node in topo order, submits each gen, deducts credits, returns all output URLs. Blocks until done by default; pass wait: false for fire-and-forget.
combine_videos
POST /api/v1/merge
Concat 1–20 clips. Optional music_url (mixed at 30 % volume) + voice_url. Output: single H.264 + AAC mp4 with faststart. Pass save_to_library to host + return a URL.

Account & library

get_credits
GET /api/v1/credits
Current balance + active plan summary. Cheap, safe to call before any big spend.
estimate_cost
POST /api/v1/estimate
Preview a job's credit cost without submitting it. Returns the estimate, balance, and a sufficiency flag.
get_usage
GET /api/v1/usage
Credits + jobs in the last 1h / 24h / 7d / 30d, broken out by kind and top-spending models.
list_generations
GET /api/v1/generations
Recent jobs, most-recent first. Optional kind filter. Each entry includes the asset URL.
list_library
GET /api/v1/library
Library entries + the user's folder list. Filter to one folder with folder_id.
create_folder
POST /api/v1/folders
New library folder. Pair with move_generation to organise existing assets.
delete_folder
DELETE /api/v1/folders
Drop a folder. Generations inside become un-foldered, not deleted.
move_generation
POST /api/v1/library/move
Move a generation into a folder, or out by passing folder_id: null.
delete_generation
POST /api/v1/library/delete
Remove the library row. The hosted asset URL stays valid on FAL / Cloudinary.
list_pipelines
GET /api/v1/pipelines
Saved pipelines (summary), or one pipeline's full doc when id is passed.
list_jobs
GET /api/v1/jobs
All queued / processing jobs started in the last 30 min. Great for resuming after a session interruption.
cancel_job
DELETE /api/v1/jobs
Cancel an in-flight job by id. Refunds happen only when FAL itself reports failure.
whoami
GET /api/v1/credits + GET /api/v1/usage
Credit balance + 30-day spend breakdown by kind. Safe to call before any big job.
get_rate_limits
static
Returns the per-key rate limit policy (20 req/min for most endpoints, 30/min for uploads) without any API call.
describe_then_generate
composes start_vision + start_generation
Analyse an input image, then generate a new image based on the description. Chain vision → generation in one call.

Utility

enhance_prompt
POST /api/v1/enhance
Expand a short prompt into a richer one. 7 style presets (cinematic / photoreal / anime / …). Pass image_url for vision-grounded enhancement.
generate_marketing_copy
POST /api/v1/marketing-copy
UGC ad scripts, social hooks/captions/hashtags, brand video narrations, or a multi-piece influencer campaign plan. 1 credit.
generate_and_wait
composes start_generation + wait_for_job
Submit and block until the asset URL is available. One-call shorthand for users who just want the result.
batch_generate
parallel start_generation
Fire 2–8 jobs in parallel — same model with N variants of a prompt, or N distinct prompts.
compare_models
multiple list_models
Side-by-side spec sheet for 2–6 models. Shows kind, base cost, aspects, resolutions, durations, required inputs.

LoRA & advanced

upload_image
POST /api/v1/upload
Upload a base64-encoded image or file (PNG/JPEG/WebP/GIF/AVIF, video, audio). Returns a hosted URL to pass as image_url, reference_image_url, etc. Accepts data URI or raw base64. 30 uploads/min limit.
search_loras
GET /api/loras
Search the LoRA catalog by keyword. Returns name, path (URL to pass as loras:[{path}]), base model, download/like counts.
generate_with_lora
composes search_loras + start_generation
Search for a LoRA by keyword, then generate with it in one call. Use lora_scale to control influence (0.5–1.2).
get_model_card
GET /api/v1/models
Get a full spec sheet for one model: kind, price, supported aspect ratios, resolutions, durations, required inputs, example prompt.

Job recovery

reuse_generation
GET /api/v1/generations/:id + POST /api/v1/generate
Fetch a past generation and resubmit it, optionally overriding any field (prompt, aspect_ratio, etc.). Useful for iterating on a finished job.
retry_failed_job
GET /api/v1/generations/:id + POST /api/v1/generate
Re-run a job that has no result (failed/timed-out). Refuses to retry already-successful jobs.
cancel_all_running_jobs
GET /api/v1/jobs + POST /api/v1/jobs
List every queued/running job and cancel all of them in one call. Returns count of cancelled jobs.

Studio tools

list_studios
Studio capability discovery
Lists every MCP-controlled studio, its grouped controller, supported actions, and—when called with include_schema: true—the complete option schema. Music Studio is intentionally excluded while testing.
run_image_studio · run_design_studio · run_2d_studio
POST /api/v1/generate
Control every Image Studio canvas action plus Photo, Thumbnail, Brand Design, and 2D game-art workflows through action-specific schemas and trusted model settings.
run_3d_studio · run_sprite_studio · run_cinema_studio
POST /api/v1/generate · POST /api/v1/sprite
Generate and post-process 3D assets with every server-backed 3D Studio operation—including Smart Topology, segmentation, completion, UV, conversion, and print tools—apply any Sprite movement preset, or plan and render cinematic shots.
run_avatar_studio · run_swap_studio · run_character_studio
Identity-aware Studio workflows
Create avatars, influencers, characters and chibi assets; generate talking/dubbed video; and perform consent-gated face, head, actor, or motion transfers.
run_marketing_studio · run_audio_studio · run_research_studio
Campaign, audio, and visual intelligence workflows
Generate UGC/campaign assets, voice and sound workflows, or caption/OCR/detection and creative analysis from one MCP agent.
run_video_editor_studio
POST /api/v1/video-editor
Control complete Video Editor projects, Cinema/Pipeline media handoffs, sequencing, visual and audio automation, cleanup, captions, markers, export settings, asynchronous rendering, status, history, and cancellation. The catalog action returns every transition, effect, motion, and audio preset.
object_eraser
POST /api/v1/generate (bria/eraser model)
Remove an object from an image by describing it. Returns the cleaned image URL.
remove_background
POST /api/v1/generate (bria/rmbg)
Strip the background from any image. Returns a transparent PNG.
quality_boost
POST /api/v1/generate (clarity upscaler)
2× or 4× AI upscale with detail enhancement.
photo_restore
POST /api/v1/generate (gfpgan/BSRGAN)
Restore old or degraded photos.
professional_headshot
POST /api/v1/generate (headshot model)
Convert casual portraits to professional-looking headshots.
start_edit
POST /api/v1/edit
Inpaint / text-guided region edit. Requires an image URL + mask URL + prompt. Pro plan required.

Community & ratings

list_community_gallery
GET /api/v1/community/gallery
Browse the public community gallery. Filterable by kind (image/video/audio/3d). Returns media URLs + captions + author nicknames.
share_to_gallery
POST /api/v1/community/gallery
Publish one of your own generations to the community gallery with an optional caption.
rate_model
POST /api/v1/rating
Rate a model 1–5 stars. Helps surface the best models in list_models results.

Example responses

list_models
// list_models { kind: "image", sort: "cheapest", search: "nano-banana" }
{
  "count": 3,
  "total_catalog": 365,
  "sort": "cheapest",
  "models": [
    { "id": "fal-ai/nano-banana",     "name": "Nano Banana",     "kind": "image", "base_credits": 8  },
    { "id": "fal-ai/nano-banana-pro", "name": "Nano Banana Pro", "kind": "image", "base_credits": 38 },
    { "id": "fal-ai/nano-banana-2-pro","name": "Nano Banana 2 Pro","kind": "image","base_credits": 64 }
  ]
}
recommend_model
// recommend_model { description: "Photoreal sunset cityscape", prefer: "best" }
{
  "recommendation": {
    "id": "fal-ai/nano-banana-pro",
    "name": "Nano Banana Pro",
    "kind": "image",
    "base_credits": 38,
    "has_image_input": true
  },
  "reason": "Top-tier image model with 4K output and web-search grounding — strongest fit for a photorealistic cinematic scene.",
  "alternatives": [
    { "id": "fal-ai/flux-2-pro", "name": "FLUX 2 Pro", "base_credits": 28 }
  ]
}
start_generation
// start_generation { model_id: "fal-ai/nano-banana-pro", prompt: "...", aspect_ratio: "16:9" }
{
  "job_id":      "019e2d09-260…",
  "model_id":    "fal-ai/nano-banana-pro",
  "kind":        "image",
  "status":      "queued",
  "credits_used": 38,
  "credits_left": 47462,
  "poll_url":    "https://app.artemotion.ai/api/v1/jobs/019e2d09-260…?model_id=fal-ai%2Fnano-banana-pro"
}
scaffold_pipeline
// scaffold_pipeline { prompt: "10s coffee channel intro", include_music: true, include_voice: true }
{
  "scaffold": {
    "name": "Coffee Brew Intro",
    "totalDurationSec": 10,
    "scenes": [
      { "id": "scene-1", "title": "Beans pouring", "kind": "video",
        "model": "fal-ai/kling-video/v3/standard/text-to-video",
        "settings": { "duration": "5", "aspect_ratio": "16:9" },
        "prompt": "Close-up of dark roasted coffee beans pouring..." }
    ],
    "musicTrack": { "prompt": "warm lo-fi jazz", "model": "cassetteai/music-generator", "durationSec": 10 },
    "voiceTrack": { "script": "Welcome to my channel...", "model": "fal-ai/orpheus-tts", "voice": "warm" }
  }
}

Try saying…

Drop these into Claude Desktop / Cursor / Zed once you've wired up the server. The model picks the right tools on its own.

list_models
"What's the cheapest video model on ArtEmotion?"
list_models { kind: "video", sort: "cheapest" }
recommend_model
"Pick the best image model to create a photorealistic dog at sunset."
recommend_model { description: "...", prefer: "best" }
list_models → start_generation
"Use nano-banana-pro to create a futuristic Tokyo skyline."
start_generation { model_id: "fal-ai/nano-banana-pro", prompt: "..." }wait_for_job
scaffold_pipeline
"Plan me a 30-second YouTube intro about coffee — with music + a calm narrator."
scaffold_pipeline { prompt: "...", total_duration_sec: 30, include_music: true, include_voice: true }
combine_videos
"Stitch these three clips together and mix in this music track."
combine_videos { video_urls: [...], music_url: "..." }
start_tryon → wait_for_job
"Try this red jacket on the person in image A."
start_tryon { person_image_url, garment_image_url }wait_for_job

Environment variables

VariableRequiredDefaultNotes
ARTEMOTION_API_KEYyesBearer key from your API Keys page.
ARTEMOTION_BASE_URLnohttps://app.artemotion.aiPoint at staging to test before prod.
ARTEMOTION_POLL_INTERVAL_MSno2000wait_for_job poll cadence. Min 500 ms.
ARTEMOTION_POLL_TIMEOUT_MSno300000 (5 min)wait_for_job default ceiling. Per-call override available.

UPDATE Upgrading from an older version

The MCP server is published as artemotion-mcp on npm and runs via npx on every client launch. Whether you have to do anything when a new version ships depends on how your config is written.

Unpinned config
"args": ["-y", "artemotion-mcp"]

npx caches the install and re-checks for newer versions on its own schedule (~daily). Fully quit and relaunch your client — most of the time that's enough to pick up the latest. No config edit needed.
Pinned to an old version
"args": ["-y", "artemotion-mcp@0.3.0"]

Edit the version in your config to the new release (e.g. @0.5.0 or @latest), then quit + relaunch the client.
Force-refresh (cache stuck)
If a relaunch still shows the old tool list, the npx cache is stale. Wipe it once and relaunch:

Recommended: pin to the latest tag

For deterministic upgrades, pin to @latest (always resolves to the newest published version) or to a specific release (so a future minor bump doesn't change your tool surface without warning).

claude_desktop_config.json (excerpt)
{
  "mcpServers": {
    "artemotion": {
      "command": "npx",
      "args": ["-y", "artemotion-mcp@latest"],
      "env": { "ARTEMOTION_API_KEY": "ae_live_…" }
    }
  }
}

Force-refresh the npx cache

If you've relaunched the client and the new tools still don't show up, your local npx cache is holding the old bundle. One-line fix, then quit + relaunch:

bash
rm -rf "$(npm config get cache)/_npx"

On Windows: rd /s /q "%LOCALAPPDATA%\\npm-cache\\_npx".

How to tell which version is running

Ask the model "What MCP tools does ArtEmotion expose?" — the count and tool names give it away. The current server exposes 81 tools, including list_studios and the 13 grouped run_*_studio controllers alongside generation, pipelines, editing, library, account, and community tools. If the Studio controllers are missing, reconnect the client so it refreshes the tool catalog.

Troubleshooting

  • "Server failed to start" / no tools appear. Check the client's MCP logs for the actual error. The most common cause is a missing or mistyped ARTEMOTION_API_KEY — the server crashes early with a clear message.
  • 401 / "Invalid or revoked API key." The key was rotated or revoked. Generate a new one at Settings → API keys.
  • 402 / "Insufficient credits." Top up your balance from the pricing page, or upgrade your plan from pricing.
  • 402 / "COST_CAP_EXCEEDED". You passed max_credits to start_generation and the estimate was higher. Raise the cap or pick a cheaper model with list_models { sort: "cheapest" }.
  • 403 / "Editor requires Pro plan ($54/mo)". start_edit + uploaded clips in the editor are gated. Upgrade or stick to combine_videos (no plan gate).
  • 429 / "Rate limited." You're hitting the per-key rate limit on /api/v1/*. The server surfaces the same limit — back off and retry.
  • 404 on a tool that should exist. Your client is talking to a server that hasn't been redeployed with the new endpoints. See the Upgrading section.
  • npx hangs the first time. First-run downloads ~10 MB. After the initial install it's cached and starts instantly.
  • Tools didn't refresh after an upgrade. See Upgrading from an older version — usually a quit-and-relaunch is enough, sometimes you need to wipe the npx cache.