{"_id":"@offlinecreator/mcp","_rev":"5-85573c59d7076056be09884f170ea435","name":"@offlinecreator/mcp","dist-tags":{"latest":"0.1.4"},"versions":{"0.1.0":{"name":"@offlinecreator/mcp","version":"0.1.0","keywords":["mcp","offlinecreator","cursor","claude","image-generation","video-generation"],"license":"MIT","_id":"@offlinecreator/mcp@0.1.0","maintainers":[{"name":"offlinecreator","email":"support@offlinecreator.com"}],"homepage":"https://offlinecreatorstudio.com/b","bin":{"offlinecreator-mcp":"dist/index.js"},"dist":{"shasum":"5c302296e6f97a0f03c6a707d258bb8249e58544","tarball":"https://registry.npmjs.org/@offlinecreator/mcp/-/mcp-0.1.0.tgz","fileCount":14,"integrity":"sha512-KAtaWkNJ7Yn1haQ9wGFetWUo7PItTCuw7VbOGKXykPYelQn3vYB7lwM2yCprxLiMIGZf+MJpTeVR6941zwr1Tw==","signatures":[{"sig":"MEUCICxXXeI/s1JV2pmWro4HfjieBJZj1e0kiFKA8YSdJYq1AiEAnykOr4Lg+WgdVWqwUxG9eIk0/Hb2ALtosu8PBHFSbLU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36203},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"}},"gitHead":"eeac39d4bebb4b974ebbbc871f3d4ae953237a8d","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"npm run build && node --test dist/config.test.js dist/safe-fs.test.js","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"offlinecreator","email":"support@offlinecreator.com"},"_npmVersion":"11.6.2","description":"OfflineCreator Studio MCP server for Cursor, Claude, Hermes, and other MCP clients","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/server":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1785971790166_0.6959194930072596","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@offlinecreator/mcp","version":"0.1.1","keywords":["mcp","offlinecreator","cursor","claude","image-generation","video-generation"],"license":"MIT","_id":"@offlinecreator/mcp@0.1.1","maintainers":[{"name":"offlinecreator","email":"support@offlinecreator.com"}],"homepage":"https://offlinecreatorstudio.com/mcp-cli","bin":{"offlinecreator-mcp":"dist/index.js"},"dist":{"shasum":"a6329f30ed29caec6e4bddaf14bbf6037f84153f","tarball":"https://registry.npmjs.org/@offlinecreator/mcp/-/mcp-0.1.1.tgz","fileCount":18,"integrity":"sha512-ILrbh/w3Is1pfT8TyFPob32z6ARA5+FeVtPD1/G2lCn4g1MKJDhuNhislOUIOs/7skZKWvVtlGl0r2V4P0fS0g==","signatures":[{"sig":"MEUCIBWOV9VcuvqfQxDbAV1ZzFo88KH9/tGGbQSz8ytpPd4EAiEA8zDWTzl01Wu1yUlDikGIucuMONYa7RUcq4bZvavGnH4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44121},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./oauth-bridge":{"types":"./dist/oauth-bridge.d.ts","import":"./dist/oauth-bridge.js"}},"gitHead":"0232d82e37a70cefe9804e048e6cead051d5d66b","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"npm run build && node --test dist/config.test.js dist/oauth-bridge.test.js dist/safe-fs.test.js","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"offlinecreator","email":"support@offlinecreator.com"},"_npmVersion":"11.6.2","description":"OfflineCreator Studio MCP server for Cursor, Claude, Hermes, and other MCP clients","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/server":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1786149367817_0.44768301548755285","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@offlinecreator/mcp","version":"0.1.2","keywords":["mcp","offlinecreator","cursor","claude","image-generation","video-generation"],"author":{"url":"https://offlinecreatorstudio.com","name":"OfflineCreator Studio"},"license":"MIT","_id":"@offlinecreator/mcp@0.1.2","maintainers":[{"name":"offlinecreator","email":"support@offlinecreator.com"}],"homepage":"https://offlinecreatorstudio.com/mcp-cli","bugs":{"url":"https://github.com/OfflineCreatorStudio/offlinecreator-mcp/issues"},"bin":{"offlinecreator-mcp":"dist/index.js"},"dist":{"shasum":"47e052c51ef70ddd34dd5fb9752c54ab777f34b0","tarball":"https://registry.npmjs.org/@offlinecreator/mcp/-/mcp-0.1.2.tgz","fileCount":19,"integrity":"sha512-ZHOBz7vSlb/VVmN865n9RJ/mUlO1nyxYvTd5IUxgllaICV9cYPq93xrViMEg6FgNTEhKXRL1MNnMcvyBIyjfuQ==","signatures":[{"sig":"MEQCIFEkupoNVMEyIMxfp4ciYgpbSXkqQbhg88MdVMxRZy9yAiAyNYWbdw6cfUMNmTtSbeMVf9OMOUpqd/AbJRli3oNLCQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@offlinecreator%2fmcp@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":45732},"main":"./dist/index.js","type":"module","_from":"file:release/offlinecreator-mcp-0.1.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./oauth-bridge":{"types":"./dist/oauth-bridge.d.ts","import":"./dist/oauth-bridge.js"}},"mcpName":"com.offlinecreatorstudio/mcp","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"npm run build && node --test dist/config.test.js dist/oauth-bridge.test.js dist/safe-fs.test.js dist/server.test.js","build":"tsc -p tsconfig.json","start":"node dist/index.js","format":"prettier --write .","validate":"npm run format:check && npm run typecheck && npm test && npm run validate:manifests && npm run validate:schemas && npm run validate:docs && npm run validate:assets && npm run validate:pack && npm run scan:public && npm run scan:history && npm run check:licenses && npm run check:action-pins && npm run test:stdio","typecheck":"tsc -p tsconfig.json --noEmit","test:stdio":"npm run build && node scripts/smoke-stdio.mjs","scan:public":"node scripts/scan-public.mjs","test:remote":"node scripts/smoke-remote.mjs","format:check":"prettier --check .","scan:history":"node scripts/scan-git-history.mjs","validate:docs":"node scripts/check-doc-links.mjs","validate:pack":"node scripts/validate-pack.mjs","check:licenses":"node scripts/check-licenses.mjs","prepublishOnly":"npm run validate","release:verify":"node scripts/verify-release-artifacts.mjs","release:prepare":"node scripts/prepare-release.mjs","validate:assets":"node scripts/validate-assets.mjs","validate:schemas":"node scripts/validate-official-schemas.mjs","check:action-pins":"node scripts/verify-action-pins.mjs","audit:dependencies":"npm audit --audit-level=high","validate:manifests":"node scripts/validate-manifests.mjs"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:01028112-b28c-4682-8ffd-6e1a967670f0"}},"_resolved":"/home/runner/work/offlinecreator-mcp/offlinecreator-mcp/release/offlinecreator-mcp-0.1.2.tgz","_integrity":"sha512-ZHOBz7vSlb/VVmN865n9RJ/mUlO1nyxYvTd5IUxgllaICV9cYPq93xrViMEg6FgNTEhKXRL1MNnMcvyBIyjfuQ==","repository":{"url":"git+https://github.com/OfflineCreatorStudio/offlinecreator-mcp.git","type":"git"},"_npmVersion":"11.16.0","description":"OfflineCreator Studio MCP server for remote OAuth and local stdio clients","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/server":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.20.0","prettier":"^3.9.6","typescript":"^5","@types/node":"^20","ajv-formats":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.2_1786216430835_0.34170864440925497","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@offlinecreator/mcp","version":"0.1.3","keywords":["mcp","offlinecreator","cursor","claude","image-generation","video-generation"],"author":{"url":"https://github.com/OfflineCreatorStudio","name":"OfflineCreator Studio"},"license":"MIT","_id":"@offlinecreator/mcp@0.1.3","maintainers":[{"name":"offlinecreator","email":"support@offlinecreator.com"}],"homepage":"https://offlinecreatorstudio.com/mcp-cli","bugs":{"url":"https://github.com/OfflineCreatorStudio/offlinecreator-mcp/issues"},"bin":{"offlinecreator-mcp":"dist/index.js"},"dist":{"shasum":"264287dccb6e1366b8b10b095ace3739255f782c","tarball":"https://registry.npmjs.org/@offlinecreator/mcp/-/mcp-0.1.3.tgz","fileCount":26,"integrity":"sha512-vedmDQ7WjYTWhxJ5tnXjYgq5ZyhmM4egry853tkpvucUHjTZLGc87rvpRVGp2+yn8BN9SXoSCmFyXabllHVXyA==","signatures":[{"sig":"MEYCIQC/2HvbeXcRvzvYq8Je40TDEHEh/f9GZF5ron4Guzc+MAIhAJjK8hm+Usi/SPRBMyrteCSo+IeZr7fzaYQv8j6l0Vc/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98909},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./oauth-bridge":{"types":"./dist/oauth-bridge.d.ts","import":"./dist/oauth-bridge.js"}},"gitHead":"9392fafa8d9995829a17e567480b0a955effe019","mcpName":"com.offlinecreatorstudio/mcp","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"npm run build && node --test dist/config.test.js dist/oauth-bridge.test.js dist/safe-fs.test.js dist/server.test.js dist/x402.test.js dist/outcomes.test.js","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"offlinecreator","email":"support@offlinecreator.com"},"repository":{"url":"git+https://github.com/OfflineCreatorStudio/offlinecreator-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"OfflineCreator Studio MCP server for Cursor, Claude, Hermes, and other MCP clients","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.4.3","viem":"^2.55.13","@x402/evm":"^2.22.0","@x402/fetch":"^2.22.0","@modelcontextprotocol/server":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.3_1786840366563_0.5836668164816954","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"_id":"@offlinecreator/mcp@0.1.4","bin":{"offlinecreator-mcp":"dist/index.js"},"bugs":{"url":"https://github.com/OfflineCreatorStudio/offlinecreator-mcp/issues"},"dist":{"shasum":"54f6c211843d078acb5d814ca20e54e19f2ac97f","tarball":"https://registry.npmjs.org/@offlinecreator/mcp/-/mcp-0.1.4.tgz","fileCount":30,"integrity":"sha512-LZdQ8sRtrb3qI6bJRzyO0mL/RvUQPngIWdVeHply46eXEp3BvAQPWdT2SYgAqthWv9Jsl/cHrtfUAifL3ewMuQ==","signatures":[{"sig":"MEUCIA7Qs3jQhZK6NfmktLhf51mFnvQMrfQ1AkAfhXyRoxH+AiEAiVSPrwLmeoVITLtxFkFoYFJaPDhfT4Z8nlXasynlDds=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDSJWdzODX3ZJLQkjr5WFVCxMdPuiUBPtDO0q62rWMS5gIgEsagyHlus6XOX5lpWdPvn02Hz3W0MKRhdchUjD5xTBo="}],"unpackedSize":203669},"main":"./dist/index.js","name":"@offlinecreator/mcp","type":"module","types":"./dist/index.d.ts","author":{"url":"https://github.com/OfflineCreatorStudio","name":"OfflineCreator Studio"},"engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./a2a":{"types":"./dist/a2a.d.ts","import":"./dist/a2a.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./oauth-bridge":{"types":"./dist/oauth-bridge.d.ts","import":"./dist/oauth-bridge.js"},"./agent-readiness":{"types":"./dist/agent-readiness.d.ts","import":"./dist/agent-readiness.js"}},"license":"MIT","mcpName":"com.offlinecreatorstudio/mcp","scripts":{"dev":"tsc -p tsconfig.json --watch","test":"npm run build && node --test dist/agent-readiness.test.js dist/a2a.test.js dist/config.test.js dist/oauth-bridge.test.js dist/safe-fs.test.js dist/server.test.js dist/x402.test.js dist/outcomes.test.js dist/protocol-compatibility.test.js dist/client.test.js","build":"tsc -p tsconfig.json","start":"node dist/index.js","prepublishOnly":"npm run build && npm test"},"version":"0.1.4","_npmUser":{"name":"offlinecreator","email":"support@offlinecreator.com"},"homepage":"https://offlinecreatorstudio.com/mcp-cli","keywords":["mcp","offlinecreator","cursor","claude","image-generation","video-generation"],"repository":{"url":"git+https://github.com/OfflineCreatorStudio/offlinecreator-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"OfflineCreator Studio MCP server for Cursor, Claude, Hermes, and other MCP clients","directories":{},"maintainers":[{"name":"offlinecreator","email":"support@offlinecreator.com"}],"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.4.3","viem":"^2.55.13","@x402/evm":"^2.22.0","@x402/fetch":"^2.22.0","@modelcontextprotocol/server":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5","@types/node":"^20"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.4_1790475541862_0.23616023028802302"}}},"time":{"created":"2026-08-05T23:16:29.932Z","modified":"2026-09-27T02:19:02.147Z","0.1.0":"2026-08-05T23:16:30.310Z","0.1.1":"2026-08-08T00:36:07.971Z","0.1.2":"2026-08-08T19:13:50.984Z","0.1.3":"2026-08-16T00:32:46.712Z","0.1.4":"2026-09-27T02:19:01.952Z"},"bugs":{"url":"https://github.com/OfflineCreatorStudio/offlinecreator-mcp/issues"},"author":{"url":"https://github.com/OfflineCreatorStudio","name":"OfflineCreator Studio"},"license":"MIT","homepage":"https://offlinecreatorstudio.com/mcp-cli","keywords":["mcp","offlinecreator","cursor","claude","image-generation","video-generation"],"repository":{"url":"git+https://github.com/OfflineCreatorStudio/offlinecreator-mcp.git","type":"git"},"description":"OfflineCreator Studio MCP server for Cursor, Claude, Hermes, and other MCP clients","maintainers":[{"name":"offlinecreator","email":"support@offlinecreator.com"}],"readme":"# @offlinecreator/mcp\r\n\r\nMCP server + thin CLI for [OfflineCreator Studio](https://offlinecreatorstudio.com).\r\n\r\nGives Cursor, Claude Desktop, Claude Code, Hermes, Windsurf, and other MCP clients tools to list models, check credits, run image/video/audio/3D workflows, upload typed assets, and retrieve every result.\r\n\r\n**Current release:** [`@offlinecreator/mcp@0.1.3`](https://www.npmjs.com/package/@offlinecreator/mcp)\r\n\r\n**Next release (0.1.4, prepared, not yet published):** `cancel_outcome`,\r\n`client_reference` on outcome intents (order the same brief again as a new\r\norder), `wait_outcome` that reads `run.outcome_status` (cancelled and\r\npartially completed orders end the wait; a draining cancel keeps it going), and\r\nA2A `CancelTask` answering `TaskNotCancelable` once a job reached its provider,\r\n`maxCredits` on `generate` (Studio refuses a costlier quote without charging),\r\n`structuredContent` and a `resource_link` on completed outputs (for clients on\r\nMCP 2025-06-18 or later), and an immediate return from `generate` on remote\r\ntransports. Until it is published, the hosted remote servers report version\r\n0.1.3 and hide its unreleased tools (`PUBLISHED_MCP_RELEASE` in\r\n`src/server.ts`). They hide whole tools only: the hosted servers already accept\r\nthe new parameters and return the new result shapes. The npm 0.1.3 stdio\r\npackage drops `maxCredits`, so its ceiling is not enforced there.\r\n\r\n**Recommended remote MCP:** `https://mcp.offlinecreatorstudio.com/mcp` (Streamable HTTP + OAuth 2.1)\r\n\r\n**API-key fallback:** local stdio or `https://offlinecreatorstudio.com/mcp`\r\n\r\n## Setup\r\n\r\nAdd the recommended URL to your MCP client, then complete Studio browser\r\nsign-in and consent. No API key is stored in the client configuration.\r\n\r\nFor local stdio or legacy remote fallback, create a scoped key in **Settings**\r\nand copy the secret once (`oc_live_…` or `oc_test_…`).\r\n\r\n### Environment\r\n\r\n| Variable | Required | Description |\r\n|----------|----------|-------------|\r\n| `OFFLINECREATOR_API_KEY` | Yes | Personal API key from Settings |\r\n| `OFFLINECREATOR_API_BASE` | No | API origin. Default `https://offlinecreatorstudio.com`. Localhost allowed; other hosts need `OFFLINECREATOR_ALLOW_INSECURE_API_BASE=true`. |\r\n| `OFFLINECREATOR_UPLOAD_ROOT` | No | Directory that `upload_input` and `upload_asset` file paths must stay inside (default: process cwd). |\r\n| `OFFLINECREATOR_ALLOW_INSECURE_API_BASE` | No | Set `true` only for private/non-prod API hosts. |\r\n| `X402_EVM_PRIVATE_KEY` | No | Optional EVM wallet private key for stdio MCP / CLI. Pays x402 USDC challenges for top-ups and pay-as-you-go generations. Never paste into chat. |\r\n| `OFFLINECREATOR_X402_MAX_USD` | No | Optional per-payment spend cap in USD (default `50`). |\r\n\r\n## Security notes\r\n\r\n- API keys stay in env / MCP client config — tools never echo them.\r\n- `upload_input` cannot read arbitrary disk paths: paths must stay under the upload root, use image extensions, pass size limits, and match image magic bytes.\r\n- `upload_asset` uses the same root boundary, a media/mesh extension allowlist, server-side slot validation, and a 250 MB ceiling.\r\n- The client only calls `/api/v1/*` on a trusted API origin (HTTPS except localhost).\r\n- Generations still use Studio moderation, credit reserve/refund, and ownership checks.\r\n- x402 is payment, not identity: API-key auth still runs first. Wallet keys stay in the agent environment; the hosted OAuth Worker never holds them.\r\n\r\nOperator/agent SOP for stdio `filePath` vs remote `imageBase64` (including Cursor tool-bridge size limits): [`docs/mcp-media-upload.md`](../../docs/mcp-media-upload.md).\r\n\r\nProduct overview for dual-rail payments: [x402 agent payments](https://offlinecreatorstudio.com/x402).\r\n\r\n## Install by client\r\n\r\n### Cursor\r\n\r\nRecommended remote OAuth:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"offlinecreator\": {\r\n      \"url\": \"https://mcp.offlinecreatorstudio.com/mcp\"\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nAPI-key stdio fallback:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"offlinecreator\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"@offlinecreator/mcp\"],\r\n      \"env\": {\r\n        \"OFFLINECREATOR_API_KEY\": \"oc_live_…\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nNever put the key in the URL or use `?api_key=`.\r\n\r\nLocal monorepo development:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"offlinecreator\": {\r\n      \"command\": \"node\",\r\n      \"args\": [\"C:/path/to/mcp_tool/packages/mcp/dist/index.js\"],\r\n      \"env\": {\r\n        \"OFFLINECREATOR_API_KEY\": \"oc_test_…\",\r\n        \"OFFLINECREATOR_API_BASE\": \"http://localhost:3000\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Claude Desktop\r\n\r\nAdd `https://mcp.offlinecreatorstudio.com/mcp` in **Settings → Connectors →\r\nAdd custom connector**. Use the stdio JSON above in\r\n`%APPDATA%\\Claude\\claude_desktop_config.json` as the API-key fallback.\r\n\r\n### Claude Code\r\n\r\nRemote OAuth:\r\n\r\n```bash\r\nclaude mcp add offlinecreator --transport http https://mcp.offlinecreatorstudio.com/mcp\r\n```\r\n\r\nLocal stdio:\r\n\r\n```bash\r\nclaude mcp add offlinecreator --env OFFLINECREATOR_API_KEY=oc_live_… -- npx -y @offlinecreator/mcp\r\n```\r\n\r\n### Hermes\r\n\r\nAdd to `~/.hermes/config.yaml`, then run `/reload-mcp`:\r\n\r\n```yaml\r\nmcp_servers:\r\n  offlinecreator:\r\n    url: \"https://mcp.offlinecreatorstudio.com/mcp\"\r\n```\r\n\r\n### Windsurf\r\n\r\nAdd to `%USERPROFILE%\\.codeium\\windsurf\\mcp_config.json`:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"offlinecreator\": {\r\n      \"serverUrl\": \"https://mcp.offlinecreatorstudio.com/mcp\"\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### VS Code / Copilot\r\n\r\nVS Code uses `servers` rather than `mcpServers`. Add to `.vscode/mcp.json` or\r\nthe MCP user configuration:\r\n\r\n```json\r\n{\r\n  \"servers\": {\r\n    \"offlinecreator\": {\r\n      \"type\": \"http\",\r\n      \"url\": \"https://mcp.offlinecreatorstudio.com/mcp\"\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Legacy remote API-key fallback\r\n\r\nClients that support fixed headers can still use:\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"offlinecreator\": {\r\n      \"url\": \"https://offlinecreatorstudio.com/mcp\",\r\n      \"headers\": {\r\n        \"Authorization\": \"Bearer ${env:OFFLINECREATOR_API_KEY}\"\r\n      }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nNever put a key in the URL or use `?api_key=`.\r\n\r\n## Tools\r\n\r\n| Tool | Purpose |\r\n|------|---------|\r\n| `list_models` | Launch catalog + credit costs |\r\n| `quote_generation` | Lock a provider-routed quote before generation |\r\n| `plan_outcome` | Intent → route → quote → local workflow DAG → evaluate. Preview only; does not start live catalog jobs. Optional `includePilot` (`?pilot=1`) compares third-party pilot listings; default is first-party only. Authenticated execute is `execute_outcome`. Unauthenticated production returns `NOT_LIVE`. |\r\n| `quote_outcome` | Payable outcome quote against the studio credit ledger (`offlinecreator.payment/v1`) with a SHA-256 routing attestation. `accepted_rails` lists credits, optional x402, human Stripe, optional MPP (Stripe Machine Payments Protocol; settles when enabled on the deployment, and `available` reports live status), and the reserved `card_agent` slot. Unauthenticated production returns `NOT_LIVE`. |\r\n| `execute_outcome` | Run the workflow. API keys call the generation service and project settlement eligibility from reservations. Never settled. With outcome holds on for the account, the order's full price is held once, steps draw from it, a failed step's refund returns to the hold (a retry costs nothing extra) and the rest returns to the balance when the order finishes, is cancelled or sits idle for 30 minutes (6 hours at most). The same brief from the same account is the same order; send `client_reference` to order it again. `policy.prefer_rail=x402` is pay-per-outcome USDC even when the credit ledger has balance. Optional `includePilot` compares pilot listings; API keys do not imply marketplace routing. Unauthenticated production returns `NOT_LIVE`. |\r\n| `settle_outcome` | Acknowledge a completed outcome against existing generation reservations. Does not debit credits again. Unauthenticated production returns `NOT_LIVE`. |\r\n| `get_receipt` | Fetch the stored receipt and live run for an attestation hash. `run.outcome_status` (running, completed, failed, incomplete, cancelled, partially_completed) and `run.step_status` give the order's state; `deliverables` lists each completed step's output with a 10-minute download URL and `credits` breaks down its credits (both need the `read` scope). The local logo stub is not a deliverable. Unauthenticated production returns `NOT_LIVE`. |\r\n| `wait_outcome` | Poll the stored run until the order finishes (completed, failed, cancelled or partially completed); a cancel that is still draining keeps the wait going. Does not start catalog work. Download from `deliverables` or with `download_output`. Unauthenticated production returns `NOT_LIVE`. |\r\n| `cancel_outcome` | Cancel an outcome order: steps not yet at a provider stop and their credits return; running jobs finish and are charged only if they succeed. 200 when done, 202 while jobs finish (`waitSeconds` up to 25). Runs without an outcome hold answer 409 `legacy_run` with per-generation cancel links. |\r\n| `list_outcome_capabilities` | Rate-card + optional marketplace pilot capabilities. Unauthenticated production returns `NOT_LIVE`. |\r\n| `verify_attestation` | Re-hash a routing attestation. Unauthenticated production returns `NOT_LIVE`. |\r\n| `get_credits` | Current balance |\r\n| `generate` | Start generation. Optional `maxCredits` caps the spend: Studio refuses a costlier locked quote without charging. `wait: true` polls up to 120 s over stdio; remote connections return the `generationId` at once (follow up with `wait_generation`) |\r\n| `upload_input` | Attach image for image-to-video, then submit |\r\n| `upload_asset` | Attach an ordered image, video, audio, mesh, or draft-cache input; optionally submit |\r\n| `get_generation` | Current status |\r\n| `wait_generation` | Poll until done |\r\n| `download_output` | Short-lived signed URL for a completed output |\r\n| `cancel_generation` | Cancel a reserved job before submission + refund; repeating is safe, and a submitted or finished job answers 409 with a reason |\r\n| `list_generations` | Recent jobs |\r\n\r\nCompleted outputs from `generate`, `upload_input`, `upload_asset`,\r\n`get_generation`, `wait_generation`, and `download_output` also return MCP\r\n`structuredContent` and a `resource_link` (`uri`, `name`, `mimeType`) to the\r\nsigned output, after the unchanged text JSON, when the request speaks protocol\r\nrevision 2025-06-18 or later. Older revisions (including a 2025-era HTTP request\r\nwithout `MCP-Protocol-Version`, which counts as 2025-03-26) get the text JSON\r\nonly, since neither field exists before 2025-06-18.\r\n\r\nTools are filtered by key scope (`models`, `read`, `generate`). Top-up\r\ndiscovery and Checkout creation are CLI/API features, not MCP tools.\r\n\r\n**Two payment rails:**\r\n\r\n- **Humans / Stripe:** CLI `topups` / `topup --id … --stripe` (or Studio\r\n  pricing Buy) return a Checkout URL for a human browser action. Agents must\r\n  not complete card checkout inside the MCP client.\r\n- **Agents / x402 (optional):** With `X402_EVM_PRIVATE_KEY` set, `topup` and\r\n  `generate` can settle USDC when the API returns HTTP 402 with a\r\n  `PAYMENT-REQUIRED` header. Legacy JSON `INSUFFICIENT_CREDITS` 402s (no\r\n  `PAYMENT-REQUIRED`) still mean “fund via Stripe.” See\r\n  [x402 agent payments](https://offlinecreatorstudio.com/x402).\r\n\r\n## CLI sugar\r\n\r\n```bash\r\nnpx @offlinecreator/mcp models\r\nnpx @offlinecreator/mcp balance\r\nnpx @offlinecreator/mcp topups\r\nnpx @offlinecreator/mcp topup --id topup-1000          # x402 when wallet set; else Stripe URL\r\nnpx @offlinecreator/mcp topup --id topup-1000 --stripe # force Stripe Checkout URL\r\nnpx @offlinecreator/mcp quote --model seedance-2-5-text --options '{\"duration\":5,\"resolution\":\"720p\"}'\r\nnpx @offlinecreator/mcp plan-outcome --north-star\r\nnpx @offlinecreator/mcp execute-outcome --ecommerce --x402 --wait\r\nnpx @offlinecreator/mcp generate --model flux-schnell --prompt \"A clean product still\" --wait\r\n```\r\n\r\nPass the quote response's `lockedQuoteToken` as `quoteToken` to `generate`.\r\nStudio manages provider selection and permits only bounded failover that does\r\nnot increase the reserved customer charge.\r\n\r\n## Development\r\n\r\n```bash\r\nnpm install\r\nnpm run mcp:build\r\nOFFLINECREATOR_API_KEY=oc_test_… OFFLINECREATOR_API_BASE=http://localhost:3000 npm run mcp:start\r\n```\r\n\r\n## Privacy note\r\n\r\nStudio generations run on disclosed cloud providers (not on-device). LocalForge remains the offline product.\r\n","readmeFilename":"README.md"}