Skip to main content

Documentation by X-Pilot

Connect your assistant

1. Open connector settings

In your AI tool, open the MCP or Connectors settings and choose to add a custom (remote) server.

2. Paste the MCP URL

Name it X Pilot and paste the URL below. Transport: Streamable HTTP.

3. Sign in with OAuth

Click Connect, sign in to X Pilot and approve the requested access. No API key is needed, and you can disconnect at any time from the developer console.

4. Start creating

Ask for a video in plain language. Generation uses your existing credits, exactly like the web app.
Use the actual deployment URL shown in your Developer Console.

Client setup

Pick your AI tool for the exact place to add X Pilot and how to sign in.
Works in Claude on the web and desktop. Click Connect, then sign in and approve on the X Pilot page. On Team and Enterprise plans an owner adds the connector first.

API key fallback

Use an API Key when a client does not support OAuth, or for CI and servers. Create the key in the developer console and keep it in the XPILOT_API_KEY environment variable — never paste it into a config file or repository. The key’s scopes and monthly budget still apply.

Cursor · ~/.cursor/mcp.json

Codex · Terminal

Tool reference

These 31 definitions come from the same tool registry used by the MCP server. Available tools depend on your granted scopes. Upload file bytes through REST assets.
Read the shared wallet balance in credits. Call before paid operations.Scope: account:read
Read available concurrency slots and the remaining monthly budget of this credential. Call before create_conversation or send_message.Scope: account:read
List owned video conversations, newest first. status is one of queued, running, stopping, paused, completed, failed, stopped; next_action tells what a paused conversation needs. Times are Unix seconds.Scope: video_agents:read
Read one conversation summary with status, next_action, cost_credits and preview_video_url. Use list_messages for per-message detail.Scope: video_agents:read
Create a video conversation and start the first paid message immediately. Check credits and capacity first. Outline modes: by default (require_outline_confirmation omitted or false) the video is generated straight through without pausing. With require_outline_confirmation=true the message pauses with status=paused and next_action=confirm_outline; show the returned outline to the user, then call send_message with outline_action=confirm (no prompt needed) or outline_action=revise plus a prompt describing the change. Poll list_messages every 5 seconds or more; there is no streaming. Billing matches the app: the platform reserve is held, released at the end, then actual usage is charged (clamped to the balance). cost_credits is the held reserve until the message settles, then the actual charge.Scope: video_agents:write
Send a follow-up turn to a conversation that is not running. Paid. Use it to edit the video, answer the assistant (next_action=reply), or confirm/revise the outline (next_action=confirm_outline). Outline modes: by default (require_outline_confirmation omitted or false) the video is generated straight through without pausing. With require_outline_confirmation=true the message pauses with status=paused and next_action=confirm_outline; show the returned outline to the user, then call send_message with outline_action=confirm (no prompt needed) or outline_action=revise plus a prompt describing the change. video_config cannot be changed here.Scope: video_agents:write
List messages of a conversation in order. Poll this for status, next_action, outline (when an outline exists), cost_credits and preview_video_url. completed, paused, failed and stopped are terminal for that message.Scope: video_agents:read
Stop the running message. Poll list_messages until it is stopped; cost already incurred may still be charged.Scope: video_agents:write
Delete an owned conversation and stop any running message. Only when the user asks.Scope: video_agents:write
List MP4 exports of a conversation. status is queued, running, completed, failed or superseded. progress is a 0–100 percentage when known, otherwise null.Scope: video_agents:read
Export an MP4 after preview_video_url is available. A preview is not an export. Poll get_render and report its 0–100 progress until completed, then return video_url.Scope: video_agents:write
Read one export: status, progress (0–100 or null when unavailable), and video_url when completed.Scope: video_agents:read
Delete an export record. Only when the user asks.Scope: video_agents:write
List owned brand kits. Pass an id as video_config.brand_kit_id.Scope: brand_kits:read
Read one owned brand kit.Scope: brand_kits:read
Create a brand kit for logos, theme colors and tone. Only when the user asks.Scope: brand_kits:write
Update fields of an owned brand kit. Omitted fields stay unchanged.Scope: brand_kits:write
Delete an owned brand kit. Only when the user asks.Scope: brand_kits:write
List files uploaded to this account, newest first. Upload new files with REST multipart POST /v1/assets (field files, up to 5 files); MCP cannot carry file bytes.Scope: assets:read
List owned presenter avatars and quota. Only avatars with selectable=true can be used as video_config.avatar_id.Scope: avatars:read
Find public catalog voices or your own clones. Choose voice_id from the returned items; never guess provider identifiers. Use samples on list/detail items for fixed audition clips.Scope: voices:read
Read a public or owned voice, including readiness and samples. Private voices from another account are unavailable. Poll this after clone_voice: a Voice II clone moves from training to trained (selectable=true) or failed.Scope: voices:read
Synthesize up to 1,000 characters with a catalog voice or one of your ready clones, in Voice I or Voice II. voice_version must match the voice. Returns MP3 audio_url (which may be a data URL). Uses platform TTS pricing; reuse the same idempotency_key for retries.Scope: audio:write
Read Voice II clone requirements before clone_voice with voice_version 2: availability, the authorized company_name, supported locales with the consent_statement the speaker must read aloud, and sample duration/size limits. When voice_ii_available is false (for example voice_ii_unavailable_reason clone_disabled), do not attempt a Voice II clone; offer Voice I instead.Scope: voices:read
Clone a private voice from audio already uploaded to your account. Voice I (default) is an instant clone from one sample. Voice II needs the speaker’s consent: call get_voice_clone_config, have the speaker record the consent_statement for the chosen locale with their name and company_name filled in, upload it separately, then pass voice_talent_name, locale, consent_audio_url and consent_accepted=true. Never fabricate consent or set consent_accepted without the speaker’s explicit agreement. Voice II returns 403 voice_ii_unavailable while cloning is not open for the account. Poll get_voice until state is trained or failed. Reuse idempotency_key on retry.Scope: audio:write
Delete an owned cloned voice. Public catalog voices cannot be deleted. Reuse idempotency_key on retry.Scope: audio:write
Read an owned avatar. status is the overall state (draft, generating, ready, failed, deleting, migration_required); training_status and preview_status track training and the preview sample; selectable must be true before video generation can use it; stage names the step in progress (queued, generating_training_video, provider_processing, generating_preview, deleting_provider_asset) or null when idle; error is {code, message} on failure. Training ready alone does not mean it can be used in a video.Scope: avatars:read
Create an avatar from an owned asset_id or a public http(s) image/video URL. Third-party URLs are downloaded and archived to the caller’s owned storage before training. Requires platform entitlement. Poll get_avatar for preview_image_url and preview_video_url, or receive avatar.completed / avatar.failed through callback_url or a webhook subscription. Reuse idempotency_key on retry; never retrain automatically.Scope: avatars:write
Delete an owned avatar. Poll get_avatar or list_avatars until it disappears. Reuse idempotency_key on retry.Scope: avatars:write
Synthesize a talking-presenter video with an owned avatar whose training_status is ready. Drive it with text + voice_id (platform TTS, Voice I or Voice II) or with your own speech audio (asset_id or a public http(s) audio_url) — exactly one source, up to 5 minutes of speech. Output is a transparent-background WebM (VP9 with alpha) for compositing. Billed per rendered second at the digital-human video rate; the balance must cover the estimate before dispatch. Poll get_avatar_video, or receive avatar-video.completed / avatar-video.failed through callback_url or a webhook subscription. Reuse idempotency_key on retry; never resubmit automatically.Scope: avatars:write
Read an avatar video job: status (queued, processing, completed, failed), video_url (transparent WebM) once completed, duration_seconds, width, height and the settled cost_credits. Poll at least 5 seconds apart.Scope: avatars:read

Access and billing

  • The sign-in page shows the account and the access being granted. Tokens only work for the X Pilot MCP server; access tokens last one hour and refresh automatically.
  • Disconnect a client any time from Developer console → Connected AI. Tasks already running continue.
  • MCP uses the same wallet as the web app: credits are reserved when a task starts, released when it ends, and the actual usage is charged. A task never takes your balance below zero.
  • The AI sees only the tools allowed by the access you approved. Upload files with REST POST /v1/assets.
Download MCP schemas.
An AI client connects to the X-Pilot MCP server using OAuth or a scoped API key, then calls tools allowed by its granted scopes.
Connect an AI client to the business MCP server. Available tools depend on the scopes you grant.