Skip to content

Reading edition

Beyond Keywords

Frédérick Madore

C²DH · Luxembourg · 15 June 2026

19 slides

Contents

Slide 1

Eighth Conference on Digital Humanities and Digital History · C²DH, University of Luxembourg

Beyond Keywords

AI-Mediated Access to the Islam West Africa Collection through an MCP Server and Agent Skill

Slide 2

The Islam West Africa Collection (IWAC)

An open archive, built by one historian

Fifteen years of fieldwork and library work — Benin, Burkina Faso, Côte d'Ivoire, Togo — turned into an open-access collection.

  • Mostly newspaper clippings and Islamic publications: magazines, brochures, tracts
  • Behind it, a personal library of 30,000+ Zotero items
  • Online at islam.zmo.de
In numbers
14,700+documents
28.1Mwords
68,122pages
13document types
9,315audiovisual minutes
864references

Six countries · mostly French — also Arabic & Hausa · open access since 2023

Slide 3

The Islam West Africa Collection (IWAC)

An overview of the collection

Slide 4

The "El Hadj" problem

Why keyword search falls short

The IWAC faceted search interface — year slider, type, newspaper and language filters

The faceted search of the IWAC.

Keyword search has built-in problems. I mitigated what I could:

  • Spelling variants → authority files merge 20+ forms
  • Forming a query → autocomplete and facets guide you
  • Polysemy → "hadj" = pilgrimage and the "El Hadj" honorific
The real gap The search box assumes you already know it.

Slide 5

Why not just ask AI?

Generic answers, dubious sources

A Gemini chat answering a question about Islam in Kpalimé, Togo in the 1990s — a long, fluent reply citing obscure sources

Gemini on Islam in Kpalimé: generic and dubiously sourced. See the chat ↗

  • People now ask AI directly, not a search box
  • Chatbots often invent citations — worse for Africa, with far less training data
  • Web search helps, but the sources are often random
  • The IWAC? Crawled by AI bots, yet barely used and badly cited

Slide 6

Two layers: plumbing and intelligence

The MCP server — plumbing

Structured, read-only access to the collection that any AI assistant can call.

The agent skill — intelligence

The methodology for using it well — a historian's method, written down.

The claim to hold onto The skill is where the real contribution lives. github.com/fmadore/iwac-mcp-server

Slide 7

Why build a server at all?

An MCP server connects an AI assistant to one outside system. Like an app to your accounts:

Gmail Google Calendar Google Drive Slack GitHub IWAC
RAG

Retrieval-augmented generation. Proven for GLAM, but it chunks records, and retrieves by a similarity the user never sees.

Model Context Protocol logoMCP

Ingests nothing. The data stays put; the server holds the logic; the model just asks and answers. modelcontextprotocol.io

Slide 8

Agent skills

What is a skill.md?

A skill is a methods handbook for a machine reader — loaded only when a request matches its purpose.

  • Competence gained by reading, with no retraining
  • Versioned, reviewed, refined — a prompt is typed once and lost
  • An open standard across agents — no vendor lock-in, like MCP
  • Born in coding agents — the format fits any domain
my-skill/
├── SKILL.md          # Required: metadata + instructions
├── scripts/          # Optional: executable code
├── references/       # Optional: documentation
├── assets/           # Optional: templates, resources
└── ...               # Any additional files or directories

The standard layout of an agent skill — SKILL.md is the only required file.

Slide 9

The IWAC MCP server

  • "Newspaper articles on Islam in Abidjan, in the 1990s" articlesplace · period
  • "Islamic publications on secularism in Togo and Benin" publicationssubject · country
  • "Academic references on Muslim women in Burkina Faso" referencessubject · country

One plain-language request; the model picks the tools and combines the filters.

22 tools · 6 subsets
  • Read-only: search, full text, authority records, sentiment, stats
  • Verifiable: every call a lookup, no AI at query time
  • Traceable: every result links to its canonical record
  • Two ways in: one-click for Claude Desktop, a hosted URL for ChatGPT

Slide 10

Search by meaning, not words

1 · Ask Your question

« Islam et laïcité au Burkina Faso »

Plain language — and any language works.

2 · Embed Turned into coordinates

An embedding model (Gemini) maps the text to 768 numbers — one point in a space of meaning.

laïcité → [0.07, -0.12, 0.93, …]

Every article was mapped the same way, in advance.

3 · Match Nearest points win

Cosine similarity ranks all 12,000+ articles by how close they sit in that space.

Slide 11

Keyword vs. meaning — in the slide itself

laïcité au Burkina Faso
2 documents · exact-string match only
« … le débat sur la laïcité au Burkina Faso … »
L’Observateur Paalga · 1994
« … la laïcité de l’État et les écoles … »
Sidwaya · 2002
The blind spot

Dozens of articles are about secularism but never type the word — schooling, family-code debates, the Arabic press. Keyword search cannot see them. Click By meaning.

7 documents · ranked by meaning · across languages cosine similarity
Écoles franco-arabes et le programme nationaleducation · state0.89
Le code de la famille relance la controversefamily law0.86
L’État et les associations islamiquesreligion · state0.84
النظام العلماني ودوره في التعليمArabic · cross-lang0.81
Neutralité religieuse de l’administration publiquegovernance0.79

None contain the word laïcité — all are about the idea, including the Arabic record keyword search would never reach. · illustrative slice

Slide 12

The IWAC skill in motion

A five-phase research method

Two depths, chosen up front:

Briefdefault a quick scan and a few close reads
Extended the full five-phase analysis below
  1. Scoping — what does the collection even hold for this question, before any keyword?
  2. Systematic searching — French + transliteration variants (Tabaski = Eid al-Adha); log every search, including null results
  3. Deep reading — full text and sentiment, article by article
  1. Triangulation — cross-check articles, publications, references, index entries
  2. Synthesis — findings with source attribution and confidence grades
The point Twenty-two tools give reach. The "judgement" lives in the skill.

Slide 13

What a server never could

Discipline, disclosure — and a new role

Slide 14

The curator's method, in full

iwac-mcp · SKILL.md

---
name: iwac-mcp
description: |
  Structured academic research workflow for the Islam West Africa Collection (IWAC) MCP server.
  Use this skill when:
  - Conducting research queries through the IWAC MCP server (iwac-mcp-server tools)
  - Investigating questions about Islam and Muslims in West Africa using IWAC data
  - Performing systematic searches across IWAC articles, publications, index, references, or documents
  - Analyzing sentiment or temporal patterns in West African press coverage
  - Comparing coverage across countries, newspapers, or time periods
  - Building structured research outputs with source attribution and confidence grading
  This skill provides a five-phase research methodology, search strategy guidance for francophone sources, bias awareness, and documentation conventions. It complements the iwac-data skill (data schemas + Omeka S API).
---

# IWAC MCP Research Workflow

Structured methodology for academic research using the IWAC MCP server's 22 tools (20 core + 2 optional semantic). Adapted from ALA-compliant archival research practices. Applies to server **v0.6.0+** — all matching is accent- and case-insensitive, and result objects use short English keys (`id`, `date`, `polarity`, `centrality`, `subjectivity`, `description_ai`, `url`).

## Prerequisites

Load reference files **as needed**, not all upfront:

1. **references/tools-by-phase.md** — all 22 tools with parameters, defaults, and verified filter vocabularies. Read before the first search of a session.
2. **references/research-domains.md** — French search terms and transliteration variants by domain. Read when crafting search-term variants (Extended mode, or when a Brief search comes back thin).
3. **references/biases-and-limitations.md** — collection biases, coverage gaps, sentiment caveats. Read before writing the synthesis.
4. **references/capabilities-overview.md** — plain-language description of the collection and recommended ways into the data. Read when the user asks what you can do (see "Capability Questions" below).

For data schema and Omeka S API details, defer to the `iwac-data` skill.

## Capability Questions

When the user asks what you can do with IWAC ("what can you do?", "qu'est-ce que tu peux faire ?", "what's in this collection?", "how could I search this?"), do **not** launch the research workflow, present the depth choice, or enumerate the 22 tools. Read **references/capabilities-overview.md** and answer in plain language, in the user's language:

1. One short paragraph on what the collection is and covers.
2. The main ways into the data (keyword, curated themes, people/organizations, semantic, sentiment, periodicals, scholarship) — described as research moves, not tool names.
3. Three to five example research questions, tailored to anything the user has already mentioned.

Close by inviting a research question. Present the Brief/Extended choice only once an actual question is on the table.

## Research Depth

**Before any research, present the user with an explicit choice:**

> How deep should I go?
> - [ ] **Brief** -- Quick overview: article counts, key titles, top actors, plus a close reading of 2-3 key articles.
> - [ ] **Extended** -- Full 5-phase analysis: multiple search variants, full-text reading, sentiment comparison, cross-subset triangulation, confidence grading. Takes considerably more time — and tokens — than Brief.

Do not attach time estimates to the options. Wait for the user to choose before proceeding.

### Brief mode workflow
1. Run Phase 1 scoping (stats, country comparison, relevant subjects) in a single parallel batch — but only the calls the question actually needs. Corpus sizes, country lists, and filter vocabularies are already documented in this skill and tools-by-phase.md; don't spend calls rediscovering them.
2. Run Phase 2 with **one primary search per filter combination** (e.g., subject tag + country + date range). Skip keyword variants and supplementary searches. Use `limit=10` and `with_description=true` so each hit carries its AI abstract.
3. Run a **lightweight Phase 3**: pick the 2-3 most relevant articles (triage on `description_ai`) and call `get_article` to read their OCR text. Skip `get_sentiment_distribution`.
4. Skip Phase 4 (triangulation).
5. Produce a Phase 5 synthesis that draws on both metadata and the articles read. Keep it concise but substantive.

### Extended mode workflow
Follow the full five-phase workflow described below. Use multiple search term variants, read key articles in full, run topic-specific sentiment analysis, and produce a detailed synthesis with confidence grading.

If the user does not specify, **default to Brief mode** and mention that an extended analysis is available.

## Token Budget

Comprehensiveness has a token price — spend deliberately. The goal is a well-evidenced answer, not an exhaustive dump.

- **Brief** should stay around ≤25k tokens of tool output: one scoping batch, a handful of searches at limit 10, 2-3 full articles.
- **Extended** typically lands at 50-120k tokens of tool output. Past that, returns diminish — stop searching and synthesize what you have.
- **Stop rules:** when two consecutive search variants surface no new items, that dimension is saturated — move on. When `total_matches` exceeds ~50, analyze the metadata (counts, dates, newspapers, sentiment) instead of reading items; read only the triaged finalists.
- **Counting ≠ fetching.** `total_matches` and the stats/distribution tools answer "how much / when / what tone" without retrieving rows. Never page through a large result set, and never set limit=100 "just in case".
- **Full text is the expensive part** (`get_article` ≈ 1-7k tokens; `get_publication_fulltext` up to ~7k, plus ~1.6k when the issue has a TOC). Cap full reads at 2-3 (Brief) / 6-8 (Extended), always triaged on `description_ai` first.
- If a question genuinely requires bulk reading (dozens of full articles), say what it will cost and confirm with the user before doing it.

## Critical Search Rules

1. **Articles and publications are French-language sources** — develop keyword terms in French. **References are bilingual** (537 FR / 300 EN): always search them with French AND English terms. Semantic search tools accept queries in any language.
2. **Accents no longer matter for matching** (server ≥ 0.6.0 folds accents and case on both sides): `pelerinage` finds `pèlerinage`, `Bénin` finds `Benin`, `These` finds `Thèse de doctorat`. Still write proper French in outputs.
3. **Country filters take exact names** — `Benin`, `Burkina Faso`, `Côte d'Ivoire`, `Niger`, `Togo` (+ `Nigeria` in references/index/audiovisual only). Partial names ("Burkina") return nothing. Niger no longer over-matches Nigeria.
4. **Know each tool's keyword scope.** Articles: title + OCR + AI abstract. Publications: title + subject + OCR. References: title + abstract, **one term per call** (substring match — "pèlerinage Mecque" as one string misses everything). For curated themes, prefer the `subject` parameter over `keyword`.
5. **Tables of contents now cover part of the publications corpus** (verified June 2026): 325/1,501 issues (~22%) have a TOC + embedding — complete for 17 of the 25 series (the smaller magazines: Le Rendez-Vous, Plume Libre, L'Appel, Alif, La Preuve, An-Nasr Trimestriel, Le CERFIste…), but absent for the three largest (Islam Info 695 issues, An-Nasr Vendredi 318, Islam Hebdo 122). `search_publications` keyword also matches TOCs and returns the matching entries as `matching_toc_entries`; `semantic_search_publications` is genuinely useful for the TOC-covered series. For the big three series, navigate via `list_periodicals`, `subject` (87% tagged), country, and year; use OCR `keyword` for content, and `get_publication_fulltext` (capped keyword excerpts) to read inside one long issue.
6. **Triage on AI abstracts before reading OCR.** `search_articles(with_description=true, limit≤10)` returns each article's ~500-char `description_ai` — usually enough to pick the 2-3 articles worth a full `get_article` (~1k tokens each).
7. **Niger and Nigeria are dramatically underrepresented.** Always disclose this in cross-country comparisons (see biases-and-limitations.md §2).

## The Five-Phase Workflow

### Phase 1 -- Scoping

**Goal:** Establish what IWAC contains for the research question and identify coverage boundaries.

**Actions:**
1. Use `get_collection_stats` to understand overall scale (articles, publications, index entries)
2. Use `get_country_comparison` to assess geographic coverage relevant to the question
3. Use `get_newspaper_stats` with country filter to identify which newspapers cover the topic
4. Use `list_subjects` to discover relevant subject terms; `list_periodicals` if Islamic publications are in scope
5. Identify which subsets are relevant: articles (press), publications (Islamic media), references (scholarship), documents (association papers), index (authority records)

**Constraint:** Keep `limit` low (5-10) during scoping to save tokens. Use brief queries first, then drill down.

### Phase 2 -- Systematic Search

**Goal:** Map the search space using structured queries, building a record of what exists and what is absent.

**Actions:**
1. Develop search terms in French (primary) with transliteration variants for Arabic/Islamic terminology
2. Search incrementally -- one term or filter combination at a time
3. Use `search_articles` with keyword, country, newspaper, subject, and date range filters. Results include Gemini sentiment (`polarity`, `centrality`, `subjectivity`) inline; add `with_description=true` for AI abstracts.
4. Use `semantic_search_articles` (if enabled) for conceptual or thematic queries where exact keywords may miss relevant articles -- queries can be in any language. Use alongside keyword search, not as a replacement.
5. Use `search_index` to find persons, organizations, places, and events; note the canonical form, then search articles with it
6. Use `search_by_sentiment` for specific polarity/centrality patterns (supports `subject` for topic-specific slices)
7. Use `search_publications` (series/subject/country/year filters; keyword matches title + subject + TOC + OCR, with TOC hits returned as `matching_toc_entries`) for Islamic community media; `semantic_search_publications` (if enabled) works for the 17 TOC-covered series
8. Use `search_references` for academic literature -- French AND English terms, one keyword per call; drill into promising hits with `get_reference` (full abstract, 51% have one)
9. Use `search_documents` when grassroots/association sources could matter (26 items, mostly Burkina Faso)
10. **Record every search and its result count**, including zero-result searches -- null results constrain interpretation
11. Use `date_from`/`date_to` for temporal filtering -- articles take `YYYY-MM-DD` or `YYYY` (day precision); publications and references take years

**Constraint:** Substring matching only -- no wildcards, fuzzy, or Boolean operators. Accent/case differences are handled by the server.

### Phase 3 -- Deep Reading

**Goal:** Examine individual items in detail for high-value hits.

**Actions:**
1. Use `get_article` for full article detail: metadata, `description_ai`, sentiment, OCR text (capped at 25k chars)
2. Use `get_reference` for the full scholarly abstract and host-work details
3. Use `get_publication_fulltext` with a `keyword` for capped excerpts inside a long issue (`match_count` tells you the total; `excerpts_returned` what you got)
4. Use `get_index_entry` / `get_document` for authority records and archival documents
5. Cross-reference article subjects and spatial fields with index entries
6. Note the IWAC URL for each item to enable verification against the original source

**Constraint:** Triage on `description_ai` first; request full OCR only for the finalists.

### Phase 4 -- Triangulation

**Goal:** Verify findings against multiple evidence types and identify gaps.

**Actions:**
1. Cross-reference MCP findings across subsets (articles vs. publications vs. references vs. documents vs. index)
2. Use `get_sentiment_distribution` with `subject` filter to compare topic-specific sentiment against the collection baseline (e.g., `subject="Laïcité", country="Burkina Faso"` vs. the whole BF corpus)
3. Use `search_articles` results (which include sentiment inline) to build topic-specific sentiment tables without extra calls
4. Flag coverage gaps: which countries, time periods, or languages are underrepresented for this question?

### Phase 5 -- Synthesis

**Goal:** Produce structured findings with explicit source attribution and confidence grading.

**Actions:**
1. Tag every claim with its **source type**: MCP article, MCP index, MCP publication, MCP reference, MCP document, MCP sentiment analysis, external source
2. Tag every claim with its **evidence strength** using the three-tier scale below
3. Document null results alongside positive findings
4. Separate primary evidence (articles, publications, documents) from secondary evidence (references, index metadata) from AI-derived evidence (sentiment, description_ai)
5. Note any limitations specific to the research question (see biases-and-limitations.md)
6. **Offer follow-up questions.** End every synthesis with 2-4 concrete follow-up research questions the user could explore next. These should branch naturally from the findings -- e.g., drilling into a specific actor, comparing with another country, examining a different time period, or exploring a related theme the data surfaced. Frame them as actionable prompts the user can pick up directly.

## Confidence Grading

| Grade | Meaning | IWAC Example |
|-------|---------|-------------|
| **Strong** | Direct attestation in multiple primary sources | Article OCR text names a person/event, corroborated by index entry and other articles |
| **Moderate** | Supported by clear but indirect evidence | Sentiment trend across multiple articles suggests a pattern; single article attestation |
| **Weak** | Inferred from limited evidence or argument from silence | Subject absent from coverage (may reflect collection gaps, not historical absence) |

## Documentation Conventions

**For MCP article citations:** Item ID, title, newspaper, date, country, IWAC URL. Example: `#5736, "La communauté musulmane célèbre le Maouloud", Togo-Presse, 2005-04-23, Togo, https://islam.zmo.de/s/westafrica/item/5736`

**For MCP index citations:** Entry ID, title, type, frequency. Example: `Index #1234, "CERFI", Organisation, frequency: 45`

**For null results:** `Search for [term] in [tool] with [parameters] returned 0 results.`

**For AI sentiment findings:** All sentiment data uses Gemini; the result keys are `polarity`, `centrality`, `subjectivity`. When comparing topics or countries, use `get_sentiment_distribution` with `subject` filter for aggregate data, or tabulate the sentiment columns from `search_articles` results.

## Arabic-Islamic Transliteration Variants

Account for French transliterations when searching:
- Mawlid = Maouloud, Maoulid, Mouloud
- Sharia = charia, chari'a
- Eid al-Adha = Tabaski, Aïd el-Kébir
- Eid al-Fitr = Aïd el-Fitr, Korité

See **references/research-domains.md** for comprehensive term lists by domain.

## Key Constraints

1. **Never present search results as exhaustive.** IWAC is a curated collection, not a complete archive. Absence of evidence is not evidence of absence.
2. **Always disclose the francophone bias.** ~96% French-language sources specifically reflect Western-educated Muslim perspectives (those who followed French-speaking, secular, or Christian school curricula). *Arabisants* -- leaders trained in madrasas who use Arabic or national languages -- are underrepresented as direct voices, though the French press regularly reports on their activities.
3. **Always disclose the Niger/Nigeria gap.** Niger has thin coverage (one newspaper, 2018+) with inconsistent subject tagging. Nigeria has no press articles at all (audiovisual only). These gaps must be stated in any cross-country analysis.
4. **Always distinguish source types.** MCP tool outputs, AI sentiment labels, AI abstracts (`description_ai`), and OCR text have different evidential status.
5. **AI sentiment is interpretive, not factual.** Gemini sentiment labels are analytical signals, not ground truth. Use topic-specific sentiment (via `subject` filter) rather than whole-corpus baselines when comparing themes.
6. **Search incrementally.** Keep limits low, search one dimension at a time, avoid retrieving full OCR text unless needed.
7. **Publications are mostly entire issues.** Individual articles within an issue are not separated; use the table of contents where one exists (17 of 25 series) and `get_publication_fulltext` keyword excerpts to localise content inside an issue.
8. **Mind the 1990-91 press-system break.** Pre-1991 articles (~11% of the corpus) come almost entirely from state or single-party organs; the private press only emerges with political liberalisation. Temporal comparisons crossing 1990 compare two different press systems (see biases-and-limitations.md §6).

https://github.com/fmadore/iwac-mcp-server

Slide 15

From a plain question to cited sources

The IWAC MCP server installed as an extension in Claude Desktop — read-only, ~22 tools, no API key for the core tools

Installed as a Claude Desktop extension — read-only, no API key for the core tools.

One real question, and the skill runs the method live.

  • Scopes the collection, then searches it in French
  • Reads the strongest hits in full
  • Answers with every claim linked to its IWAC record

Slide 16

Brief — the default depth

claude.ai/share/d37cbcb6… Full chat ↗
A Claude conversation: asked in English what the Islam West Africa Collection says about secularism in Côte d'Ivoire, the iwac-mcp skill reads its method files and then offers a Brief-or-Extended depth choice, defaulting to Brief

Claude Sonnet 4.6 · high effort

Slide 17

Extended — the full method

claude.ai/share/2bdf2009… Full chat ↗
A Claude conversation: asked about Islam in Kpalimé, Togo, the user answers 'extended', and the iwac-mcp skill begins its five-phase analysis with Phase 1 scoping

The same question we put to Gemini earlier, now answered from the IWAC.

Slide 18

The stakes

Whose infrastructure? African collections and AI extraction

GLAM-E Lab report by Michael Weinberg, June 2025 — 'Are AI Bots Knocking Cultural Heritage Offline?'

39 of 43 heritage institutions hit by AI-bot traffic spikes (Weinberg, GLAM-E Lab, 2025); Wikimedia: 65% of its costliest traffic is bots. Read it ↗

  • The default is extraction — public institutions and open-access labour subsidising commercial AI
  • MCP, a third path — the collection stays put; the institution decides what the AI sees
Yékú's paradox · 2026 Un-digitised, an African archive is invisible to AI; digitised, it's exposed to scraping — the incomplete corpus becomes the single story, the colonial library rebuilt in the training set. Read the essay ↗

Slide 19

Conclusion

A new way in for a wider public — but no replacement for archival research. It finds what you ask for, not what you weren’t looking for: the unexpected find that slow reading turns up.

Try it: connect Claude or ChatGPT to the collection — how-to on the IWAC AI-access page.

Next: a small open-source model on the server itself, answering on the website — no install, no account. github.com/fmadore/iwac-mcp-server