# MediaWiki MCP Server Connect your AI assistant to any MediaWiki wiki. Search, read, and edit wiki content using natural language. [![CI](https://github.com/olgasafonova/mediawiki-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/olgasafonova/mediawiki-mcp-server/actions/workflows/ci.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/olgasafonova/mediawiki-mcp-server)](https://goreportcard.com/report/github.com/olgasafonova/mediawiki-mcp-server) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) **Works with:** Claude Desktop, Claude Code, Cursor, ChatGPT, n8n, and any MCP-compatible tool. --- ## Documentation | Document | Description | |----------|-------------| | [QUICKSTART.md](QUICKSTART.md) | Get running in 2 minutes | | [TIETO_SETUP.md](TIETO_SETUP.md) | Connect to Tieto's Public 360° Wiki (beginner-friendly) | | [CHANGELOG.md](CHANGELOG.md) | Version history | | [ARCHITECTURE.md](ARCHITECTURE.md) | System design | | [CONTRIBUTING.md](CONTRIBUTING.md) | How to contribute | | [SECURITY.md](SECURITY.md) | Security policies | | [WIKI_USE_CASES.md](WIKI_USE_CASES.md) | Detailed workflows | --- ## What Can You Do? Once connected, just ask your AI: | You say... | What happens | |------------|--------------| | *"What does our wiki say about onboarding?"* | AI searches and summarizes relevant pages | | *"Find all pages mentioning the API"* | Full-text search across your wiki | | *"Who edited the Release Notes last week?"* | Shows revision history | | *"Are there broken links on the Docs page?"* | Checks all external URLs | | *"Strike out John Smith on the Team page"* | Applies formatting (requires auth) | | *"Convert this README to wiki format"* | Transforms Markdown → MediaWiki markup ✨ | --- ## Get Started ### Step 1: Download **Option A: Download pre-built binary** (easiest) Go to [Releases](https://github.com/olgasafonova/mediawiki-mcp-server/releases) and download for your platform. **Option B: Build from source** (requires Go 1.24+) ```bash git clone https://github.com/olgasafonova/mediawiki-mcp-server.git cd mediawiki-mcp-server go build -o mediawiki-mcp-server . ``` ### Step 2: Find Your Wiki's API URL Your wiki's API URL is usually: | Wiki type | API URL | |-----------|---------| | Standard MediaWiki | `https://your-wiki.com/api.php` | | Wikipedia | `https://en.wikipedia.org/w/api.php` | | Fandom | `https://your-wiki.fandom.com/api.php` | **Tip:** Visit `Special:Version` on your wiki to find the exact API endpoint. ### Step 3: Configure Your AI Tool **Pick your tool:** | I use... | Jump to setup | |----------|---------------| | Claude Desktop (Mac/Windows) | [Setup instructions](#claude-desktop) | | Claude Code CLI | [Setup instructions](#claude-code-cli) | | Cursor | [Setup instructions](#cursor) | | ChatGPT | [Setup instructions](#chatgpt) | | n8n | [Setup instructions](#n8n) | | VS Code | [Setup instructions](#vs-code) | | Google ADK (Go/Python) | [Setup instructions](#google-adk) | --- ## Claude Desktop Works on Mac and Windows. No terminal needed after initial setup.
Mac 1. **Open the config file:** ```bash open ~/Library/Application\ Support/Claude/claude_desktop_config.json ``` If the file doesn't exist, create it. 2. **Add this configuration** (replace the path and URL): ```json { "mcpServers": { "mediawiki": { "command": "/path/to/mediawiki-mcp-server", "env": { "MEDIAWIKI_URL": "https://your-wiki.com/api.php" } } } } ``` 3. **Restart Claude Desktop** (quit and reopen) 4. **Test it:** Ask *"Search the wiki for getting started"*
Windows 1. **Open the config file:** ``` %APPDATA%\Claude\claude_desktop_config.json ``` If the file doesn't exist, create it. 2. **Add this configuration** (replace the path and URL): ```json { "mcpServers": { "mediawiki": { "command": "C:\\path\\to\\mediawiki-mcp-server.exe", "env": { "MEDIAWIKI_URL": "https://your-wiki.com/api.php" } } } } ``` 3. **Restart Claude Desktop** (quit and reopen) 4. **Test it:** Ask *"Search the wiki for getting started"*
--- ## Claude Code CLI The fastest setup. One command and you're done. ```bash claude mcp add mediawiki /path/to/mediawiki-mcp-server \ -e MEDIAWIKI_URL="https://your-wiki.com/api.php" ``` **Test it:** Ask *"Search the wiki for getting started"* --- ## Cursor Cursor has built-in MCP support. Open **Cursor Settings** > **MCP** and add a new server, or edit the config file directly:
Mac 1. **Open the config file:** ``` ~/.cursor/mcp.json ``` 2. **Add this configuration:** ```json { "mcpServers": { "mediawiki": { "command": "/path/to/mediawiki-mcp-server", "env": { "MEDIAWIKI_URL": "https://your-wiki.com/api.php" } } } } ``` 3. **Restart Cursor**
Windows 1. **Open the config file:** ``` %USERPROFILE%\.cursor\mcp.json ``` 2. **Add this configuration:** ```json { "mcpServers": { "mediawiki": { "command": "C:\\path\\to\\mediawiki-mcp-server.exe", "env": { "MEDIAWIKI_URL": "https://your-wiki.com/api.php" } } } } ``` 3. **Restart Cursor**
--- ## ChatGPT ChatGPT connects via HTTP. You need to run the server on a machine ChatGPT can reach. **Requirements:** ChatGPT Pro, Plus, Business, Enterprise, or Education account. ### Setup 1. **Start the server with HTTP mode:** ```bash # Set your wiki URL export MEDIAWIKI_URL="https://your-wiki.com/api.php" # Generate a secure token export MCP_AUTH_TOKEN=$(openssl rand -hex 32) echo "Save this token: $MCP_AUTH_TOKEN" # Start the server ./mediawiki-mcp-server -http :8080 ``` 2. **In ChatGPT:** - Go to **Settings** → **Connectors** → **Advanced** → **Developer Mode** - Add a new MCP connector - **URL:** `http://your-server:8080` (must be publicly accessible) - **Authentication:** Bearer token → paste your token 3. **Test it:** Ask *"Search the wiki for getting started"* **For production:** See [Security Best Practices](#security-best-practices) for HTTPS setup. --- ## n8n n8n connects via HTTP using the MCP Client Tool node. ### Setup 1. **Start the server with HTTP mode:** ```bash export MEDIAWIKI_URL="https://your-wiki.com/api.php" export MCP_AUTH_TOKEN="your-secure-token" ./mediawiki-mcp-server -http :8080 ``` 2. **In n8n:** - Add an **MCP Client Tool** node - **Transport:** HTTP Streamable - **URL:** `http://your-server:8080` - **Authentication:** Bearer → your token 3. **Enable for AI agents** (add to n8n environment): ``` N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true ``` 4. Connect the MCP Client Tool to an AI Agent node. --- ## VS Code VS Code has built-in MCP support via Copilot Chat. 1. Open the Command Palette: **Ctrl+Shift+P** (Windows) or **Cmd+Shift+P** (Mac) 2. Type **"MCP: Add Server"** and select it 3. Choose **"Stdio"** as the transport type 4. Enter the path to the binary when prompted 5. Name the server: `mediawiki` This creates a `.vscode/mcp.json` file. Add the environment variables: ```json { "servers": { "mediawiki": { "command": "/path/to/mediawiki-mcp-server", "env": { "MEDIAWIKI_URL": "https://your-wiki.com/api.php" } } } } ``` On Windows, use the `.exe` path with double backslashes. Reload VS Code, then use the wiki tools through Copilot Chat. --- ## Google ADK Google's [Agent Development Kit](https://google.github.io/adk-docs/) connects to MCP servers via stdio or Streamable HTTP.
Go (stdio) ```go import ( "os/exec" "google.golang.org/adk/tool/mcptoolset" "github.com/modelcontextprotocol/go-sdk/mcp" ) // Create MCP toolset for wiki access wikiTools, _ := mcptoolset.New(mcptoolset.Config{ Transport: &mcp.CommandTransport{ Command: exec.Command("/path/to/mediawiki-mcp-server"), Env: []string{ "MEDIAWIKI_URL=https://your-wiki.com/api.php", }, }, }) // Add to your agent agent := llmagent.New(llmagent.Config{ Name: "wiki-agent", Model: model, Toolsets: []tool.Set{wikiTools}, }) ```
Go (Streamable HTTP) First, start the server in HTTP mode: ```bash export MEDIAWIKI_URL="https://your-wiki.com/api.php" ./mediawiki-mcp-server -http :8080 -token "your-secret-token" ``` Then connect from your ADK agent: ```go import ( "google.golang.org/adk/tool/mcptoolset" "github.com/modelcontextprotocol/go-sdk/mcp" ) wikiTools, _ := mcptoolset.New(mcptoolset.Config{ Transport: mcp.NewStreamableHTTPClientTransport("http://localhost:8080"), }) ```
Python (stdio) ```python from google.adk.tools.mcp_tool import MCPToolset, StdioConnectionParams, StdioServerParameters wiki_tools = MCPToolset( connection_params=StdioConnectionParams( server_params=StdioServerParameters( command="/path/to/mediawiki-mcp-server", env={"MEDIAWIKI_URL": "https://your-wiki.com/api.php"}, ) ) ) ```
Python (Streamable HTTP) Start the server in HTTP mode, then: ```python from google.adk.tools.mcp_tool import MCPToolset, StreamableHTTPConnectionParams wiki_tools = MCPToolset( connection_params=StreamableHTTPConnectionParams( url="http://localhost:8080", headers={"Authorization": "Bearer your-secret-token"}, ) ) ```
--- ## Need to Edit Wiki Pages? Reading works without login on public wikis. **Private/corporate wikis often require authentication for all operations, including reading.** Editing always requires a bot password. ### Create a Bot Password 1. Log in to your wiki 2. Go to `Special:BotPasswords` (e.g., `https://your-wiki.com/wiki/Special:BotPasswords`) 3. Enter a bot name: `mcp-assistant` 4. Check these permissions: - ✅ Basic rights - ✅ Edit existing pages 5. Click **Create** and **save the password** (you won't see it again) ### Add Credentials to Your Config **Claude Desktop / Cursor:** ```json { "mcpServers": { "mediawiki": { "command": "/path/to/mediawiki-mcp-server", "env": { "MEDIAWIKI_URL": "https://your-wiki.com/api.php", "MEDIAWIKI_USERNAME": "YourWikiUsername@mcp-assistant", "MEDIAWIKI_PASSWORD": "your-bot-password-here" } } } } ``` **Claude Code CLI:** ```bash claude mcp add mediawiki /path/to/mediawiki-mcp-server \ -e MEDIAWIKI_URL="https://your-wiki.com/api.php" \ -e MEDIAWIKI_USERNAME="YourWikiUsername@mcp-assistant" \ -e MEDIAWIKI_PASSWORD="your-bot-password-here" ``` --- ## Example Prompts > 📖 **More examples:** See [WIKI_USE_CASES.md](WIKI_USE_CASES.md) for detailed workflows by persona (content editors, documentation managers, developers). ### Search & Read - *"What does our wiki say about deployment?"* - *"Find all pages mentioning the API"* - *"Show me the Getting Started guide"* - *"List all pages in the Documentation category"* - *"Give me a quick overview of the Configuration page"* ✨ - *"Get the content of Main Page, FAQ, and Setup all at once"* ✨ ### Sections & Related Content ✨ - *"Show me the sections of the Installation Guide"* - *"Get the 'Troubleshooting' section from the FAQ page"* - *"Find pages related to the API Reference"* - *"What images are on the Product Overview page?"* ### Track Changes - *"What pages were updated this week?"* - *"Who edited the Release Notes page?"* - *"Show me the diff between the last two versions"* - *"Who are the most active editors this month?"* ✨ - *"Which pages get edited most frequently?"* ✨ ### Check Quality - *"Are there broken links on this page?"* - *"Find orphaned pages with no links to them"* - *"Check terminology consistency in the Product category"* - *"Find pages similar to the Installation Guide"* ✨ - *"Compare how 'API version' is documented across pages"* ✨ - *"Find pages not updated in the last 90 days"* ✨ ### Page Management (requires auth) ✨ - *"Rename 'Old Guide' to 'Updated Guide'"* - *"Add category 'API' to the Integration page"* - *"Remove the 'Deprecated' category from this page"* ### Quick Edits (requires auth) - *"Strike out John Smith on the Team page"* - *"Replace 'version 2.0' with 'version 3.0' on Release Notes"* - *"Make 'API Gateway' bold on the Architecture page"* ### File Uploads (requires auth) ✨ - *"Upload this image from URL to the wiki"* - *"Add the logo from https://example.com/logo.png as Company_Logo.png"* ### File Search ✨ - *"Search for 'budget' in File:Annual-Report.pdf"* - *"Find mentions of 'API' in the changelog.txt file"* > **Note:** PDF search requires `poppler-utils` installed. See [PDF Search Setup](#pdf-search-setup). ### Convert Markdown ✨ - *"Convert this README to wiki format"* - *"Transform my release notes from Markdown to MediaWiki"* - *"Convert with Tieto branding and CSS"* (use theme="tieto", add_css=true) **Themes:** - `tieto` - Tieto brand colors (Hero Blue headings, yellow code highlights) - `neutral` - Clean output without custom colors (default) - `dark` - Dark mode optimized ### Find Users - *"Who are the wiki admins?"* - *"List all bot accounts"* --- ## Troubleshooting **"MEDIAWIKI_URL environment variable is required"** → Check your config file has the correct path and URL. **"authentication failed"** → Check username format: `WikiUsername@BotName` → Verify bot password hasn't expired → Ensure bot has required permissions **"page does not exist"** → Page titles are case-sensitive. Check the exact title on your wiki. **Tools not appearing in Claude/Cursor** → Restart the application after config changes. **ChatGPT can't connect** → Ensure your server is publicly accessible (not just localhost) → Check the bearer token matches exactly **"PDF search requires 'pdftotext'"** → Install poppler-utils for your platform (see [PDF Search Setup](#pdf-search-setup)) --- ## PDF Search Setup PDF search requires the `pdftotext` tool from poppler-utils. Text file search (TXT, MD, CSV, etc.) works without any dependencies. | Platform | Install Command | |----------|-----------------| | macOS | `brew install poppler` | | Ubuntu/Debian | `apt install poppler-utils` | | RHEL/CentOS | `yum install poppler-utils` | | Windows | `choco install poppler` | **Windows alternative:** Download binaries from [poppler-windows releases](https://github.com/oschwartz10612/poppler-windows/releases) and add to PATH. **Verify installation:** ```bash pdftotext -v ``` --- ## Compatibility | Platform | Transport | Status | |----------|-----------|--------| | Claude Desktop (Mac) | stdio | ✅ Supported | | Claude Desktop (Windows) | stdio | ✅ Supported | | Claude Code CLI | stdio | ✅ Supported | | Cursor | stdio | ✅ Supported | | VS Code | stdio | ✅ Supported | | ChatGPT | HTTP | ✅ Supported | | n8n | HTTP | ✅ Supported | | Google ADK | stdio / HTTP | ✅ Supported | **Works with any wiki:** Wikipedia, Fandom, corporate wikis, or any MediaWiki installation. --- # Advanced Configuration ## HTTP Transport Options For ChatGPT, n8n, and remote access, the server supports HTTP transport. ### CLI Flags | Flag | Default | Description | |------|---------|-------------| | `-http` | (empty) | HTTP address (e.g., `:8080`). Empty = stdio mode | | `-token` | (empty) | Bearer token for authentication | | `-origins` | (empty) | Allowed CORS origins (comma-separated) | | `-rate-limit` | 60 | Max requests per minute per IP | ### Examples ```bash # Basic HTTP server ./mediawiki-mcp-server -http :8080 # With authentication ./mediawiki-mcp-server -http :8080 -token "your-secret-token" # Restrict to specific origins ./mediawiki-mcp-server -http :8080 -token "secret" \ -origins "https://chat.openai.com,https://n8n.example.com" # Bind to localhost only (for use behind reverse proxy) ./mediawiki-mcp-server -http 127.0.0.1:8080 -token "secret" ``` --- ## Security Best Practices When exposing the server over HTTP: ### 1. Always Use Authentication ```bash ./mediawiki-mcp-server -http :8080 -token "$(openssl rand -hex 32)" ``` ### 2. Use HTTPS via Reverse Proxy Example nginx configuration: ```nginx server { listen 443 ssl; server_name mcp.example.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ### 3. Restrict Origins ```bash ./mediawiki-mcp-server -http :8080 -token "secret" \ -origins "https://chat.openai.com" ``` ### Built-in Security Features | Feature | Description | |---------|-------------| | Bearer Auth | Validates `Authorization: Bearer ` header | | Origin Validation | Blocks requests from unauthorized domains | | Rate Limiting | 60 requests/minute per IP (configurable) | | Security Headers | X-Content-Type-Options, X-Frame-Options | | Circuit Breaker | Automatic failover after consecutive API failures | --- ## HTTP Endpoints When running in HTTP mode, these endpoints are available: | Endpoint | Description | |----------|-------------| | `/` | MCP protocol endpoint (tools, resources, prompts) | | `/health` | Liveness check (always returns 200 if server is running) | | `/ready` | Readiness check (verifies wiki API connectivity) | | `/tools` | Tool discovery (lists all 40+ tools by category) | | `/status` | Resilience status (circuit breaker state, dedup stats) | | `/metrics` | Prometheus metrics (request counts, latencies) | | `/.well-known/mcp-server-card` | [SEP-2127](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2127) Server Card (pre-connect discovery) via [mcp-servercard-go](https://github.com/olgasafonova/mcp-servercard-go) | ### Health Checks Use `/health` and `/ready` for container orchestration: ```yaml # Kubernetes example livenessProbe: httpGet: path: /health port: 8080 readinessProbe: httpGet: path: /ready port: 8080 ``` ### Tool Discovery Get a list of all available tools: ```bash curl http://localhost:8080/tools | jq '.categories | keys' ``` ### Resilience Monitoring Check circuit breaker and request deduplication status: ```bash curl http://localhost:8080/status # Returns: {"circuit_breaker":{"state":"closed",...},"inflight_requests":0} ``` --- ## Environment Variables | Variable | Required | Description | |----------|----------|-------------| | `MEDIAWIKI_URL` | Yes | Wiki API endpoint (e.g., `https://wiki.com/api.php`) | | `MEDIAWIKI_USERNAME` | No | Bot username (`User@BotName`) | | `MEDIAWIKI_PASSWORD` | No | Bot password | | `MEDIAWIKI_TIMEOUT` | No | Request timeout (default: `30s`) | | `MCP_AUTH_TOKEN` | No | Bearer token for HTTP authentication | --- ## All Available Tools
Read Operations | Tool | Description | |------|-------------| | `mediawiki_search` | Full-text search | | `mediawiki_get_page` | Get page content | | `mediawiki_get_sections` | Get section structure or specific section content ✨ | | `mediawiki_get_related` | Find related pages via categories/links ✨ | | `mediawiki_get_images` | Get images used on a page ✨ | | `mediawiki_list_pages` | List all pages | | `mediawiki_list_categories` | List categories | | `mediawiki_get_category_members` | Get pages in category | | `mediawiki_get_page_info` | Get page metadata | | `mediawiki_get_wiki_info` | Wiki statistics | | `mediawiki_list_users` | List users by group | | `mediawiki_parse` | Preview wikitext | | `mediawiki_get_page_summary` | Lead section + metadata without full page load ✨ | | `mediawiki_batch_get_pages` | Fetch multiple page contents in one API call ✨ | | `mediawiki_batch_get_pages_info` | Get metadata for multiple pages at once ✨ | | `mediawiki_search_and_read` | Search + read top results in one call ✨ | **search_and_read ✨** — Eliminates the most common two-call pattern (search then read): ``` "What does the wiki say about deployment?" → Searches, reads top result, returns content + remaining hits as summaries ``` **get_page_summary ✨** — Quick overview without loading full page content: ``` "What is the API Reference page about?" → Returns intro section, categories, section list, and metadata ``` **batch_get_pages ✨** — Fetch up to 50 pages in one call: ``` "Get the content of Main Page, FAQ, and Getting Started" → Returns all three pages in a single API request ```
Link Analysis | Tool | Description | |------|-------------| | `mediawiki_get_external_links` | Get external URLs from page | | `mediawiki_get_external_links_batch` | Get URLs from multiple pages | | `mediawiki_check_links` | Check if URLs work | | `mediawiki_find_broken_internal_links` | Find broken wiki links | | `mediawiki_get_backlinks` | "What links here" |
Content Quality | Tool | Description | |------|-------------| | `mediawiki_check_terminology` | Check naming consistency | | `mediawiki_check_translations` | Find missing translations | | `mediawiki_find_orphaned_pages` | Find unlinked pages | | `mediawiki_audit` | Comprehensive health audit (parallel checks, health score) | | `mediawiki_get_stale_pages` | Find pages not edited in N days ✨ | **get_stale_pages ✨** — Wiki hygiene: find outdated content that needs review: ``` "Find pages not updated in 90 days" → Returns stale pages sorted oldest-first with days since last edit ```
Content Discovery ✨ | Tool | Description | |------|-------------| | `mediawiki_find_similar_pages` | Find pages with similar content based on term overlap | | `mediawiki_compare_topic` | Compare how a topic is described across multiple pages | **find_similar_pages** - Identifies related content that should be cross-linked or potential duplicates: ``` "Find pages similar to the API Reference page" → Returns similarity scores, common terms, and linking recommendations ``` **compare_topic** - Detects inconsistencies in documentation (different values, conflicting info): ``` "Compare how 'timeout' is described across all pages" → Returns page mentions with context snippets and value mismatches ```
History | Tool | Description | |------|-------------| | `mediawiki_get_revisions` | Page edit history | | `mediawiki_compare_revisions` | Diff between versions | | `mediawiki_get_user_contributions` | User's edit history | | `mediawiki_get_recent_changes` | Recent wiki activity with aggregation ✨ | **Aggregation ✨** - Use `aggregate_by` parameter to get compact summaries: - `aggregate_by: "user"` → Most active editors - `aggregate_by: "page"` → Most edited pages - `aggregate_by: "type"` → Change type distribution (edit, new, log)
Quick Edit Tools | Tool | Description | |------|-------------| | `mediawiki_find_replace` | Find and replace text | | `mediawiki_apply_formatting` | Apply bold, italic, strikethrough | | `mediawiki_bulk_replace` | Replace across multiple pages | | `mediawiki_search_in_page` | Search within a page | | `mediawiki_resolve_title` | Fuzzy title matching | **Edit Response Info ✨** - All edit operations return revision tracking and undo instructions: ```json { "revision": { "old_revision": 1234, "new_revision": 1235, "diff_url": "https://wiki.../index.php?diff=1235&oldid=1234" }, "undo": { "instruction": "To undo: use wiki URL or revert to revision 1234", "wiki_url": "https://wiki.../index.php?title=...&action=edit&undo=1235" } } ```
Write Operations | Tool | Description | |------|-------------| | `mediawiki_edit_page` | Create or edit pages | | `mediawiki_upload_file` | Upload files from URL ✨ | | `mediawiki_move_page` | Move (rename) pages with redirect ✨ | | `mediawiki_manage_categories` | Add/remove categories without full edit ✨ | **move_page ✨** — Rename pages properly (don't delete and recreate): ``` "Rename 'Old Guide' to 'Updated Guide'" → Moves page, creates redirect, optionally moves talk page ``` **manage_categories ✨** — Quick category management: ``` "Add category 'API' and remove category 'Deprecated' from this page" → Modifies categories without touching page content ```
File Search ✨ | Tool | Description | |------|-------------| | `mediawiki_search_in_file` | Search text in PDFs and text files | **Supported formats:** PDF (text-based), TXT, MD, CSV, JSON, XML, HTML **PDF requires:** `poppler-utils` installed (see [PDF Search Setup](#pdf-search-setup))
Markdown Conversion ✨ | Tool | Description | |------|-------------| | `mediawiki_convert_markdown` | Convert Markdown text to MediaWiki markup | **Themes:** - `tieto` - Tieto brand colors (Hero Blue #021e57 headings, yellow code highlights) - `neutral` - Clean output without custom colors (default) - `dark` - Dark mode optimized **Options:** - `add_css` - Include CSS styling block for branded appearance - `reverse_changelog` - Reorder changelog entries newest-first - `prettify_checks` - Replace plain checkmarks (✓) with emoji (✅) **Example:** ``` Input: "# Hello\n**bold** and *italic*" Output: "= Hello =\n'''bold''' and ''italic''" ``` **Workflow for adding Markdown content to wiki:** 1. Convert: `mediawiki_convert_markdown` → get wikitext 2. Save: `mediawiki_edit_page` → publish to wiki
--- ## Public 360° Wiki (Tieto) **New to this?** Check out the **[Tieto Setup Guide](TIETO_SETUP.md)** for step-by-step instructions that assume no technical knowledge.
Quick setup for wiki.software-innovation.com ### Get Your Bot Password 1. Go to [Special:BotPasswords](https://wiki.software-innovation.com/wiki/Special:BotPasswords) 2. Log in with your Tieto account 3. Create a bot named `wiki-MCP` 4. Enable: **Basic rights** + **Edit existing pages** 5. Save the generated password Your username: `your.email@tietoevry.com#wiki-MCP` ### Configuration This wiki requires authentication for all operations (including reading). **Claude Code CLI:** ```bash claude mcp add mediawiki /path/to/mediawiki-mcp-server \ -e MEDIAWIKI_URL="https://wiki.software-innovation.com/api.php" \ -e MEDIAWIKI_USERNAME="your.email@tietoevry.com#wiki-MCP" \ -e MEDIAWIKI_PASSWORD="your-bot-password-here" ``` **Claude Desktop / Cursor:** ```json { "mcpServers": { "mediawiki": { "command": "/path/to/mediawiki-mcp-server", "env": { "MEDIAWIKI_URL": "https://wiki.software-innovation.com/api.php", "MEDIAWIKI_USERNAME": "your.email@tietoevry.com#wiki-MCP", "MEDIAWIKI_PASSWORD": "your-bot-password-here" } } } } ``` ### Example Prompts - *"Find all pages about eFormidling"* - *"What does the wiki say about AutoSaver?"* - *"Check for broken links on the API documentation"*
--- ## Development ### Build from Source ```bash git clone https://github.com/olgasafonova/mediawiki-mcp-server.git cd mediawiki-mcp-server go build -o mediawiki-mcp-server . ``` Requires Go 1.24+ ### Running Tests ```bash # Unit tests make test # With coverage make test-cover # Lint make lint ``` ### Integration Tests Integration tests run against a real MediaWiki instance: ```bash # Start MediaWiki container docker-compose -f docker-compose.test.yml up -d # Wait for MediaWiki to be ready (about 60 seconds) # Run integration tests go test -tags=integration ./wiki/... # Stop and clean up docker-compose -f docker-compose.test.yml down -v ``` Integration tests can also be triggered manually via GitHub Actions. ### Project Structure ``` mediawiki-mcp-server/ ├── main.go # Server entry point, HTTP transport ├── main_test.go # Server tests ├── wiki_editing_guidelines.go # AI guidance for editing ├── docker-compose.test.yml # Integration test environment │ ├── .github/workflows/ │ ├── ci.yml # Unit tests, lint, build │ └── integration.yml # Integration tests (manual trigger) │ ├── scripts/ │ └── LocalSettings.php # MediaWiki config for tests │ ├── tools/ # MCP tool definitions │ ├── definitions.go # Tool schemas and metadata │ ├── handlers.go # Tool request handlers │ └── registry.go # Tool registration │ ├── wiki/ # MediaWiki API client │ ├── client.go # HTTP client with auth │ ├── config.go # Configuration management │ ├── types.go # Request/response types │ ├── errors.go # Error handling │ ├── read.go # Page reading operations │ ├── write.go # Page editing operations │ ├── search.go # Search functionality │ ├── methods.go # Core API methods │ ├── history.go # Revision history │ ├── categories.go # Category operations │ ├── users.go # User management │ ├── links.go # Link analysis │ ├── quality.go # Content quality checks │ ├── audit.go # Wiki health audits │ ├── similarity.go # Content similarity detection │ ├── pdf.go # PDF text extraction │ ├── security.go # Input sanitization, SSRF protection │ ├── integration_test.go # Integration tests (build tag) │ └── *_test.go # Unit tests │ ├── converter/ # Markdown to MediaWiki converter │ ├── converter.go # Conversion logic │ ├── converter_test.go # Tests │ └── themes.go # Theme definitions (tieto, neutral, dark) │ ├── cmd/ │ └── benchmark/ # Performance benchmarking │ └── main.go │ ├── ARCHITECTURE.md # System design documentation ├── CONTRIBUTING.md # Contribution guidelines ├── SECURITY.md # Security policy ├── WIKI_USE_CASES.md # Usage examples by persona └── README.md ``` --- ## Like This Project? If this server saved you time, consider giving it a ⭐ on GitHub. It helps others discover the project. --- ## More MCP Servers Check out my other MCP servers: | Server | Description | Stars | |--------|-------------|-------| | [gleif-mcp-server](https://github.com/olgasafonova/gleif-mcp-server) | Access GLEIF LEI database. Look up company identities, verify legal entities. | ![GitHub stars](https://img.shields.io/github/stars/olgasafonova/gleif-mcp-server?style=flat) | | [miro-mcp-server](https://github.com/olgasafonova/miro-mcp-server) | Control Miro whiteboards with AI. Boards, diagrams, mindmaps, and more. | ![GitHub stars](https://img.shields.io/github/stars/olgasafonova/miro-mcp-server?style=flat) | | [nordic-registry-mcp-server](https://github.com/olgasafonova/nordic-registry-mcp-server) | Access Nordic business registries. Look up companies across Norway, Denmark, Finland, Sweden. | ![GitHub stars](https://img.shields.io/github/stars/olgasafonova/nordic-registry-mcp-server?style=flat) | | [productplan-mcp-server](https://github.com/olgasafonova/productplan-mcp-server) | Talk to your ProductPlan roadmaps. Query OKRs, ideas, launches. | ![GitHub stars](https://img.shields.io/github/stars/olgasafonova/productplan-mcp-server?style=flat) | | [tilbudstrolden-mcp](https://github.com/olgasafonova/tilbudstrolden-mcp) | Nordic grocery deal hunting. Find offers, plan meals, track spending. | ![GitHub stars](https://img.shields.io/github/stars/olgasafonova/tilbudstrolden-mcp?style=flat) | | [mcp-servercard-go](https://github.com/olgasafonova/mcp-servercard-go) | Go library for SEP-2127 Server Cards. Pre-connect discovery for MCP servers. | ![GitHub stars](https://img.shields.io/github/stars/olgasafonova/mcp-servercard-go?style=flat) | --- ## License MIT License ## Credits - Built with [Go MCP SDK](https://github.com/modelcontextprotocol/go-sdk) - Powered by [MediaWiki API](https://www.mediawiki.org/wiki/API:Main_page)