mcp-open-library
MCP Open Library
Сервер протокола контекста модели (MCP) для API Open Library, который позволяет ИИ-ассистентам искать информацию о книгах и авторах.
Обзор
Этот проект реализует MCP-сервер, предоставляющий инструменты для взаимодействия ИИ-ассистентов с Open Library. Он позволяет искать информацию о книгах по названию, искать авторов по имени, получать подробную информацию об авторе с помощью его ключа Open Library и получать URL-адреса фотографий авторов с помощью их идентификатора Open Library (OLID). Сервер возвращает структурированные данные об информации о книгах и авторах.
Related MCP server: bookstore-mcp-server
Функции
Поиск книг по названию: Поиск книг по их названию (
get_book_by_title).Поиск авторов по имени: Поиск авторов по их имени (
get_authors_by_name).Получение подробной информации об авторе: Получение подробной информации о конкретном авторе с помощью его ключа Open Library (
get_author_info).Получение фотографии автора: Получение URL-адреса фотографии автора с помощью его идентификатора Open Library (OLID) (
get_author_photo).Получение обложки книги: Получение URL-адреса обложки книги с помощью различных идентификаторов (ISBN, OCLC, LCCN, OLID, ID) (
get_book_cover).Получение книги по ID: Получение подробной информации о книге с помощью различных идентификаторов (ISBN, LCCN, OCLC, OLID) (
get_book_by_id).
Установка
Установка через Smithery
Чтобы автоматически установить MCP Open Library для Claude Desktop через Smithery:
npx -y @smithery/cli install @8enSmith/mcp-open-library --client claudeРучная установка
# 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 buildИспользование
Запуск сервера
Убедитесь, что вы используете node v22.21.1 (вероятно, будет работать и на более новой версии node, но именно её я использую для этого теста). Если у вас установлен
nvm, выполнитеnvm use.В корневом каталоге
mcp-open-libraryвыполнитеnpm run buildЗатем выполните
npm run inspector. После сборки нажмите на URL с параметром строки запросаMCP_PROXY_AUTH_TOKEN, чтобы открыть инспектор.В инспекторе выберите транспорт 'STDIO'
Убедитесь, что команда установлена на 'build/index.js'
Нажмите кнопку 'Connect' в инспекторе — теперь вы подключитесь к серверу
Нажмите 'Tools' в верхнем правом меню
Попробуйте запустить инструмент, например, нажмите get_book_by_title
Найдите книгу, например, в поле названия введите 'The Hobbit' и нажмите 'Run Tool'. Сервер вернет подробную информацию о книге.
Использование с MCP-клиентом
Этот сервер реализует протокол контекста модели, что означает, что его может использовать любой совместимый с MCP ИИ-ассистент или клиент, например Claude Desktop. Сервер предоставляет следующие инструменты:
get_book_by_title: Поиск информации о книге по названиюget_authors_by_name: Поиск информации об авторе по имениget_author_info: Получение подробной информации о конкретном авторе с помощью ключа автора Open Libraryget_author_photo: Получение URL-адреса фотографии автора с помощью идентификатора автора Open Library (OLID)get_book_cover: Получение URL-адреса обложки книги с помощью конкретного идентификатора (ISBN, OCLC, LCCN, OLID или ID)get_book_by_id: Получение подробной информации о книге с помощью конкретного идентификатора (ISBN, LCCN, OCLC или OLID)
Пример ввода get_book_by_title:
{
"title": "The Hobbit"
}Пример вывода get_book_by_title:
[
{
"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"
}
]Пример ввода get_authors_by_name:
{
"name": "J.R.R. Tolkien"
}Пример вывода get_authors_by_name:
[
{
"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
}
]Пример ввода get_author_info:
{
"author_key": "OL26320A"
}Пример вывода get_author_info:
{
"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"
}
}Пример ввода get_author_photo:
{
"olid": "OL26320A"
}Пример вывода get_author_photo:
https://covers.openlibrary.org/a/olid/OL26320A-L.jpgПример ввода get_book_cover:
{
"key": "ISBN",
"value": "9780547928227",
"size": "L"
}Пример вывода get_book_cover:
https://covers.openlibrary.org/b/isbn/9780547928227-L.jpgИнструмент get_book_cover принимает следующие параметры:
key: Тип идентификатора (один из:ISBN,OCLC,LCCN,OLIDилиID)value: Значение идентификатораsize: Необязательный размер обложки (Sдля маленького,Mдля среднего,Lдля большого, по умолчаниюL)
Пример ввода get_book_by_id:
{
"idType": "isbn",
"idValue": "9780547928227"
}Пример вывода get_book_by_id:
{
"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"
}Инструмент get_book_by_id принимает следующие параметры:
idType: Тип идентификатора (один из:isbn,lccn,oclc,olid)idValue: Значение идентификатора
Пример использования этого инструмента в Claude Desktop можно увидеть здесь:
Docker
Вы можете протестировать этот MCP-сервер с помощью Docker. Для этого сначала выполните:
docker build -t mcp-open-library .
docker run -p 8080:8080 mcp-open-libraryЗатем вы можете протестировать сервер, работающий внутри Docker, через инспектор, например:
npm run inspector http://localhost:8080Разработка
Структура проекта
src/index.ts- Основная реализация сервераsrc/types.ts- Определения типов TypeScriptsrc/index.test.ts- Набор тестов
Доступные скрипты
npm run build- Сборка кода TypeScriptnpm run watch- Отслеживание изменений и пересборкаnpm test- Запуск набора тестовnpm run format- Форматирование кода с помощью Prettiernpm run inspector- Запуск MCP Inspector для сервера
Запуск тестов
npm testВклад
Вклад приветствуется! Пожалуйста, не стесняйтесь отправлять pull request.
Благодарности
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. Dates show when Glama detected each change.
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
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.2251MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables searching books and authors, fetching editions, browsing subjects, and resolving cover images from Open Library.3233Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for Google Books API, enabling volume details, ISBN lookup, and bookshelf access via natural language queries.15MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/8enSmith/mcp-open-library'
If you have feedback or need assistance with the MCP directory API, please join our Discord server