Labsco
BluesPrince logo

THIRI Chord Intelligence

β˜… 1

from BluesPrince

Deterministic music-theory engine for AI agents to analyze, resolve, voice, and reharm chords.

πŸ”₯πŸ”₯πŸ”₯βœ“ VerifiedAccount requiredNeeds API keys

🎷 THIRI Chord Intelligence β€” MCP Server

npm license MCP

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 agent analyze chords, run roman-numeral analysis, generate voicings, and reharmonize progressions with answers that are computed, not guessed.

LLMs 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.

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.

⭐ If this is useful, star the repo β€” it helps other musicians and agent builders find it.

What you can ask

"Analyze Dm7b5 in C." β†’ iiΓΈ7, half-diminished, borrowed predominant, + scale options "What notes are in C7sus4?" β†’ C F G Bb (the suspension survives) "Give me a rootless Cmaj7 voicing, then voice-lead into Dm7." β†’ voicings + a voice-leading score "Reharmonize Dm7 G7 Cmaj7 with Coltrane changes." β†’ Cmaj7 Ab7 Abmaj7 E7

Tools

ToolWhat it does
analyze_chordChord β†’ root, quality, intervals, roman numeral & harmonic function (secondary dominants, modal-interchange labels)
resolve_chordChord β†’ spelled notes (enharmonically correct), frequencies, MIDI, scale recommendations
generate_voicingInstrument-ready voicings (rootless/bill_evans, shell, triad, pad, guide-tones, drop-2/3); pass previousNotes for a voice-leading score; colorPreferences for explicit tensions
reharmonizeProgression reharmonization β€” 8 techniques: tritone_sub, ii_v_insertion, modal_interchange, diminished_passing, secondary_dominant, chain_of_dominants, coltrane_changes, backdoor (or auto)
conduct_bandNatural-language band conduct β†’ lanes + MIDI (hosted MCP v0.3+)

Runs on the v2 grid engine β€” correct sus chords, real triads, enharmonic spelling, all altered dominants β€” with request timeouts, quota reporting, and structured errors.

Local Csound MCP (Desktop only)

For hear-it agent loops (conduct β†’ Csound score β†’ WAV), add a second local server alongside hosted theory tools:

Copy & paste β€” that's it
{
  "mcpServers": {
    "thiri": {
      "command": "npx",
      "args": ["-y", "@bluesprincemedia/thiri-mcp"],
      "env": { "THIRI_API_KEY": "sk_live_your_key" }
    },
    "thiri-conductor": {
      "command": "npx",
      "args": ["-y", "@bluesprincemedia/thiri-mcp", "thiri-conductor-mcp"],
      "env": { "THIRI_API_KEY": "sk_live_your_key" }
    },
    "thiri-composition": {
      "command": "npx",
      "args": ["-y", "@bluesprincemedia/thiri-mcp", "thiri-composition-mcp"]
    }
  }
}
BinTools
thiri-conductor-mcpconduct_band, build_csound_score, render_csound_wav, play_audio, search_csound_corpus, render_with_tension
thiri-composition-mcpComposition IR tools + play_composition (fluidsynth preview)

Requires Csound CLI on PATH for WAV render. Proof: npm run test:conductor Β· live docs: build.thiri.ai/lab/conductor-mcp Β· agent recipes.

Conductor Agent (vibe compose)

End-to-end persona for local vibe composition β€” skill, CLI, and Band dashboard panel:

EntryCommand / path
Cursor skillCopy THIRI/lab/skills/thiri-conductor-agent/SKILL.md β†’ ~/.cursor/skills/thiri-conductor-agent/SKILL.md
CLIcd thiri-mcp && npm run conductor:vibe -- "gospel ballad in F minor"
Dashboardnpm run dev:studio β†’ localhost:5173/band β†’ Vibe Conduct panel
Lab proofbuild.thiri.ai/lab/conductor-agent

Dual MCP config above + mapConductResultToStudioModules after each conduct_band. Last CLI render writes ~/.thiri/conductor-last.json (local only, not committed).

Flagship agent recipe (analyze β†’ conduct β†’ render β†’ critique)

Paste in order after dual MCP config above:

  1. Analyze β€” "Analyze Dm7 G7 Cmaj7 in key C with analyze_chord; summarize roman numerals and tension."
  2. Conduct β€” "conduct_band: warm Rhodes pad, walking bass, brush drums, 8 bars medium swing in C."
  3. Render β€” "build_csound_score from lanes, then render_csound_wav at tempo 120."
  4. Critique β€” "play_audio; critique voice-leading and register balance; suggest one revision."

Full prompts: build.thiri.ai/lab/agent-recipes

Hosted vs local boundary

SurfaceCsound WAV
mcp.thiri.ai / hosted connectorNo β€” theory + conduct_band lanes only
Local thiri-conductor-mcpYes β€” requires Csound CLI on your machine

Prefer raw HTTP? (no MCP needed)

The same engine is a plain REST API:

Copy & paste β€” that's it
curl -X POST https://chords.thiri.ai/v2/analyze \
  -H "Authorization: Bearer YOUR_KEY" -H "content-type: application/json" \
  -d '{"chord":"Dm7b5","key":"C"}'

Four endpoints: /v2/analyze, /v2/resolve, /v2/voicing, /v2/reharmonize, /v2/conduct. See openapi.yaml.

Environment variables

VariableDefaultDescription
THIRI_API_KEY(none)Bearer token (sk_live_…) β€” get one at build.thiri.ai/developers
THIRI_API_URLhttps://chords.thiri.aiAPI base (override only for local dev)

Development

Copy & paste β€” that's it
npm install && npm run build && npm start

License

MIT β€” Β© 2026 Blues Prince Media. The client is open; the engine is a hosted service.