Skip to main content
Glama

Analyze Harmony

analyze-harmony
Read-onlyIdempotent

Music theory helper: name a chord from notes, guess the key, get a progression, or list what fits a key. Returns both the ABC chord-symbol spelling (for play-sheet-music) and the Strudel form (for play-live-pattern). Tasks: detect-chord (notes -> chord name + what to play next), detect-key (notes or chords -> best key + diatonic chords), suggest-progression (key [+ romanNumerals] -> chord symbols), scale-for-chord (chords -> the scale to improvise over each), key-chords (key -> every diatonic triad, seventh, and chord scale). Use it before writing chord symbols for a style preset, or to check a harmonization.

Input Schema

NameRequiredDescriptionDefault
keyNoKey, e.g. "C", "A minor", "F# major". For suggest-progression/key-chords.
taskYesWhat to work out. detect-chord needs notes; detect-key needs notes or chords; scale-for-chord needs chords; suggest-progression/key-chords need a key.
notesNoNote names, e.g. ["c4","e4","g4","b4"] or ["C","Eb","G"]. For detect-chord/detect-key.
chordsNoChord symbols, e.g. ["Dm7","G7","Cmaj7"]. For detect-key/scale-for-chord.
romanNumeralsNoRoman numerals to render in the key, e.g. ["ii7","V7","Imaj7"] or ["I","V","vi","IV"]. Optional for suggest-progression — omit it to get common progressions instead.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  2. Changed1 schema field changed
    • changedInput schema / properties / task / description
      Previous value: -"What to work out. detect-chord/detect-key need notes or chords; suggest-progression/key-chords need a key."New value: +"What to work out. detect-chord needs notes; detect-key needs notes or chords; scale-for-chord needs chords; suggest-progression/key-chords need a key."
  3. Added

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered and the description is consistent with it. Beyond that it discloses the dual output contract (ABC chord-symbol spelling for play-sheet-music, Strudel form for play-live-pattern), which is genuinely useful behavior an agent would not know from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the overall purpose and then moves to a compact task list; almost every clause carries information, including the output-format and consumer notes. It is somewhat dense with arrow notation and parenthetical asides, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining returns, and it does reasonably well: it states the two output encodings and sketches what each task yields (chord name + what to play next, best key + diatonic chords, chord symbols, scales, full diatonic sets). Exact return field shapes and error behavior for invalid notes remain unspecified, which keeps it short of a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters, the task enum, and the optional romanNumerals behavior are already documented in structured form. The description echoes that mapping ("detect-chord needs notes; suggest-progression/key-chords need a key") but adds no syntax, formatting, or edge-case detail beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete role ("Music theory helper: name a chord from notes, guess the key, get a progression, or list what fits a key") and then enumerates all five task modes with input -> output arrows, so an agent can match a user request to a mode without opening the schema. It also differentiates itself from siblings by naming the exact downstream consumers, play-sheet-music and play-live-pattern.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear usage context ("Use it before writing chord symbols for a style preset, or to check a harmonization") and per-task input prerequisites, which tells the agent when each mode applies. What it lacks is explicit when-not guidance or named alternatives for cases where another sibling (e.g. get-music-guide or search-music-docs) would be the better call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.