mediawiki-mcp
An MCP server for MediaWiki instances with multi-wiki support, providing full read/write access via REST and Action APIs across multiple named wikis.
README
MediaWiki MCP Server
A Model Context Protocol (MCP) server for MediaWiki instances with multi-wiki support. Uses the modern REST API (MediaWiki 1.42+) and Action API for full read/write access across multiple named wikis.
Features
- Multi-Wiki Support: Register named wikis, fan-out searches across all of them
- REST API: Uses the modern
/rest.php/v1/endpoints for page CRUD, search, and revisions - Bot Password Auth: Logs in via
Special:BotPasswordswith per-wiki credentials - Page Operations: Read, create, update, delete, and undelete pages
- Search: Full-text and prefix search across all registered wikis
- File Operations: Get file metadata, upload files from data or URL
- Category Browsing: List categories and their members with pagination
- History & Revisions: Access revision history, view individual revisions
- Recent Changes: Track wiki activity across all wikis
- Link Analysis: Explore outgoing links and backlinks
- Pagination: All list endpoints support continuation tokens
- Retry Logic: Exponential backoff on 429/5xx errors
Installation
Prerequisites
- Node.js 18 or higher
- MediaWiki 1.42 or higher
Local Installation
git clone https://github.com/ttpears/mediawiki-mcp.git
cd mediawiki-mcp
npm install
npm run build
Claude Code Installation
Register the published npm package directly with claude mcp add. Repeat --env for each variable, put all flags before the server name, and use -- to mark the start of the spawned command. --scope picks where the entry lives: local (default, current project), user (every project), or project (.mcp.json for team check-in).
Single-wiki:
claude mcp add mediawiki \
--scope user \
--env MEDIAWIKI_BASE_URL=https://wiki.example.com \
--env MEDIAWIKI_USERNAME=Admin@mcp \
--env MEDIAWIKI_PASSWORD=your-bot-password \
-- npx -y mediawiki-mcp
Multi-wiki — register wikis as Name:URL pairs in MEDIAWIKI_WIKIS, then provide MEDIAWIKI_USERNAME_<NAME> and MEDIAWIKI_PASSWORD_<NAME> per wiki (uppercase). MEDIAWIKI_DEFAULT_WIKI picks the wiki used when a tool call doesn't specify one:
claude mcp add mediawiki \
--scope user \
--env MEDIAWIKI_WIKIS=Main:https://wiki.example.com,Dev:https://dev.wiki.example.com \
--env MEDIAWIKI_DEFAULT_WIKI=Main \
--env MEDIAWIKI_USERNAME_MAIN=Admin@mcp \
--env MEDIAWIKI_PASSWORD_MAIN=your-bot-password \
--env MEDIAWIKI_USERNAME_DEV=Admin@mcp \
--env MEDIAWIKI_PASSWORD_DEV=your-bot-password \
-- npx -y mediawiki-mcp
Docker Installation
cp .env.example .env
# Edit .env with your wiki URLs and credentials
docker compose up -d
Authentication
This server uses MediaWiki bot passwords for API authentication. Bot passwords are scoped credentials that limit what the bot can do, separate from your real account password.
Creating a Bot Password
- Log in to your MediaWiki wiki as a user with the permissions you want the bot to have
- Navigate to Special:BotPasswords (e.g.,
https://wiki.example.com/wiki/Special:BotPasswords) - Enter a bot name (e.g.,
mcp) and click Create - Select the grants (permissions) the bot needs:
- High-volume (bot) access — required for API usage
- Edit existing pages — for
update-page - Edit protected pages — if the bot needs to edit protected pages
- Create, edit, and move pages — for
create-page,update-page - Delete pages and revisions — for
delete-page/undelete-page - Upload, replace, and move files — for
upload-file/upload-file-from-url - Patrol changes to pages — if using activity monitoring
- Rollback changes to pages — if using rollback features
- Click Create to generate the password
MediaWiki will display credentials in this format:
Username: Admin@mcp
Password: your-bot-password-here
You need both values. The username (Admin@mcp) goes in MEDIAWIKI_USERNAME_* and the password goes in MEDIAWIKI_PASSWORD_*. The server uses these to log in via the Action API (action=login) and maintains a cookie-based session for all subsequent requests.
Repeat for Each Wiki
If you have multiple wikis, create a bot password on each one. You'll have a username/password pair per wiki.
Configuration
Multi-Wiki Setup
Create a .env file (see .env.example):
# Register multiple wikis (Name:URL pairs, comma-separated)
MEDIAWIKI_WIKIS=Main:https://wiki.example.com,Dev:https://dev.wiki.example.com
# Default wiki when none is specified
MEDIAWIKI_DEFAULT_WIKI=Main
# Per-wiki bot password credentials (uppercase wiki name)
MEDIAWIKI_USERNAME_MAIN=Admin@mcp
MEDIAWIKI_PASSWORD_MAIN=your-bot-password-here
MEDIAWIKI_USERNAME_DEV=Admin@mcp
MEDIAWIKI_PASSWORD_DEV=your-bot-password-here
Single-Wiki Setup
MEDIAWIKI_BASE_URL=https://wiki.example.com
MEDIAWIKI_USERNAME=Admin@mcp
MEDIAWIKI_PASSWORD=your-bot-password-here
HTTP Transport
MEDIAWIKI_MCP_PORT=8009
MEDIAWIKI_MCP_HOST=0.0.0.0
Usage
Stdio Mode (Local)
npm start
HTTP Mode (Remote / Docker)
npm run start:http
Endpoint: http://localhost:8009/mcp
LibreChat Integration
1. Add wiki credentials to the LibreChat .env
Add the MEDIAWIKI_* variables to your LibreChat .env file (e.g. /srv/docker/LibreChat/.env):
# MediaWiki MCP
MEDIAWIKI_WIKIS=Main:https://wiki.example.com,Dev:https://dev.wiki.example.com
MEDIAWIKI_DEFAULT_WIKI=Main
MEDIAWIKI_USERNAME_MAIN=Admin@mcp
MEDIAWIKI_PASSWORD_MAIN=your-bot-password-here
MEDIAWIKI_USERNAME_DEV=Admin@mcp
MEDIAWIKI_PASSWORD_DEV=your-bot-password-here
2. Add to docker-compose.override.yml
services:
mediawiki-mcp:
build: /srv/docker/mediawiki-mcp
container_name: mediawiki-mcp
env_file:
- .env
environment:
- MEDIAWIKI_MCP_HOST=0.0.0.0
restart: unless-stopped
networks:
- default
This builds the container from source and starts it alongside LibreChat. No need to install Node.js on the host — Docker handles the build.
3. Configure in librechat.yaml
mcpServers:
mediawiki:
type: streamable-http
url: http://mediawiki-mcp:8009/mcp
If you have
allowedDomainsconfigured in LibreChat, addmediawiki-mcpto the list.
Tools
All tools that accept a wiki parameter will use the default wiki when omitted. Search and listing tools fan out across all registered wikis when wiki is not specified.
Wiki Management
| Tool | Description |
|---|---|
add-wiki |
Register a new named wiki (name, url, username, password) |
remove-wiki |
Remove a registered wiki |
list-wikis |
Show all registered wikis |
Search (Fan-Out)
| Tool | Description |
|---|---|
search-pages |
Full-text search across wikis |
search-pages-by-prefix |
Title prefix search across wikis |
Parameters: query, wiki?, limit?
Page Operations (Single Wiki)
| Tool | Description |
|---|---|
get-page |
Get page content (wikitext or HTML) and metadata |
create-page |
Create a new page |
update-page |
Edit an existing page (requires latest_timestamp from get-page) |
delete-page |
Delete a page |
undelete-page |
Restore a deleted page |
History (Single Wiki)
| Tool | Description |
|---|---|
get-page-history |
Paginated revision list for a page |
get-revision |
Get details of a specific revision by ID |
Categories
| Tool | Description |
|---|---|
list-categories |
List categories with member counts (fan-out) |
get-category-members |
List pages in a category (single wiki, paginated) |
Files (Single Wiki)
| Tool | Description |
|---|---|
get-file |
Get file metadata, dimensions, and URLs |
upload-file |
Upload from base64-encoded data |
upload-file-from-url |
Upload from a remote URL |
Activity (Fan-Out)
| Tool | Description |
|---|---|
get-recent-changes |
Recent edits, creations, and deletions across wikis |
Links (Single Wiki)
| Tool | Description |
|---|---|
get-page-links |
Get outgoing links or backlinks for a page |
Development
npm run dev # Watch mode
npm run type-check # Type checking
npm run build # Build
npm test # Run tests (85 tests)
npm run test:watch # Watch mode tests
Architecture
src/
├── index.ts # Entry point (stdio)
├── stdio.ts # Stdio transport
├── http-transport.ts # Streamable HTTP transport
├── wiki-registry.ts # Named wiki storage and env parsing
├── wiki-orchestrator.ts # Fan-out routing and client management
├── types.ts # TypeScript types
├── clients/
│ ├── rest-client.ts # REST API (/rest.php/v1/)
│ └── action-client.ts # Action API (/api.php) + bot password login
└── tools/
├── index.ts # Tool registration barrel
├── wiki-tools.ts # Wiki management
├── search-tools.ts # Search (fan-out)
├── page-tools.ts # Page CRUD
├── history-tools.ts # Revision history
├── category-tools.ts # Categories
├── link-tools.ts # Links and backlinks
├── file-tools.ts # File operations
└── activity-tools.ts # Recent changes
Transport Layer (stdio.ts, http-transport.ts)
↓
WikiOrchestrator (fan-out / routing)
↓ ↓
RestClient ActionClient
(/rest.php/v1) (/api.php)
↑ ↑
└── shared session cookies (bot password login)
License
MIT
Contributing
Contributions welcome! Please open issues or pull requests.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.