Read-only, sourced catalogue of classical keyboard works: composers, catalogues, difficulty levels.
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.
One catalogue of a composer's works (Op., BWV, K., S., KK…) by slug: its chapters and its works in catalogue order, with key, date and difficulty ratings. Paged: 50 entries per page by default, at most 100. get_composer lists a composer's catalogues and their URLs (the slug is the last part).
The catalogue's slug, as in https://klavierstuck.org/catalog/<slug>, e.g. "kk-chopin".
Page number, from 1.
Entries per page: 50 by default, at most 100 (larger values are capped).
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http catalogue https://klavierstuck.org/mcp
One catalogue of a composer's works (Op., BWV, K., S., KK…) by slug: its chapters and its works in catalogue order, with key, date and difficulty ratings. Paged: 50 entries per page by default, at most 100. get_composer lists a composer's catalogues and their URLs (the slug is the last part).
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1. |
| slug* | string | The catalogue's slug, as in https://klavierstuck.org/catalog/<slug>, e.g. "kk-chopin". |
| limit | integer | Entries per page: 50 by default, at most 100 (larger values are capped). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"page": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Page number, from 1."
},
"slug": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The catalogue's slug, as in https://klavierstuck.org/catalog/<slug>, e.g. \"kk-chopin\"."
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Entries per page: 50 by default, at most 100 (larger values are capped)."
}
}
}One composer by slug: dates, portrait, catalogues (with chapters), stylistic movements with their work counts, and a summary of the works: counts by sub-genre and the top-level works (first 100) with their number of child works. Use search_works with the composer's name to page through every work.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The composer's slug, as in https://klavierstuck.org/composer/<slug>, e.g. "frederic-chopin". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The composer's slug, as in https://klavierstuck.org/composer/<slug>, e.g. \"frederic-chopin\"."
}
}
}Details of one keyboard work in the Klavierstuck catalogue, by its slug: composer, catalogue references (Op., BWV, K., S.…), key, composition and publication dates, duration, instrument, performing forces, sub-genres, era, difficulty ratings with their scale, child works in order (e.g. the pieces of a set) and external links (IMSLP, Wikipedia, recordings). Returns the klavierstuck.org URL and the data sources to cite.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The work's slug, as in https://klavierstuck.org/work/<slug>, e.g. "3-nocturnes-op-9-chopin". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "The work's slug, as in https://klavierstuck.org/work/<slug>, e.g. \"3-nocturnes-op-9-chopin\"."
}
}
}Composers in the Klavierstuck catalogue with their dates, slug and klavierstuck.org URL. Optional query filters by name (accents and case ignored). Use a slug with get_composer.
| Argument | Type | Description |
|---|---|---|
| query | string | Part of the name, e.g. "Schumann". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"query": {
"type": "string",
"maxLength": 100,
"description": "Part of the name, e.g. \"Schumann\"."
}
}
}The difficulty scales used for works' levels (Piano Syllabus 0–10, RCM, ABRSM, AMEB, PianoLibrary…): range, step and diploma levels above the numbered grades. Use a scale name and levels with search_works.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Eras of music history with their years (Baroque, Classicism, Romanticism…) and the stylistic movements in each, with a description, the number of composers in the catalogue and the klavierstuck.org URL.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Search the Klavierstuck catalogue of classical keyboard works, like the site's Works page. Combine free text (title words or a catalogue reference such as "BWV 846" or "Op. 28") with filters given in plain words: composer, key, sub-genre, instrument, performing forces, and a difficulty range on one scale. A name that matches nothing or several entries returns an error listing candidates. Each row has its klavierstuck.org URL and slug (pass it to get_work for details); the answer gives the total count and the sources to cite.
| Argument | Type | Description |
|---|---|---|
| key | string | Key, in English in plain words, e.g. "D minor", "E-flat major" or "F♯ minor". |
| page | integer | Page number, from 1. |
| limit | integer | Works per page: 20 by default, at most 50 (larger values are capped). |
| query | string | Free text: words of the title or a catalogue reference, e.g. "nocturne" or "Op. 9". |
| forces | string | Performing forces in plain words, e.g. "Solo", "Four hands" or "Two pianos". |
| composer | string | Composer in plain words, e.g. "Chopin" or "Clara Schumann". |
| sub_genre | string | Sub-genre, in English in plain words, e.g. "Nocturne", "Waltz" or "Fugue". |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 15, 2026.
| instrument | string | Instrument in plain words, e.g. "Piano", "Organ" or "Harpsichord". |
| difficulty_max | number | Highest level on difficulty_scale (inclusive). |
| difficulty_min | number | Lowest level on difficulty_scale (inclusive). |
| difficulty_scale | string | Difficulty scale the range applies to in plain words, e.g. "PianoSyllabus" (0–10), "RCM", "ABRSM" or "PianoLibrary". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"key": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Key, in English in plain words, e.g. \"D minor\", \"E-flat major\" or \"F♯ minor\"."
},
"page": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Page number, from 1."
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Works per page: 20 by default, at most 50 (larger values are capped)."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Free text: words of the title or a catalogue reference, e.g. \"nocturne\" or \"Op. 9\"."
},
"forces": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Performing forces in plain words, e.g. \"Solo\", \"Four hands\" or \"Two pianos\"."
},
"composer": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Composer in plain words, e.g. \"Chopin\" or \"Clara Schumann\"."
},
"sub_genre": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Sub-genre, in English in plain words, e.g. \"Nocturne\", \"Waltz\" or \"Fugue\"."
},
"instrument": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Instrument in plain words, e.g. \"Piano\", \"Organ\" or \"Harpsichord\"."
},
"difficulty_max": {
"type": "number",
"description": "Highest level on difficulty_scale (inclusive)."
},
"difficulty_min": {
"type": "number",
"description": "Lowest level on difficulty_scale (inclusive)."
},
"difficulty_scale": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Difficulty scale the range applies to in plain words, e.g. \"PianoSyllabus\" (0–10), \"RCM\", \"ABRSM\" or \"PianoLibrary\"."
}
}
}