An MCP (Model Context Protocol) server that enables Large Language Model (LLM) clients to interact with any MediaWiki wiki.
| Name | Description | Permissions |
|---|---|---|
add-wiki |
Add a wiki as an MCP resource from its URL. Disabled when allowWikiManagement is false. |
- |
compare-pages |
Diff two versions of a wiki page by revision, title, or supplied wikitext. | - |
create-page π |
Create a new wiki page. | Create, edit, and move pages |
delete-page π |
Delete a wiki page. | Delete pages, revisions, and log entries |
get-category-members |
List members of a category (up to 500 per call, paginated via continueFrom). |
- |
get-file |
Fetch a file page. | - |
get-page |
Fetch a wiki page. | - |
get-page-history |
List recent revisions of a wiki page. | - |
get-pages |
Fetch multiple wiki pages in one call (up to 50). | - |
get-recent-changes |
List recent change events across the wiki, filterable by timestamp, namespace, user, tag, type, and hide flags (up to 50 per call, paginated via continue). |
- |
get-revision |
Fetch a specific revision of a page. | - |
parse-wikitext |
Render wikitext to HTML without saving. Returns parse warnings, wikilinks, templates, and external URLs. | - |
remove-wiki |
Remove a wiki resource. Disabled when allowWikiManagement is false. |
- |
search-page |
Search wiki page titles and contents. | - |
search-page-by-prefix |
Search page titles by prefix. | - |
set-wiki |
Set the active wiki for the current session. | - |
undelete-page π |
Undelete a wiki page. | Delete pages, revisions, and log entries |
update-page π |
Update an existing wiki page. | Edit existing pages |
upload-file π |
Upload a file to the wiki from local disk. | Upload new files |
upload-file-from-url π |
Upload a file to the wiki from a URL. | Upload, replace, and move files |
mcp://wikis/{wikiKey} β per-wiki resource exposing sitename, server, articlepath, scriptpath, and a private flag.
- Credentials (
token,username,password) are never exposed in resource content. - After
add-wikiorremove-wiki, the server sendsnotifications/resources/list_changedso clients refresh.
Example list result
{
"resources": [
{
"uri": "mcp://wikis/en.wikipedia.org",
"name": "wikis/en.wikipedia.org",
"title": "Wikipedia",
"description": "Wiki \"Wikipedia\" hosted at https://en.wikipedia.org"
}
]
}Example read result
{
"contents": [
{
"uri": "mcp://wikis/en.wikipedia.org",
"mimeType": "application/json",
"text": "{ \"sitename\":\"Wikipedia\",\"server\":\"https://en.wikipedia.org\",\"articlepath\":\"/wiki\",\"scriptpath\":\"/w\",\"private\":false }"
}
]
}| Name | Description | Default |
|---|---|---|
CONFIG |
Path to your configuration file | config.json |
MCP_CONTENT_MAX_BYTES |
Byte cap for content bodies (wikitext, rendered HTML, diffs) returned by get-page, get-pages, parse-wikitext, and compare-pages. Oversized bodies are truncated with a trailing marker. Tune to the target LLM client's tool-response budget. |
50000 |
MCP_TRANSPORT |
Type of MCP server transport (stdio or http) |
stdio |
PORT |
Port used for StreamableHTTP transport | 3000 |
Note: Config is only required when interacting with a private wiki or using authenticated tools.
Create a config.json file to configure wiki connections. Use the config.example.json as a starting point.
{
"allowWikiManagement": true,
"defaultWiki": "en.wikipedia.org",
"wikis": {
"en.wikipedia.org": {
"sitename": "Wikipedia",
"server": "https://en.wikipedia.org",
"articlepath": "/wiki",
"scriptpath": "/w",
"token": null,
"username": null,
"password": null,
"private": false
}
}
}| Field | Description |
|---|---|
allowWikiManagement |
Enables the add-wiki and remove-wiki tools. Set to false to freeze the list of configured wikis. Default: true |
defaultWiki |
The default wiki identifier to use (matches a key in wikis) |
wikis |
Object containing wiki configurations, keyed by domain/identifier |
| Field | Required | Description |
|---|---|---|
sitename |
Yes | Display name for the wiki |
server |
Yes | Base URL of the wiki (e.g., https://en.wikipedia.org) |
articlepath |
Yes | Path pattern for articles (typically /wiki) |
scriptpath |
Yes | Path to MediaWiki scripts (typically /w) |
token |
No | OAuth2 access token for authenticated operations (preferred) |
username |
No | Bot username (fallback when OAuth2 is not available) |
password |
No | Bot password (fallback when OAuth2 is not available) |
private |
No | Whether the wiki requires authentication to read (default: false) |
readOnly |
No | When true, hides the six π write tools from tools/list while this wiki is active. Pairs with allowWikiManagement: false for a hosted read-only endpoint. Default: false |
tags |
No | Change tag(s) to apply to every write (string or array). The tag must exist and be active at Special:Tags β see docs/configuration.md for details. |
Environment variable substitution (
${VAR}), secret sources that read from a password manager, and the plaintext-warning behavior are covered in docs/configuration.md.
Tools marked π require authentication. They are also hidden from tools/list when the active wiki has readOnly: true β see Deployment.
- Navigate to
Special:OAuthConsumerRegistration/propose/oauth2on your wiki. - Select "This consumer is for use only by [YourUsername]".
- Grant the permissions your tools need β see the Permissions column in the Tools table.
- After approval, copy the Access Token into the
tokenfield for that wiki inconfig.json.
OAuth2 requires the OAuth extension on the wiki.
When using the HTTP transport, the server accepts a standard OAuth 2.1 Authorization: Bearer <token> header on each request (per the MCP authorization spec). Any MCP client that supports HTTP transport authentication can be configured to send it, allowing each client to act as its own wiki user rather than sharing the config.json identity.
Example with Claude Code:
claude mcp add --transport http my-wiki https://wiki.example.org/mcp \
--header "Authorization: Bearer <your-access-token>"When no header is present, the server falls back to config.json credentials or anonymous access. See docs/configuration.md for details, precedence, trust-boundary guidance, and reverse-proxy requirements.
If the OAuth extension isn't available, create a bot password at Special:BotPasswords and set username and password in config.json instead of token.
Install in Claude Desktop
Follow the guide, use following configuration:
{
"mcpServers": {
"mediawiki-mcp-server": {
"command": "npx",
"args": [
"@professional-wiki/mediawiki-mcp-server@latest"
],
"env": {
"CONFIG": "path/to/config.json"
}
}
}
}Install in VS Code
code --add-mcp '{"name":"mediawiki-mcp-server","command":"npx","args":["@professional-wiki/mediawiki-mcp-server@latest"]}'Install in Cursor
Go to Cursor Settings -> MCP -> Add new MCP Server. Name to your liking, use command type with the command npx @professional-wiki/mediawiki-mcp-server. You can also verify config or add command like arguments via clicking Edit.
{
"mcpServers": {
"mediawiki-mcp-server": {
"command": "npx",
"args": [
"@professional-wiki/mediawiki-mcp-server@latest"
],
"env": {
"CONFIG": "path/to/config.json"
}
}
}
}Install in Windsurf
Follow the guide, use following configuration:
{
"mcpServers": {
"mediawiki-mcp-server": {
"command": "npx",
"args": [
"@professional-wiki/mediawiki-mcp-server@latest"
],
"env": {
"CONFIG": "path/to/config.json"
}
}
}
}Install in Claude Code
Follow the Claude Code MCP docs.
Run the below command, optionally with -e flags to specify environment variables.
claude mcp add mediawiki-mcp-server npx @professional-wiki/mediawiki-mcp-server@latest
You should end up with something like the below in your .claude.json config:
"mcpServers": {
"mediawiki-mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"@professional-wiki/mediawiki-mcp-server@latest"
],
"env": {
"CONFIG": "path/to/config.json"
}
}
},Install in Gemini CLI
Run:
gemini extensions install https://github.com/ProfessionalWiki/MediaWiki-MCP-ServerThis installs the extension from the latest GitHub Release. To pin a specific version, append --ref=<tag> (for example --ref=v0.6.5).
See the Gemini CLI extensions documentation for how to update, list, or uninstall extensions.
Running the server as a remote HTTP endpoint for other users has its own configuration requirements β see docs/deployment.md.
Defaults are safe for single-user use. Before exposing the HTTP transport to others, lock down three things:
- Trust the proxy, not the header. The server forwards any
Authorization: Bearerheader straight to MediaWiki β authentication is the reverse proxy's job. Terminate TLS there, and don't expose the MCP port directly on an untrusted network. See docs/configuration.md β reverse proxy requirements. - Pair
MCP_BINDwithMCP_ALLOWED_HOSTSandMCP_ALLOWED_ORIGINS. The HTTP transport binds to127.0.0.1by default. When you open it up withMCP_BIND=0.0.0.0, setMCP_ALLOWED_HOSTSto the hostnames your proxy forwards andMCP_ALLOWED_ORIGINSto the browser origins allowed to call the server β these block DNS-rebinding and cross-origin attacks respectively. - Uploads are opt-in.
upload-fileis disabled until you list allowed directories inuploadDirsorMCP_UPLOAD_DIRS. See docs/configuration.md β upload directories.
Report a vulnerability via GitHub's security advisory form β full policy in SECURITY.md.
Contributions are welcome β pull requests and issues (bugs, feature requests, suggestions) both work.
- Working on tool code? Start from AGENTS.md for repo layout, commands, and testing patterns.
- Adding or modifying a tool? Read docs/tool-conventions.md β it covers description voice, parameter docs, annotation hints, and MediaWiki terminology conventions.
- Running a release? See docs/releasing.md.
This project is licensed under the MIT License. See the LICENSE file for details.