{"_id":"@offlinecreator/mcp","_rev":"4-9a0cd536bed9d282a5f13aaad6b4eed4","name":"@offlinecreator/mcp","dist-tags":{"latest":"0.1.3"},"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","mcpName":"com.offlinecreatorstudio/mcp","description":"OfflineCreator Studio MCP server for Cursor, Claude, Hermes, and other MCP clients","type":"module","bin":{"offlinecreator-mcp":"dist/index.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./config":{"types":"./dist/config.d.ts","import":"./dist/config.js"},"./oauth-bridge":{"types":"./dist/oauth-bridge.d.ts","import":"./dist/oauth-bridge.js"}},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsc -p tsconfig.json --watch","start":"node dist/index.js","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","prepublishOnly":"npm run build && npm test"},"engines":{"node":">=20"},"keywords":["mcp","offlinecreator","cursor","claude","image-generation","video-generation"],"license":"MIT","homepage":"https://offlinecreatorstudio.com/mcp-cli","repository":{"type":"git","url":"git+https://github.com/OfflineCreatorStudio/offlinecreator-mcp.git"},"bugs":{"url":"https://github.com/OfflineCreatorStudio/offlinecreator-mcp/issues"},"author":{"name":"OfflineCreator Studio","url":"https://github.com/OfflineCreatorStudio"},"publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/server":"^2.0.0","@x402/evm":"^2.22.0","@x402/fetch":"^2.22.0","viem":"^2.55.13","zod":"^4.4.3"},"devDependencies":{"@types/node":"^20","typescript":"^5"},"gitHead":"9392fafa8d9995829a17e567480b0a955effe019","_id":"@offlinecreator/mcp@0.1.3","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-vedmDQ7WjYTWhxJ5tnXjYgq5ZyhmM4egry853tkpvucUHjTZLGc87rvpRVGp2+yn8BN9SXoSCmFyXabllHVXyA==","shasum":"264287dccb6e1366b8b10b095ace3739255f782c","tarball":"https://registry.npmjs.org/@offlinecreator/mcp/-/mcp-0.1.3.tgz","fileCount":26,"unpackedSize":98909,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC/2HvbeXcRvzvYq8Je40TDEHEh/f9GZF5ron4Guzc+MAIhAJjK8hm+Usi/SPRBMyrteCSo+IeZr7fzaYQv8j6l0Vc/"}]},"_npmUser":{"name":"offlinecreator","email":"support@offlinecreator.com"},"directories":{},"maintainers":[{"name":"offlinecreator","email":"support@offlinecreator.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.3_1786840366563_0.5836668164816954"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-05T23:16:29.932Z","modified":"2026-08-16T00:32:46.874Z","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"},"bugs":{"url":"https://github.com/OfflineCreatorStudio/offlinecreator-mcp/issues"},"author":{"name":"OfflineCreator Studio","url":"https://github.com/OfflineCreatorStudio"},"license":"MIT","homepage":"https://offlinecreatorstudio.com/mcp-cli","keywords":["mcp","offlinecreator","cursor","claude","image-generation","video-generation"],"repository":{"type":"git","url":"git+https://github.com/OfflineCreatorStudio/offlinecreator-mcp.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**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, and reserved Visa MPP. 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; no outcome-level ledger write. `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| `get_receipt` | Fetch the stored receipt and live run for an attestation hash. Reservation `media_url` is the deliverable. The local logo stub is not. Unauthenticated production returns `NOT_LIVE`. |\r\n| `wait_outcome` | Poll the stored run until completed or failed. Does not start catalog work. Use `download_output` on a reservation `generation_id` for the signed file. Unauthenticated production returns `NOT_LIVE`. |\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 (`wait: true` to poll) |\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 reserved job + refund |\r\n| `list_generations` | Recent jobs |\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"}