reknihy-mcp
Provides read-only access to a WooCommerce-powered book catalog, enabling search for books by title, author, or ISBN, filtering by availability, category, and price, retrieving product details and exact ISBN matches, and listing product categories.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@reknihy-mcpFind in-stock books by Karel Čapek under 250 CZK."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
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 buildMCP 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_bookssearches 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_bookretrieves a product by the numeric ID returned fromsearch_books.find_book_by_isbnnormalizes an ISBN-10 or ISBN-13 and returns an exact catalog match when available.list_categorieslists public product categories that can be passed back tosearch_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 tohttps://reknihy.czREKNIHY_TIMEOUT_MS: request timeout in milliseconds; defaults to15000REKNIHY_CACHE_TTL_MS: cache lifetime in milliseconds; defaults to60000and cannot exceed300000REKNIHY_MAX_CONCURRENT: maximum concurrent upstream requests; defaults to2and cannot exceed4
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 checknpm 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 toolsfind_book_by_isbnFind a Reknihy book by ISBNARead-onlyIdempotent
Find an exact ISBN-10 or ISBN-13 match in the public Reknihy.cz catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| isbn | Yes | ISBN with or without hyphens |
TDQS
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.
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.
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.
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.
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.
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 detailARead-onlyIdempotent
Get book details by the numeric product ID returned from search_books.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Reknihy.cz product ID |
TDQS
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.
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.
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.
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.
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.
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 categoriesARead-onlyIdempotent
List public catalog categories. A category slug or ID can be passed to search_books.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| perPage | No | Categories per page | |
| hideEmpty | No | Hide empty categories |
TDQS
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.
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.
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.
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.
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.
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 booksARead-onlyIdempotent
Search the public Reknihy.cz catalog. Use author for exact author searches. Returns price, availability, ISBN, image, categories, and product URL.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number | |
| order | No | Sort direction | desc |
| query | No | Book title, ISBN, or other search text | |
| author | No | Exact author name; use for requests asking for books by an author | |
| orderBy | No | Field used to sort results | date |
| perPage | No | Results per page | |
| category | No | Category ID or slug | |
| maxPrice | No | Maximum price in CZK | |
| minPrice | No | Minimum price in CZK | |
| inStockOnly | No | Return only books that are in stock |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
Four tools is well-scoped for a read-only catalog search server. Each tool has a clear role, and none feel redundant or unnecessary.
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
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
Search books and authors, fetch editions, browse subjects, and resolve cover images.
Search ~8.5M products from 2,500+ Central European e-shops. Semantic, keyword, GTIN lookup.
Read-only product discovery, merchant trust, shipping and returns for SVV-Schatzoekers.
Read-only Tudetic product search and vehicle compatibility with safe public pricing.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables users to search and explore a bookstore catalog including books, authors, categories, stock, prices, and recommendations through natural language.
- FlicenseNot gradedqualityAmaintenanceProvides 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.
- AlicenseNot gradedqualityCmaintenanceEnables 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.5MIT
- AlicenseNot gradedqualityCmaintenanceEnables searching and retrieving Project Gutenberg books by title, author, topic, and popularity, along with book details and download statistics through the Gutendex API.4MIT
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/birosrichard/reknihy-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server