Skip to main content
Glama
8enSmith

mcp-open-library

MCP Open Library

Trust Score Listed on Spark

AI 어시스턴트가 도서 및 저자 정보를 검색할 수 있도록 지원하는 Open Library API용 MCP(Model Context Protocol) 서버입니다.

개요

이 프로젝트는 AI 어시스턴트가 Open Library와 상호 작용할 수 있는 도구를 제공하는 MCP 서버를 구현합니다. 제목으로 도서 정보를 검색하고, 이름으로 저자를 검색하며, Open Library 키를 사용하여 상세 저자 정보를 가져오고, Open Library ID(OLID)를 사용하여 저자 사진 URL을 가져올 수 있습니다. 서버는 도서 및 저자 정보에 대한 구조화된 데이터를 반환합니다.

Related MCP server: bookstore-mcp-server

기능

  • 제목으로 도서 검색: 제목을 사용하여 도서 검색 (get_book_by_title).

  • 이름으로 저자 검색: 이름을 사용하여 저자 검색 (get_authors_by_name).

  • 저자 상세 정보 가져오기: Open Library 키를 사용하여 특정 저자의 상세 정보 검색 (get_author_info).

  • 저자 사진 가져오기: Open Library ID(OLID)를 사용하여 저자 사진 URL 가져오기 (get_author_photo).

  • 도서 표지 가져오기: 다양한 식별자(ISBN, OCLC, LCCN, OLID, ID)를 사용하여 도서 표지 이미지 URL 가져오기 (get_book_cover).

  • ID로 도서 가져오기: 다양한 식별자(ISBN, LCCN, OCLC, OLID)를 사용하여 상세 도서 정보 검색 (get_book_by_id).

설치

Smithery를 통한 설치

Smithery를 통해 Claude Desktop용 MCP Open Library를 자동으로 설치하려면:

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

사용법

서버 실행

  1. node v22.21.1을 사용 중인지 확인하십시오(최신 버전에서도 작동할 수 있지만, 이 테스트에서는 해당 버전을 사용했습니다). nvm이 설치되어 있다면 nvm use를 실행하십시오.

  2. mcp-open-library 루트 디렉토리에서 npm run build를 실행하십시오.

  3. 다음으로 npm run inspector를 실행하십시오. 빌드가 완료되면 MCP_PROXY_AUTH_TOKEN 쿼리 문자열 매개변수가 포함된 URL을 클릭하여 Inspector를 엽니다.

  4. Inspector에서 'STDIO' 전송 방식을 선택하십시오.

  5. 명령어가 'build/index.js'로 설정되어 있는지 확인하십시오.

  6. Inspector에서 'Connect' 버튼을 클릭하면 서버에 연결됩니다.

  7. 오른쪽 상단 메뉴 바에서 'Tools'를 클릭하십시오.

  8. 도구를 실행해 보십시오(예: get_book_by_title 클릭).

  9. 도서를 검색해 보십시오(예: 제목 상자에 'The Hobbit'을 입력하고 'Run Tool' 클릭). 서버가 도서 상세 정보를 반환합니다.

MCP 클라이언트와 함께 사용

이 서버는 Model Context Protocol을 구현하므로 Claude Desktop과 같은 MCP 호환 AI 어시스턴트나 클라이언트에서 사용할 수 있습니다. 서버는 다음 도구를 제공합니다:

  • get_book_by_title: 제목으로 도서 정보 검색

  • get_authors_by_name: 이름으로 저자 정보 검색

  • get_author_info: Open Library 저자 키를 사용하여 특정 저자의 상세 정보 가져오기

  • get_author_photo: Open Library 저자 ID(OLID)를 사용하여 저자 사진 URL 가져오기

  • get_book_cover: 특정 식별자(ISBN, OCLC, LCCN, OLID 또는 ID)를 사용하여 도서 표지 이미지 URL 가져오기

  • 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

Docker를 사용하여 이 MCP 서버를 테스트할 수 있습니다. 먼저 다음을 실행하십시오:

docker build -t mcp-open-library .
docker run -p 8080:8080 mcp-open-library

그런 다음 Inspector를 통해 Docker 내에서 실행 중인 서버를 테스트할 수 있습니다(예):

npm run inspector http://localhost:8080

개발

프로젝트 구조

  • src/index.ts - 메인 서버 구현

  • src/types.ts - TypeScript 타입 정의

  • src/index.test.ts - 테스트 스위트

사용 가능한 스크립트

  • npm run build - TypeScript 코드 빌드

  • npm run watch - 변경 사항 감시 및 재빌드

  • npm test - 테스트 스위트 실행

  • npm run format - Prettier로 코드 서식 지정

  • npm run inspector - 서버에 대해 MCP Inspector 실행

테스트 실행

npm test

기여

기여를 환영합니다! 자유롭게 풀 리퀘스트를 제출해 주십시오.

감사의 말

Available Tools

7 tools
get_author_infoGet author detailsA
Read-only

Get detailed information for a specific author using their Open Library Author Key (e.g. OL23919A).

ParametersJSON Schema
NameRequiredDescriptionDefault
author_keyYesThe Open Library key for the author (e.g., OL23919A).

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 URLA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
olidYesThe Open Library Author ID (OLID) for the author (e.g. OL23919A).

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 nameA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the author to search for.
limitNoMaximum number of results to return (1-50, default 10).
offsetNoNumber of results to skip, for paging through the total reported as num_found (0-1000, default 0).

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 identifierA
Read-only

Get detailed information about a book using its identifier (ISBN, LCCN, OCLC, OLID).

ParametersJSON Schema
NameRequiredDescriptionDefault
idTypeYesThe type of identifier used (isbn, lccn, oclc, olid). Case-insensitive.
idValueYesThe value of the identifier.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 titleA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return (1-50, default 10).
titleYesThe title of the book to search for.
offsetNoNumber of results to skip, for paging through the total reported as num_found (0-1000, default 0).

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 URLA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesThe type of identifier used (ISBN, OCLC, LCCN, OLID, ID). ID is Open Library's internal cover ID.
sizeNoThe desired size of the cover (S, M, or L). Defaults to L.L
valueYesThe value of the identifier.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 booksA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree-form query searched across all fields. Supports Solr syntax, e.g. `subject:cyberpunk AND first_publish_year:[1980 TO 1990]`.
isbnNoSearch by ISBN-10 or ISBN-13.
sortNoResult ordering. Omit for relevance. `new`/`old` order by first publication date, `rating` by average rating.
limitNoMaximum number of results to return (1-50, default 10).
placeNoSearch by a place the book is about.
titleNoSearch by book title.
authorNoSearch by author name.
offsetNoNumber of results to skip, for paging through the total reported as num_found (0-1000, default 0).
personNoSearch by a person the book is about.
subjectNoSearch by subject.
languageNoRestrict results to a language, as a 3-letter MARC code (e.g. eng, fre, spa).
publisherNoSearch by publisher.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 7 tool updatesv1.2.1
    • Changedget_author_info2 fields changed
      • addedInput schema / properties / author_key / minLength
        Added value: +1
      • addedInput schema / properties / author_key / pattern
        Added value: +"^OL\\d+A$"
    • Changedget_author_photo2 fields changed
      • addedInput schema / properties / olid / minLength
        Added value: +1
      • addedInput schema / properties / olid / pattern
        Added value: +"^OL\\d+A$"
    • Changedget_authors_by_name3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 10,
        +  "description": "Maximum number of results to return (1-50, default 10).",
        +  "maximum": 50,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / name / minLength
        Added value: +1
      • addedInput schema / properties / offset
        Added 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"
        +}
    • Changedget_book_by_id2 fields changed
      • changedInput schema / properties / idType / description
        Previous value: -"The type of identifier used (ISBN, LCCN, OCLC, OLID)."New value: +"The type of identifier used (isbn, lccn, oclc, olid). Case-insensitive."
      • addedInput schema / properties / idValue / minLength
        Added value: +1
    • Changedget_book_by_title3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 10,
        +  "description": "Maximum number of results to return (1-50, default 10).",
        +  "maximum": 50,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added 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"
        +}
      • addedInput schema / properties / title / minLength
        Added value: +1
    • Changedget_book_cover4 fields changed
      • changedInput schema / properties / key / description
        Previous 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."
      • addedInput schema / properties / size / default
        Added value: +"L"
      • changedInput schema / properties / size / description
        Previous 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."
      • addedInput schema / properties / value / minLength
        Added value: +1
    • Addedsearch_books
  2. 6 tool updatesv1.0.0
    • First observedget_author_info
    • First observedget_author_photo
    • First observedget_authors_by_name
    • First observedget_book_by_id
    • First observedget_book_by_title
    • First observedget_book_cover

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation4/5

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 Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    A 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
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that enables searching books and authors, fetching editions, browsing subjects, and resolving cover images from Open Library.
    125 npm
    4
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Google Books API, enabling volume details, ISBN lookup, and bookshelf access via natural language queries.
    4 npm
    MIT