SuperAPI AI Directory

mcp-imslp

Read IMSLP, the Petrucci Music Library: search works and composers, view catalogue numbers, key and instrumentation, and browse editions with copyright status.

Open website

About this tool

Purpose

mcp-imslp is an MCP (Model Context Protocol) server that connects chat clients to IMSLP (International Music Score Library Project, also known as the Petrucci Music Library). IMSLP is a free classical music library run by volunteers, containing scores, parts, arrangements, and recordings whose copyright has expired, as well as materials on individual composer pages. It reviews the copyright of each score separately for Canada, the United States, and the European Union, and pages are published under CC BY-SA 4.0.

This server reads that library and links back to it, requiring no API key and no account.

Main capabilities

You can use it to do the following:

  • Search for works and people, and read their pages.
  • Read a work: its title and aliases, composer, opus and catalogue numbers, year of composition and year of first publication, dedication, key, language, librettist, instrumentation, movements, premiere, style, and period.
  • Browse, edition by edition, the versions held for a work, including publisher, editor, and copyright terms.
  • Read a composer's (as well as an editor's, arranger's, or performer's) materials in the library: life dates, aliases, authority registry records, and so on.
  • Browse works by genre, key, or instrumentation.

Example questions you can ask include:

  • "What Chopin nocturnes are there on IMSLP?"
  • "Read Erik Satie's page and tell me what era he lived in."
  • "List the various editions of Debussy's 'Clair de Lune,' and the publisher of each edition."
  • "Is the Henle edition of that piece freely usable in the United States?"
  • "Show me works in the library written for solo cello."

How to use it

One-click installation

Works with Claude Desktop, Cursor, and any client that uses the standard configuration format. Requires Node 24 or later, and no environment variables need to be set.

On the command line, -i keep standard input open (this is the channel for the protocol transport), and omit -t because a TTY would rewrite the data stream. The container needs outbound HTTPS access to imslp.org, and nothing else: no volumes, no ports, no credentials.

Bundle without npm

Download from the latest release mcp-imslp-1.0.1.mcpb and open it. Clients that support MCP bundles will install it themselves, with no npm and no need to edit a configuration file. The bundle includes its own dependencies, so nothing is downloaded during installation.

Common paths

The usual path goes from search to work:search_works gives the work's page name,get_work reads that page. The same applies to people, from search_people to get_person or list_person_works.

Works are addressed by their page title, written as Work (Composer), for example Nocturnes, Op.9 (Chopin, Frédéric). People are addressed by category, written as Category:Surname, Forename. Both can be returned from search, and theCategory: prefix can be omitted.

The library names works in the language used by the composer, so Die Zauberflöte will find the opera, while The Magic Flute will find the page about it. Sparse results for a famous work often mean the title is in another language.

Available tools

  • search_works: searches for words appearing anywhere in work pages, so titles, composers, or dedications can all find works containing them. Returns rows including page(for use by get_work ),work、composer、page_url、snippet、size_bytes、words、last_edited , and so on; the envelope contains returned、has_more and next_offset。total Always null, because the library does not publish match counts.
  • search_people: Find composers, editors, arrangers and performers by name. The library writes names its own way (surname first). Returns category(for get_person and list_person_works use),name、page_url、snippet and redirect_to.
  • get_work: Read one work, returning the above attribute fields, null if empty, using the page's original wording (for example, ca.1830 remains ca.1830). Also includes genre_categories、external_links、authorities、sections and copyright_summary.
  • list_work_files: Read a work's scores and recordings version by version. A version is a group of files published under the same set of terms: publisher, editor and copyright notice belong to that version. Returns editions, each containing section、publisher_info、editor、copyright and files. Files contain imslp_id、description、format、format_code、pages、size_bytes、downloads、rating、uploader、uploaded_on, the name and sigla of the scanning library, and blocked(true when IMSLP is reviewing the file's copyright).
  • list_person_works: Read works attributed to a person's name. Returns rows containing page、work、composer、pageid、page_url , and has_more and cursor。total are always null.
  • get_person: Read a person's profile: the name printed on the page, the stated life dates, other archival names, authority record and external links. Returns category、catalogued_as、name、life_dates、alternative_names、aliases、authorities、external_links、page_url.
  • browse_category: Read works attributed to a category (genre, key, instrumentation or period). Returns the same rows as list_person_works , and has_more and cursor,total are null. The library reads one category at a time, so a question specifying both genre and instrument requires browsing one and reading the other from each work using get_work .

Copyright status

Scores on IMSLP carry status by jurisdiction, and the library reviews Canada, the United States and the European Union. A file showing Public Domain - Non-PD USis free in Canada and the European Union and protected in the United States. This server reports jurisdiction by jurisdiction according to publication status, under the work's copyright_summary and the version's copyright ,restrictions indicates where the statement excludes.restrictions being empty does not mean IMSLP has not included countries in the review.

Configuration

All variables are optional and set in the client-configured env block. Out-of-range values fall back to defaults, and the reason is written to stderr. Every failure carries one of six codes, a message, and a hint for the next step when helpful.

Standalone library, throttling and attribution

The layer that reads IMSLP is published separately, with its own throttling, caching and error handling, and attaches no protocol.renderPage、getWork、search、categoryMembers and getPerson each return { data, cached }, and throw ImslpErrorcarrying one of six codes. The two-second minimum between requests also applies here.

IMSLP publishes Crawl-delay: 2in its robots.txt, so requests are issued one by one with at least two seconds between them, regardless of how the server configures that minimum. The User-Agent always ends with the project identifier and an address at which a person can be contacted.

Reading is done through the MediaWiki API at /api.php and through the list endpoints IMSLP documents on its IMSLP:API page. robots.txt forbids /index.php、/images/、/imglnks/、/wiki/File:、/works and /library/, this server does not construct addresses under any of those paths: it returns links to work pages, that is, the source credited in the answer.

The library's pages are published under CC BY-SA 4.0, so anything this server displays credits IMSLP and links to its source page.

Privacy and Testing

This server does not collect any information about you, nor does it send anything to its author. It runs on your machine, contacts only imslp.org, and keeps answers in memory at runtime, without writing to disk. PRIVACY.md explains what the requests carry and which settings change that.

Tests run against generated fixed data and do not make network requests. The live test suite npm run test:live makes one request per route and runs nightly against the website itself.

License

MIT, see LICENSE. The catalog and pages belong to IMSLP and its contributors and are published under CC BY-SA 4.0.