Get started

MCP for AI agents

Connect Orior to Claude, ChatGPT, Cursor, VS Code and any other Model Context Protocol client. Your agent can then create characters, generate images and videos, and publish them — signed in with your Orior account or with an API key, using the same credits and limits as the REST API.

Server URL: https://www.oriorai.com/api/mcp (Streamable HTTP). Apps with a connector screen — claude.ai, Claude Desktop, ChatGPT — sign in with your Orior account. Other clients can sign in the same way or send an API key from Dashboard → Developers in the Authorization: Bearer header. Works on every plan, Free included, like the API.

Connect a client

Claude (claude.ai and Claude Desktop)

  1. In claude.ai, open Settings → Connectors and choose Add custom connector.
  2. Name it Orior, paste https://www.oriorai.com/api/mcp as the server URL and add it.
  3. Click Connect. Orior’s sign-in page opens: sign in, choose what Claude may do and click Allow.
  4. In a chat, enable Orior from the tools menu and ask for what you need, e.g. “make three UGC photos of my character Mila with the new serum”.

Connectors added on claude.ai also appear in Claude Desktop and the mobile apps. On Team and Enterprise plans an owner may need to add the connector for the organization first; each member then connects their own Orior account.

ChatGPT

  1. Turn on developer mode in ChatGPT’s settings (Apps & Connectors → Advanced settings).
  2. Create a connector named Orior with the server URL https://www.oriorai.com/api/mcp and OAuth authentication.
  3. ChatGPT opens Orior’s sign-in page: sign in, choose what ChatGPT may do and click Allow.
  4. In a chat, add Orior from the tools menu (developer mode) and ask for an image, a video or a post.

Claude Code

shell
claude mcp add --transport http orior https://www.oriorai.com/api/mcp \
  --header "Authorization: Bearer orior_live_…"

Or leave out --header and run /mcp in Claude Code to sign in with your Orior account in the browser. Cursor and VS Code offer the same sign-in when the server has no Authorization header.

Cursor

Add to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

json
{
  "mcpServers": {
    "orior": {
      "url": "https://www.oriorai.com/api/mcp",
      "headers": { "Authorization": "Bearer orior_live_…" }
    }
  }
}

VS Code (GitHub Copilot)

Add to .vscode/mcp.json; VS Code asks for the key once and stores it securely:

json
{
  "inputs": [{ "type": "promptString", "id": "orior-key", "description": "Orior API key", "password": true }],
  "servers": {
    "orior": {
      "type": "http",
      "url": "https://www.oriorai.com/api/mcp",
      "headers": { "Authorization": "Bearer ${input:orior-key}" }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

json
{
  "mcpServers": {
    "orior": {
      "serverUrl": "https://www.oriorai.com/api/mcp",
      "headers": { "Authorization": "Bearer orior_live_…" }
    }
  }
}

Claude Desktop and other local clients

Clients that start a local command use the orior-mcp package (Node.js 18+). It forwards to the hosted server and adds upload_local_file, so the agent can use photos and videos from your computer. In Claude Desktop, open Settings → Developer → Edit Config:

json
{
  "mcpServers": {
    "orior": {
      "command": "npx",
      "args": ["-y", "orior-mcp"],
      "env": { "ORIOR_API_KEY": "orior_live_…" }
    }
  }
}

The same command, args and env work in any client that launches stdio servers, such as Codex CLI (~/.codex/config.toml):

toml
[mcp_servers.orior]
command = "npx"
args = ["-y", "orior-mcp"]
env = { ORIOR_API_KEY = "orior_live_…" }

Sign-in and connected apps

When an app connects by signing in, Orior shows which app is asking and where you will return, then lets you choose what it may do:

PermissionScopeWhat the app can do
See your accountreadPlan, credits, usage, models, characters, products and generations. Always included.
Create with your creditsgenerateGenerate images and videos, upload media, manage characters and products.
Publish to social mediasocialConnect characters’ social accounts and publish or schedule posts.
  • You can also give the app a monthly credit limit, like an API key’s. Change it later in Dashboard → Developers → Connected apps.
  • A connected app works like its own API key: same prices, rate and parallel-job limits, idempotency and request logs (listed under the app’s name).
  • Access tokens last an hour and renew automatically. An app unused for 90 days must sign in again.
  • Connecting the same app again replaces its previous connection. Disconnect in Connected apps stops it on its next request.
  • Webhooks are not available to connected apps; use an API key for them.

For client developers: the server follows the MCP authorization spec. A request without a token gets 401 with WWW-Authenticate: Bearer resource_metadata=…; discovery is at /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server, with dynamic client registration, authorization code + PKCE (S256) and rotating refresh tokens.

Tools

The tools a client sees depend on the key’s or connection’s scopes: without social there are no publishing tools, and a read-only connection cannot spend credits.

ToolScopeWhat it does
get_account, get_usagereadPlan, balance, limits and monthly API spend.
list_models, quote_pricereadEvery model’s options and prices; price a request without running it.
generate_imagegenerateImage from a prompt, saved character, scene, product and tagged references (1K–4K).
generate_videogenerateVideo with any of the video models, from a character, start frame, product or narration.
get_generation, list_generationsreadStatus and results; can wait for a generation to finish.
cancel_generation, delete_generationgenerateCancel a queued generation (refunded) or delete a finished one.
upload_mediagenerateStore media from an https URL or data URL for reuse.
open_upload_box, list_uploadsgenerate + readShow an upload box in the chat, then list the files the person added to it.
create_upload_url, finish_uploadgenerate + readUpload a file straight to Orior storage with a temporary URL (up to 200 MB).
list_characters, create_character, create_character_from_preset, update_character, delete_characterread / generateConsistent characters from 1–3 photos or a preset portrait.
list_character_presets, list_voicesreadPreset portraits and voices for characters.
list_products, create_product, update_product, delete_productread / generateProducts characters hold or show.
list_social_accounts, create_social_connect_link, disconnect_social_accountsocialConnect a character’s Instagram, TikTok, YouTube, Threads or X account.
publish_social_post, list_social_posts, get_social_postsocialPublish or schedule generations and check the results.
upload_local_filegenerateOnly in the local package: upload a file from your computer.

Tools carry MCP annotations (read-only, destructive), so clients can ask before deleting or publishing. Each tool maps to an API endpoint and accepts the same fields.

Prompts

Most clients show these as slash commands. They appear when the connection can create (and, for posting, publish), and each one asks before spending on a video or a large batch:

  • ugc_photo: a few authentic, phone camera style photos of a character, optionally with a product.
  • product_photo: a character holding or showing one of your saved products.
  • product_video: a short vertical promo video; picks a model, quotes the price, makes a start frame and the video.
  • travel_series: the same character in several places, one photo each.
  • new_character: pick a preset look, save it as a character and make its first photo.
  • post_and_schedule: make photos of a character and schedule them as a post after you confirm.

Waiting for results

generate_image and generate_video wait at most 45 seconds in total (wait_seconds can shorten that) and return the finished result with a small preview image the agent can look at. Anything still running comes back as a generation ID; the agent continues with get_generation and wait_seconds. Images usually take about a minute, videos 1–5 minutes.

Some clients stop a tool call after 60 seconds, which is why generate calls end within 45. If a client still cuts one off, the generation may already be running and charged: the agent should check list_generations before asking again, and reusing the same idempotency_key makes a retry safe. get_generation never charges, so its waits are safe at any length.

Images and files

  • Media fields take an upload ID (upl_…), a public https URL or a base64 data URL — the same as the API.
  • Prefer character_id and product_id over sending photos again.
  • Files on your computer: use the local package and ask the agent to upload the file path with upload_local_file.
  • In Claude and ChatGPT the agent can open an upload box in the chat with open_upload_box; the person picks photos or videos there and the agent finds them with list_uploads.
  • Results stay in your Orior library; the tool result includes the full-size URL.

Cards in Claude and ChatGPT

Clients that support MCP Apps show generate_image and generate_video as a card in the chat. The card follows the generation until it is ready, then shows the image or video with buttons to download it or open it in your Orior library. Other clients get the same results as text. Cards need a connection with both the generate and read scopes.

Credits, limits and safety

  • MCP calls are API calls: the same API prices, rate and parallel-job limits, refunds and request logs (Dashboard → Developers → Logs).
  • Give agents their own key or connection with only the scopes they need, and set a monthly credit limit on it.
  • Tools that create generations accept an optional idempotency_key; retries with the same key run and charge once.
  • Revoke a key or disconnect an app in the dashboard to cut off an agent immediately.

Troubleshooting

SymptomFix
401 UNAUTHORIZED when connectingWith a key: check the header is exactly Authorization: Bearer orior_live_… and the key is not revoked. With sign-in: connect again.
Sign-in page says the app is not registeredRemove the connector in the app and add it again, so it registers afresh.
The app asks to connect againIt was disconnected in the dashboard, reconnected elsewhere, or unused for 90 days.
403 PLAN_REQUIREDThe plan does not include the feature, such as social publishing on Free.
A tool is missingThe key or connection lacks that tool’s scope. Create a key with the scope, or connect again and allow it.
Tool call timed outCheck list_generations before asking again; the generation may already be running. Lower wait_seconds on get_generation.
402 INSUFFICIENT_CREDITS or SPEND_CAP_REACHEDTop up credits or raise the key’s or connected app’s monthly limit.