Databases
zmo.de
Search and retrieve documents from the Islam West Africa Collection, a database of newspapers, publications, and archives.
ENDPOINT 1
https://islam.zmo.de/mcp
MCP server metadata
- Name
- iwac-mcp-server
- Version
- 3.5.0
The Islam West Africa Collection (IWAC) archives francophone West African newspaper articles, Islamic publications, archival documents, audiovisual records, fieldwork photographs, and academic references on Islam and Muslim societies in Benin, Burkina Faso, Côte d'Ivoire, Niger, Nigeria, and Togo. WORKFLOW: start with `search` (a concept or name), then `fetch` an id from the results to read the full text. The unified `search` matches each word of a multi-word query independently — every word must appear somewhere in the item — so 'pèlerinage Mecque' narrows results rather than failing; prefer a single concept per call. The finer search_* tools' `keyword` filter instead does ONE literal substring match, so for those search one term at a time ('pèlerinage', then 'Mecque'). When many items match, weigh result counts and AI abstracts before fetching full texts. Beyond search/fetch, finer tools exist (search_articles, search_publications, search_references, search_index, search_documents, plus get_* and list_*) with country, newspaper, subject, and date filters — prefer the `subject` filter over keywords for curated themes. For trends over time, call get_temporal_distribution (counts per year or month under the same filters) instead of paging through search results. To characterise a whole set rather than read it, the aggregate tools answer in one call what paging never will: get_topic_distribution (how it spreads over 30 precomputed LDA topics), get_field_distribution (rank its subjects, places, authors or languages), get_cooccurrence (what is discussed alongside what), and get_lexical_metrics (readability, lexical richness, length). All matching is accent- and case-insensitive; country filters take exact names (Benin, Burkina Faso, Côte d'Ivoire, Niger, Nigeria, Togo). ISLAMIC CALENDAR: coverage driven by observances is invisible on a Gregorian axis — the lunar year drifts ~11 days a year, so over 1961-2025 each observance smears across all twelve Gregorian months. For that question call get_temporal_distribution with granularity=lunar_month, which pools every year into the twelve lunar months (Ramadan, Dhu al-Hijja/hajj and Shawwal/Korité all run well above the even split). calendar=hijri with granularity=year|month gives a Hijri time series instead. To read the items behind a peak, search_articles / search_publications take hijri_month (1-12, or a name in either transliteration — Ramadan, Chaabane, Dhou al-hijja) and hijri_year. Lunar dates are precomputed with the Umm al-Qura tables and need a full YYYY-MM-DD, so items dated only to a year or month are reported in imprecise_date_count and are ABSENT from lunar counts, not zero. They do not exist for references (an academic imprint date has no meaningful lunar reading). FULL-TEXT COVERAGE: this is the public dataset, and OCR full text ships only for items whose content is public on islam.zmo.de — about 61% of articles (7,546/12,349) and 86% of publications (1,298/1,501). Titles, subjects and AI abstracts (French AND English) are searchable for ALL items, so nothing is invisible, but the full-text half of a keyword match covers only those shares. Call get_collection_stats for the live `fulltext_coverage` figures, treat keyword totals as a floor rather than a corpus-wide census, and disclose this whenever a count carries an argument. CALL ECONOMY: hosts stop a turn after roughly 20 tool calls, and the cap counts turns of the tool loop rather than the calls within one, so issue independent calls together in a single message rather than one at a time. Pick the aggregate tool whose numbers answer the question instead of running the family over the same filter. The stats and distribution tools render their own chart where the host supports it, at no extra call: never rebuild those numbers as a separate chart or artifact, and quote the figures in prose so the answer stands where nothing renders. RESULTS & ERRORS: list/search tools return a pagination envelope — read `total_matches` to gauge scale without paging, and request a sane `limit` (an over-large one is capped visibly via `requested_limit` + `limit_warning`, never silently dropped). Enumerated filters (`country`, `polarity`, `centrality`, `index_type`) are validated: an invalid value returns {error, valid_values} to self-correct — an error to fix, not a finding — whereas a VALID value with 0 rows is a real absence (there is no Nigerian press, so country='Nigeria' on search_articles is genuinely empty). Free-text filters (newspaper, subject, author, reference_type, language) are NOT validated, so a typo there returns 0 silently — sanity-check them. On list_locations / list_persons, `country` means 'mentioned in records from that country' (not 'located there') and `frequency` is a collection-wide total; the response restates this in a `note`. If `search` cannot load a subset it still returns the rest and names the missing ones in `unavailable_categories` + `coverage_warning` — those categories are ABSENT from the results, not empty, so retry or use their own search_* tool before concluding a term is unattested there. REPORT LANGUAGE: write the final report, synthesis, and follow-up questions in the language of the user's question. If the question is mixed, use its dominant language. QUERY LANGUAGE: formulate keyword/substr search strings and concept keywords in FRENCH for press articles, publications, documents, and index searches, even when the user asks in another language (laïcité, confrérie, pèlerinage, enseignement islamique). Academic references are multilingual: search title/abstract keywords in French and English when relevant, while keeping metadata/filter values such as reference_type and language in French. Keep proper names and canonical filter values exact. TRANSLITERATION: Arabic-Islamic terms appear in FRENCH transliteration — search the French form and try variants: Tabaski or Aïd el-Kébir (not 'Eid al-Adha'); Korité or Aïd el-Fitr; Maouloud/Mouloud (not 'Mawlid'); charia (not 'sharia'); confrérie; Wahhabisme. RESEARCH WORKFLOW: this server also serves its own operating manual as a resource. If you do not already have the `iwac-mcp` skill loaded, read `skill://iwac-mcp/SKILL.md` before a substantial research task. It carries the five-phase method, French search strategy and reporting conventions these tools assume. Its reference files (`skill://iwac-mcp/references/…`, listed in `skill://iwac-mcp`) are meant to be read on demand, not upfront. CITATIONS: every result has a `url` field such as https://islam.zmo.de/s/afrique_ouest/item/28576 — always cite IWAC items using this full URL (rendered as a markdown link), never a short form like "art. #28576" or "item 28576". CAVEATS: coverage is uneven — Niger is thin (one newspaper, 2018 on) and Nigeria has NO press articles (audiovisual only), so disclose this in any cross-country claim. The press is ~96% francophone, reflecting Western-educated Muslim voices more than Arabic-trained (arabisant) leaders. Never present results as exhaustive — absence of evidence is not evidence of absence. Polarity/sentiment fields are AI-derived, not editorial ground truth; press coverage reflects what was published, not necessarily what happened.
Known tools 34
searchSearch 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).
Inferred read-onlyfetchRetrieve the full text and metadata of one IWAC item by an id returned from `search` (format '<category>:<number>', e.
Inferred read-onlysearch_articlesSearch IWAC newspaper articles by keyword (title + OCR + AI abstracts, French and English), country, newspaper, subject, and date range.
Inferred read-onlyget_articleGet one article (by id): full metadata, the AI abstract (description_ai), AI sentiment, and OCR text.
Inferred read-onlysearch_by_sentimentFilter articles by gpt-5-6-luna sentiment labels (accent/case-insensitive exact match).
Inferred read-onlyget_sentiment_distributionAggregate AI polarity, centrality and subjectivity across a filter set.
Inferred read-onlysearch_indexSearch the IWAC authority index (persons, places, organisations, events, subjects) by name.
Inferred read-onlyget_index_entryGet full details of an index entry by id (raw dataset columns, French names — Titre, Prénom, Coordonnées…).
Inferred read-onlylist_subjectsList sujets from the IWAC index, sorted by frequency (most-referenced first).
Inferred read-onlylist_locationsList lieux from the IWAC index, sorted by frequency (most-referenced first).
Inferred read-onlylist_personsList personnes from the IWAC index, sorted by frequency (most-referenced first).
Inferred read-onlyget_collection_statsOverall statistics for every IWAC subset, including `fulltext_coverage` — how many items in each subset actually carry searchable full text in this public dataset.
Inferred read-onlyget_country_comparisonCompare article counts, newspaper counts, date ranges, and gpt-5-6-luna polarity across countries.
Inferred read-onlyget_temporal_distributionCounts of matching items per year (or month) — the direct way to chart coverage trends over time instead of paging through search results.
Inferred read-onlyget_topic_distributionHow a filtered set distributes across the precomputed LDA topics, each labelled by its top terms (articles carry 30 topics and are ~99.
Inferred read-onlyget_field_distributionRank 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'.
Inferred read-onlyget_cooccurrenceHow often the top values of a multi-valued field appear on the SAME item — a subject/place co-mention matrix.
Inferred read-onlyget_place_distributionPlaces named by a filtered set of items, joined to the index's authority records so each carries coordinates where the index has them.
Inferred read-onlyget_semantic_mapA 2-D scatter of a filtered set, projected from the stored 768-dimension embeddings by PCA.
Inferred read-onlyget_similar_itemsThe items nearest to a given one in meaning, by cosine similarity over the stored embeddings.
Inferred read-onlyget_lexical_metricsReadability, lexical richness and length of the press text, averaged by year, newspaper or country.
Inferred read-onlylist_periodicalsList the Islamic periodical/series titles in the publications subset, with issue counts and year ranges.
Inferred read-onlyget_publication_fulltextFull OCR text of a publication, optionally returning ~2000-char excerpts around keyword matches (accent-insensitive; capped — see match_count vs excerpts_returned).
Inferred read-onlysearch_referencesSearch academic references (journal articles, book chapters, theses, books, reports) by keyword and metadata.
Inferred read-onlyget_referenceFull 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).
Inferred read-onlysearch_documentsSearch the small archival-documents subset (~26 items: Islamic association reports, flyers, project documents — mostly Burkina Faso).
Inferred read-onlyget_documentGet one archival document (by id): full metadata, AI description, and OCR text.
Inferred read-onlysearch_audiovisualSearch 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.
Inferred read-onlylist_audiovisualList audiovisual materials, newest first (francophone web video from Burkina Faso, Togo and Benin; deposited Nigerian Hausa/Arabic recordings).
Inferred read-onlyget_audiovisualGet 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).
Inferred read-onlysearch_imagesSearch the IWAC photographs (30 items: mosques, radio stations, schools, signage and street scenes documented during fieldwork).
Inferred read-onlyget_imageGet one photograph by id: title, photographer, capture date, place and coordinates, subjects, rights, the IIIF manifest, and the full-resolution `image_url`.
Inferred read-onlyCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.iwac-mcp-server]
url = "https://islam.zmo.de/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"iwac-mcp-server": {
"type": "http",
"url": "https://islam.zmo.de/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: iwac-mcp-server
Remote MCP URL: https://islam.zmo.de/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"iwac-mcp-server": {
"url": "https://islam.zmo.de/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"iwac-mcp-server": {
"type": "http",
"url": "https://islam.zmo.de/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "iwac-mcp-server",
"transport": "streamable-http",
"url": "https://islam.zmo.de/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
TRUST AND VERIFICATION EVIDENCE
Trust Data Available
BuiltWith Trust API v2 evidence for zmo.de was fetched 2026-07-31T10:06:46.300Z and is being refreshed.
zmo.de is assessed as Trusted: Domain has an established technology history spanning over a year.
Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.