cyanheads avatar

Openlibrary Mcp Server

cyanheads/openlibrary-mcp-server

Brings Open Library's 20M+ catalog to Claude through nine focused tools. Search books with filters for title, author, subject, publisher, ISBN, and language. Pull work metadata, list editions across different publishers and formats, or look up a specific printing by ISBN. Search authors by name, fetch bios with external IDs (Wikidata, VIAF, ISNI), and list their works. Browse subjects and resolve cover image URLs you can drop straight into markdown. Also exposes two resources for injecting work and author detail as context. Runs over stdio or as a hosted HTTP endpoint. Good for bibliographic queries, reading list assembly, or any workflow that needs structured book data without scraping.

GitHub stars
4
tools
10
transport
STDIO, HTTP
env vars
8
last updated
Oct 26, 2026

Install

From registry metadata
$ npx add-mcp https://openlibrary.caseyjhand.com/mcp --name openlibrary

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http openlibrary https://openlibrary.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 10 tools

Verified live against the running server on Nov 6, 2026.

openlibrary_search_booksFull-text book search across Open Library works. Supports field filters (title, author, subject, publisher, ISBN, language) and returns work-level records with edition counts, cover IDs, and reading availability. Use query for general search or combine specific field filters....11 params

Full-text book search across Open Library works. Supports field filters (title, author, subject, publisher, ISBN, language) and returns work-level records with edition counts, cover IDs, and reading availability. Use query for general search or combine specific field filters....

Parameters* required
authorstring
Filter by author name. Partial names work.
include_availabilityboolean
Include live reading availability from Internet Archive (borrow/read status). Adds ~200ms latency. Use when the user needs to know if they can read the book online.default: false
isbnstring
Find works that have editions with this ISBN (10 or 13 digits, hyphens ignored).
languagestring
Restrict results to one language. Takes a 3-letter MARC code (e.g., "eng", "fre", "ger", "chi") — the same vocabulary openlibrary_get_edition and openlibrary_get_editions return. A 2-letter ISO 639...
limitinteger
Max results to return. Higher values increase response size; prefer 10–20 for exploration.default: 10
offsetinteger
Zero-based offset for pagination.default: 0
publisherstring
Filter by publisher name. Partial names work (e.g., "Penguin").
querystring
Full-text search query. Supports Solr field prefixes: title:, author:, subject:, publisher:, isbn:, language:. Omit to use the filter parameters instead.
sortstring
Sort order. "relevance" uses Solr scoring. "new"/"old" sort by first publish year. "rating" by average community rating. "editions" by edition count.one of relevance · new · old · rating · editionsdefault: relevance
subjectstring
Filter by subject tag (e.g., "science fiction", "history").
titlestring
Filter by title. Matched against work title and alternative titles.
openlibrary_search_insideSearch the full text of books scanned by the Internet Archive — the "which book contains this passage?" lookup that the metadata tools cannot answer. Quote a phrase for an exact-phrase match; bare terms match anywhere in the text. Each result is an Internet Archive item with t...3 params

Search the full text of books scanned by the Internet Archive — the "which book contains this passage?" lookup that the metadata tools cannot answer. Quote a phrase for an exact-phrase match; bare terms match anywhere in the text. Each result is an Internet Archive item with t...

Parameters* required
limitinteger
Max matching items to return. Each carries its own snippets, so higher values grow the response quickly — prefer 10–20.default: 10
offsetinteger
Zero-based offset for pagination.default: 0
query*string
Text to find inside scanned books. Wrap in double quotes for an exact-phrase match (e.g., "the spice must flow"); unquoted terms match independently and return far broader results.
openlibrary_get_workFetch a work by Open Library Work ID (OL…W). Returns title, description, subjects, cover IDs, and linked author IDs for follow-up lookups. Works represent the abstract book concept independent of any specific edition. A merged work ID resolves to the work it was merged into. T...1 params

Fetch a work by Open Library Work ID (OL…W). Returns title, description, subjects, cover IDs, and linked author IDs for follow-up lookups. Works represent the abstract book concept independent of any specific edition. A merged work ID resolves to the work it was merged into. T...

Parameters* required
work_id*string
Open Library Work ID. Format: OL…W (e.g., "OL45804W"), optionally prefixed "/works/". Not an ISBN — resolve an ISBN to its work with openlibrary_get_edition (id_type "isbn").
openlibrary_get_editionsList editions of a work — different publishers, languages, formats, and print runs. Returns ISBNs, publisher, language, page count, and edition OLIDs. Use after openlibrary_get_work or openlibrary_search_books to find a specific printing. A merged work ID resolves to the work...3 params

List editions of a work — different publishers, languages, formats, and print runs. Returns ISBNs, publisher, language, page count, and edition OLIDs. Use after openlibrary_get_work or openlibrary_search_books to find a specific printing. A merged work ID resolves to the work...

Parameters* required
limitinteger
Max editions to return; values above 100 apply 100 when limit clamping is enabled. Prefer 10–20 for exploration.default: 10
offsetinteger
Zero-based offset for pagination.default: 0
work_id*string
Open Library Work ID. Format: OL…W (e.g., "OL45804W"), optionally prefixed "/works/". Not an ISBN — resolve an ISBN to its work with openlibrary_get_edition (id_type "isbn").
openlibrary_get_editionResolve one or more editions by identifier: ISBN-10, ISBN-13, OCLC, LCCN, or Open Library Edition ID (OL…M). Every identifier in a call shares one id_type — pass id_type "isbn" for both ISBN-10 and ISBN-13. Up to 50 identifiers resolve in a single upstream batch; with limit cl...2 params

Resolve one or more editions by identifier: ISBN-10, ISBN-13, OCLC, LCCN, or Open Library Edition ID (OL…M). Every identifier in a call shares one id_type — pass id_type "isbn" for both ISBN-10 and ISBN-13. Up to 50 identifiers resolve in a single upstream batch; with limit cl...

Parameters* required
id_type*string
Identifier type shared by every entry in identifiers. "isbn" handles both ISBN-10 and ISBN-13. "olid" is the native Open Library edition ID (OL…M). Mixing types within one call is not supported — i...one of isbn · oclc · lccn · olid
identifiers*array
Identifiers to resolve, 1–1000 raw entries, all of the type named by id_type. Exact duplicate strings collapse in first-occurrence order; the first 50 distinct entries are processed, including malf...
openlibrary_search_authorsSearch Open Library authors by name. Returns Open Library Author IDs, names, birth/death dates, top works, and subject associations. Use author IDs for openlibrary_get_author (bio, remote IDs) or openlibrary_get_author_works (list of works).3 params

Search Open Library authors by name. Returns Open Library Author IDs, names, birth/death dates, top works, and subject associations. Use author IDs for openlibrary_get_author (bio, remote IDs) or openlibrary_get_author_works (list of works).

Parameters* required
limitinteger
Max results to return; values above 100 apply 100 when limit clamping is enabled.default: 10
offsetinteger
Zero-based offset for pagination.default: 0
query*string
Author name search query. Partial names and alternate names work.
openlibrary_get_authorFetch author detail by Open Library Author ID (OL…A). Returns bio, birth/death dates, photo IDs, and linked identifiers from Wikidata, VIAF, ISNI, Goodreads, and LibraryThing. Use openlibrary_search_authors to find an author ID first.1 params

Fetch author detail by Open Library Author ID (OL…A). Returns bio, birth/death dates, photo IDs, and linked identifiers from Wikidata, VIAF, ISNI, Goodreads, and LibraryThing. Use openlibrary_search_authors to find an author ID first.

Parameters* required
author_id*string
Open Library Author ID. Format: OL…A (e.g., "OL24638A"). A leading "/authors/" prefix is stripped if provided.
openlibrary_get_author_worksList works by an author. Returns titles, cover IDs, and work OLIDs for drilling into editions or details. Use openlibrary_get_author for author bio and details, or openlibrary_get_editions to explore specific printings.3 params

List works by an author. Returns titles, cover IDs, and work OLIDs for drilling into editions or details. Use openlibrary_get_author for author bio and details, or openlibrary_get_editions to explore specific printings.

Parameters* required
author_id*string
Open Library Author ID (OL…A). A leading "/authors/" prefix is stripped if provided.
limitinteger
Max works to return; values above 100 apply 100 when limit clamping is enabled.default: 20
offsetinteger
Zero-based offset for pagination.default: 0
openlibrary_get_subjectBrowse works by subject. Returns matching works with edition counts and cover IDs, plus the total work count for the subject. Case and spacing are normalized before lookup, so "Science Fiction" and "science_fiction" are the same request. Subject tags are user-contributed and t...3 params

Browse works by subject. Returns matching works with edition counts and cover IDs, plus the total work count for the subject. Case and spacing are normalized before lookup, so "Science Fiction" and "science_fiction" are the same request. Subject tags are user-contributed and t...

Parameters* required
limitinteger
Max works to return. Subject pages typically show 12 at a time.default: 12
offsetinteger
Zero-based offset for pagination.default: 0
subject*string
Subject name. Normalized before lookup — trimmed, lowercased, and internal whitespace converted to underscores (e.g., " Science Fiction " → "science_fiction") — so varying case or surrounding white...
openlibrary_get_cover_urlConstruct a cover image URL for a book or author photo without fetching the image. Returns a direct HTTPS URL in the requested size (S/M/L). The identifier format is validated locally: "id" must be numeric, "isbn" 10 or 13 digits (an ISBN-10 may end in an X check digit), "olid...4 params

Construct a cover image URL for a book or author photo without fetching the image. Returns a direct HTTPS URL in the requested size (S/M/L). The identifier format is validated locally: "id" must be numeric, "isbn" 10 or 13 digits (an ISBN-10 may end in an X check digit), "olid...

Parameters* required
id_type*string
"id" is the numeric cover_i / cover ID from search or work results. "isbn" and "olid" look up the cover from those identifiers.one of id · isbn · olid
identifier*string
The identifier value, validated against id_type before the URL is built. For "id": a numeric cover or photo ID from work/edition/author data. For "isbn": 10 or 13 digits, hyphens optional — an ISBN...
sizestring
Image size. S = small (~45px tall), M = medium (~150px tall), L = large (~400px tall).one of S · M · Ldefault: M
targetstring
"book" returns a book cover from covers.openlibrary.org/b/. "author" returns an author photo from covers.openlibrary.org/a/ — use with id_type "id" (photo_id) or "olid" (author OLID).one of book · authordefault: book

Sponsors

Configuration

OPENLIBRARY_CLAMP_LIMITSdefault: true

Apply page and identifier batch limits with continuation guidance. Set false to reject oversized requests.

MCP_LOG_LEVELdefault: info

Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_PUBLIC_URL

Public origin override for deployments behind a TLS-terminating reverse proxy (e.g. https://mcp.example.com).

MCP_AUTH_MODEdefault: none

Authentication mode to use: 'none', 'jwt', or 'oauth'.

Readme

@cyanheads/openlibrary-mcp-server

Search books and authors, fetch editions, browse subjects, and resolve cover images from Open Library via MCP. STDIO or Streamable HTTP.

10 Tools • 2 Catalog Resources • 1 Agent Skill

Details

Repository
github.com/cyanheads/openlibrary-mcp-server
Category
Search & Web Crawling
Package
@cyanheads/openlibrary-mcp-server
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
1
Tools verified
Nov 6, 2026

More from cyanheads

Related Search & Web Crawling MCP servers

View all
1ofershap avatarScraperofershap/mcp-server-scraperWeb scraping MCP — extract clean markdown, links, and metadata from any URL.4stars
2thinkchainai avatarUK Parliament MCP Server from MCPBundlesthinkchainai/mcpbundlesSearch MPs and Lords, fetch profiles, synopses, and Westminster constituencies3stars
3cyanheads avatarWikidata Mcp Servercyanheads/wikidata-mcp-serverSearch and fetch Wikidata entities, execute SPARQL queries, and resolve external identifiers.3stars
4diffbot avatarDiffbotdiffbot/diffbot-mcpWeb search, page extraction, crawling, and Knowledge Graph queries from Diffbot's web index.3stars
5ofershap avatarMarkdownofershap/mcp-server-markdownMarkdown MCP — search, extract sections, list headings, find code blocks.3stars
6symdex-100 avatarSymdexsymdex-100/symdexIndex and search codebases using structured schemas for deep code analysis. Audit specific domains or security-related functions to ensure code quality and safe3stars