MediaWiki MCP Server
Permite que clientes LLM interactúen con cualquier wiki de MediaWiki usando el Protocolo de Contexto del Modelo.
Documentación
Servidor MCP de MediaWiki
Un servidor MCP (Model Context Protocol) que permite a clientes de Modelos de Lenguaje Grande (LLM) interactuar con cualquier wiki de MediaWiki.
Características
Herramientas
Cada herramienta que opera sobre una wiki acepta un argumento opcional wiki que nombra la wiki sobre la que actuar (las herramientas de gestión de wikis y OAuth no lo aceptan): pasa una clave de wiki (p. ej. en.wikipedia.org) o la URI completa de mcp://wikis/{wikiKey}. Omítelo para usar la wiki predeterminada configurada (ver Configuración). Cada respuesta de herramienta informa sobre la wiki en la que se ejecutó la llamada. Cada respuesta exitosa lleva su contenido como prosa en content y como JSON en structuredContent; ver canales de respuesta.
Lecturas de páginas
| Nombre | Descripción |
|---|---|
compare-pages | Compara dos versiones de una página de wiki por revisión, título o wikitexto proporcionado. |
get-category-members | Lista los miembros de una categoría (hasta 500 por llamada, paginado mediante continueFrom). |
get-file | Obtiene una página de archivo. |
get-file-data | Obtiene los bytes de imagen de un archivo en línea (base64) para análisis visual, para clientes que no pueden alcanzar el host de la wiki. Devuelve una representación escalada (establece width); los tipos no representables (audio, video, binarios) generan error. Para metadatos o una URL de descarga, usa get-file. |
get-links-here | Lista las páginas que referencian una página de wiki: páginas que enlazan a ella, la incrustan como plantilla o la muestran como archivo (selecciona mediante type), incluyendo páginas que la alcanzan a través de una redirección. Hasta 500 por llamada, paginado mediante continueFrom. |
get-page | Obtiene una página de wiki. |
get-page-history | Lista las revisiones recientes de una página de wiki. |
get-pages | Obtiene múltiples páginas de wiki en una sola llamada (hasta 50). |
get-recent-changes | Lista eventos de cambios recientes en toda la wiki, filtrables por marca de tiempo, espacio de nombres, usuario, etiqueta, tipo y banderas de ocultamiento (hasta 50 por llamada, paginado mediante continue). |
get-revision | Obtiene una revisión específica de una página. |
get-site-info | Obtiene la configuración clave de una wiki: versión de MediaWiki, idioma de contenido, reglas de mayúsculas en títulos, espacios de nombres, extensiones instaladas, licencia y (opcionalmente) estadísticas. |
list-wikis | Lista cada wiki configurada: su clave, nombre del sitio, servidor, si es de solo lectura o la predeterminada, si es alcanzable, qué herramientas limitadas por extensión funcionan en ella y, para una wiki configurada con OAuth, su servidor de autorización. Deshabilitada cuando hay menos de dos wikis configuradas. |
parse-wikitext | Convierte wikitexto a HTML sin guardar. Devuelve advertencias de análisis, wikienlaces, plantillas y URLs externas. |
search-page | Busca títulos y contenidos de páginas de wiki (texto completo). Busca en los espacios de nombres de contenido de la wiki a menos que se proporcionen otros IDs de espacio de nombres. |
search-page-by-prefix | Busca títulos de páginas por prefijo. |
whoami | Informa la identidad con la que la sesión actual está autenticada en la wiki objetivo: nombre de usuario, si es anónima y membresías de grupo (opcionalmente derechos de usuario). |
Escrituras de páginas
| Nombre | Descripción | Permisos |
|---|---|---|
create-page 🔐 | Crea una nueva página de wiki. | Create, edit, and move pages |
delete-page 🔐 | Elimina una página de wiki. | Delete pages, revisions, and log entries |
move-page 🔐 | Mueve (renombra) una página de wiki. | Create, edit, and move pages |
protect-page 🔐 | Protege o desprotege una página de wiki. | Protect and unprotect pages |
undelete-page 🔐 | Restaura una página de wiki eliminada. | Delete pages, revisions, and log entries |
update-file 🔐 | Sube una nueva revisión de un archivo existente desde el disco local. | Upload, replace, and move files |
update-file-from-url 🔐 | Sube una nueva revisión de un archivo existente desde una URL. | Upload, replace, and move files |
update-page 🔐 | Actualiza una página de wiki existente: sobrescríbela, añade contenido o reescribe un pasaje de ella. | Edit existing pages |
upload-file 🔐 | Sube un archivo a la wiki desde el disco local. | Upload new files |
upload-file-from-url 🔐 | Sube un archivo a la wiki desde una URL. | Upload, replace, and move files |
Gestión de wikis
| Nombre | Descripción |
|---|---|
add-wiki | Añade una wiki como recurso MCP desde su URL. Deshabilitada cuando allowWikiManagement es false. |
remove-wiki | Elimina un recurso de wiki. Deshabilitada cuando allowWikiManagement es false o hay menos de dos wikis configuradas. |
OAuth
| Nombre | Descripción |
|---|---|
oauth-logout | Elimina tokens OAuth almacenados. Solo stdio. |
oauth-status | Lista tokens OAuth almacenados con ámbitos y expiración (sin valores de token). Solo stdio. |
Paquetes de extensiones
Las herramientas de cada paquete se registran solo en wikis donde su extensión está instalada.
| Nombre | Descripción |
|---|---|
neowiki-list-schemas | Lista esquemas (tipos de entidad) y sus recuentos de propiedades. |
neowiki-get-schema | Obtiene las definiciones de propiedades, relaciones y opciones de selección de un esquema. |
neowiki-cypher-query | Ejecuta una consulta Cypher de solo lectura contra el grafo de conocimiento. |
neowiki-search-subjects | Encuentra IDs de sujetos por etiqueta dentro de un esquema. |
neowiki-get-subject | Obtiene los datos estructurados de un sujeto por ID. |
neowiki-get-page-subjects | Lista los sujetos adjuntos a una página de wiki. |
neowiki-create-subject | Crea un sujeto (hijo o principal) en una página. Requiere el derecho edit. |
neowiki-update-subject | Reemplaza la etiqueta y las declaraciones de un sujeto. Requiere el derecho edit. |
neowiki-delete-subject | Elimina un sujeto por ID. Requiere el derecho edit. |
neowiki-set-main-subject | Establece o limpia el sujeto principal de una página. Requiere el derecho edit. |
neowiki-validate-subject | Valida en seco un sujeto propuesto y devuelve violaciones. |
| Nombre | Descripción |
|---|---|
smw-list-properties | Lista propiedades de Semantic MediaWiki con plantillas de copiar y pegar para smw-query. |
smw-query | Ejecuta una consulta #ask de Semantic MediaWiki. |
| Nombre | Descripción |
|---|---|
bucket-query | Ejecuta una consulta Lua de Bucket. |
| Nombre | Descripción |
|---|---|
cargo-list-tables | Lista las tablas Cargo definidas en la wiki. |
cargo-describe-table | Lista los campos de una tabla Cargo con sus tipos y banderas de lista. |
cargo-query | Ejecuta una consulta de estilo SQL de Cargo. |
| Nombre | Descripción |
|---|---|
wikibase-search-entities | Encuentra elementos y propiedades por etiqueta o alias. |
wikibase-get-entity | Lee los términos y declaraciones de una entidad, con IDs referenciados resueltos a etiquetas. |
wikibase-query | Ejecuta una consulta SPARQL contra el servicio de consultas de la wiki. Se ofrece solo para un repositorio cuyo siteinfo publique uno. |
wikibase-edit-entity | Crea o cambia una entidad a partir de JSON de entidad de Wikibase. Requiere el derecho edit. |
wikibase-add-statement | Añade una declaración con un valor de elemento, cadena, ID externo o URL. Requiere el derecho edit. |
Recursos
mcp://wikis/{wikiKey} — recurso por wiki que expone sitename, server (la dirección pública de la wiki), articlepath, scriptpath y las banderas private y readOnly.
- Esos campos son todo el contenido: el recurso publica una lista fija, por lo que las credenciales y la configuración del lado del servidor en tu archivo de configuración nunca se exponen en el contenido del recurso.
- Después de
add-wikioremove-wiki, el servidor envíanotifications/resources/list_changedpara que los clientes se actualicen.
Ejemplo de resultado de lectura
{
"contents": [
{
"uri": "mcp://wikis/en.wikipedia.org",
"mimeType": "application/json",
"text": "{ \"sitename\":\"Wikipedia\",\"server\":\"https://en.wikipedia.org\",\"articlepath\":\"/wiki\",\"scriptpath\":\"/w\",\"private\":false }"
}
]
}
Variables de entorno
Las variables siguientes son relevantes para cualquier configuración. Las variables que solo aplican al autoalojar el transporte HTTP (puertos, tiempos de espera, protecciones de Host/Origin y SSRF) o al ejecutar el proxy OAuth alojado están en docs/deployment.md — variables de entorno. Las variables de sustitución de archivos de configuración y directorios de subida están en docs/configuration.md.
| Nombre | Descripción | Predeterminado |
|---|---|---|
CONFIG | Ruta a tu archivo de configuración | config.json |
MCP_TRANSPORT | Tipo de transporte del servidor MCP (stdio o http) | stdio |
MCP_LOG_LEVEL | Severidad mínima para la salida del registrador. Una de debug, info, notice, warning, error, critical, alert, emergency o silent. | debug |
MCP_CONTENT_MAX_BYTES | Límite de bytes para los cuerpos de contenido y bloques de resultados que devuelven las herramientas (wikitexto, HTML renderizado, diferencias, listados de declaraciones y filas), aplicado una vez por respuesta. Ajusta al presupuesto de respuestas de herramientas del cliente LLM objetivo. | 75000 |
MCP_FILE_DATA_MAX_BYTES | Límite máximo en el tamaño codificado en base64 de una respuesta de get-file-data. Un respaldo de transporte/seguridad; ajusta el tamaño real por llamada con el width de la herramienta. Las llamadas que superan el límite generan error en lugar de truncarse. | 1000000 |
MCP_UPLOAD_MAX_BYTES | Límite de memoria en la búsqueda del lado del servidor utilizada por upload-file-from-url / update-file-from-url. Los archivos más grandes que este límite se entregan a la copia de subida propia de la wiki en lugar de ser almacenados en búfer por el servidor. Protege la memoria de este servidor, no el $wgMaxUploadSize de la wiki. | 104857600 |
MCP_USER_AGENT | Reemplaza el encabezado User-Agent de cada solicitud saliente, para que los operadores de wiki puedan contactarte. Proporciona un nombre y un correo electrónico o URL, p. ej. ExampleBot/1.0 (bot@example.org). | mediawiki-mcp-server/<version> (https://github.com/ProfessionalWiki/MediaWiki-MCP-Server) |
MCP_OAUTH_CREDENTIALS_FILE | Sobrescribe la ruta predeterminada del almacén de credenciales. Predeterminado: ~/.config/mediawiki-mcp/credentials.json (Linux/macOS) o %APPDATA%\mediawiki-mcp\credentials.json (Windows). | unset |
MCP_OAUTH_NO_BROWSER | Establécelo a 1 para omitir el lanzamiento de un navegador durante el flujo OAuth; la URL de autenticación se registra en stderr en su lugar. Útil en entornos sin interfaz gráfica. | unset |
Configuración
[!NOTE] La configuración solo es necesaria al interactuar con una wiki privada o al usar herramientas autenticadas.
Crea un archivo config.json para configurar conexiones de wiki. Usa el config.example.json como punto de partida.
{
"defaultWiki": "en.wikipedia.org",
"wikis": {
"en.wikipedia.org": {
"sitename": "Wikipedia",
"server": "https://en.wikipedia.org",
"articlepath": "/wiki",
"scriptpath": "/w"
}
}
}
Dirección interna vs. pública. El server que configures puede ser un nombre de host interno (p. ej. http://mediawiki en Docker); las URLs devueltas al llamante se construyen a partir de la dirección pública de la wiki, por lo que los nombres de host internos no se filtran en los enlaces. Ver docs/configuration.md — campos por wiki.
Para la referencia completa de campos, sustitución de variables de entorno, fuentes de secretos, etiquetas de cambios, directorios de subida y opciones de autenticación, ver docs/configuration.md.
Autenticación
Las herramientas marcadas con 🔐 requieren autenticación. Las herramientas de escritura (incluidas las escrituras de paquetes de extensiones) se rechazan en una wiki que tenga readOnly: true, y se ocultan de tools/list cuando cada wiki configurada la tiene — ver Implementación.
- OAuth basado en navegador (recomendado). Inicia sesión a través de una pestaña del navegador la primera vez que una herramienta necesite autenticación. Establece
oauth2ClientIdyoauth2CallbackPortpor wiki — ver docs/configuration.md — OAuth (basado en navegador). - Token de portador por solicitud (HTTP), obsoleto. Cada solicitud lleva
Authorization: Bearer <token>y el servidor lo reenvía a MediaWiki. Desactivado por defecto, porque un servidor MCP no debe aceptar tokens que no fueron emitidos para él. Ver docs/deployment.md — token de portador por solicitud. - Proxy OAuth alojado (HTTP). El servidor presenta un consumidor de MediaWiki como un Servidor de Autorización OAuth 2.1, de modo que un cliente consciente de OAuth registra a cada usuario — sin tokens manuales. Apúntalo a
https://<wiki>/mcp; la lectura anónima aún funciona. Ver docs/deployment.md — inicio de sesión OAuth alojado. - Token de acceso OAuth2 manual. Pega un token de larga duración en
config.json. Ver docs/configuration.md — token de acceso OAuth2 manual. - Contraseña de bot. Respaldo cuando Extension:OAuth no está instalada. Ver docs/configuration.md — contraseña de bot.
Las herramientas Cargo (
cargo-query,cargo-list-tables,cargo-describe-table) llaman a acciones de API restringidas por el permiso de usuarioruncargoqueries. La mayoría de los wikis otorgan este permiso a todos los usuarios por defecto; los wikis que lo restringen requieren la concesiónCreate, query and delete data through the Cargo extensionen la contraseña de bot o en el consumidor OAuth. La extensión Cargo también se detecta en wikis alojados en wiki.gg (Helldivers, Terraria, Ark, etc.), donde se distribuye bajo el nombre renombradoLIBRARIAN.
Instalación
Elige tu cliente a continuación, o usa la configuración estándar si no aparece en la lista. CONFIG es opcional; sin él, el servidor apunta a la Wikipedia en inglés. Para apuntarlo a tu propio wiki y configurar la autenticación para escrituras, consulta docs/configuration.md.
Claude Code
Añade este repositorio como mercado de plugins y luego instala el servidor incluido:
/plugin marketplace add ProfessionalWiki/MediaWiki-MCP-Server
/plugin install mediawiki-mcp-server@professional-wiki
El plugin acepta un archivo de configuración opcional, que apunta el servidor a tu propio wiki. Configúralo desde el mensaje al habilitar el plugin, o en cualquier momento con /plugin configure mediawiki-mcp-server@professional-wiki. Una instalación desde línea de comandos toma el mismo valor mediante claude plugin install mediawiki-mcp-server@professional-wiki --config configPath=path/to/config.json.
Cuando se instala como plugin, las herramientas tienen el prefijo de espacio de nombres mcp__plugin_mediawiki-mcp-server_mediawiki__<tool>; actualiza cualquier lista de permitidos o enlaces de herramientas en consecuencia.
Para configurar el servidor directamente, consulta la documentación de MCP para Claude Code. La versión resumida:
claude mcp add mediawiki-mcp-server -- npx -y @professional-wiki/mediawiki-mcp-server@latest
# Environment variables go before the `--`:
claude mcp add mediawiki-mcp-server -e CONFIG=path/to/config.json -- npx -y @professional-wiki/mediawiki-mcp-server@latest
Codex
Añade este repositorio como mercado de plugins y luego instala el servidor incluido:
codex plugin marketplace add ProfessionalWiki/MediaWiki-MCP-Server
codex plugin add mediawiki-mcp-server@professional-wiki
Para apuntar el plugin a tu propio wiki, establece CONFIG en el shell desde el que lanzas Codex, por ejemplo export CONFIG=path/to/config.json. Codex no tiene configuración por plugin; si prefieres no establecer una variable de entorno, codex mcp add mediawiki --env CONFIG=path/to/config.json -- npx -y @professional-wiki/mediawiki-mcp-server@latest registra el servidor directamente y tiene prioridad sobre la copia del plugin.
Consulta la documentación de plugins de Codex para saber cómo listar, actualizar o eliminar plugins.
Claude Desktop
Descarga MediaWiki-MCP-Server.mcpb y haz doble clic para instalar la extensión, que te pedirá la ruta de un archivo de configuración para que puedas apuntarla a tu propio wiki en lugar de a la Wikipedia en inglés.
VS Code y Cursor
O añade la configuración estándar manualmente.
Antigravity
Añade la configuración estándar a la configuración MCP de Antigravity, ya sea globalmente en ~/.gemini/config/mcp_config.json o por espacio de trabajo en .agents/mcp_config.json.
Si instalaste previamente la extensión de Gemini CLI, el asistente de configuración de Antigravity ofrece importar tu configuración existente de Gemini CLI.
OpenCode
OpenCode usa su propia forma de configuración en lugar de mcpServers; añade esto a opencode.json en la raíz de tu proyecto, o ~/.config/opencode/opencode.json para una instalación global.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mediawiki-mcp-server": {
"type": "local",
"command": ["npx", "-y", "@professional-wiki/mediawiki-mcp-server@latest"],
"environment": {
"CONFIG": "path/to/config.json"
}
}
}
}
Configuración estándar
La mayoría de los clientes leen el mismo bloque de servidor. Pégalo en el archivo indicado para tu cliente, reemplazando mcpServers con la clave raíz de ese cliente:
| Cliente | Archivo de configuración | Clave raíz |
|---|---|---|
| Cursor | ~/.cursor/mcp.json, o .cursor/mcp.json por proyecto | mcpServers |
| VS Code | .vscode/mcp.json por espacio de trabajo, o el comando MCP: Open User Configuration | servers |
| Devin Desktop (antes Windsurf) | ~/.codeium/windsurf/mcp_config.json | mcpServers |
| Zed | ~/.config/zed/settings.json | context_servers |
| LM Studio | ~/.lmstudio/mcp.json | mcpServers |
{
"mcpServers": {
"mediawiki-mcp-server": {
"command": "npx",
"args": ["-y", "@professional-wiki/mediawiki-mcp-server@latest"],
"env": {
"CONFIG": "path/to/config.json"
}
}
}
}
Para cualquier otro cliente, npx add-mcp @professional-wiki/mediawiki-mcp-server puede funcionar: add-mcp es un CLI comunitario que escribe el archivo de configuración de tu cliente por ti. Solo establece el comando de lanzamiento; añade CONFIG tú mismo para apuntar a tu propio wiki.
Despliegue
Ejecutar el servidor como un endpoint HTTP remoto para otros usuarios tiene sus propios requisitos de configuración — consulta docs/deployment.md. Hay una imagen precompilada publicada en ghcr.io/professionalwiki/mediawiki-mcp-server. Para operaciones de día 2 (registros, /health//ready, métricas, apagado elegante), consulta docs/operations.md.
Seguridad
Los valores predeterminados son seguros para uso de un solo usuario. Antes de exponer el transporte HTTP a otros, asegura tres cosas:
- Termina TLS en tu proxy inverso. No expongas el puerto MCP directamente en una red no confiable. Consulta docs/deployment.md — lista de verificación de seguridad.
- Combina
MCP_BINDconMCP_ALLOWED_HOSTSyMCP_ALLOWED_ORIGINS. El transporte HTTP se vincula a127.0.0.1por defecto. Cuando lo abras conMCP_BIND=0.0.0.0, estableceMCP_ALLOWED_HOSTSa los nombres de host que tu proxy reenvía yMCP_ALLOWED_ORIGINSa los orígenes de navegador permitidos para llamar al servidor — estos bloquean ataques de reenlace de DNS y de origen cruzado, respectivamente. - Las subidas son opcionales.
upload-fileestá deshabilitado hasta que enumeres los directorios permitidos enuploadDirsoMCP_UPLOAD_DIRS. Consulta docs/configuration.md — directorios de subida. - Los destinos internos necesitan
MCP_TRUSTED_HOSTS. Las búsquedas salientes están protegidas contra SSRF: un destino que resuelve a una dirección privada o de bucle local (por ejemplo, un alias de red Docker comomediawiki.svc) se rechaza hasta que enumeres su host enMCP_TRUSTED_HOSTS. Consulta docs/deployment.md — protección SSRF saliente.
Reporta una vulnerabilidad mediante el formulario de aviso de seguridad de GitHub — política completa en SECURITY.md.
Contribuciones
Las contribuciones son bienvenidas — tanto las solicitudes de extracción como los problemas (errores, solicitudes de funciones, sugerencias) funcionan.
- ¿Trabajas en código de herramientas? Comienza con AGENTS.md para la estructura del repositorio, comandos y patrones de prueba.
- ¿Añades o modificas una herramienta? Lee docs/tool-conventions.md — cubre el tono de las descripciones, la documentación de parámetros, las sugerencias de anotaciones y las convenciones de terminología de MediaWiki.
- ¿Preparas un lanzamiento? Consulta docs/releasing.md.
Licencia
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.