Skip to main content
Glama
EngDawood

islamweb-mcp

by EngDawood

islamweb-mcp

An MCP (Model Context Protocol) server, written in TypeScript, for fetching and extracting content from islamweb.net's digital library. It ships with a ready-made, resumable crawler for all five Arabic dictionaries under islamweb's library subject 73 ("معاجم اللغة") — see src/books.ts:

key

title

bookId

ids

lisan-al-arab

لسان العرب (ابن منظور)

122

1..9305

al-qamus-al-muhit

القاموس المحيط (الفيروزآبادي)

123

1..8553

al-nihaya-fi-gharib-al-hadith

النهاية في غريب الحديث والأثر (ابن الأثير)

121

1..4338

maqayis-al-lugha

معجم مقاييس اللغة (ابن فارس)

124

1..5102

mukhtar-al-sihah

مختار الصحاح (الرازي)

125

1..3509

Each is extracted to JSON so it can feed a downstream tool for looking up word definitions. A scheduled GitHub Action runs the crawl every 6 hours, resuming and committing new data automatically — see "Keeping the data fresh" below.

How the site works (reverse-engineered)

Each dictionary page lives at https://www.islamweb.net/ar/library/content/{bookId}/{id} (the trailing Arabic slug is decorative — the server resolves the page from the numeric id alone). Every page's HTML contains:

  • <div id="pagebody"> — the entry text without diacritics.

  • <div id="pagebody_thaskeel"> — the same text fully vocalized (tashkeel).

  • ol#topPath — a breadcrumb (لسان العرب › chapter, e.g. حرف الهمزة › the current headword, e.g. أبأ).

  • <title> — contains the part/volume number (الجزء رقم N).

  • a.topnextbutton / a.topprevbutton — links to the neighboring ids, absent at the very first/last page of the book.

islamwebClient.ts fetches and parses one page into a LibraryEntry:

{
  bookId, id, url, title, part,
  chapter, chapterId, lemma, breadcrumb,
  printedPage,       // the "[ ص: NN ]" printed page marker, if present
  text,              // plain text
  textTashkeel,      // fully vocalized text
  author, nextId, prevId, fetchedAt
}

Each page is one lexical section, which may cover one root or several related words — it is not pre-split into individual dictionary entries. That finer-grained segmentation (splitting a page's text into per-word definitions) is left to whatever tool consumes this JSON, since it needs real Arabic morphological logic to do well.

Related MCP server: mcp-server-wayback

Tools exposed over MCP

Tool

Purpose

islamweb_fetch_entry

Fetch + parse a single {bookId, id} page.

islamweb_lisan_al_arab_info

Returns the known bookId/id-range for Lisan al-Arab and this server's default output paths.

islamweb_list_dictionaries

Lists all 5 known dictionaries (bookId, key, title, author, id range).

islamweb_start_crawl

Starts a background, resumable crawl over an id range; returns a jobId immediately.

islamweb_crawl_status

Poll a jobId (or list all jobs from this server process).

islamweb_crawl_stats

Inspect a JSONL output file on disk (entry count, highest id) — works even after a server restart.

islamweb_compile_json

Compile the JSONL file into one sorted, pretty-printed JSON array.

islamweb_search

Substring-search a JSONL file's lemma/text and return snippets.

Why JSONL + a compile step

The crawler appends one JSON object per line to a .jsonl file as soon as each page is fetched, instead of holding everything in memory. That makes a 9305-page crawl resumable: if it's interrupted, re-running with the same outFile reads back the ids already present and only fetches what's missing. islamweb_compile_json / compileJsonlToJson turns that JSONL file into a single .json array once you want a normal JSON file.

Running an extraction

You don't have to drive this through an MCP client — there's a standalone CLI that does the same thing directly. To crawl one dictionary:

npm install
npm run build
node dist/cli.js crawl-book --key=al-qamus-al-muhit --concurrency=6 --delay=100

(key is any key from the table above, or a raw bookId.) To crawl all five, time-boxed so it fits in e.g. a CI job:

node dist/cli.js crawl-all-dictionaries --minutes=320 --concurrency=6 --delay=100

This prints progress, retries transient failures with exponential backoff (skipping immediately on a 404), and writes data/<key>.jsonl + data/<key>.json (sorted by id) for each book. Re-running the same command resumes where it left off — it skips ids already present in that book's .jsonl file, and crawl-all-dictionaries skips whole books that are already fully fetched. --minutes stops dispatching new fetches once the budget is spent (in-flight ones still finish) so a later run can pick up the rest.

Keeping the data fresh: the scheduled GitHub Action

.github/workflows/crawl-dictionaries.yml runs crawl-all-dictionaries every 6 hours (also triggerable by hand via "Run workflow"), then commits and pushes any new/changed files under data/ back to this branch. Because the crawl is resumable and file-based:

  • The first several runs make real progress (fetching whatever's still missing across all 5 dictionaries — roughly 31,000 pages total).

  • Once everything has been fetched, later runs finish in well under a minute (they just confirm every id is already present) and push nothing.

  • If islamweb adds pages to a book (a larger idto on the bookslist page), bump that book's endId in src/books.ts and the next scheduled run picks up the new ids automatically.

The job is time-boxed (--minutes=320 inside a 350-minute job timeout) so it always has room to compile and commit before GitHub's own runner limits kick in, and concurrency: group: crawl-dictionaries makes sure two runs never crawl the same files at once.

Using it as an MCP server

npm run build
npm start   # speaks MCP over stdio

Point any MCP client (Claude Desktop, Claude Code, etc.) at node /path/to/islamweb-mcp/dist/index.js. Example claude_desktop_config.json entry:

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

Set ISLAMWEB_DATA_DIR to change where the default Lisan al-Arab .jsonl/.json files live (defaults to ./data).

Notes on politeness

robots.txt on islamweb.net only disallows /newislamweb/, and /ar/library/content/... is not restricted. The crawler still defaults to a modest concurrency (3) and a per-request delay (250ms) to avoid hammering the site; both are configurable.

Available Tools

8 tools
islamweb_compile_jsonCompile JSONL crawl output into one JSON arrayA

Reads a JSONL dataset file (one entry per line) and writes it out as a single sorted, pretty-printed JSON array file. Run this once a crawl has finished (or whenever you want a fresh snapshot).

ParametersJSON Schema
NameRequiredDescriptionDefault
jsonFileNodefaults to data/lisan-al-arab.json
jsonlFileNodefaults to data/lisan-al-arab.jsonl

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It transparently describes the input-to-output transformation, sorting, and pretty-printing. It does not mention overwriting an existing output file or error behavior, but the 'fresh snapshot' phrasing implies regeneration, making this a solid but not exhaustive disclosure.

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 tight sentences with no filler. The core transformation is front-loaded, and the usage guidance is a natural second sentence.

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 tool with two optional parameters and no output schema, the description covers the essential context: input format, output format, sorting, and when to run it. Minor details like return value and overwrite behavior are absent but not critical for correct invocation.

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 parameter names plus default-value descriptions make the meaning of jsonlFile and jsonFile clear enough. The description adds no further parameter-specific semantics, so the baseline score of 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?

The description states a specific operation: read a JSONL file and write a sorted, pretty-printed JSON array. It adds meaningful details like 'one entry per line' and clearly differentiates this post-processing tool from the crawl/search siblings.

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 timing guidance: run after a crawl finishes or whenever a fresh snapshot is needed. It does not explicitly discuss alternatives or exclusions, but the tool's role is unambiguous enough that no direct sibling competes with it.

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

islamweb_crawl_statsInspect an output JSONL file on diskA

Reads a JSONL dataset file directly from disk (independent of any in-memory job) and reports how many entries it has and the highest id fetched so far. Useful after restarting the MCP server to see how far a previous crawl got.

ParametersJSON Schema
NameRequiredDescriptionDefault
outFileNodefaults to data/lisan-al-arab.jsonl

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. It states the operation is read-only ('Reads... reports'), and notes it is independent of any in-memory job, which is a key behavioral trait. While it does not detail error handling or file-missing behavior, the read-only nature is clearly implied by the verb and the context.

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 with no waste. The core function and output are stated first, followed by a practical use case. It is front-loaded and 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?

The description explains what the tool returns (entry count and highest id), which effectively covers the output since there is no output schema. It also provides the primary use case and notes independence from in-memory state. Minor gaps like error conditions or file assumptions are not critical for a simple read tool with one optional parameter.

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 schema description coverage is 100% for the only parameter (outFile), which already specifies its default. The tool description does not add any additional meaning about the parameter beyond what the schema provides. Since the schema fully covers it, the description adds no extra value here, matching the baseline for high coverage.

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 reads a JSONL dataset file from disk and reports entry count and highest id fetched. It explicitly distinguishes itself from in-memory operations and names a specific use case (checking progress after server restart), which differentiates it from sibling tools like islamweb_crawl_status.

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 a clear context of when to use it ('after restarting the MCP server to see how far a previous crawl got'). It does not explicitly mention alternatives or when not to use it, but the stated scenario is specific enough for an agent to understand its primary purpose.

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

islamweb_crawl_statusCheck crawl job statusA

Returns progress (done/total/failed) for a crawl job started with islamweb_start_crawl.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdNoomit to list all known jobs from this server session

TDQS

A3.9/5.0
Behavior3/5

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 states the return contents (done/total/failed) and the relationship to start_crawl, which is useful, but it does not explicitly say whether the call is read-only, how current the data is, or what happens for unknown or expired job IDs.

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 no filler. It states the return value and the relevant source tool immediately, making it easy for an agent to parse quickly.

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 one-parameter status tool with no output schema, the description is largely complete: it names the return fields and the origin of the jobId. It does not repeat the optional omit behavior from the schema, which is acceptable, but it could briefly mention that omitting jobId lists all jobs to be fully self-contained.

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 single jobId parameter, so the baseline is 3. The description adds value by linking the jobId to a crawl job started with islamweb_start_crawl, clarifying where the ID comes from and how it should be used beyond the schema's 'omit to list all known jobs' note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns progress counts (done/total/failed) for a crawl job tied to islamweb_start_crawl, giving a specific verb, resource, and scope. It does not explicitly distinguish itself from the sibling islamweb_crawl_stats, though the phrasing implies a job-specific status check rather than aggregate statistics.

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 implies when to use it: after starting a crawl with islamweb_start_crawl, to check that job's progress. This is clear contextual guidance, but it does not explicitly state when not to use it or point to an alternative like islamweb_crawl_stats for different needs.

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

islamweb_fetch_entryFetch one islamweb library pageA

Fetches a single content page from islamweb.net's library (https://www.islamweb.net/ar/library/content/{bookId}/{id}) and returns it parsed as JSON: title, chapter/lemma breadcrumb, plain text, fully-vocalized (tashkeel) text, and next/prev ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYescontent id within the book (the number in the page URL)
bookIdYesislamweb library book id, e.g. 122 for Lisan al-Arab

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description must bear the full burden of behavioral disclosure. It states that the tool fetches and parses content, and lists the return fields, which conveys the core action. However, it does not explicitly confirm that the operation is read-only, describe error handling, mention rate limits, or note any authentication requirements. This is adequate for a simple fetch but lacks explicit safety and side-effect disclosures.

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, well-structured sentence with no redundant words. It front-loads the purpose ('Fetches a single content page'), includes the URL for clarity, and lists the output fields. Every element contributes to the agent's understanding, making it concise and efficient.

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 fetch tool with no output schema, the description provides sufficient context: it identifies the resource, the input parameters' role, and the structure of the output (fields). It does not specify data types for the returned fields or cover error scenarios, but these are minor gaps for a straightforward retrieval operation. The description is complete enough for correct tool invocation.

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 input schema already documents both parameters (bookId and id) with examples. The description merely repeats the URL pattern that references these parameters, adding no new semantic meaning. This meets the baseline of 3 but does not enhance understanding 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 states a specific verb ('Fetches') and a clear resource ('a single content page from islamweb.net's library') with a concrete URL template. It also enumerates the exact JSON fields returned, distinguishing it from siblings like islamweb_start_crawl (which initiates crawls) and islamweb_search (which searches). This makes the tool's purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no explicit guidance on when to use this tool versus any alternative. It does not mention that it should be used for retrieving a specific page by ID, nor does it contrast with sibling tools or state prerequisites. Usage context is only implied by the tool name and description, leaving an agent to infer applicability.

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

islamweb_lisan_al_arab_infoLisan al-Arab crawl coordinatesA

Returns the known bookId and id range (1..9305) for لسان العرب لابن منظور on islamweb.net, plus the paths this server uses for its extracted JSON/JSONL dataset.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool returns known bookId, id range, and server paths, which is helpful. However, it doesn't describe whether this is a read-only operation, whether it performs any network calls, or what the exact response format looks like. The description is honest but lacks behavioral depth.

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, well-structured sentence that front-loads the key output (bookId and id range) and then adds the dataset paths. Every word earns its place, and it is appropriately sized for a zero-parameter metadata tool.

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 zero-parameter metadata lookup, the description is nearly complete. It tells the agent what it will get back (bookId, id range, paths). The only gap is the lack of an explicit statement about the return format or whether this is a static/local lookup, but given the simplicity of the tool, this is a minor omission.

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 tool has 0 parameters, so the schema is trivially complete. The description adds value by explaining what the tool returns (bookId, id range, paths), which is the only meaningful semantic content. With no parameters, a baseline of 4 is appropriate, and the description does a good job of explaining the tool's output.

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 returns the known bookId and id range for a specific dictionary on islamweb.net, plus the paths used for extracted JSON/JSONL datasets. It names the exact resource (لسان العرب لابن منظور) and the specific data returned, distinguishing it from sibling tools that fetch entries, list dictionaries, or manage crawls.

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 implies this is a metadata/coordinate lookup tool for a specific dictionary, useful before starting a crawl or fetching entries. It doesn't explicitly state when to use it versus alternatives, but the context signals (0 params, no output schema) and sibling names make the use case reasonably clear. It could be improved by explicitly saying 'use this to get crawl coordinates before starting a crawl.'

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

islamweb_list_dictionariesList known islamweb dictionariesA

Returns every dictionary this server knows about under islamweb's library subject 73 (معاجم اللغة): bookId, key, title, author, and id range. This is the registry the GitHub Actions crawl workflow and the crawl-all-dictionaries CLI command iterate over.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It mentions the scope (subject 73) and the fact that it returns all dictionaries, which implies a read-only operation, but it does not explicitly state that, nor does it mention error conditions, rate limits, or any impacts. It adds some context but leaves room for improvement.

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 concise sentences, front-loading the primary purpose and the returned fields, then adding a relevant usage context. There is no redundant phrasing or unnecessary detail.

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 (no parameters, no output schema), the description covers the essential information: the resource, the fields returned, and why it is used (as a registry for crawls). It does not mention pagination or error handling, but for a straightforward list operation this is likely sufficient and not a critical gap.

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?

There are zero parameters, so the description has no need to explain parameter meanings. The schema is empty, and the description does not need to compensate for any coverage gaps. This is a perfect score per the baseline for zero-parameter tools.

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 names the resource (dictionaries under islamweb library subject 73) and the exact fields returned (bookId, key, title, author, id range), making it easy to distinguish from siblings like islamweb_fetch_entry (which fetches specific entries) or islamweb_search.

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 that the list is the registry used by the crawl workflow and crawl-all-dictionaries command, implying it is the tool to call when you need to enumerate all available dictionaries. However, it does not explicitly differentiate when not to use it or compare with alternatives like islamweb_lisan_al_arab_info.

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

islamweb_start_crawlStart a background crawlA

Starts crawling a contiguous range of content ids from one islamweb library book in the background (this call returns immediately with a jobId; poll islamweb_crawl_status with it). Each fetched page is appended as one JSON line to outFile as soon as it is parsed, so the crawl is resumable: re-running with the same outFile skips ids already present in it. Defaults are set up for لسان العرب لابن منظور (bookId 122, ids 1..9305) — omit bookId/startId/endId/outFile to crawl the whole dictionary.

ParametersJSON Schema
NameRequiredDescriptionDefault
endIdNodefaults to 9305
bookIdNodefaults to 122
delayMsNodelay after each request per worker, default 250ms
outFileNodefaults to data/lisan-al-arab.jsonl
startIdNodefaults to 1
concurrencyNoparallel requests, default 3

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden, and it delivers: it discloses that the call returns immediately with a jobId, that pages are appended as JSON lines to outFile, that it is resumable, and that re-running skips already-present ids. This gives an agent a clear model of side effects and asynchronous behavior without needing extra context.

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?

Three dense sentences front-load the core purpose and immediate return behavior, then explain file semantics and defaults. No filler or wasted words; 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 6-parameter tool with no output schema and no annotations, the description covers the essential flow: start, get jobId, poll status, write JSON lines, resume. It does not describe error behavior or the concurrency/delay tradeoffs, but those are secondary given the schema's parameter descriptions and the clear reference to the status sibling.

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 real value by explaining that bookId/startId/endId/outFile default to a specific dictionary (Lisan al-Arab, bookId 122, ids 1..9305) and that outFile has resumable append semantics. delayMs and concurrency are left to the schema, which already documents their defaults and bounds.

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 ('Starts crawling') and resource ('contiguous range of content ids from one islamweb library book'), and immediately distinguishes itself from siblings by noting it runs in the background and returns a jobId for polling via islamweb_crawl_status. This makes the tool's role unambiguous relative to the other crawl-related tools.

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?

Clear context is provided: call this to start a background crawl of an id range, and poll islamweb_crawl_status with the returned jobId. It also explains resumability and defaults, which helps decide when to use it. However, it does not explicitly say when not to use it or name alternatives like islamweb_fetch_entry for single-entry fetches.

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. 8 tool updatesv0.1.0
    • First observedislamweb_compile_json
    • First observedislamweb_crawl_stats
    • First observedislamweb_crawl_status
    • First observedislamweb_fetch_entry
    • First observedislamweb_lisan_al_arab_info
    • First observedislamweb_list_dictionaries
    • First observedislamweb_search
    • First observedislamweb_start_crawl

TDQS

A4/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have clearly distinct roles, but islamweb_crawl_status and islamweb_crawl_stats could be confused at first glance since both relate to crawl progress. The descriptions clarify that one tracks an in-memory job and the other reads a file, so the ambiguity is minor.

Naming Consistency4/5

All tools share the consistent islamweb_ prefix and snake_case convention, and most follow a verb_noun pattern (fetch_entry, start_crawl, compile_json). A few names deviate by leading with a noun (crawl_status, crawl_stats, lisan_al_arab_info), which is a slight inconsistency but still readable and predictable.

Tool Count5/5

With 8 tools, the set is well-scoped for the server's purpose: discover dictionaries, fetch entries, crawl in the background, monitor progress, inspect datasets, compile, and search. No tool feels redundant or unnecessary, and the count is squarely in the ideal 3-15 range.

Completeness4/5

The tool surface covers the full crawl workflow—listing, fetching, starting, monitoring, compiling, and searching—which covers the stated purpose well. Minor gaps exist such as no explicit cancel-job or list-running-jobs tool, but these are workaround-able and don't create dead ends for the core pipeline.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server for the Internet Archive's Wayback Machine. Search archived snapshots, extract page text from a specific date, track how a site has changed over time, check if broken links are recoverable, and perform research across Internet Archive collections.
    6
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching, PDF conversion, and reference extraction for Turkish academic articles on DergiPark via MCP tools.
    41
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Full-coverage MCP server for Internet Archive, enabling search, metadata lookup, collection browsing, and Wayback Machine snapshot retrieval via 13 tools.
    BSD Zero Clause