Skip to content

MCP server documentation

Aitachyon generates marketing images, video clips, voiceovers, talking avatars and brand copy. Its MCP server is hosted at https://aitachyon.com/api/mcp over streamable HTTP, version 1.1.0: 50 tools, 17 of them read-only, billed per call from the account's prepaid balance.

Connect a client

One URL for every client. Most of them sign in with your Aitachyon account (OAuth); a key works everywhere else.

Settings > Connectors > Add custom connector
Name   Aitachyon
URL    https://aitachyon.com/api/mcp

Then Connect, and sign in to Aitachyon in the window that opens.

Then ask: “What is my Aitachyon balance?” The free get_me tool answers. A new account starts at zero: add funds in Billing before a paid tool can run.

Sign-in

A request without credentials gets a 401 whose WWW-Authenticate header points to the protected resource metadata. From there an MCP client finds the authorization server, registers itself (RFC 7591, or a client metadata document URL as its client_id), and runs the authorization code flow with PKCE S256. The person signs in to Aitachyon and allows the app once. Access tokens last one hour; refresh tokens 90 days and are rotated on every use. Scope: mcp.

  • Protected resource metadatahttps://aitachyon.com/.well-known/oauth-protected-resource/api/mcp
  • Authorization server metadatahttps://aitachyon.com/.well-known/oauth-authorization-server
  • Authorization endpointhttps://aitachyon.com/oauth/authorize
  • Token endpointhttps://aitachyon.com/oauth/token
  • Dynamic client registrationhttps://aitachyon.com/oauth/register
  • Revocationhttps://aitachyon.com/oauth/revoke

Without OAuth, send Authorization: Bearer ait_... with an API key created under API & MCP in the app. Keys and connected apps are listed there, and either can be revoked at once. The same key also works on the HTTP API.

HTTP/1.1 401 Unauthorized
www-authenticate: Bearer realm="aitachyon", resource_metadata="https://aitachyon.com/.well-known/oauth-protected-resource/api/mcp", scope="mcp", error="invalid_token", error_description="The token is invalid, expired or revoked."

{
  "error": "The token is invalid, expired or revoked.",
  "how": "Sign in with OAuth (your MCP client does it from the 401), or send Authorization: Bearer ait_... with an API key from https://aitachyon.com/api-keys."
}

Tools (50)

Each tool carries a title and the MCP annotations readOnlyHint, destructiveHint, idempotentHint and openWorldHint. Read-only tools never create anything or charge the balance. Paid tools accept getCost: true, which returns the price and runs nothing.

get_me

Get account and balance

Read

readOnly truedestructive falseidempotent trueopenWorld false

Account context: the balance (prepaid dollars, plan credits, or internal and never blocked), the plan, your projects (id + name, most generation tools need a projectId), and the avatars you can use (id, name, gender), plus the full cost sheet. Call this first.

capabilities

List tool capabilities and prices

Read

readOnly truedestructive falseidempotent trueopenWorld false

Free: discover what every tool can do, its options (providers, modes, ratios, voices, templates), its credit cost, and whether it blocks while rendering. The catalog browser for this MCP (the aitachyon analog of a model catalog). Optional `filter` narrows by tool name or keyword. Call this and get_me before generating.

presets_show

List presets

Read

readOnly truedestructive falseidempotent trueopenWorld false

Free: list the concrete choosable presets per tool - camera motions, script/export templates, image providers + quality, edit ops, scene direction, voices, aspect ratios, caption platforms. The menu of exact enum values to pass verbatim (the aitachyon analog of presets_show). Optional `filter` narrows by group name or value.

job_status

Check render status

Read

readOnly truedestructive falseidempotent falseopenWorld false

Free: check the status of an async render — by kind (scene | avatar) + taskId, or by the statusPath a still-rendering call handed back (covers every async tool). Returns the status, a poll_after_seconds hint for non-terminal jobs, and the media url once completed. sync:true long-polls server-side for up to ~25s and returns as soon as the job is terminal (use it instead of spamming). generate_scene / avatar_generate already auto-wait, so use this to re-check a long render or one whose auto-wait timed out.

models_explore

Explore models

Read

readOnly truedestructive falseidempotent trueopenWorld false

Free: the queryable ENGINE catalog — every model this MCP can drive (live), every engine this MCP can drive. action: list (browse, filter by type image|video|audio|3d and/or status live|planned|missing) | search (keyword) | get (model_id, full record) | recommend (describe the GOAL — e.g. 'cheap vertical b-roll with audio' — returns the top 5 with match reasons and the exact tool + params to use). Call this before picking an engine; prefer recommend when unsure.

images_generate

Generate an image

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate one on-brand marketing image. Providers: nanobanana (default, photoreal) | seedream (cheap draft) | recraft (crisp text/logos) | imagen (Google retired Imagen 4; renders on Nano Banana 2.1) | openai (gpt-image-2, best text + editing, 4 cr). ultra4k:true = native 4K (Nano Banana Pro, falls back to Seedream 5.0), 13 cr. Base 4 cr, +3 for the people skin-finish pass unless finish:false. Supports i2i (referenceImageIds + referenceMode), composited headline/cta and brand logo (placeLogo/logoPosition). getCost:true previews the exact price (pass provider/ultra4k).

images_edit

Edit an image

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Edit an existing generated image (2 credits for remove-bg, upscale, vectorize; enhance 14, inpaint and replace-bg 5, remix 4, outpaint 3): remove-bg | upscale | enhance | vectorize | replace-bg | inpaint. Non-destructive (returns a new image). replace-bg/inpaint need a prompt; inpaint needs a base64 PNG mask. getCost:true previews the price.

brand_reference_kit

Inspect a website before creating

Read

readOnly truedestructive falseidempotent trueopenWorld true

Free and non-mutating: inspect a public website before creation and return its canonical URL, real logo candidates, fonts, colors, image references and video references. Call first for every brand-locked carousel or campaign.

images_director_preview

Preview an image prompt

Read

readOnly truedestructive falseidempotent falseopenWorld false

Free: return the brand-art-directed prompt (no image, no credits) so you can review/edit it, then pass it back to images_generate as finalPrompt.

ideas

Suggest image ideas

Read

readOnly truedestructive falseidempotent falseopenWorld false

Free: up to 5 ready-to-generate marketing image concepts (title, hook, cta, style, prompt) tailored to the project's brand.

generate_scene

Generate a video clip

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate a short b-roll video clip (~5s) and WAIT for the render. ENGINES: seedance (default - fast=6 / hd=184 cr flat, identity refs; prefer seedance-2.5 for HD) | seedance-2.5 (4-30s, resolution 480p|720p (default)|1080p at 6|13|31 cr/s, nativeAudio at no extra cost, identity refs OR start image + endImage, i2v keeps the image aspect) | grok (Grok Imagine, audio-native, 5 cr/s, 1-15s) | hailuo (Minimax Hailuo 02, best physics + facial emotion, 5 cr/s, silent, 6|10s, text-to-video 16:9 only) | kling (Kling v3, 5 cr/s silent / 10 cr/s sound) | wan (Wan 2.7, character consistency, 6 cr/s, the model adds its own audio) | omni (Gemini Omni 1.1 Flash by Google, 720p, native audio always, 6 cr/s, 4-10s; veo and veo-lite are aliases of it at the same price, since Google shuts the Veo 3.1 preview models down on 2026-10-22). Gemini engines are 16:9|9:16 only. RATIO (default 9:16): text-to-video honors 9:16|16:9|1:1 on every other engine except hailuo. Image-to-video on seedance-2.5, grok, kling, wan and hailuo keeps the start image's shape: an explicit ratio the image does not have is refused before any charge (omit ratio to keep the image's shape; engine seedance crops the image to the ratio). The result states the aspect read from the finished file. Text-to-video (brand-directed) or image-to-video (imageUrl/imageId). IDENTITY (seedance hd tier or seedance-2.5, never downgraded): referenceImageUrls/Ids (<=4); endImageUrl/Id pins the LAST frame. cameraMotion forces a camera move. Returns the final mp4 URL. getCost:true previews (pass engine / mode / duration / nativeAudio / references).

video_upscale

Upscale a video

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Upscale/enhance a finished video to 1080p or 4K (studio-grade upscaler) and WAIT for the result. Source: a completed sceneId, or any owned videoUrl. Metered: 2 cr/s at 1080p, 5 cr/s at 4K, minimum 5 (durationSeconds is REQUIRED - it drives the exact bill). Failed jobs are auto-refunded. getCost:true previews the price.

video_reframe

Reframe a video

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Reframe/expand a finished video to a NEW aspect ratio (Generative reframe) and WAIT - one 16:9 hero becomes 9:16 + 1:1 placements without regenerating. Source: completed sceneId or owned videoUrl. Metered 11 cr/s (durationSeconds drives the bill, default 5). Auto-refund on failure. getCost:true previews.

video_motion_control

Transfer motion onto a character

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Motion control / puppeteering and WAIT: transfer the motion + camera of a DRIVING video onto a character STILL - one filmed take drives N avatar variants (the UGC multiplier). imageUrl = the character still; videoUrl = the driving take. Metered 7 cr/s of driving video, min 35 (pass durationSeconds). Auto-refund on failure. getCost:true previews.

generate_3d

Turn an image into a 3D model

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Image -> 3D GLB mesh (engines: tripo default | trellis | hunyuan) and WAIT. Opens the 3D modality: product mockups, game-ready assets, AR props. textured:true adds surface textures + PBR (tripo). 22 cr base / 49 cr textured. Returns the GLB url (fal CDN). Auto-refund on failure. getCost:true previews.

video_dub

Dub a video

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Dub/translate a finished video's speech into another language, lip-synced back (Studio dubbing) and WAIT. One ad -> N languages. Source: completed sceneId or owned videoUrl; targetLang e.g. en|fr|es|de|it|pt|ja|ko. 49 cr/min, min 49 (pass durationSeconds). Auto-refund on failure. getCost:true previews.

voice_clone

Clone a voice

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Clone a voice from 10s-5min of clean single-speaker audio - returns a reusable voiceId for voice_speak. 81 cr one-time. RULE: a cloned voice is used ONLY on the speaker's own content (the no-AI-face rule extends to voice). getCost:true previews. Requires the 2026-07-24 deploy.

voice_speak

Speak with a cloned voice

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate speech with a CLONED voice : text + the voiceId from voice_clone -> a normal voiceover row usable in avatar_generate / video_lipsync / assemble_export. 3 cr per 450-char block. getCost:true previews. Requires the 2026-07-24 deploy.

virality_predict

Score a video for virality

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Score a finished video for virality BEFORE posting: samples 6 frames and judges them with a vision model - hook strength, pacing, clarity, CTA, retention risks, and max 3 concrete fixes, plus a 0-100 virality score. A judge pass grounded in our own stack. Flat 5 cr, synchronous. Source: completed sceneId or owned videoUrl. Requires the 2026-07-24 deploy.

viral_presets

List viral video recipes

Read

readOnly truedestructive falseidempotent trueopenWorld false

Free: curated viral video preset TEMPLATES - open recipes (engine + prompt + camera + duration) that expand into a generate_scene call with {subject} swapped for the user's subject. The full recipe is visible and every axis is tweakable before spending. Optional filter narrows by name/vibe.

video_lipsync

Lip-sync a video to new audio

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Lip-sync an EXISTING video to a new audio track (Lipsync retrofit) and WAIT - revoice a finished scene without regenerating it (the retrofit counterpart of avatar_generate, which creates FROM a still). Source: completed sceneId or owned videoUrl + audioUrl (e.g. from voiceover_generate). syncMode handles length mismatch: bounce (default) | loop | cut_off | silence | remap. Metered 7 cr/s, min 18 (durationSeconds REQUIRED). Auto-refund on failure. getCost:true previews.

video_remove_bg

Remove a video background

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Remove the background of an EXISTING video (Background removal, green-screen output) and WAIT. Source: completed sceneId or owned videoUrl. Flat 3 credits. Auto-refund on failure.

avatar_generate

Render a talking avatar

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate a lip-synced talking-avatar video from a presenter still + a voiceover, and WAIT for the render. Per-second billing (kling/omnihuman: max(42, ceil(audioSeconds)*7) credits). imageUrl must be a storage URL (e.g. from creator_presenter.path or avatars_persona); audioUrl + voiceoverId from voiceover_generate. getCost:true previews the price (pass audioSeconds for an exact figure).

ugc_talking

Make a talking UGC clip

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Talking UGC in ONE call: a person who says your text, with a quality ElevenLabs voice and a mouth synced to it. Give the text and exactly ONE face: avatarId (recommended), imageUrl, or sceneId / videoUrl (an existing clip of the person -> re-voiced with Sync lipsync-2). With avatarId the default look is 'phone': the same face is re-shot once as a vertical 9:16 front-camera selfie in a real room (no mic, no studio, setting: bedroom|kitchen|car|living_room|bathroom|desk), then REUSED for every later clip with the same setting and prop (look.reused in the result; newLook:true re-shoots). The engines animate the face, not the body: anything held must be in that still, so pass holding ("a white serum bottle") or productImageId, and keep lines short. look:'as_is' animates the library portrait itself. imageUrl is used as it is (the video keeps its ratio). Engine: kling (default, head and face, best value) or omnihuman (body moves, about 5x the price). Leave voiceId out to get a voice that matches the face (pass gender for a raw image or clip). Use this instead of laying a voiceover over a clip. Billed as its parts: phone still 4 cr the first time + voiceover (5 cr / 450 chars) + avatar (max(42, sec*7)) or lipsync (max(18, sec*7)). getCost:true previews.

avatars_persona

Create a synthetic presenter

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Create a synthetic on-brand presenter face (4 credits) that appears in your avatar library. Returns the face image URL. getCost:true previews the price.

avatars_twin

Create a twin avatar from photos

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Create a Twin avatar from photos of the same person (4 credits; +108 if a zero-drift LoRA training kicks off with >=12 refs). Returns the twin face URL. getCost:true previews the price (it accounts for the LoRA when you pass >=12 refs).

creator_presenter

Render a creator holding the product

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Render a UGC 'creator holding the product' still (4 credits). Its .path feeds avatar_generate as imageUrl. Pass creatorId (an avatar id) for a specific face. getCost:true previews the price.

creator_plan

Classify the product for UGC

Write

readOnly falsedestructive falseidempotent falseopenWorld true

Free: classify the brand product (digital vs physical) and capture a site screenshot for digital products. Returns shotIds.

voices_list

List voices

Read

readOnly truedestructive falseidempotent trueopenWorld false

Free: list the voiceId values voiceover_generate accepts, per provider. elevenlabs = curated ad voices; google = one Chirp3-HD voice per language (pass languageCode too); fish_audio = your own reference_id. Call before voiceover_generate to pick a voice.

voiceover_generate

Generate a voiceover

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate a voiceover mp3. Credits = provider rate x blocks(450 chars): google=1, fish_audio=3, elevenlabs=5 per block. Returns audioUrl + duration + the voiceover id (needed by avatar_generate). getCost:true previews the price (pass provider + text).

music_generate

Generate a music bed

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate a short background music bed (4-30s, flat 10 credits). Returns the mp3 url. getCost:true previews the price.

sfx_generate

Generate a sound effect

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate a short sound effect (2 credits). Returns the mp3 url. getCost:true previews the price.

scripts_generate

Write video scripts

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate N distinct video script variants (3 credits). tone+duration+cta required. templateId picks the angle (problem-solution | storytelling | direct-response | ugc-style | testimonial | saas_demo). getCost:true previews the price.

copy_generate

Write one line of copy

Read

readOnly truedestructive falseidempotent falseopenWorld false

Free: write or improve a single line of copy. kind = headline | hook | caption | cta | audience | angle | description.

captions_generate

Write social captions

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate per-platform social captions (2 credits). platforms: instagram|tiktok|linkedin|x|facebook. getCost:true previews the price.

brand_scrape

Create a brand from a website

Write, overwrites or deletes

readOnly falsedestructive trueidempotent falseopenWorld true

Analyze a website and create the project's brand (6 credits). Returns the brand row (name, colors, tone, products). getCost:true previews the price.

brand_create

Create a brand from a description

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Synthesize a brand from a text description (6 credits) when there's no site to scrape. getCost:true previews the price.

campaigns_angles

Write campaign angles

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Generate N distinct campaign angles (2 credits): title, hook, primaryText, cta. Returned inline (not persisted). getCost:true previews the price.

plan_storyboard

Plan a storyboard

Read

readOnly truedestructive falseidempotent falseopenWorld false

Free: plan a shot-by-shot arc for a video (cinematic b-roll or creator UGC). Returns ordered shots to feed generate_scene + assemble_export.

assemble_export

Assemble a final video

Write

readOnly falsedestructive falseidempotent falseopenWorld false

Assemble a final video (1 credit) from generated assets. templates: classic | ugc_demo | scene_reel | creator_reel. Returns the final mp4 url. (Blocking ffmpeg render, up to ~5 min.) getCost:true previews the price.

transactions

Read the billing ledger

Read

readOnly truedestructive falseidempotent trueopenWorld false

Free: the job-linked credit ledger. Every spend line carries its job_id (taskId) and engine; every refund line links back to the job it refunds, and failed-job spends show refunded_credits so nothing is a silent mystery. Use it to answer 'what did I pay for' and to verify a failed render actually refunded. limit up to 200.

show_generations

Browse past generations

Read

readOnly truedestructive falseidempotent trueopenWorld false

Free: browse past completed generations across every type (image | scene | avatar | voiceover | video-job) with signed URLs and, per row, the exact CHAIN hint for using it as the input of the next generation (image id -> i2i refs, scene id -> upscale/lipsync/matte, voiceover url -> lipsync audio...). The library that closes the use-as-input loop. Filters: type, projectId, limit (max 100).

delete_generation

Delete a generation

Write, overwrites or deletes

readOnly falsedestructive trueidempotent trueopenWorld false

Free: delete one item from the library for good, by its typed ref (img_, scn_, avt_, vo_, vjob_ followed by the id, as show_generations or a generation returns it): the file in storage, then the library entry. The charge stays on the ledger. Cannot be undone. A job still running cannot be deleted (finish or fail it first). With a key bound to a project, only that project's items are reachable.

scene_director_preview

Preview a video prompt

Read

readOnly truedestructive falseidempotent falseopenWorld false

Free: preview the art-directed VIDEO prompt before spending anything - the scenes analog of images_director_preview. Runs the same brand director as generate_scene and returns the expanded scene script + the always-on casting/realism locks. Edit the text, then call generate_scene with { prompt: <edited>, preDirected: true } to use it VERBATIM (no second director pass). An editable-script gate before anything is spent.

lint_pack

Lint copy for filler

Read

readOnly truedestructive falseidempotent trueopenWorld false

Free: mechanical anti-slop lint over generated copy or a design pack. Pass text (ad copy/script/captions) OR a JSON design spec OR an array of specs (batch). Checks: em-dashes, decorative emoji, filler marketing verbs (elevate/seamless/unleash...), banned palettes (purple gradients, graphite+orange, near-black+neon), generic fonts (Inter/Roboto/Arial), stacked exclamations, and batch anti-convergence (two designs sharing palette+font+layout). Returns findings or a clean bill. Run it on every pack BEFORE showing it to the user.

media_import_url

Import an image from a URL

Write

readOnly falsedestructive falseidempotent falseopenWorld true

Free: import an image by URL, a public http(s) URL the MCP fetches or a data:image/...;base64 URL for a file you hold locally, and store it in your account (png/jpg/webp/gif, 25 MB cap). This makes inputs origin-agnostic and is the foundation of 'recreate this reference' (grab a still off the web, then use it). Returns { path, url } and, with projectId, an imageId to pass straight into images_generate.referenceImageIds (referenceMode product or identity). The url feeds generate_scene/avatar_generate imageUrl. bucket: images (default) | products | avatars | brands.

create_signed_url

Get a signed file URL

Read

readOnly truedestructive falseidempotent falseopenWorld false

Free: get a time-limited signed read URL for one of your storage objects (bucket + path, path must start with your user id).

Resources and prompts

  • aitachyon://guideHow to use the Aitachyon tools. Billing, price previews, async renders and errors, in one page.
  • aitachyon://capabilitiesTool capabilities and prices. What every tool can do, its options and its price in credits. Same text as the capabilities tool.
  • aitachyon://presetsPresets. The exact values each tool accepts: camera motions, templates, providers, ratios, voices.
  • product_videoShort product video from a website. Plan and render a vertical product clip for a brand, checking the price before spending.
  • ugc_adTalking UGC ad. A person on camera says a short line about a product, with a matched voice and synced mouth.
  • brand_kit_from_siteBrand kit and launch copy from a website. Read a website, then write campaign angles and captions in the brand's voice.

Errors and long renders

  • A tool that failsReturns a normal tool result with isError: true and a message that says what to change: an invalid parameter combination, a missing file, a provider refusal. A call blocked before it reaches a provider costs nothing.
  • Not enough balanceisError: true with notice.type insufficient_funds and the steps to report it. Nothing is charged; the agent should not retry.
  • A revoked or expired tokenHTTP 401 with the WWW-Authenticate header above: the client refreshes or signs in again.
  • A render longer than 45 secondsThe tool returns status rendering with a statusPath. Call job_status with it until the file is ready. A failed render is refunded on its own.

Security and data

A connected app or a key acts as your account and spends its balance, so give each agent its own key with a spend cap, and revoke what you no longer use. Only hashes of keys, codes and tokens are stored. A connected app cannot create keys, read your password or change payment settings. Tool calls carry the arguments your agent sends and nothing else from the conversation. What we keep and why is in the privacy policy; for help, see support.