THIRI Chord Intelligence
Server Details
Deterministic music theory for agents: analyze, voice, reharmonize, conduct — computed, not guessed
- Status
- Healthy
- Uptime
- 100.0% over 64 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- BluesPrince/thiri-mcp
- GitHub Stars
- 11
- Server Listing
- THIRI Chord Intelligence — Music Theory MCP Server
TDQS
Scored across 4 tools
generate_voicing and reharmonize are clearly distinct, but analyze_chord and resolve_chord both take a chord and return note-level information, which risks misselection. The descriptions do differentiate them (theory analysis with roman numerals vs. concrete notes/frequencies/MIDI/scales), but the boundary is subtle for an agent.
Three of four tools follow a clean verb_noun pattern (analyze_chord, generate_voicing, resolve_chord), and all use snake_case. The lone deviation, reharmonize, is a bare verb, a minor inconsistency rather than a disruptive one.
Four tools is well-scoped for a focused chord-intelligence server, and each covers a distinct stage: analysis, voicing generation, reharmonization, and resolution. Nothing feels redundant or padded.
The surface covers the core lifecycle of chord work—parse, realize, voice, and reharmonize—with sensible parameters like scale, previousNotes, and technique lists. There are minor gaps such as no progression-level analysis or key-identification tool, but no dead ends for typical workflows.
Available Tools
4 toolsanalyze_chordARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| chord | Yes | ||
| scale | No | Scale to read the key in. Default: major, or natural minor with the harmonic-minor V for minor keys. | |
| convention | No | Which numeral convention fills `numeral`. Default: jazz. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral value by disclosing that both jazz and classical numerals are always returned in `numerals`, alternate readings in `alternatives`, and that jazz is the default convention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action and outputs. The numerals/alternatives clause is somewhat packed but every sentence carries distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description usefully names the returned fields (`numeral`, `numerals`, `alternatives`). Combined with annotation coverage, an agent has enough to invoke and interpret results, though exact return shapes beyond numerals are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema coverage, the description compensates: it explains what `key` triggers, how `scale` reads minor keys, and that `convention` only controls which numeral fills the `numeral` field. The `chord` parameter itself is self-evident from the tool name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Parse a chord') and enumerates the exact outputs (root, quality, intervals, roman numeral + function). This clearly separates it from siblings like generate_voicing or reharmonize, which create rather than analyze.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional context: numerals require a `key`, and `scale` selects harmonic/melodic minor readings. However, it never names an alternative tool or states when a different sibling (e.g. resolve_chord) would be the better pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_voicingBRead-onlyIdempotentInspect
Instrument-ready voicing in a style; pass previousNotes for a voice-leading score.
| Name | Required | Description | Default |
|---|---|---|---|
| chord | Yes | ||
| style | No | ||
| octave | No | ||
| keyContext | No | ||
| previousNotes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to repeat safety traits. The description adds behavioral context by mentioning 'voice-leading score', indicating that previousNotes influences the output. However, it does not disclose any other behavioral traits such as authentication needs or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words. It conveys the core purpose and a key parameter usage efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 5 parameters and no output schema, the description is insufficient. It fails to explain multiple parameters (style, octave, keyContext) and the nature of the return value. The description leaves significant gaps for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. Only 'previousNotes' is explained (for voice-leading), leaving four other parameters (chord, style, octave, keyContext) completely undefined. The description adds little value beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it generates an 'instrument-ready voicing in a style', clearly indicating the tool's function. It also mentions using previousNotes for voice-leading, which distinguishes it from siblings like analyze_chord or reharmonize. However, it could be more explicit that the output is a voicing (a set of notes) and not a chord symbol.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus its siblings (analyze_chord, reharmonize, resolve_chord). The only usage hint is 'pass previousNotes for a voice-leading score', which implies a conditional use but does not specify when not to use or what scenarios are appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reharmonizeARead-onlyIdempotentInspect
Reharmonize a progression. Techniques: tritone_sub, ii_v_insertion, modal_interchange, diminished_passing, secondary_dominant, chain_of_dominants, coltrane_changes, backdoor (or auto).
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| technique | No | ||
| progression | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds a list of techniques, which is useful, but it does not disclose behavioral traits beyond what annotations provide. Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description does not explain the return format, what 'auto' does, or how the transformation is applied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences, front-loaded with the primary action, and uses a clear, enumerative list for techniques. No redundant or repetitive wording. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity, and annotations cover safety, but there is no output schema. The description lacks details on return values, progression format, or the meaning of techniques like 'coltrane_changes'. It provides the essential purpose and options but is not comprehensive enough for correct invocation without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for parameter meaning. It explains the 'technique' parameter by listing valid values, and 'progression' is implied via the main action. However, the 'key' parameter is entirely undocumented, and the format of 'progression' (e.g., chord symbols) is not specified. Partial compensation but significant gaps remain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Reharmonize a progression.' The verb 'reharmonize' is specific and the resource 'progression' is explicit. The list of techniques distinguishes it from sibling tools like analyze_chord or resolve_chord, making the tool's unique function clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reharmonizing chord progressions but does not explicitly state when to use this tool versus alternatives like analyze_chord or generate_voicing. It lists techniques but offers no guidance on choosing between them or when not to use the tool. Context is clear but exclusions and alternatives are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_chordARead-onlyIdempotentInspect
Resolve a chord to spelled notes, frequencies, MIDI, and recommended scales.
| Name | Required | Description | Default |
|---|---|---|---|
| chord | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the output categories (notes, frequencies, MIDI, scales) but no additional behavioral constraints or edge cases. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero filler. It conveys the core action and outputs efficiently, and every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, read-only), and the description covers purpose and output categories. However, it omits input format and output structure, and there is no output schema to compensate. The missing chord-notation detail is a clear gap, making this minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema defines only a 'chord' string with no description or format. Schema description coverage is 0%, and the description merely says 'a chord' without specifying accepted notation (e.g., 'Cmaj7', 'C major', note list). This is a significant gap for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Resolve') with a clear resource ('a chord') and explicitly enumerates the outputs: spelled notes, frequencies, MIDI, and recommended scales. This distinguishes it from siblings like analyze_chord, generate_voicing, and reharmonize, which have different outputs/purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage—use when you need chord resolution to notes/frequencies/scales—but provides no explicit guidance on when to prefer this tool over siblings or any exclusions. There is no mention of alternatives or prerequisites, so the guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
analyze_chord2 fields changed- added
Input schema / properties / conventionAdded value: +{ + "description": "Which numeral convention fills `numeral`. Default: jazz.", + "enum": [ + "jazz", + "classical" + ], + "type": "string" +} - added
Input schema / properties / scaleAdded value: +{ + "description": "Scale to read the key in. Default: major, or natural minor with the harmonic-minor V for minor keys.", + "enum": [ + "major", + "natural_minor", + "harmonic_minor", + "melodic_minor" + ], + "type": "string" +}
2 tool updates
- Removed
conduct_band - Changed
generate_voicing1 field changed- removed
Input schema / properties / voicesRemoved value: -{ - "type": "number" -}
1 tool update
- Changed
generate_voicing1 field changed- added
Input schema / properties / voicesAdded value: +{ + "type": "number" +}
1 tool update
- Added
conduct_band
4 tool updates
- First observed
analyze_chord - First observed
generate_voicing - First observed
reharmonize - First observed
resolve_chord
Related MCP Connectors
Autonomous music production for AI agents with MIDI generation, QC and provenance.
Deterministic reasoning stack for AI agents: simulate, decide & compute, plus cross-domain tools.
Design intelligence for coding agents: audits, design systems, and a taste profile agents consult.
Neutral commerce resolution for AI agents — music live, ranked by trust, never by commission.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceMCP server that lets AI agents compose real music through a persistent server-side score, supporting planning, voice writing, verification, and MIDI export.-
- AlicenseNot gradedqualityAmaintenanceAI-assisted sheet music transcription and notation workflow via Agent and MCP.1Apache 2.0
- AlicenseAqualityBmaintenanceProvides atomic music-theory and MIDI tools for composing, enabling LLMs to chain deterministic steps like scale/chord lookups, degree resolution, rhythm generation, and MIDI rendering.131MIT
- AlicenseNot gradedqualityDmaintenanceA composition-focused server built on music21 for generative music workflows, enabling melody generation, musical transformations, chord reharmonization, counterpoint creation, and MIDI export through constraint-based algorithmic composition tools.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.