mediawiki-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mediawiki-mcpsearch for 'MCP' on the Main wiki"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 revisionsBot Password Auth: Logs in via
Special:BotPasswordswith per-wiki credentialsPage 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
Related MCP server: mediawiki-mcp-server
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 buildClaude 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-mcpMulti-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-mcpClaude Desktop (MCPB bundle)
Each release attaches a one-click mediawiki-mcp-<version>.mcpb bundle. Download it
from the latest release
and open it with Claude Desktop (Settings → Extensions → install from file, or
double-click). Claude Desktop prompts for the configuration:
Wiki API Base URL — e.g.
https://wiki.example.com(single-wiki setup).Bot Username / Bot Password — optional; from
Special:BotPasswords. Leave blank for anonymous read-only access. Credentials are stored in your OS keychain.Wikis / Default Wiki Name — optional advanced fields for multi-wiki use. Note: per-wiki credentials can't be entered through the bundle UI, so authenticated multi-wiki still needs the Docker/env setup below.
To build the bundle locally: npm run build:mcpb.
Docker 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 CreateSelect the grants (permissions) the bot needs:
High-volume (bot) access — required for API usage
Edit existing pages — for
update-pageEdit protected pages — if the bot needs to edit protected pages
Create, edit, and move pages — for
create-page,update-pageDelete pages and revisions — for
delete-page/undelete-pageUpload, replace, and move files — for
upload-file/upload-file-from-urlPatrol 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 host's .env file:
# 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: ./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.
Use as a Claude.ai Connector (OAuth)
The HTTP transport can run as a public remote connector for claude.ai,
authenticated with Microsoft Entra (OIDC) — no MediaWiki extensions required.
The server is an OAuth 2.1 broker: it presents authorization-server metadata and
Dynamic Client Registration to Claude, runs the Entra sign-in flow, and issues its
own audience-bound access tokens. Entra decides who can connect; wiki reads and
edits run on the existing per-wiki bot accounts (MEDIAWIKI_USERNAME_<WIKI> /
MEDIAWIKI_PASSWORD_<WIKI>), attributed to the Entra user in edit summaries. Only
broker session state lives in Redis (namespaced by host); no wiki credentials
or Entra tokens are stored. The stdio and LibreChat header paths are unaffected.
The connector serves the whole farm in MEDIAWIKI_WIKIS (cross-wiki fan-out). Any
tenant member can read; write tools (create/update/delete/upload) are gated
by an Entra app role (OAUTH_WRITE_ROLE, default Writer) — members without
it get read-only.
1. Register / reuse an Entra app
Reuse an existing Entra app (e.g. the bookstack connector's) or register a new one.
Add the redirect URI
https://<your-public-url>/callback.Define an app role for write access (e.g.
Writer) and assign it to the users who should be able to edit. (Reading needs no role.)
2. Configure the connector environment
MEDIAWIKI_MCP_AUTH=oauth
MEDIAWIKI_MCP_PUBLIC_URL=https://wiki-mcp.example.com # public HTTPS base URL
# the farm to serve, and per-wiki bot credentials for the actual API calls:
MEDIAWIKI_WIKIS=itops:https://itops.wiki.example.com,tech:https://tech.wiki.example.com
MEDIAWIKI_DEFAULT_WIKI=itops
MEDIAWIKI_USERNAME_ITOPS=Bot@mcp
MEDIAWIKI_PASSWORD_ITOPS=<bot password>
MEDIAWIKI_USERNAME_TECH=Bot@mcp
MEDIAWIKI_PASSWORD_TECH=<bot password>
# Entra app (OIDC):
OAUTH_TENANT_ID=<entra tenant id>
OAUTH_CLIENT_ID=<entra app client id>
OAUTH_CLIENT_SECRET=<entra app client secret>
OAUTH_WRITE_ROLE=Writer # app role granting write
# broker infra:
REDIS_URL=redis://:<password>@redis:6379 # shared broker state
MEDIAWIKI_MCP_JWT_SECRET=<random secret>
MEDIAWIKI_MCP_HOST=0.0.0.0
MEDIAWIKI_MCP_TRUST_PROXY=1 # behind a reverse proxy
# MEDIAWIKI_MCP_ALLOWED_HOSTS=wiki-mcp.example.com # optional Host allowlistTerminate TLS at your reverse proxy and forward to the server; it must be reachable
at MEDIAWIKI_MCP_PUBLIC_URL. Run the published image ghcr.io/ttpears/mediawiki-mcp
(the npm run start:http entrypoint) or locally with npm run start:http.
3. Add the connector in claude.ai
Add a custom connector pointing at https://<your-public-url>/mcp. Claude discovers
the auth server via /.well-known/oauth-protected-resource/mcp, registers itself
via DCR, and signs the user in through Entra. One sign-in covers the whole farm.
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 |
| Register a new named wiki (name, url, username, password) |
| Remove a registered wiki |
| Show all registered wikis |
Search (Fan-Out)
Tool | Description |
| Full-text search across wikis |
| Title prefix search across wikis |
Parameters: query, wiki?, limit?
Page Operations (Single Wiki)
Tool | Description |
| Get page content (wikitext or HTML) and metadata |
| Create a new page |
| Edit an existing page (requires |
| Delete a page |
| Restore a deleted page |
History (Single Wiki)
Tool | Description |
| Paginated revision list for a page |
| Get details of a specific revision by ID |
Categories
Tool | Description |
| List categories with member counts (fan-out) |
| List pages in a category (single wiki, paginated) |
Files (Single Wiki)
Tool | Description |
| Get file metadata, dimensions, and URLs |
| Upload from base64-encoded data |
| Upload from a remote URL |
Activity (Fan-Out)
Tool | Description |
| Recent edits, creations, and deletions across wikis |
Links (Single Wiki)
Tool | Description |
| 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.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ttpears/mediawiki-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server