ISBN Lookup & Book Search MCP Server avatar

ISBN Lookup & Book Search MCP Server

Pricing

from $3.00 / 1,000 read operations

Go to Apify Store
ISBN Lookup & Book Search MCP Server

ISBN Lookup & Book Search MCP Server

MCP server for book search and ISBN lookup in Claude, ChatGPT, Cursor and VS Code. 9 read-only tools search works by title, author or subject, resolve an ISBN-10 or ISBN-13 to its edition, list editions, tell author namesakes apart and browse subjects, with Open Library as the data source.

Pricing

from $3.00 / 1,000 read operations

Rating

0.0

(0)

Developer

MrBridge

MrBridge

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Share

📚 ISBN Lookup & Book Search MCP Server

ISBN Lookup & Book Search MCP Server gives Claude, ChatGPT, Cursor, VS Code and other MCP clients a book catalogue they can query in plain language. Its 9 read-only tools search works by title, author or subject, resolve an ISBN-10 or ISBN-13 to its edition, list the editions of a book, tell authors with the same name apart and browse a subject by period. The records come from Open Library, and each one links back to its page there. This server is independent and not affiliated with Open Library or the Internet Archive.

Ask Claude "Which book has ISBN 978-0-14-032872-1, who published that edition, and in which other languages was it printed?" It calls books_get_edition, which checks the ISBN digits before asking anything, and answers with the title, authors, publisher, date, page count and the work it belongs to. Then books_list_editions lists the other editions with their languages and ISBNs. You get a sourced answer in one exchange, without opening a catalogue or copying identifiers by hand.

What this server exposes

This server wraps the public Open Library APIs (https://openlibrary.org/developers/api) in 9 read-only tools: 7 books_ tools to search books, read a work and its editions, look up an ISBN, find authors and their works, and browse a subject, plus the search and fetch pair that ChatGPT deep research expects. Open Library is a catalogue of works and editions run by the Internet Archive, and every answer links each record back to its page on openlibrary.org. The server needs no credentials and no third-party key: you connect with your Apify token, and each successful call is billed as one event. On top of the events you pay the platform usage of your own Standby run, billed to your Apify account: the memory set for the run while the server is up, idle time included, until it stops at its idle timeout (see Pricing). It identifies itself to Open Library with its application name and website, never with your e-mail address. Cover images come as links, never as copies, and author records keep bibliographic facts only.

Tools

ToolWhat it answersBilled event
books_searchSearch bookstool-read
books_get_workGet a booktool-read
books_list_editionsList the editions of a booktool-read
books_get_editionGet an edition by ISBN or edition idtool-read
books_search_authorsSearch authorstool-read
books_get_authorGet an author and their workstool-read
books_browse_subjectBrowse books on a subjecttool-read
searchSearchtool-read
fetchFetchtool-read

books_search: Search books

Use this when you need to find books (works) in the Open Library catalogue by keywords, title, author or subject, and get their Open Library work id, authors, first publication year, number of editions and cover link. Do not use for one ISBN (books_get_edition), for the details of a known work (books_get_work) or to find a person (books_search_authors). Parameters: query (free text, e.g. "the left hand of darkness"), title, author (e.g. "Ursula K. Le Guin"), subject (e.g. "science fiction"), at least one of these four, language (ISO 639-1 code such as "fr", keeps works that have an edition in that language), sort ("relevance", "new", "old", "editions" for the most published first, "rating"), limit (1 to 50), offset, response_format ("detailed" adds languages, ratings, median page count, subjects and every cover size, at most 20 rows).

ParameterTypeRequiredExample
querystringno"the left hand of darkness"
titlestringno"the hobbit"
authorstringno"Ursula K. Le Guin"
subjectstringno"science fiction"
languagestringno"fr"
sort"relevance" or "new" or "old" or "editions" or "rating"no"editions"
limitintegerno10
offsetintegerno0
response_format"concise" or "detailed"no"concise"

Returns { works[], pagination, next_steps[], attribution }. Upstream: Open Library. Cache: daily (1 day). Read-only.

books_get_work: Get a book

Use this when you have an Open Library work id and need what the book is about: title, authors, first publication date, description, subjects and cover link. Do not use for one edition or an ISBN (books_get_edition), for the list of editions (books_list_editions) or to find a work id (books_search). Parameters: work_id (e.g. "OL45804W", or a work page URL), response_format ("detailed" adds places, people and times of the subjects, classifications, external links and every cover size). Descriptions are cut to 800 characters. The first publication date is the year of the Open Library search index when it has one, otherwise the date on the work record, and first_publish_source says which.

ParameterTypeRequiredExample
work_idstringyes"OL45804W"
response_format"concise" or "detailed"no"concise"

Returns { work, next_steps[], attribution }. Upstream: Open Library. Cache: daily (1 day). Read-only.

books_list_editions: List the editions of a book

Use this when you need the editions of a book (an Open Library work): publishers, publication dates, ISBN-10 and ISBN-13, page counts, languages and formats, for example to find a translation or a specific printing. Do not use for one ISBN (books_get_edition) or to find the work id (books_search). Parameters: work_id (e.g. "OL45804W"), limit (1 to 50, default 10), offset, response_format ("detailed" adds the statement of responsibility, edition name, series, places, contributors, OCLC and LCCN numbers and every cover size, at most 10 rows).

ParameterTypeRequiredExample
work_idstringyes"OL45804W"
limitintegerno10
offsetintegerno0
response_format"concise" or "detailed"no"concise"

Returns { work_id, editions[], pagination, next_steps[], attribution }. Upstream: Open Library. Cache: daily (1 day). Read-only.

books_get_edition: Get an edition by ISBN or edition id

Use this when you have an ISBN (10 or 13 digits) or an Open Library edition id and need that edition: title, authors, publisher, publication date, page count, language, format, both ISBNs, cover link and the work it belongs to. Do not use for keyword or title searches (books_search) or for the list of all editions of a book (books_list_editions). Parameters: exactly one of isbn (hyphens and spaces allowed, check digit verified, e.g. "978-0-14-032872-1") or edition_id (ends in M, e.g. "OL7353617M", or an edition page URL), and response_format ("detailed" adds the statement of responsibility, series, places, contributors, OCLC and LCCN numbers and every cover size).

ParameterTypeRequiredExample
isbnstringno"978-0-14-032872-1"
edition_idstringno"OL7353617M"
response_format"concise" or "detailed"no"concise"

Returns { edition, next_steps[], attribution }. Upstream: Open Library. Cache: daily (1 day). Read-only.

books_search_authors: Search authors

Use this when you need to find an author in the Open Library catalogue by name and tell namesakes apart: Open Library author id, birth and death dates, best-known work and number of works. Do not use for books (books_search, which also filters by author name) or when you already have the author id (books_get_author). Parameters: name (e.g. "Ursula K. Le Guin" or a family name), limit (1 to 50, default 10), offset, response_format ("detailed" adds alternate names and top subjects, at most 20 rows). Only bibliographic facts are returned, never biographies or photos.

ParameterTypeRequiredExample
namestringyes"Ursula K. Le Guin"
limitintegerno10
offsetintegerno0
response_format"concise" or "detailed"no"concise"

Returns { authors[], pagination, next_steps[], attribution }. Upstream: Open Library. Cache: daily (1 day). Read-only.

books_get_author: Get an author and their works

Use this when you have an Open Library author id and need the bibliographic facts of the author (name forms, dates, authority identifiers such as Wikidata, VIAF and ISNI) and the works Open Library lists under that author. Do not use for finding the author id (books_search_authors) or for the most published works of an author (books_search with author and sort "editions", since this list follows Open Library's own order). Parameters: author_id (ends in A, e.g. "OL23919A", or an author page URL), limit (works per page, 1 to 50, default 20), offset, response_format ("detailed" adds name forms, identifiers and the subjects of each work). Biographies, photos, links and locations are never returned.

ParameterTypeRequiredExample
author_idstringyes"OL23919A"
limitintegerno20
offsetintegerno0
response_format"concise" or "detailed"no"concise"

Returns { author, works[], pagination, next_steps[], attribution }. Upstream: Open Library. Cache: daily (1 day). Read-only.

books_browse_subject: Browse books on a subject

Use this when you need the books Open Library classifies under one subject (a genre, a topic, a person, a place or a period), with the number of works on that subject, and in detailed mode the related subjects, places, people, periods, prolific authors and publishers. Do not use for free-text searches (books_search with subject matches subject words more loosely) or for one book (books_get_work). Parameters: subject (an Open Library subject name such as "science fiction", or "place:france", "person:napoleon i", "time:19th century"), published_in (a year or a range, e.g. "1900-1950"), ebooks_only (true keeps works with an e-book), limit (1 to 50, default 10), offset, response_format ("detailed" adds the related facets and the subjects of each work, at most 20 rows).

ParameterTypeRequiredExample
subjectstringyes"science fiction"
published_instringno"1900-1950"
ebooks_onlybooleannofalse
limitintegerno10
offsetintegerno0
response_format"concise" or "detailed"no"concise"

Returns { subject, works[], related, pagination, next_steps[], attribution }. Upstream: Open Library. Cache: daily (1 day). Read-only.

Use this when ChatGPT needs to find books in the Open Library catalogue by title, author, subject or keywords. Do not use for ISBN lookups or for authors as people. Parameter query (string), e.g. "the left hand of darkness". Returns up to 10 works with their Open Library work id (e.g. "OL45804W"), a title with authors and year, and the work page URL.

ParameterTypeRequiredExample
querystringyes"the left hand of darkness"

Returns { results[], notices[] }. Upstream: Open Library. Cache: daily (1 day). Read-only.

fetch: Fetch

Use this when ChatGPT needs the full record of one book returned by search, as text: title, authors, first publication date, subjects, description (cut to 800 characters), cover link and the Open Library page. Do not use for ids that did not come from search or from an Open Library work page URL. Parameter id, e.g. "OL45804W" or "https://openlibrary.org/works/OL45804W".

ParameterTypeRequiredExample
idstringyes"OL45804W"

Returns { id, title, text, url, metadata, notices[] }. Upstream: Open Library. Cache: daily (1 day). Read-only.

Connect

Endpoint (Streamable HTTP): https://mrbridge--books-mcp.apify.actor/mcp

Every client authenticates with your Apify API token, found in Apify Console > Settings > API & Integrations. Clients that support custom headers send it as Authorization: Bearer <token>. The others use the ?token= URL variant, which must be treated as a secret: keep it out of commits, screenshots and shared logs.

Claude Code

$claude mcp add --transport http books "https://mrbridge--books-mcp.apify.actor/mcp" --header "Authorization: Bearer ${APIFY_TOKEN}"

Cursor, VS Code and other JSON configurations

{
"mcpServers": {
"books": {
"type": "http",
"url": "https://mrbridge--books-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer ${APIFY_TOKEN}"
}
}
}
}

claude.ai and Claude Desktop

Add a custom connector with the URL https://mrbridge--books-mcp.apify.actor/mcp?token=YOUR_APIFY_TOKEN and no authentication. Prefilled link (replace the token placeholder before saving): add ISBN Lookup & Book Search MCP Server to Claude.

ChatGPT (developer mode)

Settings > Apps > Create, URL https://mrbridge--books-mcp.apify.actor/mcp?token=YOUR_APIFY_TOKEN, authentication "No authentication". ChatGPT snapshots the tool list: after a server update, an admin has to click Refresh on the app.

OpenAI Responses API

{
"type": "mcp",
"server_label": "books",
"server_url": "https://mrbridge--books-mcp.apify.actor/mcp",
"headers": {
"Authorization": "Bearer YOUR_APIFY_TOKEN"
},
"require_approval": "never"
}

Add allowed_tools to restrict the tool list. Tool calls must finish within about 60 seconds on this API, and every tool of this server answers in under 50 seconds.

Anthropic Messages API

{
"mcp_servers": [
{
"type": "url",
"url": "https://mrbridge--books-mcp.apify.actor/mcp",
"name": "books",
"authorization_token": "YOUR_APIFY_TOKEN"
}
],
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "books"
}
]
}

Send the beta header anthropic-beta: mcp-client-2025-11-20.

One-click OAuth alternative

https://mcp.apify.com/?tools=mrbridge/books-mcp connects through Apify OAuth without a token. It exposes the Actor as a single tool rather than the granular tools listed above.

Cost control

Each Standby run has a spending limit (maxTotalChargeUsd). When a call uses the last of it, the result is still returned, and later calls in that run answer CHARGE_LIMIT_REACHED until the limit is raised.

Why use ISBN Lookup & Book Search MCP Server?

Book questions mix three kinds of record that catalogues keep apart: the work (what the book is), its editions (who printed it, when, under which ISBN) and its authors. This server gives the assistant one tool for each, so the answer says which one it is talking about.

  • ISBNs as people type them. Hyphens and spaces are fine. The check digit is verified before any request, so a typo answers at once with a clear error, free of charge.
  • Works and editions kept apart. A work answers with its description, subjects and first publication date. Its editions answer with publisher, date, ISBN-10 and ISBN-13, page count, language and format.
  • Namesakes told apart. Author search returns birth and death dates, the best-known work and the number of works, then authority identifiers (Wikidata, VIAF, ISNI) on the chosen author.
  • Subjects by period. Browse a genre, a place, a person or a period, filter by publication years or e-book availability, and see related subjects in detailed mode.
  • Answers you can check. Every record carries its openlibrary.org link, ChatGPT search and fetch included.
  • 🔌 Model Context Protocol over Streamable HTTP at a single endpoint, https://mrbridge--books-mcp.apify.actor/mcp, for Claude, ChatGPT, Cursor, VS Code and the OpenAI and Anthropic APIs.
  • ⚡ Apify Standby mode. The server starts on the first call and stays up until it has been idle for 5 minutes, so the calls of one conversation skip the start.
  • No e-mail asked. The server identifies itself to Open Library with its own name and website. Your Apify token is the only thing you provide.

Pricing (Pay-per-Event)

EventCharged whenPrice
apify-actor-startrun start (platform default)see the Store page
tool-read (primary event)each successful read tool callsee the Store page

Never charged: initialize, tools/list, pings, readiness probes, and any call that ends in an error (invalid input, not found, upstream failure, timeout, spending limit).

Platform usage comes on top of these events. This server runs in Apify Standby mode, and you also pay the platform usage of your own Standby run, billed to your Apify account like any other run: the memory set for the Standby run, for as long as the server is up, idle time included, until the run stops at its idle timeout. The Apify pay-per-event documentation says so: "For runs in Standby mode, users always pay the platform usage costs in addition to the event charges."

Limits, caveats and attribution

  • One source. Everything comes from Open Library. Google Books is not used. Volunteers edit the catalogue, so dates, subjects and descriptions are more complete on some records than on others.
  • Works and editions. A work groups the editions of one book. books_search, books_get_work and books_browse_subject answer with works, books_list_editions and books_get_edition with editions (publisher, date, ISBN, pages, language). An edition id ends in M, a work id in W, an author id in A, and a tool given the wrong kind says which tool to use.
  • Slow on purpose. Open Library allows 1 request per second to clients that do not send a contact e-mail, and this server sends none. It keeps to half of that per instance, caches every answer for a day, and makes two requests for one call at most, three when Open Library merged the record you asked for. A busy moment can answer UPSTREAM_RATE_LIMITED: retry a few seconds later.
  • No bulk paging. Lists stop at 50 rows per call and at the 1,000th result of a query, as Open Library asks API users not to harvest its catalogue. Its monthly data dumps (https://openlibrary.org/developers/dumps) are the place for bulk data.
  • First publication dates. A work's first_publish_date is the first publication year of Open Library's search index when it has one, otherwise the date on the work record, which volunteers type in and which can be wrong (The Lord of the Rings reads "September 3, 2001" there, while the index gives 1954). first_publish_source says which of the two you got.
  • Short texts. Descriptions are cut to 800 characters, titles and names to a few hundred, and lists to their first items. The full record is on the Open Library page given in openlibrary_url.
  • Authors. Author answers keep names, dates, top work, work counts and authority identifiers (Wikidata, VIAF, ISNI, Library of Congress). Biographies, photos, personal links and locations are dropped before anything is cached or returned. A work or an edition names its first 10 authors.
  • Covers. Cover fields are links to covers.openlibrary.org built from cover ids. This server never downloads or re-hosts an image. Covers can belong to publishers and illustrators: check the rights before reusing one.
  • Merged and deleted records. When Open Library merged a record into another, the answer is for the new record and says so. A deleted record answers NOT_FOUND.
  • Author works order. books_get_author lists works in Open Library's own order. For the most published works of an author, use books_search with author and sort "editions".
  • Attribution. Every answer carries an attribution block that credits Open Library and the Internet Archive and gives the terms and guidelines pages, and every record has its openlibrary_url. The ChatGPT answers carry the same lines in notices.
  • Affiliation. This server is not affiliated with or endorsed by Open Library or the Internet Archive.

Data terms

The records come from Open Library, a project of the Internet Archive. Its Terms of Service are the Internet Archive Terms of Use (https://archive.org/about/terms.php), dated 31 December 2014. They say that access "is granted for scholarship and research purposes only", and they ask users "not to collect or store personal data about anyone". The Open Library API guidelines (https://openlibrary.org/developers/api) add that the APIs "are not intended to serve as a data backend for third-party services" or as "high-traffic commercial infrastructure". The Internet Archive asserts no copyright of its own over the catalogue data (https://openlibrary.org/developers/licensing).

This server is a paid service, which those terms do not cover as written. On 6 October 2026 we wrote to Open Library (openlibrary@archive.org) to ask whether this use is possible and on which terms. We have had no answer so far. If Open Library declines, or asks us to stop, we will remove Open Library from this server, which means retiring the server.

Until then, the server keeps to every other condition of the terms and guidelines: it identifies itself, stays under the published rate limit, caches every answer, refuses bulk paging, never stores author biographies or photos, links every record back to openlibrary.org and never re-hosts a cover. When you reuse what it returns:

  • Keep the link back. Show each record with its Open Library page (the openlibrary_url fields) and credit Open Library.
  • Do not harvest. Do not use this server to copy the catalogue in bulk. Use the monthly data dumps instead.
  • Respect privacy. Do not use author data to build profiles of people.
  • Check image rights. Covers belong to their publishers and illustrators.

The fee for this server pays for the service (hosting, caching, normalisation and the answer format), not for a licence on Open Library data.

Use cases

Citation checks. "Give me the publisher, year, page count and ISBN-13 of the 1969 first edition of The Left Hand of Darkness for my bibliography." The assistant finds the work with books_search, then picks the edition from books_list_editions and cites its Open Library page.

Bookshop and library desks. A customer reads out an ISBN from a phone photo. books_get_edition confirms the title, authors and format, and books_list_editions shows whether a paperback or a translation exists.

Which author is it? "There are several authors called John Williams. Which one wrote Stoner?" books_search_authors lists the namesakes with their dates and best-known work, and books_get_author lists the works of the right one.

Reading lists by subject and period. "Suggest ten science fiction novels first published between 1960 and 1975." books_browse_subject filters the subject by years and returns the works with their authors and first publication year.

Research in ChatGPT. In deep research, the search and fetch pair finds books and returns their full record as text, each with the link ChatGPT cites.

Frequently asked questions

Do I need an Open Library account or an API key?

No. You need an Apify account and its API token, nothing else. The server never asks for your e-mail address.

How much does a book lookup cost?

Two things are billed to your Apify account. First, the tool calls: $0.005 per successful call, as every tool of this server is a read. This is the price on the Apify Free plan, and the discounts of paid plans lower it. Errors, invalid input such as a wrong ISBN check digit, busy-moment refusals, the spending-limit refusal and protocol traffic (initialize, tool lists, pings) are never charged. Second, the platform usage of your own Standby run, on top of the events: the memory set for the run (256 MB) for as long as the server is up, idle time included, until it stops 5 minutes after your last call, plus a small start event per new run. A 10-minute session of 30 calls comes to $0.15 in tool calls on the Free plan plus 1 to 2 cents of platform usage. Live prices for your Apify plan are on the Pricing tab, and maxTotalChargeUsd caps the event charges of one run.

What does the catalogue cover?

Open Library's works, editions, authors and subjects, a catalogue edited by volunteers, so some records are more complete than others. There is no full text, no e-book loan, no price and no Google Books data. Descriptions are cut to 800 characters, and the full record is one click away on the linked Open Library page.

Why does a call sometimes answer UPSTREAM_RATE_LIMITED?

Open Library asks API clients to stay at 1 request per second, and this server keeps to half of that. Every answer is cached for a day, so repeated questions come back at once, but a busy moment can refuse a new one. Retry a few seconds later. The refusal is not charged.

Can I export lists of books with it?

No. Lists stop at 50 rows per call and at the 1,000th result of a query, as Open Library asks its API users not to harvest the catalogue. For bulk data, Open Library publishes monthly data dumps.

What does the server return about authors?

Bibliographic facts only: name forms, birth and death dates as Open Library publishes them, best-known work, work counts and authority identifiers. Biographies, photos, personal links and locations are never returned or stored.

Can I reuse the data and the covers?

Keep the link back to each record's Open Library page and credit Open Library. Covers are links to covers.openlibrary.org, never copies, and they belong to their publishers and illustrators, so check the rights before reusing one. The "Data terms" section above explains the terms Open Library data comes with and the request we made to Open Library.

Why is my first call slower?

Cold start. After 5 idle minutes the server stops, and the next call waits a few seconds while Apify starts a new run.

Is this server affiliated with Open Library?

No. It is an independent server that reads Open Library's public APIs and links every record back to openlibrary.org. It is not affiliated with or endorsed by Open Library or the Internet Archive.

Your feedback

Found a wrong record or a broken tool? Open an issue on the Issues tab and it will be looked at. More MCP servers, scrapers and data studies from the same team are on mr-bridge.com.

Changelog

  • 0.1.5: Output, dataset and key-value store schemas, as Apify asks for publication: the Output tab of a run started from the Console shows the connection details and one row per tool.
  • 0.1.4: the Input tab shows the endpoint and how to connect an AI client, and a run started from the Console outputs the connection details and the tool list
  • 0.1.3: pricing events tool-read and tool-action. Every tool of this server is a read and bills one tool-read event, $0.005 on the Apify Free plan and less on paid plans
  • 0.1.2: a work's first publication date is now the year of Open Library's search index when it has one (1954 for The Lord of the Rings, whose work record says September 3, 2001), otherwise the date on the work record, and the new first_publish_source field says which. books_get_work and fetch read it in the same request as the author names, so a call still makes two requests, three after a merge
  • 0.1.1: an all-zero placeholder ISBN such as 9780000000002 is refused instead of returning the unrelated edition Open Library files under it, and edition rows no longer list that placeholder as an ISBN. Editions also show the contributors of newer records (translators, illustrators) and take their page count from the page statement when it is the only one, and a related subject that Open Library lists twice now shows once. Test fixtures now come from real Open Library answers captured on the deployed server (private, unpublished)
  • 0.1.0: initial build (private, unpublished)
    • server name aligned with the Store title
    • the overview names the platform usage of your own Standby run next to the per-call event, as the Pricing section does