HumMatch

Match singers to songs by vocal range: score fit, karaoke difficulty, and voice type.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
96%
Vollständigkeit des Schemas
100%
Qualität der Benennung
96%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~6,233Tokens (Tool-Definitionen)
~14.4 KBTypische Antwortgröße
Erhebliche Auswirkung auf die Aufmerksamkeit (4.87% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "hummatch": {
      "url": "https://hummatch.me/api/mcp"
    }
  }
}

Remote-Endpunkte

https://hummatch.me/api/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (5)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢get_vocal_profile(rangeLow, rangeHigh, voiceType)

Turn a singer's vocal range into a normalized HumMatch vocal profile: a persistent Vocal ID, voice type, and tone label. Call this first when you know someone's range and want a profile to reuse across the other HumMatch tools.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "rangeLow": {
      "type": "string",
      "description": "Lowest comfortable note, as a note name like \"D3\" or a raw MIDI number."
    },
    "rangeHigh": {
      "type": "string",
      "description": "Highest comfortable note, as a note name like \"C5\" or a raw MIDI number."
    },
    "voiceType": {
      "type": "string",
      "description": "Optional voice type hint (soprano, mezzo, alto, tenor, baritone, bass). Inferred from the range when omitted."
    }
  },
  "required": [
    "rangeLow",
    "rangeHigh"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "vocalId": {
      "type": "string",
      "description": "Human-readable profile label, e.g. \"Tenor - Balanced tone\"."
    },
    "rangeLow": {
      "type": "integer",
      "description": "Lowest comfortable note as MIDI."
    },
    "rangeHigh": {
      "type": "integer",
      "description": "Highest comfortable note as MIDI."
    },
    "voiceType": {
      "type": "string"
    },
    "toneLabel": {
      "type": "string"
    },
    "humProfile": {
      "type": "object",
      "description": "Underlying measurements. Timbre fields stay null until an actual hum recording has been analyzed.",
      "properties": {
        "low": {
          "type": "integer"
        },
        "high": {
          "type": "integer"
        },
        "center": {
          "type": "integer"
        },
        "confidence": {
          "type": "number",
          "description": "0-1. Derived from range input alone is around 0.55."
        },
        "pitchStability": {
          "type": "number"
        },
        "brightnessScore": {
          "type": [
            "number",
            "null"
          ]
        },
        "warmthScore": {
          "type": [
            "number",
            "null"
          ]
        },
        "timbreLabel": {
          "type": "string"
        },
        "timbreConfidence": {
          "type": "number"
        }
      }
    }
  },
  "required": [
    "vocalId",
    "rangeLow",
    "rangeHigh",
    "voiceType"
  ]
}
🟢recommend_songs(rangeLow, rangeHigh, voiceType, limit)

Rank the HumMatch catalog for one singer and return the songs they can actually sing, scored for range fit, karaoke difficulty, and voice-type suitability. Call this when someone asks what they should sing, what suits their voice or range, or wants karaoke song suggestions. Returns a ranked list plus named buckets (safest picks, easy wins, crowd pleasers, songs to avoid).

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "rangeLow": {
      "type": "string",
      "description": "Lowest comfortable note, as a note name like \"D3\" or a raw MIDI number."
    },
    "rangeHigh": {
      "type": "string",
      "description": "Highest comfortable note, as a note name like \"C5\" or a raw MIDI number."
    },
    "voiceType": {
      "type": "string",
      "description": "Optional voice type hint (soprano, mezzo, alto, tenor, baritone, bass). Inferred from the range when omitted."
    },
    "limit": {
      "type": "integer",
      "description": "How many songs to return per bucket (default 12, max 50)."
    }
  },
  "required": [
    "rangeLow",
    "rangeHigh"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "vocalId": {
      "type": "string"
    },
    "rangeLow": {
      "type": "integer"
    },
    "rangeHigh": {
      "type": "integer"
    },
    "voiceType": {
      "type": "string"
    },
    "confidenceTier": {
      "type": "string"
    },
    "matches": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Catalog slug; the identifier check_song_fit takes."
          },
          "title": {
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "lowNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Lowest note of the song as a MIDI number."
          },
          "highNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Highest note of the song as a MIDI number."
          },
          "lowNoteName": {
            "type": "string",
            "description": "Same as lowNote, as a note name like \"G2\"."
          },
          "highNoteName": {
            "type": "string",
            "description": "Same as highNote, as a note name like \"C#5\"."
          },
          "rangeConfidence": {
            "type": "string",
            "enum": [
              "manual_research",
              "estimated",
              "high",
              "low",
              "unknown"
            ],
            "description": "How the range was established, strongest first. \"manual_research\" was researched against sheet music or a score and is the most trustworthy tier. \"estimated\" was derived from published sources rather than measured, so present those scores as guidance rather than fact. \"high\" and \"low\" are legacy confidence labels. \"unknown\" means no range data."
          },
          "rangeSource": {
            "type": "string",
            "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\"."
          },
          "genre": {
            "type": "string"
          },
          "year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Canonical HumMatch page for the song."
          },
          "difficultyScore": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Karaoke difficulty, 0-100. Higher is harder."
          },
          "likelyVoiceFit": {
            "type": "string"
          },
          "matchScore": {
            "type": "integer",
            "description": "Overall suitability for this voice, 0-100."
          },
          "vocalFitScore": {
            "type": "integer",
            "description": "How well the song range sits inside the singer range, 0-100."
          },
          "tessituraScore": {
            "type": "integer",
            "description": "How comfortable the song sits where the voice spends most time, 0-100."
          },
          "voiceTypeFitScore": {
            "type": "integer",
            "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer."
          },
          "whyItFits": {
            "type": "string"
          },
          "riskWarning": {
            "type": "string"
          },
          "suggestedKey": {
            "type": "string",
            "description": "Transposition advice, e.g. \"Try a lower key\"."
          }
        },
        "required": [
          "slug",
          "title",
          "artist",
          "rangeConfidence"
        ]
      },
      "description": "Ranked best matches overall."
    },
    "bestSafePicks": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Catalog slug; the identifier check_song_fit takes."
          },
          "title": {
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "lowNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Lowest note of the song as a MIDI number."
          },
          "highNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Highest note of the song as a MIDI number."
          },
          "lowNoteName": {
            "type": "string",
            "description": "Same as lowNote, as a note name like \"G2\"."
          },
          "highNoteName": {
            "type": "string",
            "description": "Same as highNote, as a note name like \"C#5\"."
          },
          "rangeConfidence": {
            "type": "string",
            "enum": [
              "manual_research",
              "estimated",
              "high",
              "low",
              "unknown"
            ],
            "description": "How the range was established, strongest first. \"manual_research\" was researched against sheet music or a score and is the most trustworthy tier. \"estimated\" was derived from published sources rather than measured, so present those scores as guidance rather than fact. \"high\" and \"low\" are legacy confidence labels. \"unknown\" means no range data."
          },
          "rangeSource": {
            "type": "string",
            "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\"."
          },
          "genre": {
            "type": "string"
          },
          "year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Canonical HumMatch page for the song."
          },
          "difficultyScore": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Karaoke difficulty, 0-100. Higher is harder."
          },
          "likelyVoiceFit": {
            "type": "string"
          },
          "matchScore": {
            "type": "integer",
            "description": "Overall suitability for this voice, 0-100."
          },
          "vocalFitScore": {
            "type": "integer",
            "description": "How well the song range sits inside the singer range, 0-100."
          },
          "tessituraScore": {
            "type": "integer",
            "description": "How comfortable the song sits where the voice spends most time, 0-100."
          },
          "voiceTypeFitScore": {
            "type": "integer",
            "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer."
          },
          "whyItFits": {
            "type": "string"
          },
          "riskWarning": {
            "type": "string"
          },
          "suggestedKey": {
            "type": "string",
            "description": "Transposition advice, e.g. \"Try a lower key\"."
          }
        },
        "required": [
          "slug",
          "title",
          "artist",
          "rangeConfidence"
        ]
      },
      "description": "Lowest-risk choices."
    },
    "easyWins": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Catalog slug; the identifier check_song_fit takes."
          },
          "title": {
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "lowNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Lowest note of the song as a MIDI number."
          },
          "highNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Highest note of the song as a MIDI number."
          },
          "lowNoteName": {
            "type": "string",
            "description": "Same as lowNote, as a note name like \"G2\"."
          },
          "highNoteName": {
            "type": "string",
            "description": "Same as highNote, as a note name like \"C#5\"."
          },
          "rangeConfidence": {
            "type": "string",
            "enum": [
              "manual_research",
              "estimated",
              "high",
              "low",
              "unknown"
            ],
            "description": "How the range was established, strongest first. \"manual_research\" was researched against sheet music or a score and is the most trustworthy tier. \"estimated\" was derived from published sources rather than measured, so present those scores as guidance rather than fact. \"high\" and \"low\" are legacy confidence labels. \"unknown\" means no range data."
          },
          "rangeSource": {
            "type": "string",
            "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\"."
          },
          "genre": {
            "type": "string"
          },
          "year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Canonical HumMatch page for the song."
          },
          "difficultyScore": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Karaoke difficulty, 0-100. Higher is harder."
          },
          "likelyVoiceFit": {
            "type": "string"
          },
          "matchScore": {
            "type": "integer",
            "description": "Overall suitability for this voice, 0-100."
          },
          "vocalFitScore": {
            "type": "integer",
            "description": "How well the song range sits inside the singer range, 0-100."
          },
          "tessituraScore": {
            "type": "integer",
            "description": "How comfortable the song sits where the voice spends most time, 0-100."
          },
          "voiceTypeFitScore": {
            "type": "integer",
            "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer."
          },
          "whyItFits": {
            "type": "string"
          },
          "riskWarning": {
            "type": "string"
          },
          "suggestedKey": {
            "type": "string",
            "description": "Transposition advice, e.g. \"Try a lower key\"."
          }
        },
        "required": [
          "slug",
          "title",
          "artist",
          "rangeConfidence"
        ]
      },
      "description": "Comfortable and easy to sing."
    },
    "popularCrowdPleasers": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Catalog slug; the identifier check_song_fit takes."
          },
          "title": {
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "lowNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Lowest note of the song as a MIDI number."
          },
          "highNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Highest note of the song as a MIDI number."
          },
          "lowNoteName": {
            "type": "string",
            "description": "Same as lowNote, as a note name like \"G2\"."
          },
          "highNoteName": {
            "type": "string",
            "description": "Same as highNote, as a note name like \"C#5\"."
          },
          "rangeConfidence": {
            "type": "string",
            "enum": [
              "manual_research",
              "estimated",
              "high",
              "low",
              "unknown"
            ],
            "description": "How the range was established, strongest first. \"manual_research\" was researched against sheet music or a score and is the most trustworthy tier. \"estimated\" was derived from published sources rather than measured, so present those scores as guidance rather than fact. \"high\" and \"low\" are legacy confidence labels. \"unknown\" means no range data."
          },
          "rangeSource": {
            "type": "string",
            "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\"."
          },
          "genre": {
            "type": "string"
          },
          "year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Canonical HumMatch page for the song."
          },
          "difficultyScore": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Karaoke difficulty, 0-100. Higher is harder."
          },
          "likelyVoiceFit": {
            "type": "string"
          },
          "matchScore": {
            "type": "integer",
            "description": "Overall suitability for this voice, 0-100."
          },
          "vocalFitScore": {
            "type": "integer",
            "description": "How well the song range sits inside the singer range, 0-100."
          },
          "tessituraScore": {
            "type": "integer",
            "description": "How comfortable the song sits where the voice spends most time, 0-100."
          },
          "voiceTypeFitScore": {
            "type": "integer",
            "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer."
          },
          "whyItFits": {
            "type": "string"
          },
          "riskWarning": {
            "type": "string"
          },
          "suggestedKey": {
            "type": "string",
            "description": "Transposition advice, e.g. \"Try a lower key\"."
          }
        },
        "required": [
          "slug",
          "title",
          "artist",
          "rangeConfidence"
        ]
      },
      "description": "Well-known songs that still fit."
    },
    "groupFriendly": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Catalog slug; the identifier check_song_fit takes."
          },
          "title": {
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "lowNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Lowest note of the song as a MIDI number."
          },
          "highNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Highest note of the song as a MIDI number."
          },
          "lowNoteName": {
            "type": "string",
            "description": "Same as lowNote, as a note name like \"G2\"."
          },
          "highNoteName": {
            "type": "string",
            "description": "Same as highNote, as a note name like \"C#5\"."
          },
          "rangeConfidence": {
            "type": "string",
            "enum": [
              "manual_research",
              "estimated",
              "high",
              "low",
              "unknown"
            ],
            "description": "How the range was established, strongest first. \"manual_research\" was researched against sheet music or a score and is the most trustworthy tier. \"estimated\" was derived from published sources rather than measured, so present those scores as guidance rather than fact. \"high\" and \"low\" are legacy confidence labels. \"unknown\" means no range data."
          },
          "rangeSource": {
            "type": "string",
            "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\"."
          },
          "genre": {
            "type": "string"
          },
          "year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Canonical HumMatch page for the song."
          },
          "difficultyScore": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Karaoke difficulty, 0-100. Higher is harder."
          },
          "likelyVoiceFit": {
            "type": "string"
          },
          "matchScore": {
            "type": "integer",
            "description": "Overall suitability for this voice, 0-100."
          },
          "vocalFitScore": {
            "type": "integer",
            "description": "How well the song range sits inside the singer range, 0-100."
          },
          "tessituraScore": {
            "type": "integer",
            "description": "How comfortable the song sits where the voice spends most time, 0-100."
          },
          "voiceTypeFitScore": {
            "type": "integer",
            "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer."
          },
          "whyItFits": {
            "type": "string"
          },
          "riskWarning": {
            "type": "string"
          },
          "suggestedKey": {
            "type": "string",
            "description": "Transposition advice, e.g. \"Try a lower key\"."
          }
        },
        "required": [
          "slug",
          "title",
          "artist",
          "rangeConfidence"
        ]
      },
      "description": "Work well with other singers."
    },
    "riskyPicksToAvoid": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Catalog slug; the identifier check_song_fit takes."
          },
          "title": {
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "lowNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Lowest note of the song as a MIDI number."
          },
          "highNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Highest note of the song as a MIDI number."
          },
          "lowNoteName": {
            "type": "string",
            "description": "Same as lowNote, as a note name like \"G2\"."
          },
          "highNoteName": {
            "type": "string",
            "description": "Same as highNote, as a note name like \"C#5\"."
          },
          "rangeConfidence": {
            "type": "string",
            "enum": [
              "manual_research",
              "estimated",
              "high",
              "low",
              "unknown"
            ],
            "description": "How the range was established, strongest first. \"manual_research\" was researched against sheet music or a score and is the most trustworthy tier. \"estimated\" was derived from published sources rather than measured, so present those scores as guidance rather than fact. \"high\" and \"low\" are legacy confidence labels. \"unknown\" means no range data."
          },
          "rangeSource": {
            "type": "string",
            "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\"."
          },
          "genre": {
            "type": "string"
          },
          "year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Canonical HumMatch page for the song."
          },
          "difficultyScore": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Karaoke difficulty, 0-100. Higher is harder."
          },
          "likelyVoiceFit": {
            "type": "string"
          },
          "matchScore": {
            "type": "integer",
            "description": "Overall suitability for this voice, 0-100."
          },
          "vocalFitScore": {
            "type": "integer",
            "description": "How well the song range sits inside the singer range, 0-100."
          },
          "tessituraScore": {
            "type": "integer",
            "description": "How comfortable the song sits where the voice spends most time, 0-100."
          },
          "voiceTypeFitScore": {
            "type": "integer",
            "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer."
          },
          "whyItFits": {
            "type": "string"
          },
          "riskWarning": {
            "type": "string"
          },
          "suggestedKey": {
            "type": "string",
            "description": "Transposition advice, e.g. \"Try a lower key\"."
          }
        },
        "required": [
          "slug",
          "title",
          "artist",
          "rangeConfidence"
        ]
      },
      "description": "Scored, but they exceed the comfortable range."
    }
  },
  "required": [
    "vocalId",
    "voiceType",
    "matches"
  ]
}
🟢search_songs(q, limit, rangeLow, rangeHigh)

Search HumMatch by song title or artist. Use this to resolve a song someone named into the catalog slug that check_song_fit needs, or to look up a song's measured vocal range. Pass rangeLow/rangeHigh as well to score every result against that voice and get the hits ranked by fit.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Search text: a song title, an artist, or both."
    },
    "limit": {
      "type": "integer",
      "description": "Maximum results (default 20, max 50)."
    },
    "rangeLow": {
      "type": "string",
      "description": "Optional. Lowest note of the singer, to score and rank the results by fit."
    },
    "rangeHigh": {
      "type": "string",
      "description": "Optional. Highest note of the singer, to score and rank the results by fit."
    }
  },
  "required": [
    "q"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "count": {
      "type": "integer"
    },
    "songs": {
      "type": "array",
      "description": "Results. Scored fields are present only when rangeLow and rangeHigh were supplied.",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Catalog slug; the identifier check_song_fit takes."
          },
          "title": {
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "lowNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Lowest note of the song as a MIDI number."
          },
          "highNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Highest note of the song as a MIDI number."
          },
          "lowNoteName": {
            "type": "string",
            "description": "Same as lowNote, as a note name like \"G2\"."
          },
          "highNoteName": {
            "type": "string",
            "description": "Same as highNote, as a note name like \"C#5\"."
          },
          "rangeConfidence": {
            "type": "string",
            "enum": [
              "manual_research",
              "estimated",
              "high",
              "low",
              "unknown"
            ],
            "description": "How the range was established, strongest first. \"manual_research\" was researched against sheet music or a score and is the most trustworthy tier. \"estimated\" was derived from published sources rather than measured, so present those scores as guidance rather than fact. \"high\" and \"low\" are legacy confidence labels. \"unknown\" means no range data."
          },
          "rangeSource": {
            "type": "string",
            "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\"."
          },
          "genre": {
            "type": "string"
          },
          "year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Canonical HumMatch page for the song."
          },
          "difficultyScore": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Karaoke difficulty, 0-100. Higher is harder."
          },
          "likelyVoiceFit": {
            "type": "string"
          },
          "matchScore": {
            "type": "integer",
            "description": "Overall suitability for this voice, 0-100."
          },
          "vocalFitScore": {
            "type": "integer",
            "description": "How well the song range sits inside the singer range, 0-100."
          },
          "tessituraScore": {
            "type": "integer",
            "description": "How comfortable the song sits where the voice spends most time, 0-100."
          },
          "voiceTypeFitScore": {
            "type": "integer",
            "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer."
          },
          "whyItFits": {
            "type": "string"
          },
          "riskWarning": {
            "type": "string"
          },
          "suggestedKey": {
            "type": "string",
            "description": "Transposition advice, e.g. \"Try a lower key\"."
          }
        },
        "required": [
          "slug",
          "title",
          "artist",
          "rangeConfidence"
        ]
      }
    }
  },
  "required": [
    "query",
    "songs"
  ]
}
🟢check_song_fit(slug, rangeLow, rangeHigh, voiceType)

Score a specific catalog song against a singer's range and explain why it fits or does not, including a suggested key to transpose to. Call this when someone asks whether they can sing a particular song. Resolve the song with search_songs first to get its slug.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "The catalog slug of the song, from search_songs."
    },
    "rangeLow": {
      "type": "string",
      "description": "Lowest comfortable note, as a note name like \"D3\" or a raw MIDI number."
    },
    "rangeHigh": {
      "type": "string",
      "description": "Highest comfortable note, as a note name like \"C5\" or a raw MIDI number."
    },
    "voiceType": {
      "type": "string",
      "description": "Optional voice type hint (soprano, mezzo, alto, tenor, baritone, bass). Inferred from the range when omitted."
    }
  },
  "required": [
    "slug",
    "rangeLow",
    "rangeHigh"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Catalog slug; the identifier check_song_fit takes."
    },
    "title": {
      "type": "string"
    },
    "artist": {
      "type": "string"
    },
    "lowNote": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Lowest note of the song as a MIDI number."
    },
    "highNote": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Highest note of the song as a MIDI number."
    },
    "lowNoteName": {
      "type": "string",
      "description": "Same as lowNote, as a note name like \"G2\"."
    },
    "highNoteName": {
      "type": "string",
      "description": "Same as highNote, as a note name like \"C#5\"."
    },
    "rangeConfidence": {
      "type": "string",
      "enum": [
        "manual_research",
        "estimated",
        "high",
        "low",
        "unknown"
      ],
      "description": "How the range was established, strongest first. \"manual_research\" was researched against sheet music or a score and is the most trustworthy tier. \"estimated\" was derived from published sources rather than measured, so present those scores as guidance rather than fact. \"high\" and \"low\" are legacy confidence labels. \"unknown\" means no range data."
    },
    "rangeSource": {
      "type": "string",
      "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\"."
    },
    "genre": {
      "type": "string"
    },
    "year": {
      "type": [
        "integer",
        "null"
      ]
    },
    "url": {
      "type": "string",
      "description": "Canonical HumMatch page for the song."
    },
    "difficultyScore": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Karaoke difficulty, 0-100. Higher is harder."
    },
    "likelyVoiceFit": {
      "type": "string"
    },
    "matchScore": {
      "type": "integer",
      "description": "Overall suitability for this voice, 0-100."
    },
    "vocalFitScore": {
      "type": "integer",
      "description": "How well the song range sits inside the singer range, 0-100."
    },
    "tessituraScore": {
      "type": "integer",
      "description": "How comfortable the song sits where the voice spends most time, 0-100."
    },
    "voiceTypeFitScore": {
      "type": "integer",
      "description": "Fit against the voice type lane, 0-100. Can be high while matchScore is low when the range still exceeds the singer."
    },
    "whyItFits": {
      "type": "string"
    },
    "riskWarning": {
      "type": "string"
    },
    "suggestedKey": {
      "type": "string",
      "description": "Transposition advice, e.g. \"Try a lower key\"."
    },
    "reason": {
      "type": "string",
      "description": "Plain-language verdict."
    },
    "fitDetails": {
      "type": "object",
      "description": "Labels behind the scores.",
      "properties": {
        "rangeFitLabel": {
          "type": "string",
          "description": "e.g. \"Comfortable\", \"Exploratory\"."
        },
        "voiceTypeFitLabel": {
          "type": "string"
        },
        "riskLabel": {
          "type": "string",
          "description": "e.g. \"May be too high\"."
        },
        "catalogQualityLabel": {
          "type": "string"
        },
        "familiarityTier": {
          "type": "string"
        },
        "priorityTier": {
          "type": "integer"
        },
        "likelyVoiceFit": {
          "type": "string"
        },
        "missingRange": {
          "type": "boolean"
        },
        "toneReliable": {
          "type": "boolean"
        },
        "reviewedSongProfile": {
          "type": "boolean"
        },
        "trustPhrases": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    }
  },
  "required": [
    "slug",
    "title",
    "artist",
    "matchScore",
    "rangeConfidence"
  ]
}
🟢group_song_fit(profiles)

Given two or more singers' ranges, find the vocal range they share and the songs that sit inside it. Call this for karaoke night with friends, a duet, a choir or worship team, or any "what can we all sing" question.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "profiles": {
      "type": "array",
      "description": "Two or more singers, each with a rangeLow and rangeHigh.",
      "minItems": 2,
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Optional label for this singer, e.g. their name."
          },
          "rangeLow": {
            "type": "string",
            "description": "Lowest note, as a note name or MIDI number."
          },
          "rangeHigh": {
            "type": "string",
            "description": "Highest note, as a note name or MIDI number."
          }
        },
        "required": [
          "rangeLow",
          "rangeHigh"
        ]
      }
    }
  },
  "required": [
    "profiles"
  ],
  "additionalProperties": false
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "sharedRange": {
      "type": "object",
      "description": "The overlap every supplied singer can reach. Null bounds mean no shared range exists.",
      "properties": {
        "low": {
          "type": [
            "integer",
            "null"
          ]
        },
        "high": {
          "type": [
            "integer",
            "null"
          ]
        },
        "lowName": {
          "type": "string"
        },
        "highName": {
          "type": "string"
        }
      }
    },
    "songs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Catalog slug; the identifier check_song_fit takes."
          },
          "title": {
            "type": "string"
          },
          "artist": {
            "type": "string"
          },
          "lowNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Lowest note of the song as a MIDI number."
          },
          "highNote": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Highest note of the song as a MIDI number."
          },
          "lowNoteName": {
            "type": "string",
            "description": "Same as lowNote, as a note name like \"G2\"."
          },
          "highNoteName": {
            "type": "string",
            "description": "Same as highNote, as a note name like \"C#5\"."
          },
          "rangeConfidence": {
            "type": "string",
            "enum": [
              "manual_research",
              "estimated",
              "high",
              "low",
              "unknown"
            ],
            "description": "How the range was established, strongest first. \"manual_research\" was researched against sheet music or a score and is the most trustworthy tier. \"estimated\" was derived from published sources rather than measured, so present those scores as guidance rather than fact. \"high\" and \"low\" are legacy confidence labels. \"unknown\" means no range data."
          },
          "rangeSource": {
            "type": "string",
            "description": "Provenance tag for the range, e.g. \"estimated_curated_seed\"."
          },
          "genre": {
            "type": "string"
          },
          "year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "url": {
            "type": "string",
            "description": "Canonical HumMatch page for the song."
          },
          "difficulty": {
            "type": "string",
            "description": "Label, e.g. \"Easy win\", \"Moderate\". Note this is a string here, unlike difficultyScore elsewhere."
          },
          "fitLabel": {
            "type": "string",
            "description": "e.g. \"Group-ready\", \"Higher-risk\"."
          },
          "reason": {
            "type": "string"
          },
          "fitsMemberIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Which supplied singers can sing it, by their id. Shorter than the full group means a partial fit."
          }
        },
        "required": [
          "slug",
          "title",
          "artist"
        ]
      }
    }
  },
  "required": [
    "sharedRange",
    "songs"
  ]
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet5 Tools
verifiziertVersion nicht aufgezeichnet5 Tools