{"_id":"@bunnystudio/mcp","_rev":"4-fc0d6d540cf035a15cfe17afa6a13911","name":"@bunnystudio/mcp","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@bunnystudio/mcp","version":"0.1.0","keywords":["mcp","bunnystudio","model-context-protocol","voice-over","audio-ads","voice-ai","ai-tools"],"author":{"name":"Bunny Studio"},"license":"ISC","_id":"@bunnystudio/mcp@0.1.0","maintainers":[{"name":"bunnystudio","email":"dev@bunnystudio.com"}],"homepage":"https://github.com/bunnystudio/mcp#readme","bugs":{"url":"https://github.com/bunnystudio/mcp/issues"},"np":{"yarn":false,"branch":"main"},"bin":{"bunnystudio-mcp":"dist/index.js"},"dist":{"shasum":"4e5a829ad92927dcf0c1d559a1f8601cbcf16785","tarball":"https://registry.npmjs.org/@bunnystudio/mcp/-/mcp-0.1.0.tgz","fileCount":55,"integrity":"sha512-WJ7GmowDhTsMiBK+lUjrglk4emOGe0c0Q/kUJnXXXE5irWXlO/yp864eoqaE886mA+u3IiR7/mj/j5dqJ2aLEg==","signatures":[{"sig":"MEQCIDCUL1UN+3DxPsi7NgxX5cmsL5vMh0C91/PVrwzR4KP7AiAFe6+Bv2gKraONcQ/nhaBp4j8nZ4sE77x4+YxC/HKaUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264424},"logo":"https://bunnystudio.com/favicon.ico","main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d77d5046c022eb2cb6883242c7778343b3b992a0","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc -p tsconfig.build.json && chmod +x dist/index.js","clean":"rm -rf dist","start":"node dist/index.js","release":"np --no-cleanup","lint:fix":"eslint src --ext .ts --fix","prebuild":"npm run clean","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"bunnystudio","email":"dev@bunnystudio.com"},"repository":{"url":"git+https://github.com/bunnystudio/mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Bunny Studio API - voice over, audio ads, voice AI projects","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.9","@modelcontextprotocol/sdk":"^1.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"np":"^10.3.0","tsx":"^4.19.2","eslint":"^8.57.0","vitest":"^2.0.0","typescript":"^5.7.2","@types/node":"^22.10.0","axios-mock-adapter":"^2.0.0","@vitest/coverage-v8":"^2.1.9","eslint-plugin-import":"^2.30.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1772580216465_0.1724269714093929","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@bunnystudio/mcp","version":"0.1.1","keywords":["mcp","bunnystudio","model-context-protocol","voice-over","audio-ads","voice-ai","ai-tools"],"author":{"name":"Bunny Studio"},"license":"ISC","_id":"@bunnystudio/mcp@0.1.1","maintainers":[{"name":"bunnystudio","email":"dev@bunnystudio.com"}],"homepage":"https://github.com/bunnystudio/mcp#readme","bugs":{"url":"https://github.com/bunnystudio/mcp/issues"},"np":{"yarn":false,"branch":"main"},"bin":{"bunnystudio-mcp":"dist/index.js"},"dist":{"shasum":"2b160e2107d07442a9d697236f8e1594785ac467","tarball":"https://registry.npmjs.org/@bunnystudio/mcp/-/mcp-0.1.1.tgz","fileCount":55,"integrity":"sha512-unnnQDMb5LXttOnywUOwk3oixu7pXerx9proIbwEggPcSMNufZ9rxNghpBdYAoBvfKN6VQqLAmfQnf0rR2ku2Q==","signatures":[{"sig":"MEUCIARJJP44LYFnJqxFNf2oBSnA3v1OojEHqLwmFEyacE4nAiEAu8IHW1d/G/+BV/57KfXrm7awRpEa3HOdrM7sbGoJ/Jc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264747},"logo":"https://bunnystudio.com/favicon.ico","main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"afc5dbdc3e4718f7778a6f9858eb54a6307e025e","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc -p tsconfig.build.json && chmod +x dist/index.js","clean":"rm -rf dist","start":"node dist/index.js","release":"np --no-cleanup","lint:fix":"eslint src --ext .ts --fix","prebuild":"npm run clean","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"bunnystudio","email":"dev@bunnystudio.com"},"overrides":{"zod-to-json-schema":"3.25.1"},"repository":{"url":"git+https://github.com/bunnystudio/mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Bunny Studio API - voice over, audio ads projects","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.9","zod-to-json-schema":"3.25.1","@modelcontextprotocol/sdk":"^1.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"np":"^10.3.0","tsx":"^4.19.2","eslint":"^8.57.0","vitest":"^2.0.0","typescript":"^5.7.2","@types/node":"^22.10.0","axios-mock-adapter":"^2.0.0","@vitest/coverage-v8":"^2.1.9","eslint-plugin-import":"^2.30.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1772582345123_0.91446662515279","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@bunnystudio/mcp","version":"0.1.2","keywords":["mcp","bunnystudio","model-context-protocol","voice-over","audio-ads","voice-ai","ai-tools"],"author":{"name":"Bunny Studio"},"license":"ISC","_id":"@bunnystudio/mcp@0.1.2","maintainers":[{"name":"bunnystudio","email":"dev@bunnystudio.com"}],"homepage":"https://github.com/bunnystudio/mcp#readme","bugs":{"url":"https://github.com/bunnystudio/mcp/issues"},"np":{"yarn":false,"branch":"main"},"bin":{"bunnystudio-mcp":"dist/index.js"},"dist":{"shasum":"d134de73444e055dc7dbc13c1229143728b1dbf7","tarball":"https://registry.npmjs.org/@bunnystudio/mcp/-/mcp-0.1.2.tgz","fileCount":55,"integrity":"sha512-CsDXj2WKqSxSQcIP4mpKgx3zvehLnbQJBLYMSGfJ+p4B1Jki6lXCHwHRk/YsjI+uHUvnDlDg8jcixapHvs5XqQ==","signatures":[{"sig":"MEUCIBmnaUNlFktosVfIgUPG9szUzS116yDryklIVAqbRVUUAiEAxAgovU7ua6KM+SoS9YyTkxktqOh2HKSUTJoyaOkPJo4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268982},"logo":"https://bunnystudio.com/favicon.ico","main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d28d4c8c74b6e88eb404f39d61512f6989d7b665","scripts":{"dev":"tsx watch src/index.ts","lint":"eslint src --ext .ts","test":"vitest run","build":"tsc -p tsconfig.build.json && chmod +x dist/index.js","clean":"rm -rf dist","start":"node dist/index.js","release":"np --no-cleanup","lint:fix":"eslint src --ext .ts --fix","prebuild":"npm run clean","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"bunnystudio","email":"dev@bunnystudio.com"},"overrides":{"zod-to-json-schema":"3.25.1"},"repository":{"url":"git+https://github.com/bunnystudio/mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Bunny Studio API - voice over, audio ads projects","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^3.23.8","axios":"^1.7.9","zod-to-json-schema":"3.25.1","@modelcontextprotocol/sdk":"^1.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"np":"^10.3.0","tsx":"^4.19.2","eslint":"^8.57.0","vitest":"^2.0.0","typescript":"^5.7.2","@types/node":"^22.10.0","axios-mock-adapter":"^2.0.0","@vitest/coverage-v8":"^2.1.9","eslint-plugin-import":"^2.30.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.2_1772592614267_0.48585182427952156","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@bunnystudio/mcp","version":"0.1.3","description":"MCP server for Bunny Studio API - voice over, audio ads projects","type":"module","main":"./dist/index.js","bin":{"bunnystudio-mcp":"dist/index.js"},"exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"start":"node dist/index.js","dev":"tsx watch src/index.ts","build":"tsc -p tsconfig.build.json && chmod +x dist/index.js","clean":"rm -rf dist","prebuild":"npm run clean","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","prepublishOnly":"npm run build && npm test","release":"np --no-cleanup"},"keywords":["mcp","bunnystudio","model-context-protocol","voice-over","audio-ads","voice-ai","ai-tools"],"author":{"name":"Bunny Studio"},"logo":"https://bunnystudio.com/favicon.ico","license":"ISC","engines":{"node":">=18"},"dependencies":{"@modelcontextprotocol/sdk":"^1.6.1","axios":"^1.7.9","zod":"^3.23.8","zod-to-json-schema":"3.25.1"},"overrides":{"zod-to-json-schema":"3.25.1"},"devDependencies":{"@types/node":"^22.10.0","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","@vitest/coverage-v8":"^2.1.9","axios-mock-adapter":"^2.0.0","eslint":"^8.57.0","eslint-plugin-import":"^2.30.0","np":"^10.3.0","tsx":"^4.19.2","typescript":"^5.7.2","vitest":"^2.0.0"},"repository":{"type":"git","url":"git+https://github.com/bunnystudio/mcp.git"},"homepage":"https://github.com/bunnystudio/mcp#readme","bugs":{"url":"https://github.com/bunnystudio/mcp/issues"},"publishConfig":{"access":"public"},"np":{"yarn":false,"branch":"main"},"_id":"@bunnystudio/mcp@0.1.3","gitHead":"0ea6a26d5d34d8d8fbbcf643f9840e269e8e2239","types":"./dist/index.d.ts","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-xaIQB0TYGO/hWwCqCQqYzwGZaoVf82F+ArZ/K5cjVywjthpgJOdEs0cFHexY2sF0jDW+Pl3kctdU/ynJ6PmNfg==","shasum":"e216bd64f90874cdf48b2629adee215ec61cd0f3","tarball":"https://registry.npmjs.org/@bunnystudio/mcp/-/mcp-0.1.3.tgz","fileCount":55,"unpackedSize":274751,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCHWnkf1rxDDbV7R9MoN8sFHs8gEqDQOCkMYAQzZpCgAQIhAKK6jtZFFQVy7X+68n5FhgyoSl33iIe/Qzi3Z2o4/O9T"}]},"_npmUser":{"name":"bunnystudio","email":"dev@bunnystudio.com"},"directories":{},"maintainers":[{"name":"bunnystudio","email":"dev@bunnystudio.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.3_1772725356243_0.37334545377052253"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-03T23:23:36.087Z","modified":"2026-03-05T15:42:36.503Z","0.1.0":"2026-03-03T23:23:36.609Z","0.1.1":"2026-03-03T23:59:05.281Z","0.1.2":"2026-03-04T02:50:14.442Z","0.1.3":"2026-03-05T15:42:36.391Z"},"bugs":{"url":"https://github.com/bunnystudio/mcp/issues"},"author":{"name":"Bunny Studio"},"license":"ISC","homepage":"https://github.com/bunnystudio/mcp#readme","keywords":["mcp","bunnystudio","model-context-protocol","voice-over","audio-ads","voice-ai","ai-tools"],"repository":{"type":"git","url":"git+https://github.com/bunnystudio/mcp.git"},"description":"MCP server for Bunny Studio API - voice over, audio ads projects","maintainers":[{"name":"bunnystudio","email":"dev@bunnystudio.com"}],"readme":"# @bunnystudio/mcp\n\n[![npm version](https://img.shields.io/npm/v/@bunnystudio/mcp)](https://www.npmjs.com/package/@bunnystudio/mcp)\n[![CI](https://github.com/bunnystudio/mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/bunnystudio/mcp/actions/workflows/ci.yml)\n[![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)\n\n**Model Context Protocol (MCP) server for [Bunny Studio](https://bunnystudio.com).** Exposes every Bunny Studio API endpoint as an MCP tool and provides built-in prompts that prepare any AI agent to use the API correctly — even when the user's request is plain text.\n\nWorks with: **Claude Desktop**, **Claude Code**, **Cursor**, **VS Code (Copilot / Continue)**, **Windsurf**, and any other MCP-compatible client.\n\n---\n\n## Table of Contents\n\n- [Quick Start](#quick-start)\n- [Agent Configuration](#agent-configuration)\n  - [Claude Desktop](#claude-desktop)\n  - [Claude Code (CLI)](#claude-code-cli)\n  - [Cursor](#cursor)\n  - [VS Code](#vs-code-copilot--continue)\n  - [Windsurf](#windsurf)\n- [Authentication](#authentication)\n- [Built-in Prompts (AI Preparation)](#built-in-prompts-ai-preparation)\n- [Tools Reference](#tools-reference)\n- [Usage Examples (Natural Language)](#usage-examples-natural-language)\n- [Tips for Better Results](#tips-for-better-results)\n- [Environment Variables](#environment-variables)\n- [Development](#development)\n- [Publishing to npm](#publishing-to-npm)\n\n---\n\n## Quick Start\n\nNo installation required — run directly with `npx`:\n\n```bash\n# With a pre-obtained JWT token\nnpx @bunnystudio/mcp --token=YOUR_JWT_TOKEN\n\n# With environment variable\nBUNNY_API_TOKEN=YOUR_JWT_TOKEN npx @bunnystudio/mcp\n```\n\n> **Get a token:** Contact a Bunny Studio representative to enable API access on your account. Once enabled, log in through the `bunnystudio_login` tool or retrieve the token from the authentication endpoint.\n\n**If you see `ERR_MODULE_NOT_FOUND` for `zod-to-json-schema` when using `npx`:** clear the npx cache and try again: `rm -rf ~/.npm/_npx` (Linux/macOS) or delete the `_npx` folder under your npm cache, then run the `npx` command again.\n\n### What you need to know\n\n- **Token** — You need a Bunny Studio API token (JWT). Get it by logging in via the `bunnystudio_login` tool, or set `BUNNY_API_TOKEN` / use `--token=…`.\n- **Project creation** — Creating a project is a two-step flow: the AI runs a **preview** (quote, validation), then asks for your confirmation before **creating** the project.\n- **Services** — Only **voice over** and **audio ads** are supported. `voice_ai` is not available in this MCP.\n\n---\n\n## Agent Configuration\n\n### Claude Desktop\n\n1. Open (or create) `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows).\n2. Add the Bunny Studio server:\n\n```json\n{\n  \"mcpServers\": {\n    \"bunnystudio\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bunnystudio/mcp\"],\n      \"env\": {\n        \"BUNNY_API_TOKEN\": \"YOUR_JWT_TOKEN\"\n      }\n    }\n  }\n}\n```\n\nOr pass the token as an argument:\n\n```json\n{\n  \"mcpServers\": {\n    \"bunnystudio\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bunnystudio/mcp\", \"--token=YOUR_JWT_TOKEN\"]\n    }\n  }\n}\n```\n\n3. Restart Claude Desktop. The Bunny Studio tools and prompts will appear in the `/` menu.\n\n---\n\n### Claude Code (CLI)\n\nAdd to `.claude/settings.json` in your project root, or to the global `~/.claude/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"bunnystudio\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bunnystudio/mcp\"],\n      \"env\": {\n        \"BUNNY_API_TOKEN\": \"YOUR_JWT_TOKEN\"\n      }\n    }\n  }\n}\n```\n\nThen in Claude Code:\n\n```\n/mcp\n```\n\nto verify the server is running and list available tools.\n\n---\n\n### Cursor\n\n1. Open **Cursor Settings → MCP**.\n2. Click **Add new MCP server** and enter:\n\n```json\n{\n  \"name\": \"bunnystudio\",\n  \"command\": \"npx\",\n  \"args\": [\"-y\", \"@bunnystudio/mcp\"],\n  \"env\": {\n    \"BUNNY_API_TOKEN\": \"YOUR_JWT_TOKEN\"\n  }\n}\n```\n\nOr edit `~/.cursor/mcp.json` directly:\n\n```json\n{\n  \"mcpServers\": {\n    \"bunnystudio\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bunnystudio/mcp\", \"--token=YOUR_JWT_TOKEN\"]\n    }\n  }\n}\n```\n\n---\n\n### VS Code (Copilot / Continue)\n\n**With GitHub Copilot (VS Code 1.99+)**\n\nAdd to `.vscode/mcp.json` in your workspace, or to your User settings:\n\n```json\n{\n  \"servers\": {\n    \"bunnystudio\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bunnystudio/mcp\"],\n      \"env\": {\n        \"BUNNY_API_TOKEN\": \"YOUR_JWT_TOKEN\"\n      }\n    }\n  }\n}\n```\n\n**With Continue extension**\n\nAdd to `~/.continue/config.json`:\n\n```json\n{\n  \"experimental\": {\n    \"modelContextProtocolServers\": [\n      {\n        \"transport\": {\n          \"type\": \"stdio\",\n          \"command\": \"npx\",\n          \"args\": [\"-y\", \"@bunnystudio/mcp\"],\n          \"env\": {\n            \"BUNNY_API_TOKEN\": \"YOUR_JWT_TOKEN\"\n          }\n        }\n      }\n    ]\n  }\n}\n```\n\n---\n\n### Windsurf\n\nAdd to `~/.codeium/windsurf/mcp_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"bunnystudio\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bunnystudio/mcp\"],\n      \"env\": {\n        \"BUNNY_API_TOKEN\": \"YOUR_JWT_TOKEN\"\n      }\n    }\n  }\n}\n```\n\n---\n\n## Authentication\n\nToken resolution order (first available wins):\n\n1. **Session token** — set by calling `bunnystudio_login` (used for all later calls in that session)\n2. **CLI flag** — `--token=YOUR_JWT_TOKEN`\n3. **Environment variable** — `BUNNY_API_TOKEN`\n\n### Option A — Environment variable (recommended)\n\n```bash\nexport BUNNY_API_TOKEN=\"YOUR_JWT_TOKEN\"\nnpx @bunnystudio/mcp\n```\n\n### Option B — CLI flag\n\n```bash\nnpx @bunnystudio/mcp --token=YOUR_JWT_TOKEN\n```\n\n### Option C — Login via MCP tool\n\nCall the `bunnystudio_login` tool from your AI client. The returned token is stored for the session and used automatically for all subsequent calls.\n\n```\nLog me in to Bunny Studio with email you@example.com and password your-password\n```\n\n```\nAuthenticate me to the Bunny Studio API.\n```\n\n### Custom API URL\n\nFor testing against a staging/local instance:\n\n```bash\nnpx @bunnystudio/mcp --api-url=http://localhost:3000 --token=YOUR_JWT\n```\n\n---\n\n## Built-in Prompts (AI Preparation)\n\nThe server registers four **MCP Prompts** that load Bunny Studio domain knowledge into the AI before it starts calling tools. This is how plain-text user requests get correctly mapped to structured API calls.\n\n| Prompt | When to use |\n|--------|-------------|\n| `bunnystudio_overview` | First message in a session — loads all concepts, service types, lifecycle states, and the service config shape |\n| `bunnystudio_create_project_guide` | User says something like *\"I need a 30-second English commercial voice over\"* — converts a plain brief to a valid `create_project` payload |\n| `bunnystudio_review_deliverable_guide` | User wants to review, approve, reject, or revise deliverables |\n| `bunnystudio_search_and_quote_guide` | User wants to find talents or get a price estimate before creating a project |\n\n### How to invoke a prompt\n\nIn Claude Desktop or Claude Code, type `/` and look for the Bunny Studio prompts, or ask the AI to use them:\n\n```\nUse the bunnystudio_overview prompt.\n```\n\n```\nUse the bunnystudio_overview prompt to understand how to use the Bunny Studio API.\n```\n\n```\nUse the bunnystudio_create_project_guide prompt with brief: \"I need a 30 second upbeat\nEnglish female voice over for a TV commercial\"\n```\n\nAfter loading the right prompt, you can continue in natural language (e.g. \"Create that project\" or \"Get me a quote for the same\").\n\n---\n\n## Tools Reference\n\n### Authentication\n\n| Tool | Description |\n|------|-------------|\n| `bunnystudio_login` | Authenticate with email/password. Token is stored for the session. |\n\n### Projects\n\n| Tool | Description |\n|------|-------------|\n| `bunnystudio_preview_project` | Validate inputs and get a price quote before creating (read-only) |\n| `bunnystudio_create_project` | Create a voice over or audio ads project (requires confirmation) |\n| `bunnystudio_get_project` | Get a project by ID |\n| `bunnystudio_list_projects` | List your projects (paginated, filterable) |\n| `bunnystudio_cancel_project` | Cancel a project with reason |\n| `bunnystudio_get_quote` | Get a price estimate without creating a project |\n\n### Deliverables\n\n| Tool | Description |\n|------|-------------|\n| `bunnystudio_get_deliverable` | Get a single deliverable |\n| `bunnystudio_get_deliverables_by_project` | Get all deliverables for a project |\n| `bunnystudio_approve_deliverable` | Approve a single deliverable |\n| `bunnystudio_select_winner_deliverable` | Select winner (contest fulfillment only) |\n| `bunnystudio_approve_deliverables_by_project` | Approve all pending deliverables at once |\n| `bunnystudio_reject_deliverable` | Reject a deliverable with reason code |\n| `bunnystudio_create_revision` | Request a revision with instructions |\n| `bunnystudio_get_deliverable_versions` | Get all versions of a deliverable |\n\n### Categories\n\n| Tool | Description |\n|------|-------------|\n| `bunnystudio_get_categories` | All categories and subcategories |\n| `bunnystudio_get_category_attributes` | Attributes for a subcategory (language, gender/age, etc.) |\n| `bunnystudio_get_category_attribute_values` | Valid values for a category attribute |\n| `bunnystudio_get_available_voice_over` | Available voice over sub-categories |\n| `bunnystudio_get_available_audio_ads` | Available audio ads sub-categories |\n\n### Music / Tracks\n\n| Tool | Description |\n|------|-------------|\n| `bunnystudio_get_track_types` | All music track types |\n| `bunnystudio_get_track_subtypes` | Subtypes for a track type |\n| `bunnystudio_get_track` | Get a specific track by ID |\n| `bunnystudio_get_all_tracks` | Browse tracks with filters and pagination |\n| `bunnystudio_get_music_library` | Combined mode-based music library browser |\n\n### Search\n\n| Tool | Description |\n|------|-------------|\n| `bunnystudio_search` | Search talents/samples by category, filters, and purpose (numeric ID, auto-inferred) |\n\n### Definitions (reference data)\n\n| Tool | Description |\n|------|-------------|\n| `bunnystudio_get_status_types` | All status types |\n| `bunnystudio_get_project_status_types` | Project status types |\n| `bunnystudio_get_service_status_types` | Service status types |\n| `bunnystudio_get_deliverable_status_types` | Deliverable status types |\n| `bunnystudio_get_revision_reasons` | Reasons for requesting revisions |\n| `bunnystudio_get_cancellation_reasons` | Reasons for canceling projects |\n| `bunnystudio_get_rejection_reasons` | Reasons for rejecting deliverables |\n\n### Response format\n\nEvery tool accepts an optional `response_format` parameter:\n\n- `\"markdown\"` (default) — human-readable output\n- `\"json\"` — raw JSON for programmatic use\n\n### Important validation rules\n\n- **`voice_ai` is disabled** — only `voice_over` and `audio_ads` are available as `mainService`\n- **`services` array is required** — at least one service object must be provided when creating projects\n- **`title` max length** — 100 characters\n- **`purpose` (search)** — numeric ID, not a string. Valid IDs: `6` (Movie trailers), `7` (Phone systems), `9` (Product videos), `10` (Presentations/Educational), `11` (Commercials/Advertising), `14` (Characters/Videogames), `16` (Live announcements), `19` (Audiobooks/Podcasts), `20` (Radio/TV tags). The AI auto-infers purpose from context — no need to specify the number manually\n- **Two-phase project creation** — For creating projects, the AI calls `bunnystudio_preview_project` first (validates inputs, returns price quote), then waits for your confirmation before calling `bunnystudio_create_project`. This avoids creating projects by mistake.\n\n---\n\n## Usage Examples (Natural Language)\n\nYou can drive the MCP entirely with plain language. The AI translates your request into the correct tool and parameters. Below are examples you can type (or adapt) in your MCP client.\n\n### Getting started\n\nLoad the overview so the AI has full Bunny Studio context:\n\n```\nUse the bunnystudio_overview prompt.\n```\n\n### Authentication\n\n```\nLog me in to Bunny Studio with email john@example.com and password mypassword123\n```\n\n```\nAuthenticate me to the Bunny Studio API.\n```\n\n### Project preview (no creation)\n\nPreview validates inputs and returns a price quote **without creating anything**:\n\n```\nI need a voice over in English (US), young adult female voice.\nScript: \"Welcome to our platform. We make project management simple and fast.\"\n```\n\n```\nHow would a 30-second audio ad look in Italian with a middle-aged male voice?\nScript: \"Scopri le nostre offerte esclusive. Visita il nostro sito oggi.\"\n```\n\n### Project creation\n\nThe AI will run preview first, show you the quote, and ask for confirmation before creating.\n\n**Voice over — speedy (single talent)**\n\n```\nI need a voice over in English (US), female voice, adult tone.\nScript: \"Welcome to our platform. We make project management simple, fast, and stress-free.\"\n```\n\n```\nCreate a voice over project: Language English (US), adult female, speedy fulfillment.\nScript: \"Hello and welcome to TechCorp. Our mission is to help your business grow.\"\n```\n\n**Voice over — booking (specific talent)**\n\n```\nI want to book talent 9VUMQ2C for a voice over in Italian, young adult male.\nScript: \"Benvenuto nel nostro negozio. Scopri le nostre offerte esclusive oggi stesso.\"\n```\n\n**Voice over — contest (multiple talents compete)**\n\n```\nCreate a contest for a voice over in English (US), male voice.\nScript: \"At HomeGlow, we believe everyone deserves a beautiful home.\"\nI want to hear from multiple talents and pick the best one.\n```\n\n**Multi-part voice over**\n\n```\nI need a voice over with 3 parts in English (US), female voice:\n- Part 1 (intro): \"Welcome to the annual report for 2024.\"\n- Part 2 (main): \"This year, our company achieved record revenue.\"\n- Part 3 (outro): \"Thank you for your continued trust and support.\"\n```\n\n**Audio ads — with your script**\n\n```\nI need a 30-second audio ad, English US, young adult female voice.\nScript: \"Tired of overpaying for insurance? Switch to SafeGuard and save up to 40%.\nVisit safeguard.com or call 1-800-SAFE-NOW.\"\n```\n\n**Audio ads — Bunny Studio writes the script**\n\n```\nI need a 30-second radio ad for my coffee brand but I don't have a script yet.\nTarget audience: coffee lovers aged 25-45, US market.\nProduct: premium Colombian single-origin coffee. Goal: drive online sales.\nFemale voice, adult.\n```\n\n**Test / sandbox (no billing)**\n\n```\nCreate a test voice over project in English, young male voice.\nScript: \"This is a test recording.\" Don't charge me.\n```\n\nAdding \"test\", \"fake\", \"sandbox\", or \"don't charge me\" sets `fake: true`.\n\n### Get / list / cancel project\n\n```\nShow me the details for project abc-123.\n```\n\n```\nWhat's the status of project abc-123?\n```\n\n```\nShow me my projects.\n```\n\n```\nList all my voice over projects.\n```\n\n```\nCancel project abc-123. Reason: we decided to go a different direction.\n```\n\n### Get quote (no project)\n\n```\nHow much would a 30-second audio ad cost in English (US) with an adult female voice?\nI'll provide the script myself.\n```\n\n```\nGet me a price quote for a voice over: Language German, young male, about 200 words.\n```\n\n### Search talents\n\nThe `purpose` filter is inferred from your description — you don't specify a number.\n\n```\nFind me a female voice for a voice over project in Italian.\n```\n\n```\nFind a voice for a phone system IVR message in English US, female.\n```\n\n```\nI need a talent for a movie trailer narration. Deep male voice, English.\n```\n\n```\nSearch for someone to narrate an e-learning course in Spanish (Latin America).\n```\n\n```\nFind a voice for a 30-second radio commercial, upbeat female, English US.\n```\n\n**Purpose ID reference (for advanced use; the AI infers these):**\n\n| Purpose ID | Category | Trigger keywords |\n|------------|----------|------------------|\n| 6 | Movie trailers | cinema, film, trailer |\n| 7 | Phone systems | IVR, hold message, voicemail, phone tree |\n| 9 | Product videos | product demo, explainer, how-to, tutorial |\n| 10 | Presentations / Educational | e-learning, training, course, webinar |\n| 11 | Commercials / Advertising | radio ad, TV ad, commercial, streaming ad |\n| 14 | Characters / Videogames | character voice, game, animation, cartoon |\n| 16 | Live announcements | event, conference, PA system, stadium |\n| 19 | Audiobooks / Podcasts | audiobook, podcast, narration, storytelling |\n| 20 | Radio/TV tags | station ID, bumper, intro, outro, jingle tag |\n\n### Deliverables\n\n```\nShow me deliverable xyz-456.\n```\n\n```\nShow me the deliverables for project abc-123.\n```\n\n```\nApprove deliverable xyz-456.\n```\n\n```\nApprove all deliverables for project abc-123.\n```\n\n```\nReject deliverable xyz-456 — the voice doesn't match what we requested.\nUse reason: wrong gender.\n```\n\n```\nRequest changes on deliverable xyz-456:\n\"The pronunciation of 'TechCorp' should be 'tek-corp'. Add a slight pause after the first sentence.\"\n```\n\n```\nDeliverable xyz-456 is the winner for the contest. Select it.\n```\n\n```\nShow me all versions of deliverable xyz-456.\n```\n\n> **Approval and selecting a winner are irreversible.** The AI will confirm before proceeding.\n\n### Categories and attributes\n\n```\nWhat categories are available on Bunny Studio?\n```\n\n```\nWhat attributes are available for voice over projects?\n```\n\n```\nWhat languages are available for voice over?\n```\n\n```\nWhat genderAndAge options are there for audio ads?\n```\n\n```\nWhat voice over sub-categories are available?\n```\n\n```\nWhat audio ads sub-categories are available?\n```\n\n### Music / tracks\n\n```\nWhat types of music tracks are available?\n```\n\n```\nShow me subtypes for track type \"type-1\".\n```\n\n```\nGet details for track 34.\n```\n\n```\nBrowse available music tracks.\n```\n\n```\nShow me the music library types.\n```\n\n### Definitions (reference data)\n\n```\nWhat status types exist in Bunny Studio?\n```\n\n```\nWhat are the possible project statuses?\n```\n\n```\nWhat are the valid reasons for requesting a revision?\n```\n\n```\nWhat are the valid reasons for canceling a project?\n```\n\n```\nWhat are the valid reasons for rejecting a deliverable?\n```\n\n---\n\n## Tips for Better Results\n\n- **Script formatting** — Single part: write naturally; the AI wraps it as one part. Multiple parts: number or label them (e.g. \"Part 1: intro. Part 2: main body. Part 3: CTA.\").\n- **Voice selection** — Be specific: \"young adult male\" → `youngAdultMale`, \"adult woman\" → `middleAgeFemale`. Avoid vague requests like \"nice voice\"; use gender + age range.\n- **Language codes** — The AI converts plain language to ISO codes: \"English US\" → `eng-us`, \"British English\" → `eng-uk`, \"Italian\" → `ita-it`, \"German\" → `deu-de`, \"Spanish (Latin America)\" → `spa-mx`, \"French\" → `fra-fr`, \"Arabic\" → `ara`, \"Brazilian Portuguese\" → `por-br`.\n- **Voice over vs audio ads** — **Voice over**: narration, e-learning, podcast, IVR, YouTube (audio is the final product). **Audio ad**: broadcast commercial (radio, streaming, jingle) with post-production.\n- **Purpose (search)** — You don't need to know purpose IDs. Describe the use case: \"phone system\" → 7, \"e-learning course\" → 10, \"radio commercial\" → 11; the AI infers the correct purpose.\n\n---\n\n## Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `BUNNY_API_TOKEN` | JWT authentication token | _(none)_ |\n| `BUNNY_PUBLIC_API_URL` | API base URL (e.g. for staging or local) | `https://api.bunnystudio.com` |\n\n---\n\n## API Documentation\n\nThe server talks to `https://api.bunnystudio.com`. Refer to the official Bunny Studio API docs for detailed schemas:\n\n- [Authentication](https://bunnystudio.com/integrations/documentation/api/authentication)\n- [Projects](https://bunnystudio.com/integrations/documentation/api/projects/get)\n- [Deliverables](https://bunnystudio.com/integrations/documentation/api/deliverables/getSingle)\n- [Revisions](https://bunnystudio.com/integrations/documentation/api/revisions/create)\n- [Categories](https://bunnystudio.com/integrations/documentation/api/categories/getAll)\n- [Search](https://bunnystudio.com/integrations/documentation/api/search)\n- [Tracks](https://bunnystudio.com/integrations/documentation/api/tracks/get)\n\n---\n\n## License\n\nISC © Bunny Studio\n","readmeFilename":"README.md"}