TuneTidy
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TuneTidyAdd the song 'Blinding Lights' to my 'Road Trip' playlist"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TuneTidy
Hosted ChatGPT ↔ Spotify control — a small Connect website + MCP server so ChatGPT can act on your Spotify account.
Spotify stays the music app. TuneTidy is the middle layer: link once, then control playlists, playback (including exact-cue seek), and optional offline ZIP export from chat.
Not a Spotify clone. Not a self-host Docker product for end users. You (operator) deploy once; everyone else just Connects.
What it does
For | Experience |
End user | Open Connect → Link Spotify → add MCP URL in ChatGPT → chat |
Operator | Deploy to Render (or similar), set env secrets once |
ChatGPT | Calls 17 MCP tools; Spotify tokens never leave the server |
Capabilities (Milestone A)
Connect site — Spotify OAuth (Authorization Code), encrypted token storage
Playlist control — list, create, add/remove tracks, update details
Playback — play / pause / seek / now-playing; exact-cue (beat-drop seek with confirmation)
Offline export — Spotify metadata → match on JioSaavn/Gaana APIs → ZIP download
(not Spotify stream ripping)Safety — write tools need
confirmationToken+idempotencyKey; AES-256-GCM for tokens
Related MCP server: YouTube Music MCP
Architecture
Browser ──► apps/web (Next.js Connect + OAuth)
ChatGPT ──► apps/mcp (Fastify JSON-RPC MCP @ POST /mcp)
│
▼
packages/core (use cases)
│
┌───────────┼───────────┐
▼ ▼ ▼
packages/ packages/ packages/
spotify db saavn
│ │ │
Spotify API Postgres Saavn/Gaana APIsPath | Role |
| Connect UX, Spotify OAuth routes, health |
| Remote MCP: |
| Job worker skeleton (exports currently run in MCP process) |
| Only place that calls Spotify HTTP |
| Token crypto, JWT verify, dev bypass |
| Drizzle schema, migrations, repositories |
| Playback cues, offline export pipeline |
| Search/match for offline export |
| Shared Zod tool schemas |
| Architecture, MCP catalog, deploy, security |
| Roadmap / GSD state (optional for operators) |
MCP tools (17)
Endpoint: POST /mcp (JSON-RPC). Also: GET /mcp, GET /tools.
Group | Tools |
Read |
|
Write |
|
Offline |
|
Full contracts: docs/MCP_TOOL_CATALOG.md.
Quick start (local)
Requirements: Node ≥ 22, pnpm 9, Postgres (Docker optional).
# 1. Install
pnpm install
# 2. Env
cp .env.example .env
# Generate encryption key:
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
# Set TOKEN_ENCRYPTION_KEY_CURRENT and DATABASE_URL
# 3. Database
docker compose up -d # optional local Postgres
pnpm db:migrate
# pnpm db:seed # optional
# 4. Run
pnpm dev:web # http://127.0.0.1:3000
pnpm dev:mcp # http://127.0.0.1:3100Minimum env for local Connect + MCP
Variable | Notes |
| Postgres connection string |
| 32-byte key, base64 |
| |
| e.g. |
|
|
| Stable user id when bypass is on |
| Defaults in |
Auth0 vars are required for production-style login; dev bypass skips MCP Bearer checks.
See .env.example for the full list (Saavn URLs, cover storage, classifier stubs, etc.).
Smoke MCP (dev bypass)
curl -s -X POST http://127.0.0.1:3100/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'Deploy — free multi-user (recommended)
Don’t use paid Render Postgres. Use Convex free for encrypted Spotify tokens:
npx convex dev/npx convex deploy(seedocs/CONVEX_FREE_MULTIUSER.md)Render 2 free Web Services:
tunetidy-web+tunetidy-mcp(no Postgres service)Env:
STORAGE_BACKEND=convex,CONVEX_URL,CONVEX_SERVER_KEY, encryption key, Spotify appUsers open Connect → Link Spotify once → ChatGPT uses MCP
Mode | Docs |
Convex multi-user (free) | |
MCP-only single user (no DB) | |
Local Postgres |
Scripts
Command | Purpose |
| Local apps |
| Schema + seed |
| TypeScript across packages |
| Unit tests (Vitest) |
| Spotify client contracts |
| Production builds |
| lint + typecheck + tests + build |
Security & compliance
Spotify refresh/access tokens are encrypted at rest; tools never return them.
Destructive writes are confirmation + idempotency gated.
Offline export uses third-party catalog APIs (Saavn-compatible / Gaana). Not official Spotify Offline. Operators are responsible for ToS/legal fit in their region.
Never commit
.env— only.env.example.
More: docs/SECURITY.md.
Docs
Doc | Content |
All tools + curl examples | |
Package boundaries | |
Beat-drop / exact seek | |
JioSaavn match → ZIP | |
Local + credential setup | |
Build completeness audit | |
Connect smoke checklist |
Planning source (optional): .planning/, archive PRDs under all_raw_infos/.
Status
Area | State |
Connect + Spotify OAuth | ✅ Implemented |
MCP tools (17) | ✅ Implemented |
Exact-cue playback | ✅ Implemented |
Offline export (preview → ZIP) | ✅ Implemented |
Automated tests / typecheck | ✅ Passing in CI path |
Production Render + live ChatGPT smoke | ⬜ Operator (you) |
Full library organizer (rules, heavy sync UI) | ⬜ Backlog |
License
Private / unlicensed unless you add a license file. Spotify, JioSaavn, Gaana, Auth0, and ChatGPT are trademarks of their respective owners; this project is an independent companion stack.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/peterish8/TuneTidy'
If you have feedback or need assistance with the MCP directory API, please join our Discord server