mediawiki-mcp
v2.0.1
Published
MediaWiki MCP server with multi-wiki support and REST API
Downloads
220
Maintainers
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 buildDocker Installation
cp .env.example .env
# Edit .env with your wiki URLs and credentials
docker compose up -dAuthentication
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-hereYou 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-hereSingle-Wiki Setup
MEDIAWIKI_BASE_URL=https://wiki.example.com
MEDIAWIKI_USERNAME=Admin@mcp
MEDIAWIKI_PASSWORD=your-bot-password-hereHTTP Transport
MEDIAWIKI_MCP_PORT=8009
MEDIAWIKI_MCP_HOST=0.0.0.0Usage
Stdio Mode (Local)
npm startHTTP Mode (Remote / Docker)
npm run start:httpEndpoint: 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-here2. 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:
- defaultThis 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/mcpIf 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 testsArchitecture
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 changesTransport 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.
