{"_id":"@cassette.diy/mcp","name":"@cassette.diy/mcp","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@cassette.diy/mcp","publishConfig":{"access":"public"},"version":"0.1.0","description":"MCP server for Cassette (music) and Cassette for Creators","type":"module","main":"dist/index.js","bin":{"cassette-mcp":"dist/index.js"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsc && node dist/index.js","prepare":"npm run build"},"engines":{"node":">=18"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.1","zod":"^3.24.2"},"devDependencies":{"@types/node":"^22.13.10","typescript":"^5.8.2"},"keywords":["mcp","cassette","model-context-protocol"],"license":"UNLICENSED","repository":{"type":"git","url":"git+https://github.com/cassette-music-management-tool/cassette-mcp.git"},"homepage":"https://cassette.diy/docs/mcp","gitHead":"979f2cce674c796cf61ff24abe374cdb63351b44","types":"./dist/index.d.ts","_id":"@cassette.diy/mcp@0.1.0","bugs":{"url":"https://github.com/cassette-music-management-tool/cassette-mcp/issues"},"_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-YNj/KW7WievPEuS8f4OFnru9UUA/sI8kvWjOkqwgtEXkkgc/nqak19j3H3H9Gj8WK9SuIgFph4E47aKt/AQcoA==","shasum":"026b63121cc1d9113bc22a3d5118da95ca2351a5","tarball":"https://registry.npmjs.org/@cassette.diy/mcp/-/mcp-0.1.0.tgz","fileCount":18,"unpackedSize":32185,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD9yWc0G2x5DXN0sZqN0MFcy9BK+TBqpAPExj4kBPeucgIhANCV0ViE3doAe0gaRGYlgfVuXppkjwtfrSeSIZpY9Nio"}]},"_npmUser":{"name":"glorko","email":"kichev.alexander@gmail.com"},"directories":{},"maintainers":[{"name":"glorko","email":"kichev.alexander@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_0.1.0_1782033566102_0.27282237313456825"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-21T09:19:25.933Z","0.1.0":"2026-06-21T09:19:26.238Z","modified":"2026-06-21T09:19:26.496Z"},"maintainers":[{"name":"glorko","email":"kichev.alexander@gmail.com"}],"description":"MCP server for Cassette (music) and Cassette for Creators","homepage":"https://cassette.diy/docs/mcp","keywords":["mcp","cassette","model-context-protocol"],"repository":{"type":"git","url":"git+https://github.com/cassette-music-management-tool/cassette-mcp.git"},"bugs":{"url":"https://github.com/cassette-music-management-tool/cassette-mcp/issues"},"license":"UNLICENSED","readme":"# @cassette.diy/mcp\n\nMCP server for **Cassette** (music releases) and **Cassette for Creators** (short-form clips). Lets AI assistants in Cursor, Claude Desktop, and other MCP clients manage your Cassette account via personal access tokens.\n\n**npm:** https://www.npmjs.com/package/@cassette.diy/mcp  \n**Docs:** https://cassette.diy/docs/mcp\n\n## Install\n\nPublished on npm. No separate install step when using Cursor — `npx` downloads the package on first run:\n\n```bash\nnpx -y @cassette.diy/mcp\n```\n\n1. A Cassette or Creator account with **Google Drive linked** (required for uploads).\n2. A **personal access token** from the web app:\n   - Music app: **Settings → API / AI access**\n   - Creator app: **Settings → API / AI access**\n\n## Cursor setup\n\nAdd to your Cursor MCP config (`~/.cursor/mcp.json` or project `.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"cassette\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cassette.diy/mcp\"],\n      \"env\": {\n        \"CASSETTE_API_URL\": \"https://api.cassette.diy\",\n        \"CASSETTE_API_TOKEN\": \"ct_live_YOUR_TOKEN_HERE\",\n        \"CASSETTE_PRODUCT\": \"both\"\n      }\n    }\n  }\n}\n```\n\nYou can copy a ready-made snippet from Settings after creating a token.\n\n## Environment variables\n\n| Variable | Required | Description |\n|----------|----------|-------------|\n| `CASSETTE_API_URL` | No | Backend URL (default: `http://localhost:8080`) |\n| `CASSETTE_API_TOKEN` | Yes | Personal access token (`ct_live_…`) |\n| `CASSETTE_PRODUCT` | No | `music`, `creator`, or `both` (default: `both`) — controls which tools are registered |\n\n## Local development\n\nFrom the monorepo:\n\n```bash\ncd cassette-mcp\nnpm install\nnpm run build\n```\n\nPoint Cursor at the local package:\n\n```json\n{\n  \"mcpServers\": {\n    \"cassette\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/Cassette/cassette-mcp/dist/index.js\"],\n      \"env\": {\n        \"CASSETTE_API_URL\": \"http://localhost:8080\",\n        \"CASSETTE_API_TOKEN\": \"ct_live_...\",\n        \"CASSETTE_PRODUCT\": \"both\"\n      }\n    }\n  }\n}\n```\n\n## Tool catalog\n\nSet `CASSETTE_PRODUCT` to `music`, `creator`, or `both` (default: `both`).\n\n### Shared\n\n| Tool | Description |\n|------|-------------|\n| `cassette_get_account` | Profile, Drive link status, tiers |\n| `cassette_start_gdrive_link` | OAuth URL to link Google Drive |\n| `cassette_search_users` | Find users for invites (creator mode only) |\n\n### Music — track creation workflow\n\nFocused tools for musicians: create a release end-to-end (no delete, collaboration, or Drive sync).\n\n| Tool | Description |\n|------|-------------|\n| `cassette_create_track` | Create track (name, artist, release date) |\n| `cassette_upload_track_file` | Upload artwork, audio, promo, footages, vertical videos |\n| `cassette_update_track_metadata` | Metadata, Spotify pitch, notes |\n| `cassette_list_track_files` | List uploaded files by category |\n| `cassette_get_track` | Get full track after creation |\n\n### Creators\n\nFull clip workflow (unchanged):\n\n| Tool | Description |\n|------|-------------|\n| `cassette_get_creator_billing` | Tier, limits, clip count |\n| `cassette_list_clips` | List clips |\n| `cassette_get_clip` / `create_clip` / `update_clip` / `delete_clip` | Clip CRUD |\n| `cassette_update_scenario` | Scenario time blocks |\n| `cassette_update_clip_notes` | Freeform notes |\n| `cassette_list_trends` / `create_trend` / `delete_trend` | Trend library |\n| `cassette_start_clip_from_trend` | New clip from trend |\n| `cassette_list_footages` / `upload_footage` / `review_footage` / `delete_footage` | Footages |\n| `cassette_get_final` / `upload_final` / `update_post_links` | Final video & links |\n| `cassette_manage_clip_shares` | Collaboration |\n\n## Uploads\n\nUpload tools read files from **`local_path`** on the machine running the MCP server (your computer when using stdio in Cursor).\n\n- **&lt; 10 MB** — direct multipart upload\n- **10–20 MB** — async upload + task polling\n- **&gt; 20 MB** (tracks) — chunked upload + task polling\n\nIf Drive is not linked, upload tools fail; use `cassette_start_gdrive_link` first.\n\n## Token scopes\n\n| Scope | Access |\n|-------|--------|\n| `music:read` | GET on `/tracks/*` |\n| `music:write` | Mutations on `/tracks/*` |\n| `creator:read` | GET on `/creator/*` |\n| `creator:write` | Mutations on `/creator/*` |\n\nTokens cannot access admin, Stripe checkout, analytics, or token management endpoints.\n\n## Publish checklist\n\n- [ ] Deploy backend with `api_tokens` collection and routes\n- [ ] Verify token create/list/revoke in staging Settings UI\n- [ ] Smoke-test MCP tools against staging API\n- [ ] Publish `@cassette.diy/mcp` to npm (`npm publish` from `cassette-mcp/`)\n- [ ] Set production `CASSETTE_API_URL` in docs\n- [ ] Optional: track `mcp_token_created` analytics event\n\n## License\n\nUNLICENSED — internal Cassette package.\n","readmeFilename":"README.md","_rev":"1-5f637ea4dddfa1f1deb6a1510f2a6b0c"}