mcp-open-library
MCP Open Library
Ein Model Context Protocol (MCP)-Server für die Open Library API, der es KI-Assistenten ermöglicht, nach Buch- und Autoreninformationen zu suchen.
Übersicht
Dieses Projekt implementiert einen MCP-Server, der Tools für KI-Assistenten bereitstellt, um mit der Open Library zu interagieren. Er ermöglicht die Suche nach Buchinformationen anhand des Titels, die Suche nach Autoren anhand des Namens, das Abrufen detaillierter Autoreninformationen mithilfe ihres Open Library-Schlüssels sowie das Abrufen von URLs für Autorenfotos mithilfe ihrer Open Library ID (OLID). Der Server liefert strukturierte Daten für Buch- und Autoreninformationen zurück.
Related MCP server: bookstore-mcp-server
Funktionen
Buchsuche nach Titel: Suche nach Büchern anhand ihres Titels (
get_book_by_title).Autorensuche nach Name: Suche nach Autoren anhand ihres Namens (
get_authors_by_name).Autorendetails abrufen: Abrufen detaillierter Informationen zu einem bestimmten Autor mithilfe seines Open Library-Schlüssels (
get_author_info).Autorenfoto abrufen: Abrufen der URL für das Foto eines Autors mithilfe seiner Open Library ID (OLID) (
get_author_photo).Buchcover abrufen: Abrufen der URL für das Coverbild eines Buches mithilfe verschiedener Identifikatoren (ISBN, OCLC, LCCN, OLID, ID) (
get_book_cover).Buch nach ID abrufen: Abrufen detaillierter Buchinformationen mithilfe verschiedener Identifikatoren (ISBN, LCCN, OCLC, OLID) (
get_book_by_id).
Installation
Installation über Smithery
Um MCP Open Library für Claude Desktop automatisch über Smithery zu installieren:
npx -y @smithery/cli install @8enSmith/mcp-open-library --client claudeManuelle Installation
# Clone the repository
git clone https://github.com/8enSmith/mcp-open-library.git
cd mcp-open-library
# Install dependencies
npm install
# Build the project
npm run buildVerwendung
Ausführen des Servers
Stellen Sie sicher, dass Sie Node v22.21.1 verwenden (es funktioniert wahrscheinlich auch mit einer neueren Node-Version, aber diese verwende ich für diesen Test). Wenn Sie
nvminstalliert haben, führen Sienvm useaus.Führen Sie im Stammverzeichnis von
mcp-open-libraryden Befehlnpm run buildaus.Führen Sie anschließend
npm run inspectoraus. Klicken Sie nach dem Build auf die URL mit dem AbfrageparameterMCP_PROXY_AUTH_TOKEN, um den Inspector zu öffnen.Wählen Sie im Inspector den Transport 'STDIO'.
Stellen Sie sicher, dass der Befehl auf 'build/index.js' gesetzt ist.
Klicken Sie im Inspector auf die Schaltfläche 'Connect' – Sie werden nun mit dem Server verbunden.
Klicken Sie in der oberen rechten Menüleiste auf 'Tools'.
Versuchen Sie, ein Tool auszuführen, z. B. klicken Sie auf get_book_by_title.
Suchen Sie nach einem Buch, z. B. geben Sie im Titelfeld 'The Hobbit' ein und klicken Sie dann auf 'Run Tool'. Der Server gibt daraufhin die Buchdetails zurück.
Verwendung mit einem MCP-Client
Dieser Server implementiert das Model Context Protocol, was bedeutet, dass er von jedem MCP-kompatiblen KI-Assistenten oder Client verwendet werden kann, z. B. Claude Desktop. Der Server stellt die folgenden Tools bereit:
get_book_by_title: Suche nach Buchinformationen anhand des Titelsget_authors_by_name: Suche nach Autoreninformationen anhand des Namensget_author_info: Abrufen detaillierter Informationen zu einem bestimmten Autor mithilfe seines Open Library Author Keyget_author_photo: Abrufen der URL für das Foto eines Autors mithilfe seiner Open Library Author ID (OLID)get_book_cover: Abrufen der URL für das Coverbild eines Buches mithilfe eines bestimmten Identifikators (ISBN, OCLC, LCCN, OLID oder ID)get_book_by_id: Abrufen detaillierter Buchinformationen mithilfe eines bestimmten Identifikators (ISBN, LCCN, OCLC oder OLID)
Beispiel für get_book_by_title Eingabe:
{
"title": "The Hobbit"
}Beispiel für get_book_by_title Ausgabe:
[
{
"title": "The Hobbit",
"authors": [
"J. R. R. Tolkien"
],
"first_publish_year": 1937,
"open_library_work_key": "/works/OL45883W",
"edition_count": 120,
"cover_url": "https://covers.openlibrary.org/b/id/10581294-M.jpg"
}
]Beispiel für get_authors_by_name Eingabe:
{
"name": "J.R.R. Tolkien"
}Beispiel für get_authors_by_name Ausgabe:
[
{
"key": "OL26320A",
"name": "J. R. R. Tolkien",
"alternate_names": [
"John Ronald Reuel Tolkien"
],
"birth_date": "3 January 1892",
"top_work": "The Hobbit",
"work_count": 648
}
]Beispiel für get_author_info Eingabe:
{
"author_key": "OL26320A"
}Beispiel für get_author_info Ausgabe:
{
"name": "J. R. R. Tolkien",
"personal_name": "John Ronald Reuel Tolkien",
"birth_date": "3 January 1892",
"death_date": "2 September 1973",
"bio": "John Ronald Reuel Tolkien (1892-1973) was a major scholar of the English language, specializing in Old and Middle English. He served as the Rawlinson and Bosworth Professor of Anglo-Saxon and later the Merton Professor of English Language and Literature at Oxford University.",
"alternate_names": ["John Ronald Reuel Tolkien"],
"photos": [6791763],
"key": "/authors/OL26320A",
"remote_ids": {
"viaf": "95218067",
"wikidata": "Q892"
},
"revision": 43,
"last_modified": {
"type": "/type/datetime",
"value": "2023-02-12T05:50:22.881"
}
}Beispiel für get_author_photo Eingabe:
{
"olid": "OL26320A"
}Beispiel für get_author_photo Ausgabe:
https://covers.openlibrary.org/a/olid/OL26320A-L.jpgBeispiel für get_book_cover Eingabe:
{
"key": "ISBN",
"value": "9780547928227",
"size": "L"
}Beispiel für get_book_cover Ausgabe:
https://covers.openlibrary.org/b/isbn/9780547928227-L.jpgDas Tool get_book_cover akzeptiert die folgenden Parameter:
key: Der Typ des Identifikators (einer der folgenden:ISBN,OCLC,LCCN,OLIDoderID)value: Der Wert des Identifikatorssize: Optionale Covergröße (Sfür klein,Mfür mittel,Lfür groß, Standard istL)
Beispiel für get_book_by_id Eingabe:
{
"idType": "isbn",
"idValue": "9780547928227"
}Beispiel für get_book_by_id Ausgabe:
{
"title": "The Hobbit",
"authors": [
"J. R. R. Tolkien"
],
"publishers": [
"Houghton Mifflin Harcourt"
],
"publish_date": "October 21, 2012",
"number_of_pages": 300,
"isbn_13": [
"9780547928227"
],
"isbn_10": [
"054792822X"
],
"oclc": [
"794607877"
],
"olid": [
"OL25380781M"
],
"open_library_edition_key": "/books/OL25380781M",
"open_library_work_key": "/works/OL45883W",
"cover_url": "https://covers.openlibrary.org/b/id/8231496-M.jpg",
"info_url": "https://openlibrary.org/books/OL25380781M/The_Hobbit",
"preview_url": "https://archive.org/details/hobbit00tolkien"
}Das Tool get_book_by_id akzeptiert die folgenden Parameter:
idType: Der Typ des Identifikators (einer der folgenden:isbn,lccn,oclc,olid)idValue: Der Wert des Identifikators
Ein Beispiel für die Verwendung dieses Tools in Claude Desktop finden Sie hier:
Docker
Sie können diesen MCP-Server mit Docker testen. Führen Sie dazu zuerst Folgendes aus:
docker build -t mcp-open-library .
docker run -p 8080:8080 mcp-open-librarySie können dann den in Docker laufenden Server über den Inspector testen, z. B.:
npm run inspector http://localhost:8080Entwicklung
Projektstruktur
src/index.ts- Hauptserver-Implementierungsrc/types.ts- TypeScript-Typdefinitionensrc/index.test.ts- Test-Suite
Verfügbare Skripte
npm run build- TypeScript-Code bauennpm run watch- Auf Änderungen achten und neu bauennpm test- Test-Suite ausführennpm run format- Code mit Prettier formatierennpm run inspector- MCP Inspector gegen den Server ausführen
Tests ausführen
npm testMitwirken
Beiträge sind willkommen! Bitte zögern Sie nicht, einen Pull Request einzureichen.
Danksagungen
Available Tools
7 toolsget_author_infoGet author detailsARead-only
Get detailed information for a specific author using their Open Library Author Key (e.g. OL23919A).
| Name | Required | Description | Default |
|---|---|---|---|
| author_key | Yes | The Open Library key for the author (e.g., OL23919A). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds little beyond that—just the example key format which is already in schema. No mention of error handling, return structure, or edge cases. With annotations providing the safety profile, a score of 3 is appropriate as it adds minimal behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, clear and direct, no fluff. Front-loaded with the action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: one parameter, safe read operation, no output schema. The description provides sufficient context for basic use, but could specify what 'detailed information' includes or mention error behavior. However, given the simplicity, it's fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers the parameter fully with description and pattern. Description repeats the example but adds no new semantic information. With 100% schema description coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'detailed information for a specific author' using the Open Library key. It distinguishes from siblings like get_book_by_id and get_authors_by_name by focusing on the author key lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a known author key is available, but it does not explicitly mention when to use this vs. alternatives like get_authors_by_name. It provides context (the key) but no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_author_photoGet author photo URLARead-only
Get the URL for an author's photo using their Open Library Author ID (OLID e.g. OL23919A). Reports when no photo exists rather than returning a URL to a blank placeholder.
| Name | Required | Description | Default |
|---|---|---|---|
| olid | Yes | The Open Library Author ID (OLID) for the author (e.g. OL23919A). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, indicating safe read and possible missing data. The description adds that it reports when no photo exists, which aligns with openWorldHint and provides meaningful behavioral context beyond the annotations. This handles the missing photo case explicitly, which is valuable for agents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core function ('Get the URL'), and each sentence provides essential detail (ID format and missing-photo behavior). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (single param, no output schema), the description is highly complete. It covers the purpose, the ID, and the edge case of missing photosabbia. While it doesn't mention return format, the lack of output schema means it's not required, and annotations cover safety aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 100% and the schema already describes the olid parameter. The description's example (OL23919A) reinforces the format and makes it clearer for agents, adding value beyond the schema. This is effectively a baseline 3 with a bonus for the example, and given the high coverage, it's sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets the URL for an author's photo, specifying the resource (author's photo) and the required identifier (OLID), and even includes an example. It distinguishes itself from siblings like get_author_info and get_book_cover by focusing specifically on photo URLs and handling missing photos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when needing an author's photo URL) and provides guidance on the ID format, but it does not explicitly state when not to use it or mention alternatives. Since there are sibling tools like get_author_info that might also provide photo info, explicit exclusions would help, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_authors_by_nameFind authors by nameARead-only
Search for author information on Open Library. Returns at most limit authors (default 10) together with num_found, the total number of matches; page through them with offset. Each result's key can be passed to get_author_info for that author's full record.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the author to search for. | |
| limit | No | Maximum number of results to return (1-50, default 10). | |
| offset | No | Number of results to skip, for paging through the total reported as num_found (0-1000, default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds useful behavioral details: result cap, default limit, total match count via num_found, and pagination behavior. It does not mention rate limits or auth, but for a read-only search tool the disclosed behavior is sufficient and does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences contain all essential information: search scope, result cap, default, total count, pagination, and integration with a sibling tool. Every phrase earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with three parameters and no output schema. The description fully compensates for the lack of an output schema by explaining the return shape, count field, pagination parameters, and next-step usage with get_author_info. It is complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining how limit and offset interact with pagination, defining num_found, and showing how the returned key connects to get_author_info. This adds value rather than just restating schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Search for author information on Open Library.' It clearly identifies the resource (authors) and distinguishes itself from sibling tools like get_author_info and search_books by describing a list-returning search behavior with pagination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: it returns a list up to a limit, supports pagination via offset, and explicitly tells the agent to pass a result's key to get_author_info for the full record. It does not explicitly state when not to use this tool versus alternatives, but the follow-up instruction provides practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_book_by_idGet book by identifierARead-only
Get detailed information about a book using its identifier (ISBN, LCCN, OCLC, OLID).
| Name | Required | Description | Default |
|---|---|---|---|
| idType | Yes | The type of identifier used (isbn, lccn, oclc, olid). Case-insensitive. | |
| idValue | Yes | The value of the identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=true and openWorldHint=true, covering the core safety profile. The description adds only the vague promise of 'detailed information' and does not disclose response structure, error behavior, or identifier-format nuances, though it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with a clear verb and resource. It contains no wasted words and efficiently conveys the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter lookup with full schema coverage and relevant annotations, the description is adequate. It does not detail the return shape, but this is a minor gap given the tool's simplicity and the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters fully documented including the idType enum and case-insensitivity. The description merely restates the identifier types that are already present in the enum, adding no new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), identifies the resource ('detailed information about a book'), and specifies the lookup method ('using its identifier'). This clearly differentiates it from sibling tools like get_book_by_title or search_books.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool should be used when an identifier (ISBN, LCCN, OCLC, or OLID) is available. It does not explicitly name alternatives or exclusions, but the identifier-based context is sufficient to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_book_by_titleFind books by titleARead-only
Search for a book by its title on Open Library. Returns at most limit results (default 10) together with num_found, the total number of matches; page through them with offset. Each result carries best_edition — one edition of the work, with its isbn_13/isbn_10 where Open Library has them, and its edition_key, which can be passed to get_book_by_id as { idType: "olid" } for that edition's full record.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (1-50, default 10). | |
| title | Yes | The title of the book to search for. | |
| offset | No | Number of results to skip, for paging through the total reported as num_found (0-1000, default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world behavior, so the description adds value by explaining pagination mechanics (limit, offset, num_found) and result structure (best_edition with ISBNs and edition_key). This goes beyond the schema to give a clear mental model of the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, and each subsequent sentence adds meaningful operational detail. No redundant or promotional language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description does a good job of explaining the return structure (num_found, best_edition, ISBNs, edition_key) and how it relates to another tool. It is complete enough for an agent to understand what to expect, though it omits details about other fields or search sorting (likely not essential).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description enhances parameter understanding by explaining how limit, offset, and num_found work together for pagination, and by describing the semantics of edition_key. This adds value beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Search for a book by its title') on a specific resource (Open Library). It clearly distinguishes from siblings by focusing on title-based search, and the cross-reference to get_book_by_id further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: search by title with pagination controls. It also provides a concrete alternative path by noting that edition_key can be passed to get_book_by_id for full records, which helps agents choose between tools. However, it does not explicitly contrast with search_books or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_book_coverGet book cover URLARead-only
Get the URL for a book's cover image using a key (ISBN, OCLC, LCCN, OLID, ID) and value. Reports when no cover exists rather than returning a URL to a blank placeholder.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | The type of identifier used (ISBN, OCLC, LCCN, OLID, ID). ID is Open Library's internal cover ID. | |
| size | No | The desired size of the cover (S, M, or L). Defaults to L. | L |
| value | Yes | The value of the identifier. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavior beyond the readOnlyHint and openWorldHint annotations by stating it 'reports when no cover exists rather than returning a URL to a blank placeholder.' This is a valuable edge-case disclosure not captured elsewhere, though it doesn't cover other potential behaviors like rate limits or authentication.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the action and input types, and contains no redundant phrases. Every word contributes to understanding the tool's function and behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 parameters, no output schema, read-only annotations), the description adequately covers the purpose, identifier types, and a key edge-case (no cover). It could mention the size parameter or URL format, but those are already in the schema, so it feels complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with detailed descriptions for all three parameters, including enums and defaults. The description only repeats the key types (already in schema) and adds no additional semantic meaning beyond what is structured, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a cover image URL using a specified key type and value. It specifies the exact identifier types (ISBN, OCLC, etc.), and the verb 'Get' with resource 'URL for a book's cover image' distinguishes it from sibling tools like get_book_by_id or search_books.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool by listing the required identifier types, but it does not explicitly contrast it with alternatives or state when not to use it. The purpose is clear enough that an agent would infer usage for cover retrieval, but explicit exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_booksSearch booksARead-only
Search Open Library across titles, authors, subjects, places, people, publishers and ISBNs. Provide at least one search criterion: q, title, author, subject, place, person, publisher, isbn; combining several narrows the search. Returns at most limit results (default 10) together with num_found, the total number of matches; page through them with offset. Each result carries best_edition — one edition of the work, with its isbn_13/isbn_10 where Open Library has them, and its edition_key, which can be passed to get_book_by_id as { idType: "olid" } for that edition's full record.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-form query searched across all fields. Supports Solr syntax, e.g. `subject:cyberpunk AND first_publish_year:[1980 TO 1990]`. | |
| isbn | No | Search by ISBN-10 or ISBN-13. | |
| sort | No | Result ordering. Omit for relevance. `new`/`old` order by first publication date, `rating` by average rating. | |
| limit | No | Maximum number of results to return (1-50, default 10). | |
| place | No | Search by a place the book is about. | |
| title | No | Search by book title. | |
| author | No | Search by author name. | |
| offset | No | Number of results to skip, for paging through the total reported as num_found (0-1000, default 0). | |
| person | No | Search by a person the book is about. | |
| subject | No | Search by subject. | |
| language | No | Restrict results to a language, as a 3-letter MARC code (e.g. eng, fre, spa). | |
| publisher | No | Search by publisher. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses detailed runtime behavior: result limit (default 10), num_found field, paging with offset, and the structure of each result (best_edition with ISBNs and edition_key). It also explains how to use edition_key with get_book_by_id. Since annotations already mark it as readOnly and openWorld, the description adds substantial value by explaining pagination and result format, going beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the purpose, then usage constraints, then result details. There is no fluff or repetition of schema information. Every sentence contributes meaningful information: what it searches, how to combine criteria, and what results look like including chaining. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool with 12 parameters and no output schema. The description fully covers the essential aspects: search criteria, result limit, pagination, result structure (best_edition), and how to access full records via edition_key. It leaves no major gaps for an agent to invoke the tool correctly and interpret results. The coverage is comprehensive given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the 12 parameters with descriptions, so the baseline is 3. The description adds semantic context by listing searchable criteria, explicitly stating the requirement of at least one criterion, and explaining how combining them narrows results. It also clarifies the meaning of limit and offset in the context of num_found and paging, which is not fully captured in the schema. This adds value beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States exactly what it does: 'Search Open Library across titles, authors, subjects, places, people, publishers and ISBNs.' The verb 'search' plus the specific resource ('Open Library') and the enumerated fields make the purpose unambiguous, and it clearly distinguishes from sibling tools like get_book_by_id (which retrieves specific records) by focusing on search across multiple criteria.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: 'Provide at least one search criterion' and 'combining several narrows the search.' It also explains paging with offset and chaining to get_book_by_id via edition_key. However, it does not explicitly mention when not to use this tool or contrast it with alternatives like get_book_by_title, though the chaining hint implies an alternative path. The guidance is strong but not fully explicit about exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v1.2.1- Changed
get_author_info2 fields changed- added
Input schema / properties / author_key / minLengthAdded value: +1 - added
Input schema / properties / author_key / patternAdded value: +"^OL\\d+A$"
- Changed
get_author_photo2 fields changed- added
Input schema / properties / olid / minLengthAdded value: +1 - added
Input schema / properties / olid / patternAdded value: +"^OL\\d+A$"
- Changed
get_authors_by_name3 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 10, + "description": "Maximum number of results to return (1-50, default 10).", + "maximum": 50, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / name / minLengthAdded value: +1 - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Number of results to skip, for paging through the total reported as num_found (0-1000, default 0).", + "maximum": 1000, + "minimum": 0, + "type": "integer" +}
- Changed
get_book_by_id2 fields changed- changed
Input schema / properties / idType / descriptionPrevious value: -"The type of identifier used (ISBN, LCCN, OCLC, OLID)."New value: +"The type of identifier used (isbn, lccn, oclc, olid). Case-insensitive." - added
Input schema / properties / idValue / minLengthAdded value: +1
- Changed
get_book_by_title3 fields changed- added
Input schema / properties / limitAdded value: +{ + "default": 10, + "description": "Maximum number of results to return (1-50, default 10).", + "maximum": 50, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "Number of results to skip, for paging through the total reported as num_found (0-1000, default 0).", + "maximum": 1000, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / title / minLengthAdded value: +1
- Changed
get_book_cover4 fields changed- changed
Input schema / properties / key / descriptionPrevious value: -"The type of identifier used (ISBN, OCLC, LCCN, OLID, ID)."New value: +"The type of identifier used (ISBN, OCLC, LCCN, OLID, ID). ID is Open Library's internal cover ID." - added
Input schema / properties / size / defaultAdded value: +"L" - changed
Input schema / properties / size / descriptionPrevious value: -"The desired size of the cover (S, M, or L)."New value: +"The desired size of the cover (S, M, or L). Defaults to L." - added
Input schema / properties / value / minLengthAdded value: +1
- Added
search_books
6 tool updates
v1.0.0- First observed
get_author_info - First observed
get_author_photo - First observed
get_authors_by_name - First observed
get_book_by_id - First observed
get_book_by_title - First observed
get_book_cover
TDQS
Scored across 7 tools
Most tools are clearly separated by resource and action, but get_book_by_title overlaps heavily with search_books since it returns the same result structure and is essentially a subset of the general search. The book/author detail and cover/photo tools are unambiguous.
Naming mostly follows a consistent get_<resource>_by_<qualifier> pattern, e.g. get_book_by_id, get_book_by_title, get_author_photo. search_books breaks the get_ convention but remains readable and predictable alongside the others.
Seven tools is well-scoped for a read-only Open Library server. Each tool addresses a distinct lookup need without the collection feeling bloated or thin.
The surface covers general book search, book lookup by ID/title, author search, author details, author photos, and book covers. Minor gaps exist, such as no direct endpoint for works or edition lists beyond indirection through edition_key, but core reading workflows are covered.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for Russian books search, details, and recommendation candidates.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- FlicenseBqualityDmaintenanceA Model Context Protocol server implementation that can be run directly or through Docker, enabling AI assistants to interact with external systems through the MCP standard.2-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes tools for querying a bookstore inventory, allowing AI agents to search and retrieve book information via the Model Context Protocol.246 npm1MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables searching books and authors, fetching editions, browsing subjects, and resolving cover images from Open Library.125 npm4Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for Google Books API, enabling volume details, ISBN lookup, and bookshelf access via natural language queries.4 npmMIT