npm @bluesprincemedia/thiri-mcpstreamable-httpupdated 29d ago
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.
What can you do with THIRI Chord Intelligence?
π· THIRI Chord Intelligence β MCP Server
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.
π₯ 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.
Musicians: 2-minute setup (no code)
- Get a free key at build.thiri.ai/developers
- In Claude: Settings β Connectors β Add custom connector β URL
https://mcp.thiri.ai/mcpβ paste yoursk_live_key - Ask Claude: "Reharmonize Dm7 G7 Cmaj7 with Coltrane changes."
That's it β no install, no config file. Builders: full install options (Claude Code, Desktop config, raw HTTP) are below.
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
| Tool | What it does |
|---|---|
analyze_chord |
Chord β root, quality, intervals, roman numeral & harmonic function (secondary dominants, modal-interchange labels) |
resolve_chord |
Chord β spelled notes (enharmonically correct), frequencies, MIDI, scale recommendations |
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 |
reharmonize |
Progression reharmonization β 8 techniques: tritone_sub, ii_v_insertion, modal_interchange, diminished_passing, secondary_dominant, chain_of_dominants, coltrane_changes, backdoor (or auto) |
conduct_band |
Natural-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.
Conductor & composition companions (Desktop only)
For hear-it agent loops (conduct β server-side render β WAV through your speakers), add a second local server alongside hosted theory tools:
{
"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"]
}
}
}
| Bin | Tools |
|---|---|
thiri-conductor-mcp |
conduct_band, render_audio (server-side Csound via POST /v2/render), play_audio, search_corpus |
thiri-composition-mcp |
Composition IR tools + play_composition (fluidsynth preview) |
Rendering 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 Β· agent recipes.
Conductor Agent (vibe compose)
End-to-end persona for local vibe composition β skill, CLI, and Band dashboard panel:
| Entry | Command / path |
|---|---|
| Cursor skill | Copy THIRI/lab/skills/thiri-conductor-agent/SKILL.md β ~/.cursor/skills/thiri-conductor-agent/SKILL.md |
| CLI | cd thiri-mcp && npm run conductor:vibe -- "gospel ballad in F minor" |
| Dashboard | npm run dev:studio β localhost:5173/band β Vibe Conduct panel |
| Lab proof | build.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:
- Analyze β "Analyze Dm7 G7 Cmaj7 in key C with analyze_chord; summarize roman numerals and tension."
- Conduct β "conduct_band: warm Rhodes pad, walking bass, brush drums, 8 bars medium swing in C."
- Render β "render_audio from the conduct result at tempo 120."
- Critique β "play_audio; critique voice-leading and register balance; suggest one revision."
Full prompts: build.thiri.ai/lab/agent-recipes
Hosted vs local boundary
| Surface | Audio render |
|---|---|
mcp.thiri.ai / hosted connector |
No β theory + conduct_band lanes only |
Local thiri-conductor-mcp |
Yes β WAV rendered server-side (POST /v2/render), played locally; no Csound install needed |
Install
Get a free key at build.thiri.ai/developers, then pick a path:
Claude Desktop / web / mobile β hosted (one-click custom connector, nothing to install):
Settings β 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.
Claude Code (one line):
claude mcp add thiri --env THIRI_API_KEY=sk_live_your_key -- npx -y @bluesprincemedia/thiri-mcp
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"thiri": {
"command": "npx",
"args": ["-y", "@bluesprincemedia/thiri-mcp"],
"env": { "THIRI_API_KEY": "sk_live_your_key" }
}
}
}
Prefer raw HTTP? (no MCP needed)
The same engine is a plain REST API:
curl -X POST https://chords.thiri.ai/v2/analyze \
-H "Authorization: Bearer YOUR_KEY" -H "content-type: application/json" \
-d '{"chord":"Dm7b5","key":"C"}'
Five endpoints: /v2/analyze, /v2/resolve, /v2/voicing, /v2/reharmonize, /v2/conduct. See openapi.yaml.
Environment variables
| Variable | Default | Description |
|---|---|---|
THIRI_API_KEY |
(none) | Bearer token (sk_live_β¦) β get one at build.thiri.ai/developers |
THIRI_API_URL |
https://chords.thiri.ai |
API base (override only for local dev) |
Development
npm install && npm run build && npm start
License
PolyForm Noncommercial 1.0.0 β Β© 2026 Blues Prince Media. Free for personal,
research, and noncommercial use; commercial use requires a license
(dennison@bluesprincemedia.com). See LICENSE. Versions published at or
before v0.5.0 remain under the MIT/PolyForm dual license they shipped with.
As of v0.5.0 the composition engine and Csound renderer run server-side behind the hosted API (
POST /v2/compose,POST /v2/render); their source no longer ships in this package.
Install
Add THIRI Chord Intelligence to your client. Pick the one you use.
{
"servers": {
"thiri-mcp": {
"type": "http",
"url": "https://mcp.thiri.ai/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
claude mcp add thiri-mcp -- npx -y @bluesprincemedia/thiri-mcpcodex mcp add thiri-mcp -- npx -y @bluesprincemedia/thiri-mcpamp mcp add thiri-mcp -- npx -y @bluesprincemedia/thiri-mcp{
"mcpServers": {
"thiri-mcp": {
"command": "npx",
"args": [
"-y",
"@bluesprincemedia/thiri-mcp"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"thiri-mcp": {
"command": "npx",
"args": [
"-y",
"@bluesprincemedia/thiri-mcp"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"mcpServers": {
"thiri-mcp": {
"command": "npx",
"args": [
"-y",
"@bluesprincemedia/thiri-mcp"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"thiri-mcp": {
"command": "npx",
"args": [
"-y",
"@bluesprincemedia/thiri-mcp"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"thiri-mcp": {
"command": "npx",
"args": [
"-y",
"@bluesprincemedia/thiri-mcp"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"thiri-mcp": {
"type": "local",
"command": "npx",
"args": [
"-y",
"@bluesprincemedia/thiri-mcp"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"thiri-mcp": {
"command": {
"path": "npx",
"args": [
"-y",
"@bluesprincemedia/thiri-mcp"
]
}
}
}
}Add to your Zed `settings.json`.
npx -y @bluesprincemedia/thiri-mcpRun `goose configure`, choose **Add Extension β Command-line Extension**, and paste this command.
4 tools
THIRI Chord Intelligence exposes 4 tools to a connected agent.
- analyze_chord
- Chord β root, quality, intervals, roman numeral & harmonic function (secondary dominants, modal-interchange labels)
- resolve_chord
- Chord β spelled notes (enharmonically correct), frequencies, MIDI, scale recommendations
- 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
- conduct_band
- Natural-language band conduct β lanes + MIDI (hosted MCP v0.3+)
Score
77 / 100
Good
- Documentation25/25
- Maintenance25/25
- Trust6/20
- Capability6/15
- Install experience15/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 22 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 4 tool(s) documented
- Provides prompt templates
- Provides resources
- 18 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint β no local install
Version history
| Versions | Published |
|---|---|
| 0.5.2Latest | Aug 1, 2026 |
| 0.5.1 | Jul 29, 2026 |
| 0.2.0 | Jun 18, 2026 |