MCP server for advanced web search using Tavily
Ganjoor is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
MCP server for the Ganjoor (گنجور) Persian classical poetry API at https://ganjoor.net
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user ganjoor-mcp '--' npx -y ganjoor-mcp-server
# 2 — ask your agent for something these tools do
# ganjoor_list_poets, ganjoor_get_poet, ganjoor_get_poets_by_century and 41 more
Ganjoor costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Ganjoor as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user ganjoor-mcp '--' npx -y ganjoor-mcp-serverReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
44 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
List all poets published on Ganjoor.net, including their biographies. Returns one row per poet with: id, name, nickname, URL slug, root category id, birth/death years (Hijri), and birth/death places. Use this first when you need to translate a poet's name to a numeric id for other Ganjoor tools.…
No parameter schema on file.
Get a single poet's full profile (including biography) by numeric id or URL slug. Use this to turn a slug like "/hafez" into the numeric poet id, or to read a poet's biography and catalogue of works. Args: - id (number): Numeric poet id (optional if url is given). Hafez = 2, Saadi = 7, Rumi…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | no | — | |
| url | no | — | |
| include_cats | boolean | no | Include the poet's top-level list of books/sections. |
| response_format | yes | — |
Get every Ganjoor poet grouped into historical half-centuries. The first group (id 0) holds the "pinned"/featured poets shown on the Ganjoor home page. Each later group carries a name, an approximate Gregorian year range, and the poets active in that period. Args: - response_format ('markdown'…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| response_format | yes | — |
List Ganjoor books (named collections such as دیوان حافظ or غزلیات سعدی), alphabetically. Every returned entry is a category of type "Book". Use the resulting category id with ganjoor_get_category to browse the poems inside, or with ganjoor_get_category_poems to list them. Args: - name…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | no | Case-insensitive substring filter on the book name, e.g. 'ghazal' or 'divan'. |
| poet_id | integer | no | Only books belonging to this poet id. 0 disables the filter. |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
Get a Ganjoor category (a book, section, or sub-collection) by numeric id. A category is the container for poems inside a poet's work — for example Hafez's ghazals (category id 10) or Rumi's Masnavi. The response includes the breadcrumb path, the direct children (sub-sections), and optionally the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cat_id | yes | — | |
| include_poems | boolean | no | Include the poems contained directly in this category. |
| include_children | boolean | no | Include the direct child categories. |
| poem_limit | integer | no | Maximum poems to include when include_poems is true. |
| response_format | yes | — |
List the poems contained in a Ganjoor category, optionally filtered by the author's name. Args: - cat_id (number): Category id to list poems from - title_contains (string): Optional filter — only poems whose title contains this text - page (number): Page number, starting from 1 (default: 1)…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cat_id | yes | Category id to list poems from. | |
| title_contains | string | no | Optional case-insensitive substring filter applied to poem titles. |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
Get the geographic and historical locations tagged to poems within a Ganjoor category and its descendants. Each tag pairs a place with the Hijri/Gregorian date a poem commemorates, which is how Ganjoor records historical events (a battle, a siege) in poetry. Args: - cat_id (number): Category…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cat_id | yes | Category id whose subtree should be scanned for geo tags. | |
| response_format | yes | — |
Get the network of historical people relevant to a Ganjoor category or work. Returns every person tagged in a poem under this category's subtree, plus their kinship and affiliation ties one hop out — the data behind Ganjoor's "characters" (شخصیتها) tab. Args: - cat_id (number): Category id…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cat_id | yes | Category id to build the people graph for. | |
| response_format | yes | — |
Full-text search across all poems on Ganjoor, optionally scoped to one poet or category. The search matches Persian text inside poem bodies and titles. Use this when you know what the poem says but not what it is called; use ganjoor_list_category_poems when you know the book. Args: - term…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| term | string | yes | Persian text to search for, e.g. 'صبر', 'دل', 'معرفت'. |
| poet_id | integer | no | Restrict to a poet id. 0 searches all poets. |
| cat_id | integer | no | Restrict to a category id. 0 searches all categories. |
| page | yes | — | |
| page_size | yes | — | |
| include_text | boolean | no | Include the full poem text for each result. |
| response_format | yes | — |
Meaning-based ("find a poem about...") search over Ganjoor's poetry collection. Use this when you want poems by theme or feeling rather than an exact word. Describe the idea in natural language — in English or Persian — and Ganjoor's embedding search returns the closest verses. Prefer…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Natural-language description of the theme, e.g. 'a poem about longing for the beloved'. |
| top_k | integer | no | Number of poems to return (1-50, default 10). |
| poet_id | integer | no | Restrict to a poet id. 0 searches all poets. |
| cat_id | integer | no | Restrict to a category id. 0 searches all categories. |
| response_format | yes | — |
Fetch a complete poem by its Ganjoor URL, including verses, metre, rhyme, and recitations. This is the main way to read a poem. The URL is the same as the browser address on ganjoor.net, e.g. "hafez/ghazal/sh494". Use ganjoor_search_poems or ganjoor_list_category_poems to discover URLs, and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | yes | — | |
| include_category | boolean | no | Include the poem's category/book metadata. |
| include_siblings | boolean | no | Include all other poems in the same book. Can be very large. |
| include_recitations | boolean | no | Include audio recitations of the poem. |
| include_images | boolean | no | Include manuscript image links. |
| include_comments | boolean | no | Include published reader comments. |
| include_verse_details | boolean | no | Include per-verse ids, positions, and AI summaries. |
| response_format | yes | — |
Fetch a complete poem by its numeric Ganjoor id. Same content as ganjoor_get_poem, but keyed on the numeric poem id instead of the URL. Use it when you have an id from search results or another tool and do not want to build a URL. Args: - poem_id (number): Numeric poem id - include_category…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id, e.g. 2623 for a Hafez ghazal. | |
| include_category | boolean | no | Include category metadata. |
| include_recitations | boolean | no | Include audio recitations. |
| include_comments | boolean | no | Include reader comments. |
| include_verse_details | boolean | no | Include per-verse ids, positions, and summaries. |
| response_format | yes | — |
Get just the verses of a poem by id — a lightweight alternative to fetching the whole poem. Each verse comes back in order with its couplet index and whether it is the first or second hemi- stich. Optionally restrict to a single couplet. Args: - poem_id (number): Numeric poem id -…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id. | |
| couplet_index | integer | no | Return only this 0-based couplet. Omit to get the whole poem. |
| include_summary | boolean | no | Include the modern Persian summary attached to each couplet. |
| include_original_text | boolean | no | Include the pre-correction original text where the API has it. |
| response_format | yes | — |
Get a random poem from Ganjoor, optionally from a specific poet. Args: - poet_id (number): Poet to draw from. 0 = a random poet (default: 0). Hafez = 2. - include_recitations (boolean): Include audio recitations (default: false) - response_format ('markdown' | 'json'): Output format…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poet_id | integer | no | Poet id to draw from. 0 = any poet. Hafez = 2, Saadi = 7, Rumi = 5. |
| include_recitations | boolean | no | Include audio recitations. |
| response_format | yes | — |
Draw a random Hafez ghazal as a Persian divination (فال حافظ). This is the traditional "ask Hafez" reading: one ghazal selected at random, to be interpreted in the context of the question asked. Each call draws a different ghazal. Args: - response_format ('markdown' | 'json'): Output format…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| response_format | yes | — |
Resolve any Ganjoor page id (poem, category, or poet) to its public web URL path. Useful when you have a bare numeric id from an index or a citation and need to cite or link it. Args: - id (number): Any Ganjoor page id — poem, category, or poet - response_format ('markdown' | 'json'): Output…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | yes | Page id to resolve. Works for poems, categories, and poets. | |
| response_format | yes | — |
Resolve a legacy or short Ganjoor URL to its current canonical address. Ganjoor has renamed many sections over the years; this endpoint maps an old path to today's one. Args: - url (string): The URL path to resolve, with or without a leading slash - response_format ('markdown' | 'json'):…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | yes | URL path to resolve, e.g. 'hafez/divan'. | |
| response_format | yes | — |
List every Persian prosodic metre (وزن) used in the Ganjoor corpus, with its verse-pattern notation. Use this to translate a metre name into the id Ganjoor uses, or to discover the metre vocabulary before calling ganjoor_find_similar_poems or ganjoor_analyze_poem_rhythm. Args: - page (number):…
No parameter schema on file.
Detect the prosodic metre (وزن) of a poem by its numeric id. Runs Ganjoor's prosody engine over the poem's verses and returns the matched metre together with its confidence and the competing alternatives considered. Args: - poem_id (number): Numeric poem id - response_format ('markdown' |…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id to analyze. | |
| response_format | yes | — |
Detect the rhyme letter (قافیه) and rhyme pattern of a poem by its numeric id. Args: - poem_id (number): Numeric poem id - response_format ('markdown' | 'json'): Output format (default: 'markdown') Returns: For JSON: { poem_id, rhyme, rhyme_letter, fail_verse } — rhyme is the full…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id to analyze. | |
| response_format | yes | — |
Find poems that share a poem's prosodic metre and rhyme letter — the basis of Ganjoor's "related poems" (شعرهای مرتبط) pages. Two Persian poems matching in metre and rhyme can be read as answers to each other (reply-poetry), so this is also how you trace how one poet answered another. Args: -…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| metre | string | yes | — |
| rhyme | string | no | Optional rhyme letter, e.g. 'ا' or 'ب'. Empty matches any rhyme. |
| poet_id | integer | no | Restrict to a poet id. 0 = all poets. |
| cat_id | integer | no | Restrict to a category id. 0 = all categories. |
| couplet_count_min | integer | no | Only poems with at least this many couplets. 0 disables the filter. |
| couplet_count_max | integer | no | Only poems with at most this many couplets. 0 disables the filter. |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
Get the structural sections of a poem — the stanzas (بند), couplets (مثنوی), and tercets (رباعی) it is built from. Ganjoor models a poem as nested sections so that poetry written in distinct forms within one poem (e.g. a ghazal that closes with a qet'e) can be analysed per-section. Args: -…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id. | |
| response_format | yes | — |
Get one section of a poem by its section id, including its verses and its own related sections. Args: - section_id (number): Section id — get these from ganjoor_get_poem_sections - include_verses (boolean): Include the section's verses (default: true) - include_related (boolean): Include…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| section_id | yes | Section id from ganjoor_get_poem_sections. | |
| include_verses | boolean | no | Include the section's verses. |
| include_related | boolean | no | Include sections from other poems related to this one. |
| response_format | yes | — |
Find sections from other poems that match a given poem section in metre and rhyme. This is the section-level counterpart of ganjoor_find_similar_poems and is how Ganjoor links reply-poems and cross-poet allusions at stanza granularity. Args: - poem_id (number): Numeric poem id -…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id. | |
| section_index | integer | yes | 0-based section index within the poem. |
| skip | integer | no | Results to skip for pagination. |
| items_count | integer | no | How many related sections to return. 0 or less returns all. |
| response_format | yes | — |
Find which structural sections a specific couplet of a poem belongs to. A verse carries up to four nested section indices; this endpoint resolves one couplet to the stanzas that contain it, which you need when analysing a ghazal's opening or closing section. Args: - poem_id (number): Numeric…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id. | |
| couplet_index | integer | yes | 0-based couplet number. |
| response_format | yes | — |
List poem sections Ganjoor has tagged with a specific language, newest-scoped by poet. Ganjoor tags translated or bilingual stanzas with a language code (for example ar for Arabic quoted lines, or en for English ones). This finds those passages across the corpus. Args: - language (string):…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| language | string | yes | Language code to filter by, e.g. 'ar', 'en', 'fa-IR'. |
| poet_id | integer | no | Restrict to a poet id. 0 = all poets. |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
Search the published audio recitations (روایت) of Ganjoor poems, optionally by reciter or poem. Each recitation is a sung or spoken performance of one poem by a named artist, published on ganjoor.net. Args: - search_term (string): Optional text to match against the reciter's (artist's) name…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search_term | string | no | Text to match against the reciter's name. Empty matches all artists. |
| poet_id | integer | no | Restrict to a poet id. 0 = all poets. |
| cat_id | integer | no | Restrict to a category id. 0 = all categories. |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
Get one published recitation by its numeric id, including its audio file location and poem reference. Args: - recitation_id (number): Recitation id (from ganjoor_search_recitations or a poem's recitation list) - response_format ('markdown' | 'json'): Output format (default: 'markdown')…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| recitation_id | yes | Numeric recitation id. | |
| response_format | yes | — |
Get the per-verse timing map for a recitation, showing when each couplet begins in the audio. Useful for following along with the text while a recitation plays. Args: - recitation_id (number): Recitation id - response_format ('markdown' | 'json'): Output format (default: 'markdown')…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| recitation_id | yes | Numeric recitation id. | |
| response_format | yes | — |
List every audio recitation published for one poem. Args: - poem_id (number): Numeric poem id - page (number): Page number, starting from 1 (default: 1) - page_size (number): Items per page, 1-100 (default: 20) - response_format ('markdown' | 'json'): Output format (default: 'markdown')…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id. | |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
Get the most-liked recitations within a category — Ganjoor's "top 1" (بهترین) listings for a book. Args: - cat_id (number): Category id - include_poem_text (boolean): Include each poem's text (default: false) - response_format ('markdown' | 'json'): Output format (default: 'markdown')…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cat_id | yes | Category id. | |
| include_poem_text | boolean | no | Include the full poem text alongside each recitation. |
| response_format | yes | — |
List the historical and literary figures Ganjoor has catalogued as related persons (شخصیتها). These are people who appear in a poem's commentary or annotations — rulers, prophets, companions, poets' contemporaries — as distinct from poets themselves. Args: - search (string): Optional filter —…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Case-insensitive substring filter on the person's name. |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
Get one person's full record — biography, dates, places, and external references. Args: - person_id (number): Numeric person id (from ganjoor_list_people) - response_format ('markdown' | 'json'): Output format (default: 'markdown') Returns: For JSON: { id, name, description, wiki_url,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| person_id | yes | Numeric person id. | |
| response_format | yes | — |
Get every poem Ganjoor has tagged with a given person. This is the strongest link between a historical figure and the poetry about them. Args: - person_id (number): Numeric person id - page (number): Page number, starting from 1 (default: 1) - page_size (number): Items per page, 1-100…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| person_id | yes | Numeric person id. | |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
Get a person's kinship and affiliation edges — parents, siblings, spouses, teachers, and contemporaries. Args: - person_id (number): Numeric person id - relation_type (string): Optional filter — only relations of this kind, e.g. 'father', 'son', 'spouse', 'student', 'teacher' -…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| person_id | yes | Numeric person id. | |
| relation_type | string | no | Optional filter on the relation kind, e.g. 'father', 'spouse', 'teacher'. |
| response_format | yes | — |
Get the full connected kinship component reachable from a person — ancestors, descendants, spouses, and siblings. This returns the whole clan cluster, not just one hop, which makes it the right tool for tracing a figure's lineage across generations. Args: - person_id (number): Numeric person…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| person_id | yes | Numeric person id to start the traversal from. | |
| response_format | yes | — |
Get the most recent published reader comments across Ganjoor, optionally filtered. Comments are scholarly notes attached to a specific couplet of a poem. Args: - term (string): Optional text filter applied to comment bodies - filter_user_id (string): Optional UUID — only comments by this…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| term | string | no | Optional substring filter applied to comment text. |
| filter_user_id | string | no | Optional user UUID — only that user's comments. |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
List the Ganjoor site's published FAQ (پرسشهای متداول) categories. These are editorial explanations of how Ganjoor works — text sourcing, version differences, contribution rules. Args: - response_format ('markdown' | 'json'): Output format (default: 'markdown') Returns: For JSON: { count,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| response_format | yes | — |
Get every published question-and-answer in a Ganjoor FAQ category. Args: - cat_id (number): FAQ category id (from ganjoor_list_faq_categories) - page (number): Page number, starting from 1 (default: 1) - page_size (number): Items per page, 1-100 (default: 20) - response_format ('markdown'…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| cat_id | yes | FAQ category id. | |
| page | yes | — | |
| page_size | yes | — | |
| response_format | yes | — |
Get one Ganjoor FAQ entry by its numeric id. Args: - faq_id (number): FAQ item id (from ganjoor_get_faq_items) - response_format ('markdown' | 'json'): Output format (default: 'markdown') Returns: For JSON: { id, category_id, question, answer, answer_excerpt, pinned } Examples: - "Show…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| faq_id | yes | Numeric FAQ item id. | |
| response_format | yes | — |
Get the manuscript and facsimile images Ganjoor holds for a poem. These are photographs of the physical manuscripts, with a thumbnail and a full-resolution link per image — useful for checking a textual variant against its source. Args: - poem_id (number): Numeric poem id - response_format…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id. | |
| response_format | yes | — |
Get the poems that a given poem quotes or alludes to, and the poems that quote it. Matching in metre and rhyme is common in Persian poetry — poets answer each other by reusing the other's metre and rhyme. This endpoint maps those links in both directions. Args: - poem_id (number): Numeric poem…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id. | |
| only_both_poems | boolean | no | Only include quotations both poems acknowledge. |
| published_only | boolean | no | Only include published records. |
| main_list_only | boolean | no | Only include records curated onto the main related-poems list. |
| skip | integer | no | Results to skip. |
| items_count | integer | no | How many results to return. 0 or less returns all. |
| response_format | yes | — |
Get the editorial corrections applied to a poem's text — the before/after record of every fix. Useful for understanding why the text on Ganjoor differs from an older printed edition. Args: - poem_id (number): Numeric poem id - response_format ('markdown' | 'json'): Output format (default:…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id. | |
| response_format | yes | — |
Get the geographic and historical locations tagged to a single poem. A geo tag pins a poem to a place and to the Hijri/Gregorian date it commemorates — for instance a poem about a battle fought at a named site. Args: - poem_id (number): Numeric poem id - response_format ('markdown' |…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poem_id | yes | Numeric poem id. | |
| response_format | yes | — |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Ganjoor or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | minimal | capability blast radius (minimal) — client exposure if the model is manipulated | −0 |
| verification-discount | repo | publisher verification (public source) — no provenance, but the source is public and inspectable | −1 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. minimal is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.1.0. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Ganjoor can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.