THIRI Chord Intelligence

ai.thiriPublished by thiri.aiOfficial publisherv0.5.2Updated Oct 24, 2026

Deterministic music theory for agents: analyze, voice, reharmonize, conduct — computed, not guessed

VerifiedStreamable HTTPWeb executableMedia & DesignAI & ML

Overview

AI-generated overview

A deterministic music-theory server that lets an assistant analyze chords, spell notes, generate voicings and reharmonize progressions.

What you can do
Analyze chords into root, quality, intervals, roman numerals and harmonic function, with jazz and classical readings plus alternatives and scale options for minor keys. Resolve chords to spelled notes, frequencies, MIDI numbers and recommended scales. Generate instrument-ready voicings in styles such as rootless, shell, triad, pad, guide-tones and drop-2/3, with a voice-leading score when previous notes are supplied. Reharmonize a progression using techniques such as tritone substitution, ii-V insertion, modal interchange, diminished passing, secondary dominants, chain of dominants, Coltrane changes and backdoor, or automatic selection.
When to use it
Useful when an assistant needs reliable, computed music theory rather than guessed answers: chord charts, roman-numeral analysis, voicings for an arrangement, or reharmonization ideas for a progression. Also suited to checking or correcting chord output from a music generator.
Requirements
A THIRI API key supplied as the THIRI_API_KEY environment variable, or pasted on the consent page when adding the hosted connector. Either the remote endpoint or the local npm package run with npx; network access to the THIRI API. A free key is available from the provider.
Before you install
The API key is a live secret and should be kept out of shared configs and repositories. Requests go to a third-party hosted API, so chord and progression data is sent off the machine. Usage is subject to quota limits tied to the key. The hosted surface returns theory and band lanes only; audio rendering is a separate local server.

Installation

In SourceWeft

  1. Open THIRI Chord Intelligence in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/ai.thiri%2Fchord-intelligence/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "thiri-chord-intelligence": {
      "type": "http",
      "url": "https://mcp.thiri.ai/mcp"
    }
  }
}

README

🎷 THIRI Chord Intelligence — MCP Server

[npm] [npm downloads] [CI] [license] [MCP] [Glama score]

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 AI Music Builders: Want elevated rate limits, direct founder support, and early access to upcoming tools? Join our developer community on Skool — T.H.I.R.I. Builders.

Musicians: 2-minute setup (no code)

  1. Get a free key at build.thiri.ai/keys
  2. In Claude: Settings → Connectors → Add custom connector → URL https://mcp.thiri.ai/mcp → paste your sk_live_ key
  3. 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

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.

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:

json
{  "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, render_audio (server-side Csound via POST /v2/render), play_audio, search_corpus
thiri-composition-mcpComposition 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:

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 — "render_audio from the conduct result 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

SurfaceAudio render
mcp.thiri.ai / hosted connectorNo — theory + conduct_band lanes only
Local thiri-conductor-mcpYes — WAV rendered server-side (POST /v2/render), played locally; no Csound install needed

Install

Get a free key at build.thiri.ai/keys, 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):

sh
claude mcp add thiri --env THIRI_API_KEY=sk_live_your_key -- npx -y @bluesprincemedia/thiri-mcp

Claude Desktop (claude_desktop_config.json):

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:

sh
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

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

Development

sh
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 ([email protected]). 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.

Source: README.md at commit 4dce404

Tools

4

analyze_chord

Analyze Chord

Parse a chord into root, quality, intervals, and (with a key) roman numeral + function. Numerals use the jazz convention by default (Cmaj7 in Am = ♭IIIΔ7); both jazz and classical numerals are always returned in `numerals`, and other valid readings in `alternatives`. Pass `scale` to read a minor key as harmonic or melodic minor.

Parameterskeychordrequiredscaleconvention

resolve_chord

Resolve Chord

Resolve a chord to spelled notes, frequencies, MIDI, and recommended scales.

Parameterschordrequired

generate_voicing

Generate Voicing

Instrument-ready voicing in a style; pass previousNotes for a voice-leading score.

ParameterschordrequiredstyleoctavekeyContextpreviousNotes

reharmonize

Reharmonize Progression

Reharmonize a progression. Techniques: tritone_sub, ii_v_insertion, modal_interchange, diminished_passing, secondary_dominant, chain_of_dominants, coltrane_changes, backdoor (or auto).

Parameterskeytechniqueprogressionrequired

Version history

1
  1. v0.5.2LatestSep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.