turath-mcp
Click on "Deploy 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., "@turath-mcpsearch for books by Ibn Taymiyyah"
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.
turath-mcp
MCP server for turath.io — access thousands of classical Arabic and Islamic books via the Model Context Protocol.
Built on the public turath.io API, maintained by Nuqayah.
Features
8,500+ books — classical Islamic texts: tafsir, hadith, fiqh, usul, Arabic language, biography, history, and more
No API key required — zero configuration, works out of the box
Full-text search — search across the entire catalog by keyword, author, category, or century
Page-level reading — retrieve any page from any book as plain text (with chapter headings)
Chapter navigation — every book includes a complete index of chapters with page numbers
Author biographies — comprehensive metadata including full name, death year, and biographical notes
Related MCP server: Islamic Content MCP Server
Tools
turath_get_book_info
Get book metadata, chapter index, and page map.
Parameter | Required | Description |
| ✅ | Turath.io book ID (e.g., |
Example:
turath_get_book_info({ book_id: 9953 })turath_get_page
Get the text content of a specific page.
Parameter | Required | Description |
| ✅ | Turath.io book ID |
| ✅ | Printed page number to retrieve |
Example:
turath_get_page({ book_id: 9953, page: 20 })turath_search
Search books in the turath.io catalog by keyword.
Parameter | Required | Description |
| ✅ | Search keyword(s) in Arabic or English |
| ❌ | Filter by category ID |
| ❌ | Filter by author ID |
| ❌ | Restrict search to a specific book ID |
| ❌ | Paginate results (page number) |
Example:
turath_search({ query: "الرسالة" })turath_get_author
Get author biography and metadata.
Parameter | Required | Description |
| ✅ | Turath.io author ID (e.g., |
Example:
turath_get_author({ author_id: 125 })turath_get_book_file
Get full book JSON dump. Only available for books that have a JSON file on the CDN.
Parameter | Required | Description |
| ✅ | Turath.io book ID |
Requirements
Node.js >= 22
An MCP-compatible client (OpenCode, Claude Code, Copilot, etc.)
Installation
Option 1: Clone & run
git clone https://github.com/opin22/turath-mcp
cd turath-mcp
npm install
npm startOption 2: Use with OpenCode
Add to your opencode.json:
{
"mcp": {
"turath-mcp": {
"type": "local",
"command": ["npx", "--yes", "tsx", "/path/to/turath-mcp/src/index.ts"]
}
}
}Option 3: Use with Claude Code / other MCP clients
Configure it in your MCP settings file:
{
"mcpServers": {
"turath-mcp": {
"command": "npx",
"args": ["--yes", "tsx", "/path/to/turath-mcp/src/index.ts"]
}
}
}How to find book IDs
Go to app.turath.io
Search for a book
Open a book and look at the URL:
https://app.turath.io/book/9953The number (
9953) is the book ID
Alternatively, use turath_search to find books by name and get their IDs from the results.
Ethics & Rate Limiting
This server wraps a public, free API. Please be respectful:
Avoid hammering the API with concurrent requests
Cache results when possible
If you build something that generates significant traffic, consider self-hosting
Data Source
All content is served from turath.io, a project by Nuqayah. The books are digitized classical Islamic texts — the vast majority are public domain.
License
MIT
Available Tools
5 toolsturath_get_authorB
Get author biography and metadata from turath.io
| Name | Required | Description | Default |
|---|---|---|---|
| author_id | Yes | Turath.io author ID (e.g., 125 for Abd al-Karim al-Qushayri) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits like read-only nature, authentication needs, or error handling. It only says 'Get', implying read, but no further details about response content or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence of 8 words with zero waste. It efficiently conveys the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (single parameter, no output schema), the description is adequate. It could mention what happens on failure or what metadata includes, but for a simple get, it is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the one parameter (author_id) has a clear description with an example. The tool description adds no additional meaning, meeting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'author biography and metadata', and the source 'from turath.io'. It effectively distinguishes from sibling tools like turhat_get_book_info or turath_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no context about when it is appropriate. It merely states what it does.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turath_get_book_fileB
Get full book JSON dump (may not be available for all books)
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | Turath.io book ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It only warns about availability but does not disclose other behaviors such as error handling, response format, or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that conveys the essential information without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description is minimal. It does not fully explain the return value (JSON dump) or constraints beyond availability, leaving gaps for an agent to understand the tool's behavior completely.
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% with a clear 'Turath.io book ID' description for the parameter. The tool description adds no additional parameter semantics, so the 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 clearly states the action ('Get full book JSON dump') and the resource (the book file). It distinguishes from siblings like turath_get_book_info (metadata) and turath_get_page (single page) by specifying it returns the full dump.
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 mentions 'may not be available for all books' but provides no explicit guidance on when to use this tool versus alternatives like turath_get_book_info or turath_get_page. No usage context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turath_get_book_infoA
Get book metadata, chapter index, and page map from turath.io
| Name | Required | Description | Default |
|---|---|---|---|
| book_id | Yes | Turath.io book ID (e.g., 9953 for al-Risala al-Qushayriyya) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It states it is a 'get' operation (read-only), but does not disclose safety, auth requirements, rate limits, or error handling. With no annotation support, this is a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. Every component (verb, resource, source) serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description adequately explains the return content (metadata, chapter index, page map). No further context is needed given the tool's simplicity.
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% with one parameter (book_id) described as a number with an example. The description does not add additional meaning beyond what the schema already provides, so baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get' and the resource 'book metadata, chapter index, and page map' from turath.io. It distinguishes from sibling tools like turath_get_author (different resource) and turath_get_page (different 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?
The description implies usage for obtaining book info but does not explicitly state when to use this tool vs alternatives (e.g., turath_get_book_file for file downloads). No exclusions or context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turath_get_pageB
Get the text content of a specific page from a book
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page number to retrieve (corresponds to printed page) | |
| book_id | Yes | Turath.io book ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It indicates a read operation but does not disclose response format, pagination, authentication needs, or any constraints. This is insufficient for an AI agent to anticipate behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, very concise, but it omits important details that would merit a few more sentences. Conciseness is achieved at the expense of completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (2 params, no output schema), the description is only partially complete. It explains the core function but lacks behavioral context and usage guidance, which are needed for effective tool selection.
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%; both parameters have descriptions in the schema. The tool description adds no additional semantics beyond stating the tool's purpose. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'text content of a specific page from a book', which is distinct from sibling tools like turhat_get_author or turhat_search. It unambiguously identifies the tool's function.
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?
No explicit guidance on when to use this tool vs alternatives. The usage is implied by the description, but no comparison or exclusion criteria are provided. Sibling tools are present but not referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
turath_searchC
Search books on turath.io catalog by keyword
| Name | Required | Description | Default |
|---|---|---|---|
| book | No | Restrict search to a specific book ID | |
| page | No | Page number of search results (pagination) | |
| query | Yes | Search keyword(s) in Arabic or English | |
| author | No | Filter by author ID | |
| category | No | Filter by category ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It fails to mention key traits such as pagination (hinted by the page parameter), result limits, handling of partial matches, or whether the keyword is required. The description adds negligible transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core action. It could be slightly more informative without becoming verbose, but it avoids irrelevant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has five parameters, no output schema, and no annotations. The description does not explain pagination behavior, result structure, or how filters interact, leaving significant gaps for effective agent usage.
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% with each parameter described in the schema. The description adds no extra meaning beyond the schema, so a 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 clearly identifies the tool as a search over the turath.io catalog by keyword, distinguishing it from sibling tools that retrieve specific entities. However, it omits that the tool also supports filtering by author, category, and book ID, slightly narrowing the 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?
No explicit guidance on when to use this tool versus alternatives (e.g., when to search vs. fetch specific book info). The description only states the basic action, leaving the agent without context for proper selection.
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.
5 tool updates
v1.0.0- First observed
turath_get_author - First observed
turath_get_book_file - First observed
turath_get_book_info - First observed
turath_get_page - First observed
turath_search
TDQS
Scored across 5 tools
Each tool targets a distinct aspect of the domain (author, book file, book info, page content, catalog search) with no functional overlap.
Four tools use a consistent 'turath_get_' pattern, but 'turath_search' deviates by omitting the 'get_' prefix, causing a minor inconsistency.
Five tools is well-scoped for a cultural heritage book server, covering core read operations without being too few or excessive.
The set covers essential read operations (search, book info, page content, author info, full file dump), though a browse or list tool could be a minor addition.
Maintenance
Related MCP Connectors
Quran: Quran API Service with 90+ different languages and 400+ translations.
Search and retrieve Quran ayahs, tafsir commentary, hadith, and detailed hadith records.
Complete classical & world literature — search + cite exact passages, facing sources, 50+ languages.
Search 15K rare pre-modern texts translated to English: philosophy, religion, science, literature.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides AI assistants with comprehensive access to Islamic resources including Quran verses with translations, Tafsir commentary, Hadith collections, and audio recitations. Enables users to explore Islamic texts, get daily inspiration, and access scholarly interpretations through natural language queries.189 npm10MIT
- FlicenseCqualityCmaintenanceConnects AI assistants to authentic Islamic content including Qur'an, Hadith, and resources in multiple languages via over 80 tools.128113 npm-
- AlicenseNot gradedqualityCmaintenanceMCP server to search and retrieve passages from a corpus of 7,872 classical Islamic books via the Sahifah API, with full citations and mu'tabar filtering.6 npmMIT
- AlicenseNot gradedqualityBmaintenanceProvides source-grounded Christian research material with exact passages, provenance, and stable citations via a REST API.MIT