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.
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)
- In claude.ai, open Settings → Connectors and choose Add custom connector.
- Name it
Orior, pastehttps://www.oriorai.com/api/mcpas the server URL and add it. - Click Connect. Orior’s sign-in page opens: sign in, choose what Claude may do and click Allow.
- 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
- Turn on developer mode in ChatGPT’s settings (Apps & Connectors → Advanced settings).
- Create a connector named
Oriorwith the server URLhttps://www.oriorai.com/api/mcpand OAuth authentication. - ChatGPT opens Orior’s sign-in page: sign in, choose what ChatGPT may do and click Allow.
- In a chat, add Orior from the tools menu (developer mode) and ask for an image, a video or a post.
Claude Code
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):
{
"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:
{
"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:
{
"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:
{
"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):
[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:
| Permission | Scope | What the app can do |
|---|---|---|
| See your account | read | Plan, credits, usage, models, characters, products and generations. Always included. |
| Create with your credits | generate | Generate images and videos, upload media, manage characters and products. |
| Publish to social media | social | Connect 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.
| Tool | Scope | What it does |
|---|---|---|
get_account, get_usage | read | Plan, balance, limits and monthly API spend. |
list_models, quote_price | read | Every model’s options and prices; price a request without running it. |
generate_image | generate | Image from a prompt, saved character, scene, product and tagged references (1K–4K). |
generate_video | generate | Video with any of the video models, from a character, start frame, product or narration. |
get_generation, list_generations | read | Status and results; can wait for a generation to finish. |
cancel_generation, delete_generation | generate | Cancel a queued generation (refunded) or delete a finished one. |
upload_media | generate | Store media from an https URL or data URL for reuse. |
open_upload_box, list_uploads | generate + read | Show an upload box in the chat, then list the files the person added to it. |
create_upload_url, finish_upload | generate + read | Upload 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_character | read / generate | Consistent characters from 1–3 photos or a preset portrait. |
list_character_presets, list_voices | read | Preset portraits and voices for characters. |
list_products, create_product, update_product, delete_product | read / generate | Products characters hold or show. |
list_social_accounts, create_social_connect_link, disconnect_social_account | social | Connect a character’s Instagram, TikTok, YouTube, Threads or X account. |
publish_social_post, list_social_posts, get_social_post | social | Publish or schedule generations and check the results. |
upload_local_file | generate | Only 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.
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_idandproduct_idover 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 withlist_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
| Symptom | Fix |
|---|---|
401 UNAUTHORIZED when connecting | With 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 registered | Remove the connector in the app and add it again, so it registers afresh. |
| The app asks to connect again | It was disconnected in the dashboard, reconnected elsewhere, or unused for 90 days. |
403 PLAN_REQUIRED | The plan does not include the feature, such as social publishing on Free. |
| A tool is missing | The key or connection lacks that tool’s scope. Create a key with the scope, or connect again and allow it. |
| Tool call timed out | Check list_generations before asking again; the generation may already be running. Lower wait_seconds on get_generation. |
402 INSUFFICIENT_CREDITS or SPEND_CAP_REACHED | Top up credits or raise the key’s or connected app’s monthly limit. |