openlibrary-mcp-server
https://openlibrary.caseyjhand.com
Registry code: 27f6331f776c56b7
Use the openlibrary_* tools to search books, editions, authors, and subjects via Open Library. No API key required. IDs are typed by suffix — works OL…W, editions OL…M, authors OL…A — and editions also resolve by ISBN. Canonical flow: openlibrary_search_books → openlibrary_get_work → openlibrary_get_editions/openlibrary_get_edition; for people, openlibrary_search_authors → openlibrary_get_author. The work tools take only work IDs (OL…W): from an ISBN, openlibrary_get_edition with id_type "isbn" returns the parent work_id. openlibrary_get_edition takes a batch of identifiers of one type in a…
- endpoint
- https://openlibrary.caseyjhand.com/mcp
- protocol
- http-sse ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is openlibrary-mcp-server live?
- Yes — it answered the hub's last check (checked 9m ago). It answered 100% of checks over the last 30 days.
- Is openlibrary-mcp-server free to use?
- Yes — the hub reached it with no key and no payment.
- What tools does openlibrary-mcp-server have?
- 10 tools: openlibrary_search_books, openlibrary_get_cover_url, openlibrary_get_work, openlibrary_search_authors, openlibrary_get_editions, openlibrary_get_edition, openlibrary_search_inside, openlibrary_get_subject, ….
- Is openlibrary-mcp-server safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.3%· all time 99.4%
last good check
of 10 tools
- degraded → live
- degraded → live
- live → degraded· timeout after 20000ms
- used for
- search books by title author or subject
- look up a book edition by isbn
- get author details and works
- find which book contains a passage
- get a book cover url
- takes → gives
- text → data
- tools
- 10 reads
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Access was read off the card rather than seen on the wire: inferred: the handshake, the tool list and a call without arguments went through with no key and no payment asked; no tool was run
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
openlibrary_search_books reads unknown never probed
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. Results are work-level — drill into editions via openlibrary_get_editions.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": { "isbn": { "type": "string", "description": "Find works that have editions with this ISBN (10 or 13 digits, hyphens ignored)." }, "sort": { "enum": [ "relevance", "new", "old", "rating", "editions" ], "type": "string", "default": "relevance", "description": "Sort order. \"relevance\" uses Solr scoring. \"new\"/\"old\" sort by first publish year. \"rating\" by average community rating. \"editions\" by edition count." }, "limit": { "type": "integer", "default": 10, "maximum": 100, "minimum": 1, "description": "Max results to return. Higher values increase response size; prefer 10–20 for exploration." }, "query": { "type": "string", "description": "Full-text search query. Supports Solr field prefixes: title:, author:, subject:, publisher:, isbn:, language:. Omit to use the filter parameters instead." }, "title": { "type": "string", "description": "Filter by title. Matched against work title and alternative titles." }, "author": { "type": "string", "description": "Filter by author name. Partial names work." }, "offset": { "type": "integer", "default": 0, "maximum": 9007199254740991, "minimum": 0, "description": "Zero-based offset for pagination." }, "subject": { "type": "string", "description": "Filter by subject tag (e.g., \"science fiction\", \"history\")." }, "language": { "type": "string", "pattern": "^[A-Za-z]{2,3}$", "description": "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-1 code (e.g., \"en\", \"fr\") is accepted and translated to its MARC equivalent; an unrecognized 2-letter code is rejected rather than silently ignored. The equivalent in-query form is language:eng." }, "publisher": { "type": "string", "description": "Filter by publisher name. Partial names work (e.g., \"Penguin\")." }, "include_availability": { "type": "boolean", "default": false, "description": "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." } }, "additionalProperties": false }arguments 67 linesopenlibrary_get_cover_url reads unknown 13h ago
Resolve a cover image URL for a book or author photo. Returns a direct HTTPS URL in the requested size (S/M/L). The Covers API always returns HTTP 200 — missing covers return a 1×1 placeholder GIF, not a 404 — so the identifier format is validated locally first: "id" must be numeric, "isbn" 10 or 13 digits (an ISBN-10 may end in an X check digit), "olid" an edition OLID (OL…M) for target "book" and an author OLID (OL…A) for target "author". Identifiers with path separators or control characters, and author-by-ISBN lookups, are rejected before any request. URLs can be embedded in markdown as .
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "identifier", "id_type" ], "properties": { "size": { "enum": [ "S", "M", "L" ], "type": "string", "default": "M", "description": "Image size. S = small (~45px tall), M = medium (~150px tall), L = large (~400px tall)." }, "target": { "enum": [ "book", "author" ], "type": "string", "default": "book", "description": "\"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)." }, "id_type": { "enum": [ "id", "isbn", "olid" ], "type": "string", "description": "\"id\" is the numeric cover_i / cover ID from search or work results. \"isbn\" and \"olid\" look up the cover from those identifiers." }, "identifier": { "type": "string", "description": "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-10 may end in an X check digit (e.g., 080442957X). For \"olid\": an edition OLID (OL…M) for target \"book\", an author OLID (OL…A) for target \"author\"." } }, "additionalProperties": false }arguments 43 linesopenlibrary_get_work reads unknown 13h ago
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. To reach a work from an ISBN, call openlibrary_get_edition with id_type "isbn" — its work_id output is the parent work. Note: author names are not included — use openlibrary_get_author or openlibrary_search_books for names.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "work_id" ], "properties": { "work_id": { "type": "string", "pattern": "^(?:\\/works\\/)?OL\\d+W$", "description": "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\")." } }, "additionalProperties": false }arguments 15 linesopenlibrary_search_authors reads unknown 5h ago
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).
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "query" ], "properties": { "limit": { "type": "integer", "default": 10, "maximum": 100, "minimum": 1, "description": "Max results to return." }, "query": { "type": "string", "description": "Author name search query. Partial names and alternate names work." }, "offset": { "type": "integer", "default": 0, "maximum": 9007199254740991, "minimum": 0, "description": "Zero-based offset for pagination." } }, "additionalProperties": false }arguments 28 linesopenlibrary_get_editions reads unknown never probed
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 it was merged into. To reach a work from an ISBN, call openlibrary_get_edition with id_type "isbn" — its work_id output is the parent work.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "work_id" ], "properties": { "limit": { "type": "integer", "default": 10, "maximum": 100, "minimum": 1, "description": "Max editions to return. Prefer 10–20 for exploration." }, "offset": { "type": "integer", "default": 0, "maximum": 9007199254740991, "minimum": 0, "description": "Zero-based offset for pagination." }, "work_id": { "type": "string", "pattern": "^(?:\\/works\\/)?OL\\d+W$", "description": "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\")." } }, "additionalProperties": false }arguments 29 linesopenlibrary_get_edition reads unknown never probed
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 request, so a bibliography or shelf export costs one call rather than one per book; a large batch is a large response, so ask for what you need. Returns full edition metadata including authors, publisher, language, all identifier types, and the parent work ID, with author names inline and no secondary lookup; when the edition record itself lists no authors, they are recovered from the parent work and marked as such, and a notice names any edition whose recovery failed. Partial success is the norm — identifiers that resolve come back in editions, the rest are listed in unresolved with a reason, and the call fails only when nothing resolved.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "identifiers", "id_type" ], "properties": { "id_type": { "enum": [ "isbn", "oclc", "lccn", "olid" ], "type": "string", "description": "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 — issue one call per type." }, "identifiers": { "type": "array", "items": { "type": "string", "description": "One identifier value. For ISBN: 10 or 13 digits, hyphens optional — an ISBN-10 may end in an X check digit (e.g., 080442957X). For OCLC: numeric string. For LCCN: string as-is. For OLID: Open Library edition ID (e.g., OL7353617M)." }, "maxItems": 50, "minItems": 1, "description": "Identifiers to resolve, 1–50, all of the type named by id_type. Resolved editions come back in request order." } }, "additionalProperties": false }arguments 31 linesopenlibrary_search_inside reads unknown 15h ago
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 the matching passages as snippets, plus a relevance score. The full-text index is far slower than the metadata endpoints, and a search usually takes 10–30 seconds. Use it when the passage is the question, and use openlibrary_search_books to search by title, author, or subject. Results key on Internet Archive items rather than Open Library works: chain the returned ia_identifier to archive.org, or match it against the ia_identifiers on openlibrary_search_books results to reach the catalogue record.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "query" ], "properties": { "limit": { "type": "integer", "default": 10, "maximum": 100, "minimum": 1, "description": "Max matching items to return. Each carries its own snippets, so higher values grow the response quickly — prefer 10–20." }, "query": { "type": "string", "minLength": 1, "description": "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." }, "offset": { "type": "integer", "default": 0, "maximum": 9007199254740991, "minimum": 0, "description": "Zero-based offset for pagination." } }, "additionalProperties": false }arguments 29 linesopenlibrary_get_subject reads unknown 13h ago
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 the vocabulary varies — when a subject returns no works, try a different word form (singular/plural), a synonym, or a broader term.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "subject" ], "properties": { "limit": { "type": "integer", "default": 12, "maximum": 100, "minimum": 1, "description": "Max works to return. Subject pages typically show 12 at a time." }, "offset": { "type": "integer", "default": 0, "maximum": 9007199254740991, "minimum": 0, "description": "Zero-based offset for pagination." }, "subject": { "type": "string", "description": "Subject name. Normalized before lookup — lowercased with spaces converted to underscores (e.g., \"Science Fiction\" → \"science_fiction\") — so varying case or spacing does not change the result." } }, "additionalProperties": false }arguments 28 linesopenlibrary_get_author reads unknown 15h ago
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.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "author_id" ], "properties": { "author_id": { "type": "string", "description": "Open Library Author ID. Format: OL…A (e.g., \"OL24638A\"). A leading \"/authors/\" prefix is stripped if provided." } }, "additionalProperties": false }arguments 14 linesopenlibrary_get_author_works reads unknown 15h ago
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.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "required": [ "author_id" ], "properties": { "limit": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Max works to return." }, "offset": { "type": "integer", "default": 0, "maximum": 9007199254740991, "minimum": 0, "description": "Zero-based offset for pagination." }, "author_id": { "type": "string", "description": "Open Library Author ID (OL…A). A leading \"/authors/\" prefix is stripped if provided." } }, "additionalProperties": false }arguments 28 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id27f6331f776c56b7.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/27f6331f776c56b7/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/27f6331f776c56b7?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.
Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.
- brapi.caseyjhand.com brapi-mcp-server
- usaspending.caseyjhand.com usaspending-mcp-server
- onebusaway.caseyjhand.com onebusaway-mcp-server
- secedgar.caseyjhand.com secedgar-mcp-server
- courtlistener.caseyjhand.com courtlistener-mcp-server
- openfda.caseyjhand.com openfda-mcp-server
- gbif-biodiversity.caseyjhand.com gbif-biodiversity-mcp-server
- openfec.caseyjhand.com openfec-mcp-server
101 more sit on this domain. All of them.