Match singers to songs by vocal range: score fit, karaoke difficulty, and voice type.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
The catalog slug of the song, from search_songs.
Lowest comfortable note, as a note name like "D3" or a raw MIDI number.
Highest comfortable note, as a note name like "C5" or a raw MIDI number.
Optional voice type hint (soprano, mezzo, alto, tenor, baritone, bass). Inferred from the range when omitted.
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.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The catalog slug of the song, from search_songs. |
| rangeLow* | string | Lowest comfortable note, as a note name like "D3" or a raw MIDI number. |
| rangeHigh* | string | Highest comfortable note, as a note name like "C5" or a raw MIDI number. |
| voiceType | string | Optional voice type hint (soprano, mezzo, alto, tenor, baritone, bass). Inferred from the range when omitted. |
{
"type": "object",
"required": [
"slug",
"rangeLow",
"rangeHigh"
],
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| rangeLow* | string | Lowest comfortable note, as a note name like "D3" or a raw MIDI number. |
| rangeHigh* | string | Highest comfortable note, as a note name like "C5" or a raw MIDI number. |
| voiceType | string | Optional voice type hint (soprano, mezzo, alto, tenor, baritone, bass). Inferred from the range when omitted. |
{
"type": "object",
"required": [
"rangeLow",
"rangeHigh"
],
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| profiles* | array | Two or more singers, each with a rangeLow and rangeHigh. |
{
"type": "object",
"required": [
"profiles"
],
"properties": {
"profiles": {
"type": "array",
"items": {
"type": "object",
"required": [
"rangeLow",
"rangeHigh"
],
"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."
}
}
},
"minItems": 2,
"description": "Two or more singers, each with a rangeLow and rangeHigh."
}
},
"additionalProperties": false
}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).
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many songs to return per bucket (default 12, max 50). |
| rangeLow* | string | Lowest comfortable note, as a note name like "D3" or a raw MIDI number. |
| rangeHigh* | string | Highest comfortable note, as a note name like "C5" or a raw MIDI number. |
| voiceType | string | Optional voice type hint (soprano, mezzo, alto, tenor, baritone, bass). Inferred from the range when omitted. |
{
"type": "object",
"required": [
"rangeLow",
"rangeHigh"
],
"properties": {
"limit": {
"type": "integer",
"description": "How many songs to return per bucket (default 12, max 50)."
},
"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."
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| q* | string | Search text: a song title, an artist, or both. |
| limit | integer | Maximum results (default 20, max 50). |
| rangeLow | string | Optional. Lowest note of the singer, to score and rank the results by fit. |
| rangeHigh | string | Optional. Highest note of the singer, to score and rank the results by fit. |
{
"type": "object",
"required": [
"q"
],
"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."
}
},
"additionalProperties": false
}