Skip to main content
Sigmora runs a Model Context Protocol server, so an assistant you already use can work inside your workspace — rendering, editing, researching and publishing — instead of you copying results between tabs. The MCP server takes the same sk_live_ key, answers on the same host, charges the same prices and bills the same balance as the REST API. Every priced capability in the API reference is a tool, along with projects, assets, jobs, research, publishing and Sigma. It is not every REST endpoint. Brands, products, autopilots and autopilot runs, themes, trends, niches, viral content, topic monitors, webhook subscriptions, workflows and agent runs are REST-only today — call them over HTTP. Every tool has a REST twin on api.sigmora.org, deleting a project included. An Idempotency-Key (the idempotencyKey argument on a tool) protects retries on the door it was sent to. Retry a tool call as a tool call and an HTTP call as an HTTP call; the same key sent once over MCP and once over HTTP is two calls.

Connect

That is the shape most MCP clients read. ${SIGMORA_API_KEY} stands for your key, read from the environment; each host writes that reference its own way, so use the exact configuration for your host from Install in your agent. Create the key in Settings → API keys. The transport is stateless Streamable HTTP (JSON-RPC 2.0). The server supports the 2026-07-28 protocol — including server/discover, routable request headers and cache hints — and still accepts the 2025-06-18 initialization handshake. Hosted clients (ChatGPT, Claude, Cursor and other OAuth-capable MCP hosts) can connect with OAuth instead of a key. The protected-resource metadata (RFC 9728, linked from the WWW-Authenticate challenge on a 401) names the authorization server https://sigmora.org, which supports Client ID Metadata Documents, dynamic client registration, PKCE (S256 only), private_key_jwt, refresh-token rotation and revocation. The person signs in, picks one workspace, and approves the scopes read, generate and publish; the token then acts exactly like a key for that workspace on the MCP server and can be disconnected in Settings → API keys. OAuth access tokens (sk_oat_…) are for the MCP server only; the REST API at api.sigmora.org/v1 accepts sk_live_ keys. See Sigmora in ChatGPT. Keep sk_live_ keys for local CLI configuration, load them from SIGMORA_API_KEY, and do not commit them to a plugin or repository.

Install in your agent

Each section below is one of the 11 hosts the Sigmora agent kit supports: the configuration exactly as the kit ships it, and where it goes.
The agent kit is not published yet, and its public repository (mlsniperpro/sigmora-agent-kit) is not open yet. Until they are, paste the template for your host below: it is the same text the kit’s installer writes, and it works today. The plugin marketplaces work once the repository is public.
Key hosts read the key from the environment. Create it in Settings → API keys and export it where the host starts:

Codex

Add this to your user config, ~/.codex/config.toml (a project’s .codex/config.toml works too). Paste the block with its two marker lines; the installer only ever replaces what is between them.
~/.codex/config.toml (user config)
Start Codex from a shell where SIGMORA_API_KEY is set: the template only references the variable, so the key never goes in the file. The Codex plugin carries the same server in its own plugin .mcp.json, next to the skills. Codex loads it when you install the sigmora plugin from the agent-kit marketplace (mlsniperpro/sigmora-agent-kit, once the agent-kit repository is public); you do not paste it into your user config:
plugin .mcp.json

Claude Code

Add this to .mcp.json in your project, or ~/.claude.json for every project. If the file already lists other servers, add the sigmora entry next to them.
.mcp.json
Start Claude Code from a shell where SIGMORA_API_KEY is set: the template only references the variable, so the key never goes in the file. Or let Claude Code write the same entry. The single quotes keep the variable unexpanded, so the key never lands in the file:
For the plugin (the MCP server plus the Sigmora skills), add the agent-kit marketplace, once the agent-kit repository is public:

OpenCode

Add this to opencode.json in your project, or ~/.config/opencode/opencode.json for every project. If the file already lists other servers, add the sigmora entry next to them.
opencode.json
Start OpenCode from a shell where SIGMORA_API_KEY is set: the template only references the variable, so the key never goes in the file.

Antigravity

Add this to .agents/mcp_config.json in your project, or ~/.gemini/config/mcp_config.json for every project. If the file already lists other servers, add the sigmora entry next to them.
.agents/mcp_config.json
No key: the first time Antigravity connects, it asks you to sign in to Sigmora. Sign in, pick the workspace it may work in, and approve.

Qwen Code

Add this to .qwen/settings.json in your project, or ~/.qwen/settings.json for every project. If the file already lists other servers, add the sigmora entry next to them.
.qwen/settings.json
No key: the first time Qwen Code connects, it asks you to sign in to Sigmora. Sign in, pick the workspace it may work in, and approve.

Kimi Code CLI

Add this to .kimi-code/mcp.json in your project, or ~/.kimi-code/mcp.json for every project. If the file already lists other servers, add the sigmora entry next to them.
.kimi-code/mcp.json
Start Kimi Code CLI from a shell where SIGMORA_API_KEY is set: the template only references the variable, so the key never goes in the file.

DeepSeek Harness

Add this to cordis.patch.yml in your project. Paste the block with its two marker lines; the installer only ever replaces what is between them.
cordis.patch.yml
Start DeepSeek Harness from a shell where SIGMORA_API_KEY is set: the template only references the variable, so the key never goes in the file.

ZCode

Add this to .mcp.json in your project. If the file already lists other servers, add the sigmora entry next to them.
.mcp.json
Start ZCode from a shell where SIGMORA_API_KEY is set: the template only references the variable, so the key never goes in the file. For the plugin (the MCP server plus the Sigmora skills), import the agent-kit repository (mlsniperpro/sigmora-agent-kit, once the agent-kit repository is public) in ZCode’s Plugins screen.

CodeBuddy

Add this to .mcp.json in your project, or ~/.codebuddy/.mcp.json for every project. If the file already lists other servers, add the sigmora entry next to them.
.mcp.json
Start CodeBuddy from a shell where SIGMORA_API_KEY is set: the template only references the variable, so the key never goes in the file.

Cursor

Add this to .cursor/mcp.json in your project, or ~/.cursor/mcp.json for every project. If the file already lists other servers, add the sigmora entry next to them.
.cursor/mcp.json
No key: the first time Cursor connects, it asks you to sign in to Sigmora. Sign in, pick the workspace it may work in, and approve.

Gemini CLI

Add this to .gemini/settings.json in your project, or ~/.gemini/settings.json for every project. If the file already lists other servers, add the sigmora entry next to them.
.gemini/settings.json
No key: the first time Gemini CLI connects, it asks you to sign in to Sigmora. Sign in, pick the workspace it may work in, and approve.

ChatGPT

ChatGPT connects when you sign in to Sigmora: no key, no file and no agent kit. Follow Sigmora in ChatGPT.

Keep the tool context small

By default the server exposes every tool. Most agents are more reliable — and use less context — with a task-specific profile. Set it with a header next to Authorization:
A profile limits what the agent sees; it is not a permission system. The server still enforces it, so a tool outside the profile cannot be called by name, and an unknown profile name is refused rather than falling back to full.
https://docs.sigmora.org/mcp is a different server — this documentation site’s own, which searches these pages. The one above does the work.

Tool names

A tool is named for its operation, with the dot replaced by an underscore. Tool schemas and prices come from the same catalogue as the API reference, so tools/list and these docs always agree. Live prices are in capabilities_list. For video work, call video_options before filling advanced fields. It exposes the live TTS, course, chess, renderer and derivative registries. Use video_catalog_domains and video_catalog_list to obtain exact catalogue ids, then pass one to video_render. For a draft, set draft: true; when it is done, call video_render_finalize with its jobId and projectId for the full-quality render. Once a final job is done, use video_shorts for platform-specific derivative scripts. If jobs_get returns qa_failed, fetch artifacts.scriptReview for the source-grounded release decision before revising and retrying. Use video_provenance_verify with a manifest you extracted locally; never send the video or image bytes to that tool.

Start or resume the project session

Create or select a project first, then call project_session_start. It idempotently binds that project and returns sessionId, projectId, and a dashboard handoff for the same work. Pass that projectId to every capability tool in the session. project_context_get restores the binding after a host reconnect. project_session_start requires the existing projectId and a stable idempotencyKey. Send the host name, your client version, an opaque session id and a privacy mode. artifacts_only is the safe default; conversation summaries or full transcripts are stored only when the user chooses those modes.

Project media and local files

MCP carries stable references, never multi-gigabyte file bodies. For a local file, use the sigmora command from the agent kit. The agent kit is not published yet (see Install in your agent); once it is, run sigmora upload <path> --project <projectId> with SIGMORA_API_KEY set. The helper computes the SHA-256, uploads straight to the signed storage URL (in multipart batches for large files) and returns the asset and content ids. Without the helper, open the project in the dashboard and upload there. The helper also recovers interrupted uploads. After an expired upload URL, a lost response, an uncertain completion or an idempotency conflict, it reads GET /v1/assets/upload/status, which tells it to wait, retry the completion, or prepare a fresh upload URL. The asset and content ids stay the same, and bytes are never uploaded twice just because completion was uncertain. An upload that cannot be resolved yet is reported as pending recovery, not as ready.

Two differences from HTTP

A tool call carries arguments, not headers, so two HTTP headers become arguments. Everything else — authentication, prices, error codes, projects and job polling — is identical.

Agents and research

The server also exposes the workspace’s autonomous agents and research tools: create_agent defaults to draft-only autonomy: it produces drafts and publishes nothing without review.

When to ask, when to proceed

The server never asks questions on its own. Whether to ask depends on who is listening:
  • A human is in the loop and a required choice is genuinely ambiguous (which clips, how long, which language): ask one short question before spending credits.
  • You are unattended (scheduled, batched, fire-and-forget): nobody will answer, so make the best assumption from the workspace, finish, and state what you assumed. Stopping to wait turns a job into a hang.
Either way, read before asking: projects_get, list_chat_threads and get_chat_thread usually contain the answer.

Rules for agents

Four things that are easy — and expensive — to get wrong:
  • Spending is real. Every paid capability call debits a human’s credit balance and cannot be undone once it succeeds. Confirm before a batch.
  • Retry with the same idempotencyKey. Paid MCP tools and durable control writes refuse a missing key. A repeat with the same id and the same arguments replays the stored result instead of doing — and charging for — the work twice. The same id with different arguments is refused, not answered.
  • An async tool hands you a job id, not an answer. Read it with jobs_get until status is done, cancelled, failed, or qa_failed. Never publish artifacts from qa_failed; they are diagnostic evidence from a blocked release.
  • awaiting_review is a person, not a delay. Polling will never advance it. Page the cut ids with jobs_proposal_get, obtain approval, then call video_edit_approve; otherwise hand the review to the dashboard.
llms.txt has the whole API in one plain file, written for agents.