{
  "markdown": "# 🎷 THIRI Chord Intelligence — MCP Server\n\n[![npm](https://img.shields.io/npm/v/@bluesprincemedia/thiri-mcp)](https://www.npmjs.com/package/@bluesprincemedia/thiri-mcp)\n[![npm downloads](https://img.shields.io/npm/dm/@bluesprincemedia/thiri-mcp)](https://www.npmjs.com/package/@bluesprincemedia/thiri-mcp)\n[![CI](https://github.com/BluesPrince/thiri-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/BluesPrince/thiri-mcp/actions/workflows/ci.yml)\n[![license](https://img.shields.io/badge/license-PolyForm%20NC%201.0.0-blue)](./LICENSE)\n![MCP](https://img.shields.io/badge/MCP-server-black)\n[![Glama score](https://glama.ai/mcp/servers/BluesPrince/thiri-mcp/badges/score.svg)](https://glama.ai/mcp/servers/BluesPrince/thiri-mcp)\n\n**Give your AI real music theory.** THIRI is the deterministic **music theory MCP server + API** for AI builders — it lets Claude, Cursor, or any [MCP](https://modelcontextprotocol.io) agent **analyze chords, run roman-numeral analysis, generate voicings, and reharmonize progressions** with answers that are *computed, not guessed*.\n\nLLMs hallucinate music theory: wrong notes, fake roman numerals, voicings that don't voice-lead. THIRI is a **deterministic** engine (pitch-class-set theory over ℤ/12) behind a hosted API — so `C7sus4` keeps its suspension, `Caug` spells `C E G#`, and \"Coltrane changes on Dm7 G7 Cmaj7\" returns `Cmaj7 Ab7 Abmaj7 E7`, every time.\n\n**Downstream of Suno / Udio or any generator?** Wrap the output and get a correct chord chart your agent can trust. And unlike `tonal.js` or `music21`, THIRI is hosted and agent-native (no install, any language) — and it *reharmonizes* and *voice-leads*, not just looks chords up.\n\n> ⭐ If this is useful, star the repo — it helps other musicians and agent builders find it.\n\n> 👥 **Join the First 55 AI Music Builders**: Want elevated rate limits (300 req/min), direct founder support, and early access to upcoming tools? Join our developer community on **[Skool — Blues People AI](https://www.skool.com/blues-people-ai-4513/about)**.\n\n## Musicians: 2-minute setup (no code)\n\n1. Get a free key at **[build.thiri.ai/developers](https://build.thiri.ai/developers)**\n2. In **Claude**: Settings → **Connectors** → **Add custom connector** → URL `https://mcp.thiri.ai/mcp` → paste your `sk_live_` key\n3. Ask Claude: *\"Reharmonize Dm7 G7 Cmaj7 with Coltrane changes.\"*\n\nThat's it — no install, no config file. Builders: full install options (Claude Code, Desktop config, raw HTTP) are [below](#install).\n\n## What you can ask\n> *\"Analyze Dm7b5 in C.\"* → `iiø7`, half-diminished, borrowed predominant, + scale options\n> *\"What notes are in C7sus4?\"* → `C F G Bb` (the suspension survives)\n> *\"Give me a rootless Cmaj7 voicing, then voice-lead into Dm7.\"* → voicings + a voice-leading score\n> *\"Reharmonize Dm7 G7 Cmaj7 with Coltrane changes.\"* → `Cmaj7 Ab7 Abmaj7 E7`\n\n## Tools\n| Tool | What it does |\n|------|-------------|\n| `analyze_chord` | Chord → root, quality, intervals, roman numeral & harmonic function (secondary dominants, modal-interchange labels) |\n| `resolve_chord` | Chord → spelled notes (enharmonically correct), frequencies, MIDI, scale recommendations |\n| `generate_voicing` | Instrument-ready voicings (rootless/bill_evans, shell, triad, pad, guide-tones, drop-2/3); pass `previousNotes` for a **voice-leading score**; `colorPreferences` for explicit tensions |\n| `reharmonize` | Progression reharmonization — 8 techniques: `tritone_sub`, `ii_v_insertion`, `modal_interchange`, `diminished_passing`, `secondary_dominant`, `chain_of_dominants`, `coltrane_changes`, `backdoor` (or `auto`) |\n| `conduct_band` | Natural-language band conduct → lanes + MIDI (hosted MCP v0.3+) |\n\n> Runs on the **v2 grid engine** — correct sus chords, real triads, enharmonic spelling, all altered dominants — with request timeouts, quota reporting, and structured errors.\n\n### Conductor & composition companions (Desktop only)\n\nFor **hear-it** agent loops (conduct → server-side render → WAV through your speakers), add a second local server alongside hosted theory tools:\n\n```json\n{\n  \"mcpServers\": {\n    \"thiri\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bluesprincemedia/thiri-mcp\"],\n      \"env\": { \"THIRI_API_KEY\": \"sk_live_your_key\" }\n    },\n    \"thiri-conductor\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bluesprincemedia/thiri-mcp\", \"thiri-conductor-mcp\"],\n      \"env\": { \"THIRI_API_KEY\": \"sk_live_your_key\" }\n    },\n    \"thiri-composition\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bluesprincemedia/thiri-mcp\", \"thiri-composition-mcp\"]\n    }\n  }\n}\n```\n\n| Bin | Tools |\n|-----|-------|\n| `thiri-conductor-mcp` | `conduct_band`, `render_audio` (server-side Csound via `POST /v2/render`), `play_audio`, `search_corpus` |\n| `thiri-composition-mcp` | Composition IR tools + `play_composition` (fluidsynth preview) |\n\nRendering runs **server-side** as of v0.5.0 — no Csound install needed. Proof: `npm run test:conductor` · live docs: [build.thiri.ai/lab/conductor-mcp](https://build.thiri.ai/lab/conductor-mcp) · [agent recipes](https://build.thiri.ai/lab/agent-recipes).\n\n### Conductor Agent (vibe compose)\n\nEnd-to-end persona for local vibe composition — skill, CLI, and Band dashboard panel:\n\n| Entry | Command / path |\n|-------|----------------|\n| **Cursor skill** | Copy `THIRI/lab/skills/thiri-conductor-agent/SKILL.md` → `~/.cursor/skills/thiri-conductor-agent/SKILL.md` |\n| **CLI** | `cd thiri-mcp && npm run conductor:vibe -- \"gospel ballad in F minor\"` |\n| **Dashboard** | `npm run dev:studio` → [localhost:5173/band](http://localhost:5173/band) → **Vibe Conduct** panel |\n| **Lab proof** | [build.thiri.ai/lab/conductor-agent](https://build.thiri.ai/lab/conductor-agent) |\n\nDual MCP config above + `mapConductResultToStudioModules` after each `conduct_band`. Last CLI render writes `~/.thiri/conductor-last.json` (local only, not committed).\n\n### Flagship agent recipe (analyze → conduct → render → critique)\n\nPaste in order after dual MCP config above:\n\n1. **Analyze** — *\"Analyze Dm7 G7 Cmaj7 in key C with analyze_chord; summarize roman numerals and tension.\"*\n2. **Conduct** — *\"conduct_band: warm Rhodes pad, walking bass, brush drums, 8 bars medium swing in C.\"*\n3. **Render** — *\"render_audio from the conduct result at tempo 120.\"*\n4. **Critique** — *\"play_audio; critique voice-leading and register balance; suggest one revision.\"*\n\nFull prompts: [build.thiri.ai/lab/agent-recipes](https://build.thiri.ai/lab/agent-recipes)\n\n### Hosted vs local boundary\n\n| Surface | Audio render |\n|---------|--------------|\n| `mcp.thiri.ai` / hosted connector | No — theory + `conduct_band` lanes only |\n| Local `thiri-conductor-mcp` | Yes — WAV rendered server-side (`POST /v2/render`), played locally; no Csound install needed |\n\n## Install\nGet a free key at **[build.thiri.ai/developers](https://build.thiri.ai/developers)**, then pick a path:\n\n**Claude Desktop / web / mobile — hosted (one-click custom connector, nothing to install):**\nSettings → Connectors → **Add custom connector** → URL `https://mcp.thiri.ai/mcp` → paste your `sk_live_` key on the consent page. Same 5 tools, same key, same quota — no config file, no `npx`.\n\n**Claude Code (one line):**\n```sh\nclaude mcp add thiri --env THIRI_API_KEY=sk_live_your_key -- npx -y @bluesprincemedia/thiri-mcp\n```\n\n**Claude Desktop** (`claude_desktop_config.json`):\n```json\n{\n  \"mcpServers\": {\n    \"thiri\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@bluesprincemedia/thiri-mcp\"],\n      \"env\": { \"THIRI_API_KEY\": \"sk_live_your_key\" }\n    }\n  }\n}\n```\n\n## Prefer raw HTTP? (no MCP needed)\nThe same engine is a plain REST API:\n```sh\ncurl -X POST https://chords.thiri.ai/v2/analyze \\\n  -H \"Authorization: Bearer YOUR_KEY\" -H \"content-type: application/json\" \\\n  -d '{\"chord\":\"Dm7b5\",\"key\":\"C\"}'\n```\nFive endpoints: `/v2/analyze`, `/v2/resolve`, `/v2/voicing`, `/v2/reharmonize`, `/v2/conduct`. See [`openapi.yaml`](./openapi.yaml).\n\n## Environment variables\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `THIRI_API_KEY` | (none) | Bearer token (`sk_live_…`) — get one at build.thiri.ai/developers |\n| `THIRI_API_URL` | `https://chords.thiri.ai` | API base (override only for local dev) |\n\n## Development\n```sh\nnpm install && npm run build && npm start\n```\n\n## License\n**PolyForm Noncommercial 1.0.0** — © 2026 Blues Prince Media. Free for personal,\nresearch, and noncommercial use; commercial use requires a license\n(dennison@bluesprincemedia.com). See [`LICENSE`](./LICENSE). Versions published at or\nbefore v0.5.0 remain under the MIT/PolyForm dual license they shipped with.\n\n> As of v0.5.0 the composition engine and Csound renderer run server-side behind\n> the hosted API (`POST /v2/compose`, `POST /v2/render`); their source no longer\n> ships in this package.\n",
  "bytes": 8783,
  "sha": "ee8e167e0b2d954a3512c0070b59bf2eb4ec23d32e993962361719a2391e7ebd",
  "repo_slug": "bluesprince/thiri-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_ai_thiri_chord_intelligence_485cf380/readme"
}