Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Islam West Africa Collection (IWAC)

REMOTE · ISLAM.ZMO.DE · 3 COMPONENTS · SCANNED SEP 20

Read-only access to the Islam West Africa Collection via Hugging Face datasets.

0 this week 88 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security80
Transport & Reachability100
Schema Quality & AI Usability77
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8760 tokens (~250/item across 35 items; 34 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage96
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 85% of tool parameters carry a description.Partial
  • Structured output schemas are declared (44% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 34 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 36 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
  • Supports UI / widget rendering.Pass
Install

How do I install the Islam West Africa Collection (IWAC) MCP server?

Islam West Africa Collection (IWAC) is a hosted endpoint at https://islam.zmo.de/mcp/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · islam.zmo.de

# add to Claude Code
claude mcp add --transport http fmadore-iwac-mcp-server 'https://islam.zmo.de/mcp/'
// .cursor/mcp.json
{
  "mcpServers": {
    "fmadore-iwac-mcp-server": {
      "url": "https://islam.zmo.de/mcp/"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "fmadore-iwac-mcp-server": {
      "type": "http",
      "url": "https://islam.zmo.de/mcp/"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.fmadore-iwac-mcp-server]
url = "https://islam.zmo.de/mcp/"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "fmadore-iwac-mcp-server": {
      "type": "remote",
      "url": "https://islam.zmo.de/mcp/",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add fmadore-iwac-mcp-server --url 'https://islam.zmo.de/mcp/' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  fmadore-iwac-mcp-server:
    url: "https://islam.zmo.de/mcp/"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "fmadore-iwac-mcp-server": {
      "Transport": "http",
      "Url": "https://islam.zmo.de/mcp/"
    }
  }
}
# add to Vellum
assistant mcp add fmadore-iwac-mcp-server -t streamable-http -u 'https://islam.zmo.de/mcp/'
// mcp.json
{
  "mcpServers": {
    "fmadore-iwac-mcp-server": {
      "type": "http",
      "url": "https://islam.zmo.de/mcp/"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 8 Sept 26 0
    • Server version: 3.5.1 → 3.5.2 functional
  • 3 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Server version: 3.5.0 → 3.5.1 functional
  • 26 Aug 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Aug 26 0
    • Stability: 0.97 → pass security
    • Tool “search_by_sentiment” rewrote its description, which is the text the model reads security
    • Tool “get_sentiment_distribution” rewrote its description, which is the text the model reads security
    • Server version: 3.3.0 → 3.5.0 functional
    • “search_by_sentiment” added an optional parameter “disputed” cosmetic
    • “get_sentiment_distribution” reworded the description of “model” cosmetic
  • 24 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 19 Aug 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “list_audiovisual” rewrote its description, which is the text the model reads security
    • Tool “search_audiovisual” rewrote its description, which is the text the model reads security
    • Tool “search_by_sentiment” rewrote its description, which is the text the model reads security
    • Tool “get_audiovisual” rewrote its description, which is the text the model reads security
    • Tool “get_sentiment_distribution” rewrote its description, which is the text the model reads security
    • Server version: 3.1.0 → 3.3.0 functional
    • “list_audiovisual” added an optional parameter “publisher” cosmetic
    • “list_audiovisual” added an optional parameter “source_type” cosmetic
    • “search_audiovisual” added an optional parameter “publisher” cosmetic
    • “search_audiovisual” added an optional parameter “source_type” cosmetic
    • “get_sentiment_distribution” reworded the description of “model” cosmetic
    • “search_audiovisual” reworded the description of “subject” cosmetic
  • 17 Aug 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “list_audiovisual” rewrote its description, which is the text the model reads security
    • Tool “get_audiovisual” rewrote its description, which is the text the model reads security
    • Tool “search_audiovisual” rewrote its description, which is the text the model reads security
    • Server version: 3.0.0 → 3.1.0 functional
    • “list_audiovisual” reworded the description of “country” cosmetic
    • “search_audiovisual” reworded the description of “country” cosmetic
    • “search_audiovisual” reworded the description of “language” cosmetic
    • “search_audiovisual” reworded the description of “medium” cosmetic
  • 12 Aug 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Server version: 2.0.0 → 3.0.0 functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://islam.zmo.de/mcp/

TLS valid

Negotiated TLS 1.2 with TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=*.zmo.de CN=GEANT TLS ECC 1,O=Hellenic Academic and Research Institutions CA,C=GR 5 Aug 2026 20 Feb 2027 ECDSA 256 ECDSA-SHA384 39b16c47f1aeb1eb74e2afff9e5357c8
SANs: *.zmo.de, zmo.de
CN=GEANT TLS ECC 1,O=Hellenic Academic and Research Institutions CA,C=GR (CA) CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR 3 Jan 2025 31 Dec 2039 ECDSA 384 ECDSA-SHA384 42fddce1261607e1a5e6935a400161dd
CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR (CA) CN=HARICA TLS ECC Root CA 2021,O=Hellenic Academic and Research Institutions CA,C=GR 19 Feb 2021 13 Feb 2045 ECDSA 384 ECDSA-SHA384 67749d8d77d83b6adb22f4ff59e2bfce

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of islam.zmo.de. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
de. present 26755 8 Verified
zmo.de. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=63072000; includeSubDomains; preload
content-security-policy frame-ancestors 'self' https://fmadore.github.io https://www.frederickmadore.com https://frederickmadore.com https://slides.frederickmadore.com
x-content-type-options nosniff
referrer-policy strict-origin-when-cross-origin
permissions-policy geolocation=(), midi=(), camera=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://islam.zmo.de/mcp/ Verified 200
http (plaintext) http://islam.zmo.de/mcp/ HTTPS enforced
MCP tools · 34 exposed · ~7,025 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
fetch ~148

Retrieve the full text and metadata of one IWAC item by an id returned from `search` (format '<category>:<number>', e.g. 'articles:28576'). Returns {id, title, text, url, metadata}: `text` is the item's OCR / abstract / transcription / description, `url` is the canonical islam.zmo.de link to cite, and `metadata` holds the remaining fields (author, date, country, newspaper, AI sentiment, …). Categories: articles, publications, references, documents, index, audiovisual, images.

NameTypeReqDescription
idstringyesItem id from search, e.g. 'articles:28576' or 'references:11045'
NameTypeReqDescription
categorystringyes
idstringyes
metadataobjectyes
recommended_toolstring
recommended_usageobject
textstringyes
text_sourcestring
text_truncatedboolean
titlestring
urlstring

No examples provided.

get_article ~118

Get one article (by id): full metadata, the AI abstract (description_ai), AI sentiment, and OCR text. Pass a `keyword` to get ~2000-char excerpts around each match instead of the full (capped) OCR.

NameTypeReqDescription
article_idintegeryes
context_charsintegerDefault 2000, max 5000
keywordstringReturn excerpts around matches instead of the full OCR (accent-insensitive)
max_excerptsintegerDefault 10, max 25

No output schema declared.

No examples provided.

get_audiovisual ~103

Get one audiovisual record by id: full description and transcription (where one exists), creator/publishing channel, duration, medium, subjects, places, language, rights, source, and three distinct links — `url` (the IWAC page, the one to cite), `external_url` (where a harvested video plays) and `media_url` (a deposited file). `source_type` says which to expect.

NameTypeReqDescription
audiovisual_idintegeryes

No output schema declared.

No examples provided.

get_collection_stats ~54

Overall statistics for every IWAC subset, including `fulltext_coverage` — how many items in each subset actually carry searchable full text in this public dataset. Read that before treating any keyword count as a full-text census.

Input schema present but exposes no named parameters.

NameTypeReqDescription
articles_by_countryobject
collection_namestringyes
dataset_urlstringyes
date_rangeobject
failed_subsetsarray
fulltext_coverageobject
fulltext_notestring
newspaper_countnumber
subset_countsobjectyes
total_recordsnumberyes
viewstringyes

No examples provided.

get_cooccurrence ~245

How often the top values of a multi-valued field appear on the SAME item — a subject/place co-mention matrix. Answers 'what is X discussed alongside' without reading anything: the pair counts are the structure of the tagging. Returns the top values, the full symmetric matrix (diagonal = each value's own count) and the strongest pairs.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)
date_fromstringYYYY-MM-DD (or YYYY)
date_tostringYYYY-MM-DD (or YYYY)
fieldstringsubject (default) | spatial | author | language
keywordstringONE French concept keyword; substring over the subset's text fields
newspaperstringNewspaper (articles) or periodical/series title (publications)
subjectstringExact subject tag (pipe-aware)
subsetstringarticles (default) | publications | references
top_nintegerValues on each axis (default 15, max 30)
NameTypeReqDescription
fieldstringyes
filtersobjectyes
matrixarrayyes
notestring
subsetstringyes
top_pairsarrayyes
total_matchesnumberyes
valuesarrayyes
viewstringyes

No examples provided.

get_country_comparison ~33

Compare article counts, newspaper counts, date ranges, and gpt-5-6-luna polarity across countries.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countriesarrayyes
polarity_modelstring
total_countriesnumberyes
viewstringyes

No examples provided.

get_document ~117

Get one archival document (by id): full metadata, AI description, and OCR text. Pass a `keyword` to get ~2000-char excerpts around each match instead of the full (capped) OCR — useful for long documents.

NameTypeReqDescription
context_charsintegerDefault 2000, max 5000
document_idintegeryes
keywordstringReturn excerpts around matches instead of the full OCR (accent-insensitive)
max_excerptsintegerDefault 10, max 25

No output schema declared.

No examples provided.

get_field_distribution ~299

Rank the values of one multi-valued field across a filtered set — the direct way to answer 'which places does this coverage name most', 'who signs these articles', 'what subjects dominate'. Pipe-joined fields (subject, spatial, author, language, country) are split, so an article tagged 'Prière|Ramadan' counts once for each. Optional over_time adds the per-year share of items that carry ANY value for the field, which is how you see e.g. bylines appearing as the press professionalises.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)
date_fromstringYYYY-MM-DD (or YYYY)
date_tostringYYYY-MM-DD (or YYYY)
fieldstringyessubject | spatial | author | language | newspaper | country
keywordstringONE French concept keyword; substring over the subset's text fields
newspaperstringNewspaper (articles) or periodical/series title (publications)
over_timebooleanAlso return the per-year share of items carrying a value
subjectstringExact subject tag (pipe-aware)
subsetstringarticles (default) | publications | references
top_nintegerValues returned (default 25, max 100)
NameTypeReqDescription
coverage_by_yearobject
distinct_valuesnumberyes
fieldstringyes
filtersobjectyes
items_with_valuenumberyes
notestring
other_valuesnumber
subsetstringyes
total_matchesnumberyes
valuesarrayyes
viewstringyes

No examples provided.

get_image ~59

Get one photograph by id: title, photographer, capture date, place and coordinates, subjects, rights, the IIIF manifest, and the full-resolution `image_url`. The server returns URLs, not image bytes.

NameTypeReqDescription
image_idintegeryes

No output schema declared.

No examples provided.

get_index_entry ~44

Get full details of an index entry by id (raw dataset columns, French names — Titre, Prénom, Coordonnées…).

NameTypeReqDescription
entry_idintegeryes

No output schema declared.

No examples provided.

get_lexical_metrics ~304

Readability, lexical richness and length of the press text, averaged by year, newspaper or country. `Lisibilite_OCR` is a French readability score (higher = easier); `Richesse_Lexicale_OCR` is MATTR, a moving-average type-token ratio that is ALREADY length-robust — do not normalise it by word count or bin it by length. Readability is computed against a French lexicon, so non-French items are excluded from that metric (and counted in readability_excluded) rather than reported as unreadable; MATTR and word count need no lexicon and cover everything. Only items whose full text ships in this public dataset carry these columns at all.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)
date_fromstringYYYY-MM-DD (or YYYY)
date_tostringYYYY-MM-DD (or YYYY)
group_bystringyear (default) | newspaper | country
keywordstringONE French concept keyword; substring over the subset's text fields
newspaperstringNewspaper (articles) or periodical/series title (publications)
subjectstringExact subject tag (pipe-aware)
top_nintegerGroups returned when grouping by newspaper (default 20, max 60)
NameTypeReqDescription
filtersobjectyes
group_bystringyes
groupsarrayyes
metricsobjectyes
notestring
readability_excludednumber
total_matchesnumberyes
viewstringyes

No examples provided.

get_newspaper_stats ~49

Per-newspaper article counts and date ranges.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Togo (accents optional)
NameTypeReqDescription
country_filterstring
newspapersarrayyes
total_articlesnumberyes
total_newspapersnumberyes
viewstringyes

No examples provided.

get_place_distribution ~259

Places named by a filtered set of items, joined to the index's authority records so each carries coordinates where the index has them. Use this rather than get_field_distribution when the question is geographic — where coverage clusters — and the plain ranking when it is not. Only `Lieux` index entries are geocoded (555 of 683); persons, organisations and events carry no coordinates and never will, and any named place with no index entry comes back under `ungeocoded` rather than being dropped.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)
date_fromstringYYYY-MM-DD (or YYYY)
date_tostringYYYY-MM-DD (or YYYY)
keywordstringONE French concept keyword; substring over the subset's text fields
newspaperstringNewspaper (articles) or periodical/series title (publications)
subjectstringExact subject tag (pipe-aware)
subsetstringarticles (default) | publications | references
top_nintegerGeocoded places returned (default 60, max 200)
NameTypeReqDescription
filtersobjectyes
items_by_countryobject
items_with_placenumberyes
notestring
placesarrayyes
subsetstringyes
total_matchesnumberyes
ungeocodedarray
ungeocoded_mentionsnumber
viewstringyes

No examples provided.

get_publication_fulltext ~91

Full OCR text of a publication, optionally returning ~2000-char excerpts around keyword matches (accent-insensitive; capped — see match_count vs excerpts_returned).

NameTypeReqDescription
context_charsintegerDefault 2000, max 5000
keywordstring
max_excerptsintegerDefault 10, max 25
publication_idintegeryes

No output schema declared.

No examples provided.

get_reference ~60

Full bibliographic record for one academic reference (by id), including the complete abstract (present for ~51% of references), subjects, DOI/URL, and host-work details (book, volume, issue, pages).

NameTypeReqDescription
reference_idintegeryes

No output schema declared.

No examples provided.

get_semantic_map ~398

A 2-D scatter of a filtered set, projected from the stored 768-dimension embeddings by PCA. Shows which items sit near each other in meaning — where a set splits into distinct strands and where it is one cloud. Read `explained_variance` before drawing any conclusion: with 768 dimensions the first two components usually carry a modest share, and a scatter explaining 6% of the variance is a much weaker claim than one explaining 40%. This is PCA, not UMAP: it spreads the broadest axes of variation and flattens fine cluster structure, so it is not comparable to the semantic landscapes on islam.zmo.de. Needs no API key — the vectors are a column in the dataset — but only items whose full text ships are embedded at all. NOTE the payload scales with `limit`: a point cloud is a chart, not something a text-only client can read, so for those the useful part is the explained-variance summary rather than the coordinates. Keep `limit` low unless a chart is going to be drawn.

NameTypeReqDescription
color_bystringcountry | newspaper | subject | lda_topic_label | polarity (gpt-5-6-luna's label)
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)
date_fromstringYYYY-MM-DD (or YYYY)
date_tostringYYYY-MM-DD (or YYYY)
keywordstringONE French concept keyword; substring over the subset's text fields
limitintegerItems projected (default 300, max 2000)
newspaperstringNewspaper (articles) or periodical/series title (publications)
subjectstringExact subject tag (pipe-aware)
subsetstringarticles (default) | publications | references
NameTypeReqDescription
color_bystring
explained_variancearrayyes
filtersobjectyes
groupsobject
notestringyes
pointsarray
projectednumberyes
subsetstringyes
total_matchesnumberyes
viewstringyes

No examples provided.

get_sentiment_distribution ~478

Aggregate AI polarity, centrality and subjectivity across a filter set. 5 models scored the corpus independently — gpt-5-6-luna, mistral-small-2603, deepseek-v4-flash-0731, gemma-4-31b-it, qwen3-8-27b — so model:"all" returns each one's distribution plus how often they AGREE. Treat disagreement as a fact about the judgement rather than noise: corpus-wide the panel is unanimous on polarity for only ~32% of articles, so in a set where the models split no single one's number should be quoted alone. All three scales are ordinal French labels; subjectivity is much the weakest and ships a caveat to quote with it. Articles were scored whether or not their full text ships, so these shares are not subject to the OCR coverage limit. The models do NOT all cover the same articles, so read each one's `coverage` before comparing counts: ~51 non-francophone articles are unscored by design, and qwen3-8-27b is 200 further short on articles peripheral to Islam.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Togo (accents optional)
modelstringgpt-5-6-luna | mistral-small-2603 | deepseek-v4-flash-0731 | gemma-4-31b-it | qwen3-8-27b | all | consensus — default gpt-5-6-luna; "all" adds the cross-model agreement, "consensus" returns the panel…
newspaperstring
subjectstring
NameTypeReqDescription
agreementobject
agreement_matrixobject
by_modelobject
centrality_distributionobject
consensusobject
coverageobject
disputedobject
filtersobjectyes
modelstringyes
model_caveatstring
modelsarray
notestring
polarity_distributionobject
subjectivityobject
subjectivity_median_rankobject
total_articlesnumberyes
viewstringyes

No examples provided.

get_similar_items ~229

The items nearest to a given one in meaning, by cosine similarity over the stored embeddings. Answers 'what else is like this' without a keyword — it finds pieces on the same event or theme that share no vocabulary. A neighbour above ~0.85 is usually the same story reprinted or lightly rewritten, which is how to spot syndication in this corpus; 0.6-0.8 is 'same subject, different piece'. Needs no API key: the item's own vector is a column, so nothing has to be embedded at request time. This is per-item, NOT the corpus-wide near-duplicate sweep — that is an all-pairs job and belongs offline.

NameTypeReqDescription
idstringyesItem id — either a bare o:id ('3064') or the namespaced form search returns ('articles:3064')
limitintegerNeighbours returned (default 12, max 50)
min_scorenumberDrop neighbours below this cosine similarity (0-1)
subsetstringarticles (default) | publications | references
NameTypeReqDescription
neighboursarrayyes
notestringyes
sourceobjectyes
subsetstringyes
viewstringyes

No examples provided.

get_temporal_distribution ~469

Counts of matching items per year (or month) — the direct way to chart coverage trends over time instead of paging through search results. Defaults to articles; also works on publications, references, documents, audiovisual, and images. Accepts the same filters as the corresponding search_* tool (keyword = ONE substring over the subset's text fields, country, newspaper/series, subject, date range). Optional group_by=country|newspaper returns one distribution per group. Items dated only to a year keep a bare-year key even at month granularity; undated items are counted in undated_count, never dropped silently. Set calendar=hijri to bucket by the Islamic (Umm al-Qura) calendar instead — with granularity=lunar_month this collapses every year into the twelve lunar months, which is the ONLY way to see observance-driven coverage (Ramadan, Dhu al-Hijja/hajj, Shawwal/Korité): the lunar year drifts ~11 days against the Gregorian, so a Gregorian axis smears each observance across all twelve months. Hijri buckets need a full YYYY-MM-DD, so items dated only to a year or month are reported in imprecise_date_count.

NameTypeReqDescription
calendarstringgregorian (default) | hijri — bucket by the Islamic (Umm al-Qura) calendar
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)
date_fromstringYYYY-MM-DD (or YYYY)
date_tostringYYYY-MM-DD (or YYYY)
granularitystringyear (default) | month | lunar_month (all years collapsed into 12 lunar months; needs calendar=hijri)
group_bystringcountry | newspaper — one distribution per group value
keywordstringONE French concept keyword (French/English for references); substring over the subset's text fields
newspaperstringNewspaper (articles) or periodical/series title (publications)
subjectstringExact subject tag (pipe-aware)
subsetstringarticles (default) | publications | references | documents | audiovisual
NameTypeReqDescription
calendarstring
dated_countnumberyes
distributionobject
distribution_by_groupobject
filtersobjectyes
granularitystringyes
group_bystring
imprecise_date_countnumber
month_labelsobject
notestring
subsetstringyes
total_matchesnumberyes
undated_countnumberyes
viewstringyes

No examples provided.

get_topic_distribution ~339

How a filtered set distributes across the precomputed LDA topics, each labelled by its top terms (articles carry 30 topics and are ~99.5% classified; references have their own 33-topic model and only ~46% carry an assignment, so read its `classified` against `total_matches`). Topics are assigned offline over the full text, so they describe what a piece is ABOUT rather than which words it contains — use this instead of keyword counting to map a corpus. Optional over_time returns per-year counts for the leading topics. min_prob keeps only articles where the topic is at least that dominant (mean assignment probability is 0.34, so 0.5 is already a strong filter).

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)
date_fromstringYYYY-MM-DD (or YYYY)
date_tostringYYYY-MM-DD (or YYYY)
keywordstringONE French concept keyword; substring over the subset's text fields
min_probnumber0-1; keep only assignments at or above this probability
newspaperstringNewspaper (articles) or periodical/series title (publications)
over_timebooleanAlso return per-year counts for the leading topics
subjectstringExact subject tag (pipe-aware)
subsetstringarticles (default) | references
top_nintegerTopics given their own band in over_time (default 8, max 15)
NameTypeReqDescription
classifiednumberyes
filtersobjectyes
notestring
periodsarray
series_by_topicobject
spanarray
subsetstringyes
topicsarrayyes
total_matchesnumberyes
trend_by_topicobject
viewstringyes

No examples provided.

list_audiovisual ~183

List audiovisual materials, newest first (francophone web video from Burkina Faso, Togo and Benin; deposited Nigerian Hausa/Arabic recordings). Filter by country, publishing channel or `source_type`.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional). Burkina Faso, Togo, Benin and Nigeria only — no Niger or Ivorian items
limitintegerDefault 20, max 50
offsetinteger
publisherstringSubstring on the publishing channel/broadcaster, e.g. RTB | AEEM | CERFI
source_typestringyoutube (harvested web video, the large majority) | deposited (recordings with a file, 47)

No output schema declared.

No examples provided.

list_locations ~164

List lieux from the IWAC index, sorted by frequency (most-referenced first). The optional 'country' filter selects entries that APPEAR IN records from that country (mentioned-in, not located-in), ranked by collection-wide 'frequency' — so foreign and cross-border entries can appear. Nigeria returns none here (index frequency is computed from articles + publications + references, which have no Nigerian items — Nigeria is audiovisual only).

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional). Selects lieux MENTIONED IN records from that country, not entities located there
limitintegerDefault 50, max 200
offsetinteger

No output schema declared.

No examples provided.

list_periodicals ~76

List the Islamic periodical/series titles in the publications subset, with issue counts and year ranges. Use the returned newspaper value as the `newspaper` filter on search_publications.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Togo (accents optional)
NameTypeReqDescription
country_filterstring
periodicalsarrayyes
total_periodicalsnumberyes
viewstringyes

No examples provided.

list_persons ~165

List personnes from the IWAC index, sorted by frequency (most-referenced first). The optional 'country' filter selects entries that APPEAR IN records from that country (mentioned-in, not located-in), ranked by collection-wide 'frequency' — so foreign and cross-border entries can appear. Nigeria returns none here (index frequency is computed from articles + publications + references, which have no Nigerian items — Nigeria is audiovisual only).

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional). Selects personnes MENTIONED IN records from that country, not entities located there
limitintegerDefault 50, max 200
offsetinteger

No output schema declared.

No examples provided.

list_subjects ~47

List sujets from the IWAC index, sorted by frequency (most-referenced first).

NameTypeReqDescription
limitintegerDefault 50, max 200
offsetinteger

No output schema declared.

No examples provided.

search ~308

Search the Islam West Africa Collection across newspaper articles, Islamic publications, archival documents, academic references, audiovisual recordings, photographs, and the authority index (persons/places/organisations/events/subjects). Pass ONE concept or name — e.g. 'Tijaniyya', 'laïcité', 'Sheikh Gumi', 'pèlerinage'. Matching is accent- and case-insensitive; a multi-word query requires every word to appear somewhere in the item, so prefer a single concept per call. Write query strings and concept keywords in French for press/publication/document/index discovery even when the user's report language is not French. Academic references are multilingual, so try French and English title/abstract terms when relevant; metadata/filter labels remain French. Use the French transliteration of Islamic terms (Tabaski not 'Eid al-Adha', charia not 'sharia', Maouloud not 'Mawlid'). Returns {results:[{id,title,url,category}], ranking}; each result's `category` names its subset and the `ranking` field documents the ordering. Pass an id to `fetch` to read the full text. For filtered queries (by country, date, or newspaper) use the search_* tools instead.

NameTypeReqDescription
limitintegerMax results across all categories. Default 20, max 50.
querystringyesOne concept, name, or short phrase; use French concept terms for primary sources, and French/English terms for references
NameTypeReqDescription
countintegeryes
coverage_warningstring
deep_scanbooleanyes
limitintegeryes
limit_warningstring
rankingstringyes
requested_limitinteger
resultsarrayyes
unavailable_categoriesarray

No examples provided.

search_articles ~336

Search IWAC newspaper articles by keyword (title + OCR + AI abstracts, French and English), country, newspaper, subject, and date range. Use French concept keywords regardless of the user's report language. Matching is accent- and case-insensitive.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Togo (accents optional)
date_fromstringYYYY-MM-DD (or YYYY)
date_tostringYYYY-MM-DD (or YYYY)
hijri_monthstringIslamic lunar month: 1-12, or a name (Ramadan, Chaabane, Chawwal, Dhu al-Hijja). Pulls the articles behind an observance peak — matches only items with a full YYYY-MM-DD date.
hijri_yearintegerIslamic (Umm al-Qura) year, e.g. 1445
keywordstringConcept keyword; substring match on title, OCR text, and the French and English AI abstracts. Prefer French for the OCR; an English term still matches via the English abstract
limitintegerDefault 20, max 100 (10 and 25 with with_description)
newspaperstring
offsetinteger
subjectstring
with_descriptionbooleanInclude each article's ~500-char AI abstract (description_ai) for triage without get_article. Adds ~125 tokens/row, so `limit` defaults to 10 and caps at 25 while this is on.

No output schema declared.

No examples provided.

search_audiovisual ~347

Search audiovisual materials by keyword and metadata: francophone web video from Burkina Faso, Togo and Benin (TV reports, association and campus recordings), plus deposited Nigerian Hausa/Arabic recordings. Keyword matches title, creator, publisher, subject, spatial, language, source, the item's own description (the richest text most of these items have) and its transcription where one exists. Each row says which population it is from (`source_type`) and carries either `external_url` (a video to watch) or `media_url` (a file), never both.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional). Burkina Faso, Togo, Benin and Nigeria only — no Niger or Ivorian items
keywordstringSubstring match across audiovisual title/metadata fields
languagestringExact language value, e.g. Français | Haoussa | Arabe | Anglais | Mooré
limitintegerDefault 20, max 50
mediumstringExact carrier medium: Vidéo sur le web | DVD | CD (validated, accents optional)
offsetinteger
publisherstringSubstring on the publishing channel/broadcaster, e.g. RTB | AEEM | CERFI
source_typestringyoutube (harvested web video, the large majority) | deposited (recordings with a file, 47)
subjectstringExact subject tag — only ~27 rows carry one, so prefer publisher/keyword

No output schema declared.

No examples provided.

search_by_sentiment ~301

Filter articles by gpt-5-6-luna sentiment labels (accent/case-insensitive exact match). One model's reading, not a consensus — 4 other models scored the same articles and often disagree; get_sentiment_distribution with model:"all" shows by how much. `subjectivity` is much the weakest of the three scales, so treat a set selected on it as a lead to read rather than as a finding.

NameTypeReqDescription
centralitystringTrès central | Central | Secondaire | Marginal | Non abordé
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Togo (accents optional)
disputedstringpolarite | centralite | subjectivite — keep only articles the panel SPLIT on for that field (French field names, as stored). Selects contested readings, not a sentiment value.
limitintegerDefault 20, max 100
offsetinteger
polaritystringTrès positif | Positif | Neutre | Négatif | Très négatif | Non applicable
subjectstring
subjectivitystringTrès objectif | Plutôt objectif | Mixte | Plutôt subjectif | Très subjectif — least to most subjective. Unscored where the model answered Non abordé, so this filter also excludes those.

No output schema declared.

No examples provided.

search_documents ~154

Search the small archival-documents subset (~26 items: Islamic association reports, flyers, project documents — mostly Burkina Faso). Use French concept keywords regardless of the user's report language. Most have OCR text and an AI description. Call with no arguments to list all.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional). Corpus is mostly Burkina Faso/Togo/Benin
keywordstringConcept keyword; substring match on title, OCR, the French and English AI descriptions, and subject (accent-insensitive)
limitintegerDefault 15, max 50
offsetinteger

No output schema declared.

No examples provided.

search_images ~261

Search the IWAC photographs (30 items: mosques, radio stations, schools, signage and street scenes documented during fieldwork). Keyword matches title, creator, subject, place and the rare caption. Each result carries `image_url` (the full-resolution file), `coordinates` ('lat, lng' where known) and the canonical IWAC page. Call with no arguments to list all. Captions are almost never present, so prefer subject/place filters over keywords, or semantic_search_images when it is enabled.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)
creatorstringPhotographer name (substring match)
date_fromstringYYYY-MM-DD (or YYYY)
date_tostringYYYY-MM-DD (or YYYY)
keywordstringFrench concept keyword; substring match on title, creator, subject, place and caption
limitintegerDefault 20, max 50
offsetinteger
spatialstringExact place name, e.g. Ouagadougou (pipe-aware)
subjectstringExact subject tag (pipe-aware)

No output schema declared.

No examples provided.

search_index ~120

Search the IWAC authority index (persons, places, organisations, events, subjects) by name. Accent/case-insensitive.

NameTypeReqDescription
index_typestringExact type (accents optional), validated against: Personnes | Lieux | Organisations | Événements | Sujets | Notices d'autorité. An unrecognised value returns an error listing the valid types.
keywordstringyesSearch term matched against the entry title
limitintegerDefault 20, max 100
offsetinteger

No output schema declared.

No examples provided.

search_publications ~310

Search Islamic publications (periodical issues, books). `keyword` matches title, subject, table of contents, and full OCR text (TOC hits come back as matching_toc_entries); use French concept keywords regardless of the user's report language. Filter by newspaper/series, subject, country and year. Use list_periodicals to discover series titles, and get_publication_fulltext for keyword excerpts from a single issue.

NameTypeReqDescription
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Togo (accents optional)
date_fromstringEarliest year, YYYY
date_tostringLatest year, YYYY
hijri_monthstringIslamic lunar month: 1-12, or a name (Ramadan, Chaabane, Chawwal, Dhu al-Hijja). Matches only issues with a full YYYY-MM-DD date — ~83% of them.
hijri_yearintegerIslamic (Umm al-Qura) year, e.g. 1445
keywordstringFrench concept keyword; substring match on title + subject + table of contents + OCR (accent-insensitive)
limitintegerDefault 20, max 100
newspaperstringPeriodical/series title (see list_periodicals)
offsetinteger
subjectstringSubject tag (~87% of issues are tagged)

No output schema declared.

No examples provided.

search_references ~357

Search academic references (journal articles, book chapters, theses, books, reports) by keyword and metadata. `keyword` is a single substring match over title + abstract, so search ONE term per call (combined terms like 'pèlerinage Mecque' miss results). References are multilingual: try French and English title/abstract keywords when relevant; metadata/filter values such as `reference_type` and `language` use French labels. Results include a short abstract snippet — use get_reference for the full abstract and bibliographic detail.

NameTypeReqDescription
authorstring
countrystringExact country name: Benin | Burkina Faso | Côte d'Ivoire | Niger | Nigeria | Togo (accents optional)
date_fromstringEarliest year, YYYY
date_tostringLatest year, YYYY
keywordstringOne French or English concept keyword; substring match on title + abstract (one term per call, accent-insensitive)
languagestringe.g. Français | Anglais
limitintegerDefault 20, max 100
offsetinteger
reference_typestringSubstring match. Values: Article de revue | Chapitre de livre | Livre | Mémoire de maitrise | Rapport | Thèse de doctorat | Communication scientifique | Compte rendu de livre | Article d'encyclopédie…
subjectstringSubject tag (sparse: ~27% of references are tagged)

No output schema declared.

No examples provided.

Common questions

What is the Islam West Africa Collection (IWAC) MCP server?

Islam West Africa Collection (IWAC) is an MCP server listed in the public MCP registry as io.github.fmadore/iwac-mcp-server. Read-only access to the Islam West Africa Collection via Hugging Face datasets. This page covers its hosted endpoint (https://islam.zmo.de/mcp/).

Is the Islam West Africa Collection (IWAC) MCP server safe to use?

Islam West Africa Collection (IWAC) scores 88 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Islam West Africa Collection (IWAC) MCP server expose?

Islam West Africa Collection (IWAC) exposes 34 tools: search, fetch, search_articles, get_article, search_by_sentiment, and 29 more. Their descriptions and schemas cost roughly 7,025 tokens of context every time the server is loaded.

Does the Islam West Africa Collection (IWAC) MCP server require authentication?

No. We connected to Islam West Africa Collection (IWAC) without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Islam West Africa Collection (IWAC) MCP server still maintained?

Islam West Africa Collection (IWAC) is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.