Wikipedia MCP

Un servidor MCP remoto para Wikipedia.

Documentación

Servidor Wikipedia MCP

Deploy with Vercel

Un servidor de Protocolo de Contexto de Modelo (MCP) que proporciona acceso integral a Wikipedia para asistentes de IA. Construido en TypeScript, desplegado en Vercel y totalmente compatible con el transporte MCP Streamable HTTP (versión de protocolo 2025-03-26).

Características

  • 🔍 Búsqueda avanzada — encuentra artículos con clasificación por relevancia
  • 📄 Acceso completo a artículos — extractos de texto plano o wikitexto completo
  • 📝 Resúmenes inteligentes — resúmenes concisos adaptados a una consulta específica
  • 🗂️ Análisis de secciones — extrae y resume secciones individuales
  • 🔗 Descubrimiento de enlaces — enlaces internos y artículos relacionados
  • 🌍 Multilingüe — más de 50 códigos de idioma, más de 140 códigos de país, resueltos automáticamente
  • 🔀 Búsqueda paralela — multi_search_wikipedia ejecuta múltiples consultas simultáneamente
  • 🎯 Extracción de hechos — listas estructuradas de hechos clave de cualquier artículo
  • 📍 Coordenadas — lat/lon para artículos geográficos
  • ⚡ Streamable HTTP — soporte completo de transporte MCP (POST + GET SSE + DELETE)
  • 🔒 Seguridad reforzada — saneamiento de entradas, limitación de velocidad por niveles, sin cabecera Server
  • 🚀 Listo para Vercel — despliegue serverless sin estado, sin fricción de arranque en frío

Inicio rápido

1. Desplegar

git clone https://github.com/YOUR_USERNAME/wikipedia-mcp-vercel.git
cd wikipedia-mcp-vercel
vercel

O usa el botón Desplegar con Vercel de arriba.

2. Conecta tu cliente de IA

El servidor implementa transporte MCP Streamable HTTP (2025-03-26).
Se admiten tanto el canal POST (cliente → servidor) como el canal GET SSE (servidor → cliente).

Endpoint MCP: https://your-app.vercel.app/mcp

Claude Desktop

{
  "mcpServers": {
    "wikipedia": {
      "type": "http",
      "url": "https://your-app.vercel.app/mcp"
    }
  }
}

Claude Code / CLI

claude mcp add wikipedia --transport http https://your-app.vercel.app/mcp

Cualquier cliente MCP (genérico)

Configura el cliente con el tipo de transporte streamable-http y la URL del endpoint de arriba.
El servidor usa modo sin estado (sin cabecera Mcp-Session-Id), lo cual es correcto y esperado para despliegues serverless.

3. Variables de entorno (opcional)

VariablePredeterminadoDescripción
WIKIPEDIA_LANGUAGEenCódigo de idioma de Wikipedia (p. ej. ja, es, de)
WIKIPEDIA_COUNTRYUSMapeo de código de país → idioma (p. ej. JP, CN, LK)
ENABLE_CACHEfalseCaché en memoria (útil para desarrollo local)
WIKIPEDIA_BOT_USERNAME—Nombre de usuario de la cuenta de bot (Account@BotName)
WIKIPEDIA_BOT_PASSWORD—Contraseña de la cuenta de bot
PORT8000Puerto de desarrollo local (ignorado por Vercel)

Copia .env.example → .env para desarrollo local.

4. Verificar

# Health check
curl https://your-app.vercel.app/health

# Test MCP initialize
curl -X POST https://your-app.vercel.app/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

Herramientas MCP

Las 13 herramientas aceptan parámetros opcionales language (p. ej. "ja") y country (p. ej. "JP"). Cuando se establecen, la consulta se envía tal cual al endpoint de Wikipedia de ese idioma (p. ej. ja.wikipedia.org). La búsqueda propia de Wikipedia a menudo puede coincidir con una frase corta de título en inglés con el artículo local correcto, pero no hay capa de traducción en este servidor.

Referencia de herramientas

HerramientaDescripción
search_wikipediaBuscar por palabra clave en un idioma
multi_search_wikipediaEjecutar múltiples búsquedas en varios idiomas en paralelo
get_articleArtículo completo — extracto de texto plano, o wikitexto con full: true
get_summarySolo resumen introductorio
get_sectionsTabla de contenidos (títulos de sección + niveles)
get_linksTodos los enlaces internos en un artículo
get_coordinatesLatitud/longitud para artículos geográficos
get_related_topicsArtículos relacionados mediante grafo de enlaces
summarize_article_for_queryResumen centrado en una pregunta específica
summarize_article_sectionResumen de una sección nombrada
extract_key_factsLista con viñetas de hechos clave
test_wikipedia_connectivityDiagnósticos de API + estado de autenticación
list_supported_countriesTodos los códigos de idioma y país admitidos

Prompts de MCP

Se registran tres plantillas de prompt y están disponibles mediante prompts/list / prompts/get:

PromptDescripción
search_in_native_languageGuía de formato de consulta para Wikipedia no inglesa
wikipedia_usage_guideGuía completa que cubre todas las herramientas y mejores prácticas
multilingual_researchGuía paso a paso para investigación entre idiomas

API REST

Endpoints HTTP estándar para uso no MCP:

GET  /health
GET  /search/:query?limit=10
GET  /article/:title
GET  /summary/:title
GET  /sections/:title
GET  /links/:title
GET  /coordinates/:title
GET  /related/:title?limit=10
GET  /summary/:title/query/:query/length/:maxLength
GET  /summary/:title/section/:section/length/:maxLength
GET  /facts/:title?topic=...&count=5
GET  /test-connectivity
GET  /supported-countries
POST /tools/:toolName

Arquitectura

src/
├── server.ts               # Express app wiring
├── routes/
│   ├── mcp.ts              # Streamable HTTP transport (POST + GET SSE + DELETE)
│   └── rest.ts             # REST endpoints
├── mcp-server.ts           # MCPServer helper — tool dispatch, language routing
├── handlers.ts             # Tool handler functions
├── toolRegistrations.ts    # SDK tool + prompt registration
├── toolDefinitions.ts      # JSON Schema definitions (for REST /mcp info)
├── prompts.ts              # Prompt template logic
├── wikipedia-client.ts     # Wikipedia Action API client
├── sanitize.ts             # Input sanitization
├── middleware.ts           # Rate limiting, Server header removal
├── utils.ts                # Shared helpers
└── types.ts                # TypeScript interfaces

Diseño del transporte

El servidor usa HTTP Streamable sin estado — el modo correcto para plataformas serverless:

  • POST /mcp — recibe mensajes JSON-RPC, devuelve JSON o flujo SSE
  • GET /mcp — abre un canal SSE para mensajes iniciados por el servidor (los clientes se reconectan al expirar el tiempo)
  • DELETE /mcp — terminación de sesión (confirmada; no hay sesiones del lado del servidor que limpiar)

Se crea una instancia nueva de McpServer + StreamableHTTPServerTransport para cada solicitud. Toda la lógica de Wikipedia se maneja mediante el helper compartido y sin estado MCPServer.


Desarrollo

npm install
npm run dev       # tsx watch mode on port 8000
npm run build     # tsc → dist/
npm start         # node dist/server.js
vercel dev        # local Vercel simulation

Autenticación de bot

Para límites de velocidad más altos de la API de Wikipedia, crea una contraseña de bot:

  1. Inicia sesión en tu cuenta de Wikipedia
  2. Ve a Special:BotPasswords
  3. Crea una nueva contraseña de bot
  4. Establece WIKIPEDIA_BOT_USERNAME=YourAccount@BotName y WIKIPEDIA_BOT_PASSWORD=...

Licencia

MIT