wikicitation-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CROSSREF_MAILTO | No | Optional e-mail address sent to Crossref's polite pool. | |
| GOOGLE_BOOKS_API_KEY | No | Optional Google Books API key; avoids HTTP 429 on annotate_isbn_google. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_article_historyA | Retrieve the full revision history of a Wikipedia article. Returns one row per revision: art, revid, parentid, user, userid, timestamp, size, comment, tags -- sorted oldest first. Wikitext is not included; use get_article_recent for that. |
| get_article_recentA | Retrieve the latest revision of an article (at or before date_limit), including its full wikitext. Returns {"metadata": {...}, "wikitext": "..."}. |
| get_article_initialA | Retrieve the first (creation) revision of an article with its wikitext. Returns {"metadata": {...}, "wikitext": "..."}. |
| get_article_infoB | Current page metadata: pageid, title, length, last revision id, touched timestamp. A non-existent page is reported with "missing": true. |
| get_tables_allB | Info + initial revision + latest revision + full history in one call. Returns {"info", "initial", "recent", "history"}. |
| get_category_pagesB | Article titles (namespace 0) directly in a category. |
| get_pages_in_cat_tableA | Pages directly in a category as a table (pageid, ns, title, type). |
| get_subcat_tableC | Direct subcategories of a category. |
| get_subcat_multipleC | Direct subcategories for several categories (rows carry source_category). |
| get_subcat_with_depthC | Recursively collect subcategories down to |
| get_page_in_cat_multipleC | Pages in several categories (rows carry source_category). |
| get_category_historyC | Full revision history for a list of articles, concatenated. |
| get_category_recentC | Latest revision metadata and wikitext for a list of articles. Returns {"metadata": [...], "wikitext": [...]} in input order. |
| get_category_creationC | Creation (first revision) metadata for a list of articles. |
| get_doi_countB | Count DOIs in a wikitext string. Returns {"count": n}. |
| get_ref_countB | Count tags in a wikitext string. Returns {"count": n}. |
| get_url_countB | Count http(s) URLs in a wikitext string. Returns {"count": n}. |
| get_isbn_countB | Count ISBNs in a wikitext string. Returns {"count": n}. |
| get_hyperlink_countB | Count [[wikilinks]] in a wikitext string. Returns {"count": n}. |
| get_any_countB | Count matches of a regular expression in a text. Returns {"count": n}. |
| extract_citationsB | Return every {{cite ...}} template found in a wikitext string. |
| extract_wikihypelinksB | Return every [[wikilink]] found in a wikitext string. |
| replace_wikihypelinksA | Replace [[Target|Label]] with Label and [[Target]] with Target. Returns {"cleaned_text": "..."}. |
| parse_cite_typeA | Parse one {{cite ...}} template string. Returns {"cite_type": "journal", "fields": {...}}, or {} if none is found. |
| extract_with_regexC | Apply a regular expression to an article's latest wikitext. |
| extract_all_regexB | Apply all built-in patterns (doi, url, ref, isbn, wikilink, pmid, cite_all) to an article's latest wikitext. |
| parse_citationsC | Structured citation table, one row per citation template (doi, isbn, pmid, url, title, author, year, journal, publisher, accessdate). Understands the native templates of en/fr/de/es/it/pt Wikipedias. |
| parse_all_citationsC | Long-form citation table, one row per template field (variable, value, canonical_field). |
| get_citation_typesB | Count citation templates by canonical type (journal, book, web, news, ...) for an article. |
| get_source_type_countsB | Count citation templates by canonical type in a raw wikitext string. |
| get_sci_scoreB | SciScore: the fraction of an article's citation templates that cite journals (0-1). Returns {"sci_score", "article", "lang", "revid"}. |
| get_top_cited_papersB | The (up to) 40 most-cited DOIs in an article, annotated through EuropePMC and ranked by how many times the article cites them (wiki_count). |
| get_revert_countsA | Revert-tagged edits (mw-reverted, mw-undo, mw-rollback) per article in a date window, most reverted first. Wikipedia only keeps recent changes for about 30 days, so older windows return partial or empty results. The scan can take a minute or more. |
| annotate_dois_europmcB | Annotate DOIs through EuropePMC: PMID/PMCID, title, authors, journal, year, citation_count, is_open_access. One row per input DOI. |
| annotate_dois_crossrefB | Annotate DOIs through CrossRef: title, authors, journal, year, publisher, type, is_referenced_by_count, url. |
| annotate_dois_bibtexC | BibTeX entries for DOIs (CrossRef content negotiation). Returns {"bibtex_entries": [...]}. |
| annotate_isbn_googleA | Book metadata from Google Books for one ISBN. The keyless quota is small; set GOOGLE_BOOKS_API_KEY in the server's environment to avoid HTTP 429, or use annotate_isbn_openlib instead. |
| annotate_isbn_openlibC | Book metadata from Open Library for one ISBN. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 38 tools
Several clusters of tools overlap significantly: get_subcat_table / get_subcat_multiple / get_subcat_with_depth all fetch subcategories, and get_category_pages / get_pages_in_cat_table / get_page_in_cat_multiple all list pages in categories. Count and parsing tools (get_any_count vs the specific *_count tools, parse_cite_type vs parse_citations vs parse_all_citations) also blur boundaries, though descriptions provide some differentiation.
Most names follow a consistent snake_case verb_noun pattern (get_*, extract_*, parse_*, annotate_*). Minor deviations like mixing 'table', 'multiple', and 'with_depth' suffixes for parallel operations introduce slight unpredictability but overall naming is coherent.
38 tools is heavy for the scope, and much of the surface is redundant parallel variants (three subcategory getters, three page-in-category getters, two ISBN annotators, multiple citation parsers). Consolidation would reduce cognitive load.
Coverage is strong across the domain: extraction, parsing, counting, history at multiple levels (subcategory/page), external annotation via EuropePMC/CrossRef/OpenLibrary/Google Books, and derived metrics like sci_score. Minor gaps only in areas like write/update operations, which may be out of scope.