OriginShorts MCP Server REST API Get a key

OriginShorts MCP Server

Connect Claude, ChatGPT, Cursor or any MCP client to OriginShorts and make faceless short-form videos from a conversation. Script, visuals, narration, captions and music, rendered to a finished MP4.

Endpoint
originshorts.com/mcp
Transport
Streamable HTTP
Auth
OAuth 2.1, or Bearer API key
To start
100 free credits, enough for one video

Connecting

Two ways in. Marketplace clients use OAuth and need nothing from you but a login; everything else can carry an API key directly.

With OAuth

In ChatGPT, Claude or any client that supports remote MCP servers, add https://originshorts.com/mcp as a connector and approve the consent screen. The server registers clients dynamically, so there is no key to paste and nothing to configure.

Discovery and endpoints, if your client asks for them explicitly:

PurposeURL
Authorization server metadata/.well-known/oauth-authorization-server
Protected resource metadata/.well-known/oauth-protected-resource
Authorize/oauth/authorize
Token/oauth/token
Dynamic client registration/oauth/register
Scopevideos

With an API key

Create a key on your account page and send it as a bearer token. Keys start with os_live_ and carry the permissions of the account that made them.

Authorization: Bearer os_live_YOUR_KEY

Treat a key like a password: it can spend your credits. Keep it out of shared configs and source control.

Client configuration

Copy the block for your client. Replace os_live_YOUR_KEY with your own key, or drop the header entirely if you are connecting over OAuth.

Claude Code

claude mcp add originshorts --transport http https://originshorts.com/mcp \
  --header "Authorization: Bearer os_live_YOUR_KEY"

Claude Desktop / Cursor

{
  "mcpServers": {
    "originshorts": {
      "type": "http",
      "url": "https://originshorts.com/mcp",
      "headers": {
        "Authorization": "Bearer os_live_YOUR_KEY"
      }
    }
  }
}

ChatGPT

Settings → Connectors → add a custom connector pointing at https://originshorts.com/mcp, then approve the OAuth screen. No key required.

Workflow

Generation is asynchronous. One call starts it, then you poll. A render takes roughly two to six minutes.

  1. Create

    Call create_video with a topic (we write the script) or a script of your own. It returns a video id straight away.

  2. Poll

    Call get_video_status every 15-30 seconds. Status moves queuedprocessingrenderingcompleted.

  3. Download

    On completion the response carries a download_url for the MP4. It is valid for one hour. Poll again for a fresh link.

If a render fails, the status becomes failed and the credits are refunded automatically. No action needed on your side.

Tools

Six tools. Every response is JSON; errors come back as readable text with the reason and what to do about it.

create_videowrites100+ credits

Starts a video. Provide exactly one of topic or script. Returns an id immediately.

ParameterTypeNotes
topicstringIdea to write the script from. Max 1200 characters. one of topic | script
scriptstringYour narration, used verbatim. Max 5000 words. one of topic | script
duration_rangeenumTarget length in seconds. required
voicestringVoice id from list_voices. Free accounts use kokoro voices.
art_styleenumVisual treatment for the generated images.
image_qualityenumbasic or pro. Pro adds 30 credits.
stylestringContent style preset id from get_video_options.
background_musicenumauto (default) matches music to the script; none leaves it silent.
get_video_statusread only

Polls one video by id. Returns its status and, once complete, the download URL.

ParameterTypeNotes
video_idstringId returned by create_video. required
list_videosread only

The account's 25 most recent videos, newest first.

ParameterTypeNotes
cursorstringnext_cursor from the previous page.
list_voicesread only

Every narration voice with its language, gender and premium surcharge. Takes no parameters.

get_video_optionsread only

Every valid value for create_video: style presets, art styles, caption styles, duration ranges, music tracks and current credit pricing. Call this rather than hard-coding values. Takes no parameters.

get_credit_balanceread only

Current balance and plan. Worth checking before a batch. Takes no parameters.

Allowed values

The authoritative list is whatever get_video_options returns. These are the fixed enums.

FieldValues
duration_range15-30 15-45 30-45 30-60 45-60 45-75 60-90
art_stylephotorealistic comic-book anime 3d-animation film-noir
image_qualitybasic pro
background_musicauto none
statusqueued processing rendering completed failed

Credits

ItemCredits
Standard video100
Pro image quality+30
Premium voice+30
Failed renderRefunded automatically

New accounts include 100 credits, enough for one standard video. Plans are on the pricing page.

Errors

Failures return readable text rather than a bare code, so an agent can usually recover without help.

ErrorMeaningWhat to do
invalid_api_keyThe key was rejected.Check it, or make a new one on your account page.
insufficient_creditsBalance is below the cost.The message carries what was needed and what you have. Top up on the pricing page.
invalid_requestA parameter was wrong or missing.Call get_video_options for the valid values.
idempotency_conflictA create with this key is still in flight.Poll the existing video instead of retrying.
not_foundNo video with that id on this account.Check the id from create_video.
HTTP 403The feature needs a paid plan.Some voices and options are plan-gated.
HTTP 429Rate limited.Wait 60 seconds before the next call.