Skip to main content
Glama

Search books

book_search
Read-only

Search books, textbooks, manuals, and standards by title, author, or topic; filter by format, language, year, source, and content type, then retrieve hashes for download or details.

Instructions

Search books, textbooks, manuals and standards by title, author or topic, optionally filtered by format, language, content type, source library or year and sorted. Returns one page with hash, format, year, fast_download and metadata. Set include_stats to add public per-file downloads, quality votes, reports, lists and comments. Pass a selected hash to book_download, or to book_details for ISBNs, edition and file problems.

Input Schema

NameRequiredDescriptionDefault
pageNoResult page starting at 1. Defaults to 1
sortNoOptional order: relevance (default), newest or oldest (publication year), largest or smallest (file size), newest_added or oldest_added (date added to the archive), or random
yearNoOptional publication year, for example 2008
limitNoMaximum results from this page. Defaults to 10; raise this before requesting another page
queryNoWords to look for in titles, authors, publishers and other metadata. For article_search, also a DOI, doi: identifier or https://doi.org/ URL. Optional when title, author, publisher or year is set
titleNoOptional phrase the title must contain
authorNoOptional phrase the author must contain
formatNoOptional file extensions, comma-separated, such as epub, pdf, mobi, azw3, djvu, fb2 or cbz. Prefix one with - to exclude it, as in -pdf
sourceNoOptional source libraries, comma-separated, such as lgli (Libgen.li), lgrs (Libgen.rs), zlib, ia, scihub, nexusstc or upload. Prefix one with - to exclude it
contentNoOptional content types, comma-separated: book_nonfiction, book_fiction, book_unknown, book_comic, magazine, standards_document, musical_score, audiobook or other. Prefix one with - to exclude it
languageNoOptional language codes, comma-separated, for example en or en,de. Prefix one with - to exclude it
publisherNoOptional phrase the publisher must contain
include_statsNoInclude public per-file community counts (downloads, quality votes, reports, lists and comments). Adds a statistics lookup for returned file hashes
timeout_secondsNoTotal operation timeout in seconds, including retries. Defaults to 60; maximum 86400
downloadable_onlyNoOnly return files the download tools can fetch: fast downloads, and for article_search also SciDB
search_descriptionsNoAlso match query against descriptions and metadata comments

Output Schema

NameRequiredDescriptionDefault
pageYes
indexNo
limitYes
totalYes
contentNo
matchedYes
resultsYes
languageYes
more_pagesYes
partial_matchesNo
total_is_lower_boundNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed27 schema fields changedv0.7.0
    • addedInput schema / properties / author
      Added value: +{
      +  "description": "Optional phrase the author must contain",
      +  "type": "string"
      +}
    • changedInput schema / properties / content / description
      Previous value: -"Optional content filter: book_fiction, book_nonfiction, book_unknown, book_comic, magazine, or standards_document"New value: +"Optional content types, comma-separated: book_nonfiction, book_fiction, book_unknown, book_comic, magazine, standards_document, musical_score, audiobook or other. Prefix one with - to exclude it"
    • addedInput schema / properties / downloadable_only
      Added value: +{
      +  "description": "Only return files the download tools can fetch: fast downloads, and for article_search also SciDB",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / format
      Added value: +{
      +  "description": "Optional file extensions, comma-separated, such as epub, pdf, mobi, azw3, djvu, fb2 or cbz. Prefix one with - to exclude it, as in -pdf",
      +  "type": "string"
      +}
    • addedInput schema / properties / include_stats
      Added value: +{
      +  "description": "Include public per-file community counts (downloads, quality votes, reports, lists and comments). Adds a statistics lookup for returned file hashes",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / language / description
      Previous value: -"Optional two-letter ISO 639-1 language code, for example en"New value: +"Optional language codes, comma-separated, for example en or en,de. Prefix one with - to exclude it"
    • addedInput schema / properties / publisher
      Added value: +{
      +  "description": "Optional phrase the publisher must contain",
      +  "type": "string"
      +}
    • changedInput schema / properties / query / description
      Previous value: -"Title, author, topic, or (for article_search) a DOI, doi: identifier, or https://doi.org/ URL"New value: +"Words to look for in titles, authors, publishers and other metadata. For article_search, also a DOI, doi: identifier or https://doi.org/ URL. Optional when title, author, publisher or year is set"
    • addedInput schema / properties / search_descriptions
      Added value: +{
      +  "description": "Also match query against descriptions and metadata comments",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / sort
      Added value: +{
      +  "description": "Optional order: relevance (default), newest or oldest (publication year), largest or smallest (file size), newest_added or oldest_added (date added to the archive), or random",
      +  "type": "string"
      +}
    • addedInput schema / properties / source
      Added value: +{
      +  "description": "Optional source libraries, comma-separated, such as lgli (Libgen.li), lgrs (Libgen.rs), zlib, ia, scihub, nexusstc or upload. Prefix one with - to exclude it",
      +  "type": "string"
      +}
    • addedInput schema / properties / title
      Added value: +{
      +  "description": "Optional phrase the title must contain",
      +  "type": "string"
      +}
    • addedInput schema / properties / year
      Added value: +{
      +  "description": "Optional publication year, for example 2008",
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "query"
      -]
    • addedOutput schema / properties / more_pages
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / partial_matches
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "authors": {
      +        "type": "string"
      +      },
      +      "content": {
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "doi": {
      +        "type": "string"
      +      },
      +      "edition": {
      +        "type": "string"
      +      },
      +      "fast_download": {
      +        "type": "boolean"
      +      },
      +      "format": {
      +        "type": "string"
      +      },
      +      "hash": {
      +        "type": "string"
      +      },
      +      "language": {
      +        "type": "string"
      +      },
      +      "possible_issues": {
      +        "type": "boolean"
      +      },
      +      "publisher": {
      +        "type": "string"
      +      },
      +      "size": {
      +        "type": "string"
      +      },
      +      "sources": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": [
      +          "null",
      +          "array"
      +        ]
      +      },
      +      "stats": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "comments": {
      +            "type": "integer"
      +          },
      +          "downloads": {
      +            "type": "integer"
      +          },
      +          "great_quality": {
      +            "type": "integer"
      +          },
      +          "lists": {
      +            "type": "integer"
      +          },
      +          "reports": {
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "downloads",
      +          "great_quality",
      +          "reports",
      +          "lists",
      +          "comments"
      +        ],
      +        "type": [
      +          "null",
      +          "object"
      +        ]
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      },
      +      "year": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "title",
      +      "authors",
      +      "publisher",
      +      "language",
      +      "format",
      +      "size",
      +      "fast_download",
      +      "hash",
      +      "url"
      +    ],
      +    "type": [
      +      "null",
      +      "object"
      +    ]
      +  },
      +  "type": [
      +    "null",
      +    "array"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / content
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / edition
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / results / items / properties / fast_download
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / results / items / properties / possible_issues
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / results / items / properties / sources
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": [
      +    "null",
      +    "array"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / stats
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "comments": {
      +      "type": "integer"
      +    },
      +    "downloads": {
      +      "type": "integer"
      +    },
      +    "great_quality": {
      +      "type": "integer"
      +    },
      +    "lists": {
      +      "type": "integer"
      +    },
      +    "reports": {
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "downloads",
      +    "great_quality",
      +    "reports",
      +    "lists",
      +    "comments"
      +  ],
      +  "type": [
      +    "null",
      +    "object"
      +  ]
      +}
    • addedOutput schema / properties / results / items / properties / year
      Added value: +{
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / items / required
      Previous value: -[
      -  "title",
      -  "authors",
      -  "publisher",
      -  "language",
      -  "format",
      -  "size",
      -  "hash",
      -  "url"
      -]New value: +[
      +  "title",
      +  "authors",
      +  "publisher",
      +  "language",
      +  "format",
      +  "size",
      +  "fast_download",
      +  "hash",
      +  "url"
      +]
    • addedOutput schema / properties / total
      Added value: +{
      +  "type": "integer"
      +}
    • addedOutput schema / properties / total_is_lower_bound
      Added value: +{
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "page",
      -  "language",
      -  "matched",
      -  "limit",
      -  "results"
      -]New value: +[
      +  "page",
      +  "language",
      +  "total",
      +  "more_pages",
      +  "matched",
      +  "limit",
      +  "results"
      +]
  2. First observedv0.1.0

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint=false and destructiveHint=false, so safety is covered. The description adds real behavioral context: results are one page, each page carries hash/format/year/fast_download/metadata, and include_stats triggers an extra statistics lookup for returned hashes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose before filters, return shape and follow-up routing. Dense but each sentence carries information; 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?

For a 16-parameter read-only search tool with an output schema and 100% schema coverage, the description supplies everything an agent needs: scope, filter axes, return shape, the include_stats side effect, and where to route a chosen hash. Return-value details are correctly delegated to the 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%, so the schema already documents all 16 parameters with formats, defaults and exclusion syntax. The description echoes the filter categories (format, language, content type, source, year, sort) and include_stats but adds no syntax or meaning beyond the schema, so baseline 3 applies.

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 a specific verb (search) and resource (books, textbooks, manuals, standards) plus the matching dimensions (title, author, topic) and filter/sort axes. It is clearly distinguishable from article_search and metadata_search siblings by naming book-specific concepts and the hash/download workflow.

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 explicit next-step routing: pass a selected hash to book_download, or to book_details for ISBNs, edition and file problems. It does not state when NOT to use this tool (e.g. use article_search for DOIs), so it falls short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.