Skip to main content
Glama
birosrichard

reknihy-mcp

by birosrichard

Reknihy MCP — Unofficial

An unofficial, read-only Model Context Protocol server, independently developed as an interoperability and convenience layer for end-user queries against publicly available information in the Reknihy.cz book catalog.

The server primarily uses Reknihy's public WooCommerce Store API and a publicly accessible catalog endpoint used to resolve author taxonomy data. It does not require an account or API key and does not access customer accounts, carts, orders, authentication-protected data, or private data.

IMPORTANT

This project is not affiliated with, sponsored by, or endorsed by Reknihy.cz. The upstream API may change, restrict access, or return incomplete catalog data at any time, which may cause this server to stop working.

Features

  • Search by title, author, ISBN, or other catalog text

  • Filter by availability, category, and price

  • Sort and paginate catalog results

  • Retrieve product details and exact ISBN matches

  • Browse categories that can be reused as search filters

  • Return normalized prices, stock information, images, and product links

Related MCP server: catalogue-api

Requirements

  • Node.js 20 or later

  • npm

Installation

git clone https://github.com/birosrichard/reknihy-mcp
cd reknihy-mcp
npm ci
npm run build

MCP client configuration

Add the server to your MCP client configuration. Replace the path with the absolute path to the cloned repository:

{
  "mcpServers": {
    "reknihy": {
      "command": "node",
      "args": ["/absolute/path/to/reknihy-mcp/dist/index.js"]
    }
  }
}

The server communicates over stdio. Rebuild and restart it after changing the source code.

Tools

  • search_books searches the public catalog and returns price, availability, ISBN, image, category, and product URL data. It supports pages 1–20, stock and category filters, exact author filtering, price limits, and sorting.

  • get_book retrieves a product by the numeric ID returned from search_books.

  • find_book_by_isbn normalizes an ISBN-10 or ISBN-13 and returns an exact catalog match when available.

  • list_categories lists public product categories that can be passed back to search_books, with pages limited to 1–20.

All tools are declared read-only, non-destructive, and idempotent.

Configuration

The following environment variables are optional:

  • REKNIHY_BASE_URL: API origin; defaults to https://reknihy.cz

  • REKNIHY_TIMEOUT_MS: request timeout in milliseconds; defaults to 15000

  • REKNIHY_CACHE_TTL_MS: cache lifetime in milliseconds; defaults to 60000 and cannot exceed 300000

  • REKNIHY_MAX_CONCURRENT: maximum concurrent upstream requests; defaults to 2 and cannot exceed 4

The server reads these values from its process environment; it does not load a .env file. All numeric values must be positive integers.

Example prompts

  • "Find in-stock books by Karel Čapek under 250 CZK."

  • "Look up this ISBN and summarize the listing."

  • "List history categories and search the most relevant one."

Development

npm ci
npm run dev
npm run check

npm run check compiles the TypeScript project and runs the test suite. Tests use mocked HTTP responses and do not require access to Reknihy.

Responsible use and limitations

This project does not provide a bulk catalog export and does not intentionally replicate or maintain a persistent copy of Reknihy's catalog or database. Its bounded, short-lived in-memory cache exists only to reduce repeated identical requests.

Use reasonable request rates and comply with Reknihy's website terms, robots.txt where technically applicable, and applicable law. Do not use this project to circumvent authentication, CAPTCHA, rate limits, bot protection, Cloudflare protections, or any other technical access control. If Reknihy denies or challenges a request, the server reports the restriction instead of attempting to bypass it.

The implementation is limited to public catalog API paths selected to avoid areas known to be disallowed by robots.txt. Because robots.txt and upstream behavior can change—and the file may itself be unavailable behind a security challenge—users should verify its current contents where applicable. This project does not treat robots.txt as an authorization mechanism and does not work around access restrictions to inspect it.

Catalog data, prices, stock levels, images, trademarks, and other upstream content remain subject to the rights of their respective owners and may become stale immediately after a tool call. This project is not a supported commercial API and does not guarantee catalog completeness.

Contributing

See CONTRIBUTING.md.

License

The project's source code is licensed under the ISC License. The ISC License applies only to this project's source code. Upstream product data, images, trademarks, and other content remain subject to the rights of their respective owners.

Available Tools

4 tools
find_book_by_isbnFind a Reknihy book by ISBNA
Read-onlyIdempotent

Find an exact ISBN-10 or ISBN-13 match in the public Reknihy.cz catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
isbnYesISBN with or without hyphens

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety profile is covered. The description adds useful scope context ('public catalog') and exact-match semantics, but does not disclose behavior like no-match results or return format. This is acceptable given the strong annotation coverage.

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, front-loaded with the operation and scope, with zero filler. Every phrase contributes meaning, and the description is immediately scannable.

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 one-parameter, read-only, idempotent lookup with a clear resource and sibling context, the description is sufficient. It omits what happens when no match is found, but the operation is simple enough that this is a minor gap rather than a blocking one.

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 schema provides 100% parameter coverage for the single isbn parameter, including hyphen flexibility. The description adds the ISBN-10/ISBN-13 format constraint and reinforces the exact-match intent, which is a small but genuine semantic increment beyond the schema.

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 ('Find'), a precise resource ('public Reknihy.cz catalog'), and an explicit qualifier ('exact ISBN-10 or ISBN-13 match') that distinguishes it from a broader search. An agent can immediately tell this tool is for precise ISBN lookup rather than fuzzy queries.

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 phrase 'exact ISBN-10 or ISBN-13 match' gives a clear trigger condition: use this when a precise ISBN is known. It does not explicitly name alternatives like search_books for partial matches, but the exact-match language provides clear context without needing an exclusion list.

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

get_bookGet Reknihy book detailA
Read-onlyIdempotent

Get book details by the numeric product ID returned from search_books.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesReknihy.cz product ID

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior, so the description does not need to restate those. It adds a useful provenance detail about the ID source, but says nothing about return shape or error behavior, which is acceptable but not exceptional for a simple getter.

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 concise sentence that front-loads the action and immediately identifies the source of the required ID. There is no redundant or filler content.

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 single-parameter lookup tool with annotations covering safety and idempotency, the description is nearly complete. It does not detail the shape of the returned book details, but the title and description communicate the intended result sufficiently.

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 already fully documents the 'id' parameter with type, bounds, and meaning. The description adds value by specifying that this ID is returned from search_books, which clarifies how an agent should obtain and use it.

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') and resource ('book details'), and anchors the lookup key to 'the numeric product ID returned from search_books.' This clearly differentiates it from find_book_by_isbn, which would use an ISBN instead.

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?

It states the intended path: use this tool with a product ID that came from search_books. This gives clear context, though it does not explicitly exclude when to use find_book_by_isbn as an alternative.

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

list_categoriesList Reknihy categoriesA
Read-onlyIdempotent

List public catalog categories. A category slug or ID can be passed to search_books.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
perPageNoCategories per page
hideEmptyNoHide empty categories

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds the 'public' scope, implying no special authorization is needed, and indicates the output is intended for downstream use with search_books. No contradictions with annotations were found.

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 short sentences with no fluff. The main purpose is front-loaded, and the second sentence adds valuable cross-tool context. Every word earns its place.

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 simple read-only listing tool, the description plus the complete input schema and rich annotations cover the essential information. The tool's output purpose is hinted at by noting that slug/ID can be passed to search_books, and no output schema means the description does not need to explain return fields in detail.

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 page, perPage, and hideEmpty are already fully documented in the input schema. The description adds no parameter-specific meaning, but it does not need to because the schema handles it. Baseline score 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 states a specific verb and resource: 'List public catalog categories.' It also differentiates from sibling tools by explaining that a category slug or ID can be passed to search_books, clarifying the role of this tool in the larger 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 useful context by explicitly linking the output to search_books: 'A category slug or ID can be passed to search_books.' This implies the tool is used to discover valid category identifiers before searching. It lacks an explicit when-not-to-use statement, 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.

search_booksSearch Reknihy booksA
Read-onlyIdempotent

Search the public Reknihy.cz catalog. Use author for exact author searches. Returns price, availability, ISBN, image, categories, and product URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
orderNoSort directiondesc
queryNoBook title, ISBN, or other search text
authorNoExact author name; use for requests asking for books by an author
orderByNoField used to sort resultsdate
perPageNoResults per page
categoryNoCategory ID or slug
maxPriceNoMaximum price in CZK
minPriceNoMinimum price in CZK
inStockOnlyNoReturn only books that are in stock

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover read-only, open-world, idempotent, non-destructive safety. The description adds useful behavioral context by listing return fields and noting the catalog is public, which implies no authentication needed. It does not disclose pagination or result structure, but annotations reduce the burden.

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 sentences with no waste. The action and scope are front-loaded, followed by a useful parameter tip and return-field list. Every sentence earns its place.

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 read-only search tool with rich schema coverage and safety annotations, the description captures the essential return fields and public scope. Since there is no output schema, the lack of explicit list/pagination structure is a minor gap, but overall the definition is adequate.

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 coverage is 100%, and the one parameter hint in the description ('Use author for exact author searches') largely duplicates the schema's own author description. The description adds no new parameter semantics beyond the already thorough schema.

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 and resource: 'Search the public Reknihy.cz catalog.' It clearly conveys the tool's purpose and differentiates from siblings by emphasizing public catalog search rather than specific book retrieval. The mention of author exact search and listed return fields further clarifies scope.

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?

Provides clear parameter usage guidance: 'Use author for exact author searches.' However, it does not explicitly state when to prefer this tool over siblings like find_book_by_isbn or get_book, leaving tool-selection context implied.

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

TDQS

A4.3/5.0
Disambiguation4/5

Each tool targets a distinct purpose: broad search, detail lookup by ID, exact ISBN lookup, and category listing. search_books and find_book_by_isbn could be confused since both return books, but the descriptions clearly separate keyword/author search from exact ISBN matching.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern: search_books, get_book, find_book_by_isbn, list_categories. The naming is predictable and clearly communicates each action.

Tool Count5/5

Four tools is well-scoped for a read-only catalog search server. Each tool has a clear role, and none feel redundant or unnecessary.

Completeness5/5

The surface covers the full catalog search workflow: discover categories, search books, look up details by ID, and find exact matches by ISBN. For a public catalog querying server, there are no meaningful gaps.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Provides a read-only API over a book catalogue, offering tools to search books, retrieve book details and series, and inspect provenance and source agreement data.
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables searching for books by title, author, or keyword, retrieving edition details by ISBN, and accessing author profiles and canonical work records through the Open Library API.
    5
    MIT

Latest Blog Posts

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/birosrichard/reknihy-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server