
Security News
PHP Foundation Says Chainguard Broke Security Embargo Ahead of Emergency Patches
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.
mediawiki-mcp
Advanced tools
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.
Field notes: MediaWiki MCP: reads worked after login expired covers the expired bot-password session and loopback-only container listener failures behind the current authentication and deployment checks.
/rest.php/v1/ endpoints for page CRUD, search, and revisionsSpecial:BotPasswords with per-wiki credentialsgit clone https://github.com/ttpears/mediawiki-mcp.git
cd mediawiki-mcp
npm install
npm run build
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
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:
https://wiki.example.com (single-wiki setup).Special:BotPasswords. Leave
blank for anonymous read-only access. Credentials are stored in your OS keychain.To build the bundle locally: npm run build:mcpb.
cp .env.example .env
# Edit .env with your wiki URLs and credentials
docker compose up -d
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.
https://wiki.example.com/wiki/Special:BotPasswords)mcp) and click Createupdate-pagecreate-page, update-pagedelete-page / undelete-pageupload-file / upload-file-from-urlMediaWiki 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.
If you have multiple wikis, create a bot password on each one. You'll have a username/password pair per wiki.
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
MEDIAWIKI_BASE_URL=https://wiki.example.com
MEDIAWIKI_USERNAME=Admin@mcp
MEDIAWIKI_PASSWORD=your-bot-password-here
MEDIAWIKI_MCP_PORT=8009
MEDIAWIKI_MCP_HOST=0.0.0.0
npm start
npm run start:http
Endpoint: http://localhost:8009/mcp
.envAdd 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-here
docker-compose.override.ymlservices:
mediawiki-mcp:
build: ./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.
librechat.yamlmcpServers:
mediawiki:
type: streamable-http
url: http://mediawiki-mcp:8009/mcp
If you have
allowedDomainsconfigured in LibreChat, addmediawiki-mcpto the list.
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
https://<your-public-url>/callback.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 allowlist
Terminate 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.
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.
| 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 |
| Tool | Description |
|---|---|
search-pages | Full-text search across wikis |
search-pages-by-prefix | Title prefix search across wikis |
Parameters: query, wiki?, limit?
| 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 |
| Tool | Description |
|---|---|
get-page-history | Paginated revision list for a page |
get-revision | Get details of a specific revision by ID |
| Tool | Description |
|---|---|
list-categories | List categories with member counts (fan-out) |
get-category-members | List pages in a category (single wiki, paginated) |
| 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 |
| Tool | Description |
|---|---|
get-recent-changes | Recent edits, creations, and deletions across wikis |
| Tool | Description |
|---|---|
get-page-links | Get outgoing links or backlinks for a page |
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
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)
MIT
Contributions welcome! Please open issues or pull requests.
FAQs
MediaWiki MCP server with multi-wiki support and REST API
The npm package mediawiki-mcp receives a total of 18 weekly downloads. As such, mediawiki-mcp popularity was classified as not popular.
We found that mediawiki-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
The PHP Foundation says Chainguard broke a security embargo ahead of critical RCE patches, as leaks disrupted the coordinated release.

Security News
PHP releases emergency patches for two critical RCE vulnerabilities as agencies urge organizations to take unpatched sites offline.

Threat Research
/Security News
A supply chain attack compromised LiteLLM 1.107.0 on PyPI and Docker, spreading malware that steals cloud credentials, developer secrets, and AI provider keys.