Skip to main content
Glama
README.md8.05 kB
# MediaWiki API MCP Server A Model Context Protocol (MCP) server that allows LLMs to interact with MediaWiki installations through the MediaWiki API as a bot user. ## Features ### Tools The server provides various MCP tools with the `wiki_` prefix: |Tool|Description| |---|---| |[**`wiki_page_edit`**](docs/tools/wiki_page_edit.md)|Edit or create MediaWiki pages with comprehensive editing options| |[**`wiki_page_get`**](docs/tools/wiki_page_get.md)|Retrieve page information and content| |[**`wiki_page_parse`**](docs/tools/wiki_page_parse.md)|Parse page content with support for wikitext processing, HTML generation, metadata extraction, and advanced parsing features| |[**`wiki_page_compare`**](docs/tools/wiki_page_compare.md)|Compare two pages, revisions, or text content to show differences between them| |[**`wiki_page_move`**](docs/tools/wiki_page_move.md)|Move pages with support for talk pages, subpages, and redirects| |[**`wiki_page_delete`**](docs/tools/wiki_page_delete.md)|Delete pages with support for talk pages, watchlist management, and logging| |[**`wiki_page_undelete`**](docs/tools/wiki_page_undelete.md)|Undelete (restore) deleted MediaWiki pages with comprehensive restoration options| |[**`wiki_search`**](docs/tools/wiki_search.md)|Search for pages using MediaWiki's search API with advanced filtering| |[**`wiki_opensearch`**](docs/tools/wiki_opensearch.md)|Search using OpenSearch protocol for quick suggestions and autocomplete| |[**`wiki_meta_siteinfo`**](docs/tools/wiki_meta_siteinfo.md)|Get overall site information including general info, namespaces, statistics, extensions, and more| ## Installation 1. Clone the repository and checkout the `main` branch 2. Install dependencies using UV: ```bash uv install ``` 3. Set up environment variables: ```bash export MEDIAWIKI_API_URL="http://mediawiki.test/api.php" export MEDIAWIKI_API_BOT_USERNAME="YourUserName@YourBotName" export MEDIAWIKI_API_BOT_PASSWORD="YourBotPassword" export MEDIAWIKI_API_BOT_USER_AGENT="MediaWiki-MCP-Bot/1.0 (your.email@mediawiki.test)" # Optional ``` ## Usage ### Running the Server ```bash uv run mediawiki-api-mcp ``` Or directly: ```bash python -m mediawiki_api_mcp.server ``` ### Configuration with Claude Desktop #### Configuration File Location - **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` - **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` #### Template Configuration Add to your Claude Desktop configuration file: ```json { "mcpServers": { "mediawiki-api": { "command": "uv", "args": [ "--directory", "/absolute/path/to/mediawiki-api-mcp", "run", "mediawiki-api-mcp" ], "env": { "MEDIAWIKI_API_URL": "http://mediawiki.test/api.php", "MEDIAWIKI_API_BOT_USERNAME": "YourUserName@YourBotName", "MEDIAWIKI_API_BOT_PASSWORD": "YourBotPassword", "MEDIAWIKI_API_BOT_USER_AGENT": "MediaWiki-MCP-Bot/1.0 (your.email@mediawiki.test)" } } } } ``` #### Configuration Instructions 1. Replace `/absolute/path/to/mediawiki-api-mcp` with the actual absolute path to this project directory 2. Update `MEDIAWIKI_API_URL` with your MediaWiki installation's API endpoint 3. Set `MEDIAWIKI_API_BOT_USERNAME` to your bot username (typically in format `YourUserName@YourBotName`) 4. Set `MEDIAWIKI_API_BOT_PASSWORD` to the generated bot password from your wiki's `Special:BotPasswords` page 5. Customize `MEDIAWIKI_API_BOT_USER_AGENT` with appropriate contact information (optional) ##### Bot Password Setup Create bot credentials at e.g.: `http://mediawiki.test/index.php/Special:BotPasswords` Required permissions: - **Basic rights**: Read pages - **High-volume editing**: Edit existing pages, Create, edit, and move pages - Additional permissions as needed for your specific use case ##### Security Notes - Keep your bot credentials secure and never commit them to version control - Use the principle of least privilege when setting bot permissions - Monitor bot activity through your MediaWiki's logging interface - Consider using IP restrictions for additional security ## Development ### Technology Stack - **MCP SDK**: mcp >= 1.2.0 (using FastMCP pattern) - **HTTP Client**: httpx >= 0.27.0 for MediaWiki API calls - **Data Validation**: pydantic >= 2.0.0 for configuration models - **Environment**: python-dotenv >= 1.0.0 for configuration - **Testing**: pytest with pytest-asyncio for async testing - **Code Quality**: ruff for linting, mypy for type checking ### Architecture - FastMCP server with `@mcp.tool()` decorators - Separation of concerns: server → handler → client → MediaWiki API - AsyncIO throughout for non-blocking operations - Environment-based configuration for MediaWiki credentials #### Client Layer (`client.py` and `client_modules/`) - Handles MediaWiki API authentication and requests - Manages CSRF tokens and session state - Provides typed methods for API operations #### Tools Layer (`tools/`) - Defines MCP tool schemas using JSON Schema - Separated by functional area (edit, search) - Ensures all tools have `wiki_` prefix #### Handlers Layer (`handlers/`) - Implements actual tool logic - Handles argument validation and error handling - Returns properly formatted MCP responses #### Server Layer (`server.py` and `server_tools/`) - Main MCP server orchestration - Routes tool calls to appropriate handlers - Manages configuration and client lifecycle ### Project Structure The project is organized into modular components for maintainability: ``` mediawiki-api-mcp/ ├── mediawiki_api_mcp/ │ ├── __init__.py │ ├── server.py # FastMCP server with tool definitions │ ├── client.py # MediaWiki API client │ ├── client_modules/ # Client modules for API operations │ │ ├── __init__.py # Client module exports │ │ └── client_*.py # Individual client modules │ ├── handlers/ # Business logic handlers │ │ ├── __init__.py # Handler exports │ │ └── wiki_*.py # Individual tool handlers │ ├── tools/ # Tool schemas │ │ ├── __init__.py # Tool schema exports │ │ └── wiki_*.py # Individual tool schemas │ └── server_tools/ # Tool definitions │ ├── __init__.py # Tool definition exports │ └── wiki_*.py # Individual tool definitions ├── tests/ # Test suite │ └── test_*.py # Test files matching handlers ├── docs/ # Documentation │ └── tools/ # Tool-specific documentation │ └── wiki_*.md # Individual tool docs ├── pyproject.toml # Project configuration └── uv.lock # Dependency lock file ``` ### Running Tests ```bash uv run pytest ``` Run specific test modules, e.g.: ```bash uv run pytest tests/test_server.py uv run pytest tests/test_tools.py uv run pytest tests/test_wiki_page_edit.py uv run pytest tests/test_wiki_search.py uv run pytest tests/test_wiki_opensearch.py ``` ### Code Quality ```bash # Linting uv run ruff check # Type checking uv run mypy mediawiki_api_mcp ``` ## Error Handling The server implements comprehensive error handling: - **Configuration errors**: Missing environment variables - **Authentication errors**: Invalid credentials or permissions - **API errors**: Network issues, invalid requests - **Tool errors**: Missing parameters, invalid arguments All errors are returned as MCP `TextContent` responses for LLM visibility. ## Security - Bot credentials are required for editing operations - All API requests include proper User-Agent headers - CSRF tokens are automatically managed - Input validation on all tool parameters ## License [MIT License](https://github.com/entanglr/mediawiki-api-mcp/blob/main/LICENSE)

Latest Blog Posts

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/entanglr/mediawiki-api-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server