Skip to main content
Glama

📚 DevDocs MCP Server

Model Context Protocol (MCP) Server para acceder a la documentación de DevDocs.io desde Claude Desktop, GitHub Copilot y otros clientes MCP.

Python 3.10+ MCP Docker License: MIT Author


📖 Tabla de Contenidos


🤖 ¿Qué es MCP?

Model Context Protocol (MCP) es un protocolo abierto creado por Anthropic que permite a los modelos de IA (como Claude o Copilot) interactuar con herramientas externas de forma segura y estructurada.

Arquitectura MCP

┌─────────────────────────────────────────────────────────────────┐
│                        Cliente MCP                              │
│              (Claude Desktop, GitHub Copilot, etc.)             │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ JSON-RPC 2.0 (stdio)
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                       Servidor MCP                              │
│                    (devdocs-mcp-server)                         │
│                                                                 │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐             │
│  │   Tools     │  │  Resources  │  │   Prompts   │             │
│  │ (funciones) │  │  (datos)    │  │ (plantillas)│             │
│  └─────────────┘  └─────────────┘  └─────────────┘             │
└─────────────────────────────────────────────────────────────────┘
                              │
                              │ HTTP/HTTPS
                              │
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                      DevDocs.io API                             │
│                 (documents.devdocs.io)                          │
└─────────────────────────────────────────────────────────────────┘

Comunicación stdio

MCP utiliza stdio (Standard Input/Output) para la comunicación:

┌──────────┐     stdin (JSON)      ┌──────────┐
│  Cliente │ ────────────────────▶ │ Servidor │
│   MCP    │                       │   MCP    │
│          │ ◀──────────────────── │          │
└──────────┘    stdout (JSON)      └──────────┘
  • stdin: El cliente envía peticiones JSON-RPC al servidor

  • stdout: El servidor responde con resultados JSON-RPC

  • Sin puertos HTTP: La comunicación es directa entre procesos


📚 ¿Qué es DevDocs MCP?

DevDocs MCP es un servidor MCP que proporciona acceso a la documentación de más de 600 tecnologías disponibles en DevDocs.io, incluyendo:

  • Lenguajes: Python, JavaScript, TypeScript, Rust, Go, Java, C++, etc.

  • Frameworks: React, Vue, Angular, Django, Spring Boot, Express, etc.

  • Herramientas: Docker, Kubernetes, Git, Webpack, etc.

  • APIs: Web APIs, Node.js, Deno, etc.

¿Por qué usar DevDocs MCP?

Sin DevDocs MCP

Con DevDocs MCP

❌ Copiar/pegar de documentación

✅ IA accede directamente

❌ Cambiar entre ventanas

✅ Todo en el mismo chat

❌ Buscar manualmente

✅ Búsqueda integrada

❌ Información desactualizada

✅ Documentación oficial

❌ Limitado al conocimiento del modelo

✅ Acceso a docs actualizadas


✨ Características

🔧 12 Herramientas Disponibles

Herramienta

Descripción

list_documentations

Lista todas las ~600 documentaciones disponibles

search_documentation

Busca en el índice de una tecnología específica

get_page_content

Obtiene el contenido de una página de documentación

get_documentation_index

Obtiene el índice completo de una tecnología

get_cache_stats

Muestra estadísticas del caché local

clear_cache

Limpia el caché (todo o por tecnología)

get_multiple_pages

Obtiene varias páginas en una sola llamada

search_across_docs

Busca en múltiples documentaciones a la vez

get_type_entries

Filtra entradas por tipo (class, function, etc.)

get_examples

Extrae solo los bloques de código de una página

export_documentation

Exporta documentación completa a archivos locales

offline_mode_status

Muestra qué documentaciones están disponibles offline

💾 Sistema de Caché Inteligente

  • Caché persistente: No re-descarga documentación ya obtenida

  • Sin TTL: Las docs de DevDocs son versionadas, no cambian

  • Modo offline: Funciona sin internet para docs cacheadas

  • Volumen Docker: Persiste entre reinicios del contenedor

🐳 Docker Ready

  • Imagen ligera (~233MB)

  • Volumen para persistir caché

  • Configuración simple

  • Compatible con Claude Desktop y GitHub Copilot


🏗 Arquitectura

Estructura del Proyecto

devdocs-mcp/
├── src/
│   └── devdocs_mcp/
│       ├── __init__.py      # Package initialization
│       ├── server.py        # MCP server (12 tools)
│       ├── api.py           # DevDocs API client
│       ├── cache.py         # Disk-based cache system
│       └── utils.py         # HTML to Markdown converter
├── docker/
│   ├── Dockerfile           # Docker image definition
│   └── docker-compose.yml   # Docker Compose config
├── scripts/
│   ├── docker-build.bat     # Build script (Windows)
│   └── docker-build.sh      # Build script (Linux/Mac)
├── config/
│   └── claude_config_example.json  # MCP config examples
├── tests/
│   ├── test_mcp.py          # MCP server tests
│   └── test_mcp_protocol.py # Protocol tests
├── pyproject.toml           # Python project config
├── LICENSE
└── README.md

Flujo de Datos

┌─────────────────────────────────────────────────────────────────────┐
│                         Copilot / Claude                            │
│                                                                     │
│  "¿Cómo uso asyncio.gather en Python?"                             │
└─────────────────────────────────────────────────────────────────────┘
                                │
                                │ 1. Llama tool: search_documentation
                                │    {tech: "python~3.10", query: "gather"}
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│                      DevDocs MCP Server                             │
│                                                                     │
│  server.py ──▶ api.py ──▶ cache.py                                 │
│      │            │           │                                     │
│      │            │           ├──▶ ¿En caché? ──▶ Sí ──▶ Retorna   │
│      │            │           │                                     │
│      │            │           └──▶ No ──▶ Descarga ──▶ Guarda      │
│      │            │                                                 │
│      │            └──▶ utils.py (HTML → Markdown)                  │
│      │                                                              │
│      └──▶ Retorna resultado formateado                             │
└─────────────────────────────────────────────────────────────────────┘
                                │
                                │ 2. Llama tool: get_page_content
                                │    {tech: "python~3.10", path: "library/asyncio-task"}
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│                        DevDocs.io API                               │
│                                                                     │
│  documents.devdocs.io/python~3.10/library/asyncio-task.html        │
└─────────────────────────────────────────────────────────────────────┘

📦 Instalación

Opción 1: Docker (Recomendado)

Requisitos

  • Docker Desktop instalado y corriendo

Pasos

# 1. Clonar o navegar al directorio
cd devdocs-mcp

# 2. Construir la imagen
docker build -t devdocs-mcp:latest -f docker/Dockerfile .

# 3. Verificar que se creó
docker images devdocs-mcp

Verificar funcionamiento

# Probar que el servidor responde
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | docker run -i --rm devdocs-mcp:latest

Opción 2: Instalación Local

Requisitos

  • Python 3.10 o superior

  • pip

Pasos

# 1. Navegar al directorio
cd devdocs-mcp

# 2. Instalar en modo desarrollo
pip install -e .

# 3. Verificar instalación
python -c "from devdocs_mcp.server import main; print('OK')"

⚙️ Configuración

GitHub Copilot (VS Code)

  1. Abre VS Code

  2. Presiona Ctrl+Shift+P → "Preferences: Open User Settings (JSON)"

  3. Busca la sección de MCP servers o créala

  4. Añade la configuración:

Con Docker (Recomendado)

{
  "mcp": {
    "servers": {
      "devdocs": {
        "command": "docker",
        "args": [
          "run", "-i", "--rm",
          "-v", "devdocs-cache:/root/.cache/devdocs-mcp",
          "devdocs-mcp:latest"
        ]
      }
    }
  }
}

Sin Docker (Local)

{
  "mcp": {
    "servers": {
      "devdocs": {
        "command": "python",
        "args": ["-m", "devdocs_mcp.server"],
        "cwd": "E:/DevDocs/devdocs-mcp/src"
      }
    }
  }
}
  1. Reinicia VS Code

Claude Desktop

  1. Abre el archivo de configuración:

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Linux: ~/.config/claude/claude_desktop_config.json

  2. Añade la configuración:

{
  "mcpServers": {
    "devdocs": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "devdocs-cache:/root/.cache/devdocs-mcp",
        "devdocs-mcp:latest"
      ]
    }
  }
}
  1. Reinicia Claude Desktop


🔧 Herramientas Disponibles

1. list_documentations

Lista todas las documentaciones disponibles en DevDocs (~600).

Parámetros:

Nombre

Tipo

Requerido

Descripción

filter

string

No

Filtrar por nombre

Ejemplo de uso:

"Lista las documentaciones disponibles que contengan 'python'"

Respuesta:

## Documentaciones Disponibles (15 encontradas)

- **Python 3.10** (`python~3.10`) - v3.10
- **Python 3.11** (`python~3.11`) - v3.11
- **Python 3.12** (`python~3.12`) - v3.12
...

2. search_documentation

Busca en el índice de una tecnología específica.

Parámetros:

Nombre

Tipo

Requerido

Descripción

tech

string

Slug de la tecnología (ej: python~3.10)

query

string

Término de búsqueda

limit

integer

No

Máximo de resultados (default: 20)

Ejemplo de uso:

"Busca 'asyncio' en la documentación de Python 3.10"

Respuesta:

## Resultados para "asyncio" en python~3.10

Encontrados: 15 resultados

1. **asyncio** [Concurrent Execution]
   Path: `library/asyncio`

2. **asyncio.gather()** [Concurrent Execution]
   Path: `library/asyncio-task`
...

3. get_page_content

Obtiene el contenido completo de una página de documentación.

Parámetros:

Nombre

Tipo

Requerido

Descripción

tech

string

Slug de la tecnología

path

string

Path de la página

Ejemplo de uso:

"Dame el contenido de la página asyncio-task de Python 3.10"

Respuesta:

# asyncio — Asynchronous I/O

asyncio is a library to write concurrent code using the async/await syntax.

## Running an asyncio Program

import asyncio

async def main():
    print('Hello')
    await asyncio.sleep(1)
    print('World')

asyncio.run(main())
...

4. get_documentation_index

Obtiene el índice completo de una documentación.

Parámetros:

Nombre

Tipo

Requerido

Descripción

tech

string

Slug de la tecnología

Ejemplo de uso:

"Dame el índice de Spring Boot"


5. get_cache_stats

Muestra estadísticas del caché local.

Parámetros: Ninguno

Ejemplo de uso:

"¿Cuánto ocupa el caché de devdocs?"

Respuesta:

## Estadísticas del Caché

- **Directorio:** `/root/.cache/devdocs-mcp`
- **Archivos totales:** 156
- **Tamaño total:** 12.45 MB

### Documentaciones cacheadas:

- **python~3.10**: 45 archivos (3.2 MB)
- **spring_boot**: 89 archivos (8.1 MB)
- **react**: 22 archivos (1.15 MB)

6. clear_cache

Limpia el caché local.

Parámetros:

Nombre

Tipo

Requerido

Descripción

tech

string

No

Tecnología específica (vacío = todo)

Ejemplo de uso:

"Limpia el caché de Python 3.10"


7. get_multiple_pages

Obtiene múltiples páginas en una sola llamada.

Parámetros:

Nombre

Tipo

Requerido

Descripción

tech

string

Slug de la tecnología

paths

array

Lista de paths

Ejemplo de uso:

"Dame las páginas de asyncio, asyncio-task y asyncio-stream de Python"


8. search_across_docs

Busca en múltiples documentaciones a la vez.

Parámetros:

Nombre

Tipo

Requerido

Descripción

query

string

Término de búsqueda

techs

array

No

Lista de tecnologías (default: populares)

limit_per_tech

integer

No

Máximo por tecnología (default: 5)

Ejemplo de uso:

"Busca 'websocket' en Python, JavaScript y Node.js"

Respuesta:

## Búsqueda: 'websocket'

Tecnologías buscadas: 3 | Total resultados: 12

### 📚 python~3.10 (4 resultados)
- **websockets** → `library/websockets`
...

### 📚 javascript (5 resultados)
- **WebSocket** → `global_objects/websocket`
...

### 📚 node (3 resultados)
- **WebSocket** → `ws`
...

9. get_type_entries

Filtra entradas por tipo (class, function, method, etc.).

Parámetros:

Nombre

Tipo

Requerido

Descripción

tech

string

Slug de la tecnología

entry_type

string

Tipo a filtrar

limit

integer

No

Máximo de resultados (default: 50)

Ejemplo de uso:

"Lista todas las funciones built-in de Python 3.10"


10. get_examples

Extrae solo los bloques de código de una página.

Parámetros:

Nombre

Tipo

Requerido

Descripción

tech

string

Slug de la tecnología

path

string

Path de la página

Ejemplo de uso:

"Dame solo los ejemplos de código de asyncio.gather"


11. export_documentation

Exporta documentación completa a archivos locales.

Parámetros:

Nombre

Tipo

Requerido

Descripción

tech

string

Slug de la tecnología

output_dir

string

Directorio de salida

max_pages

integer

No

Límite de páginas

Ejemplo de uso:

"Exporta toda la documentación de React a ./react_docs"

⚠️ Advertencia: Puede tomar varios minutos para documentaciones grandes.


12. offline_mode_status

Muestra qué documentaciones están disponibles offline.

Parámetros: Ninguno

Ejemplo de uso:

"¿Qué documentaciones tengo disponibles offline?"

Respuesta:

## Estado Offline

- **Directorio caché:** `/root/.cache/devdocs-mcp`
- **Tecnologías disponibles offline:** 3
- **Tamaño total:** 12.45 MB

### Documentaciones en caché:

- **python~3.10**: 45 páginas (3.2 MB) | Índice: ✅
- **spring_boot**: 89 páginas (8.1 MB) | Índice: ✅
- **react**: 22 páginas (1.15 MB) | Índice: ✅

💡 Ejemplos de Uso

Caso 1: Aprender una nueva biblioteca

Usuario: "Necesito aprender a usar asyncio en Python. 
         ¿Puedes buscar la documentación y explicarme los conceptos básicos?"

Copilot: [Usa search_documentation para buscar asyncio]
         [Usa get_page_content para obtener la documentación]
         
         "Según la documentación oficial de Python 3.10..."

Caso 2: Comparar implementaciones

Usuario: "¿Cómo se manejan las promesas en JavaScript vs Python?"

Copilot: [Usa search_across_docs con query="promise" en javascript y python]
         [Usa get_page_content para obtener detalles de cada uno]
         
         "Comparando ambas documentaciones..."

Caso 3: Buscar ejemplos específicos

Usuario: "Dame ejemplos de código de cómo usar fetch en JavaScript"

Copilot: [Usa get_examples con tech="javascript" path="global_objects/fetch"]
         
         "Aquí tienes los ejemplos de la documentación oficial..."

Caso 4: Trabajo offline

Usuario: "Voy a estar sin internet. ¿Puedes cachear la documentación de React?"

Copilot: [Usa get_documentation_index para cachear el índice]
         [Usa get_multiple_pages para cachear páginas principales]
         
         "Listo, la documentación de React está disponible offline."

💾 Sistema de Caché

Estructura del Caché

~/.cache/devdocs-mcp/
├── docs_list.json           # Lista de todas las documentaciones
├── python~3.10/
│   ├── index.json           # Índice de Python 3.10
│   └── pages/
│       ├── library_asyncio.json
│       ├── library_asyncio-task.json
│       └── ...
├── spring_boot/
│   ├── index.json
│   └── pages/
│       └── ...
└── react/
    └── ...

Política de Caché

Aspecto

Comportamiento

TTL

Sin expiración (las docs son versionadas)

Persistencia

Permanente hasta limpieza manual

Ubicación

~/.cache/devdocs-mcp/ (local) o volumen Docker

Formato

JSON para índices, Markdown para contenido

Comandos útiles para el caché

# Ver contenido del caché (Docker)
docker run --rm -v devdocs-cache:/cache alpine ls -laR /cache

# Ver tamaño del volumen
docker system df -v | grep devdocs

# Limpiar volumen completamente
docker volume rm devdocs-cache

🌐 API de DevDocs

DevDocs MCP se conecta a la API pública de DevDocs:

Endpoints

Endpoint

Descripción

https://devdocs.io/docs.json

Lista todas las documentaciones

https://documents.devdocs.io/{tech}/index.json

Índice de una tecnología

https://documents.devdocs.io/{tech}/{path}.html

Contenido HTML de una página

Estructura de docs.json

[
  {
    "name": "Python",
    "slug": "python~3.10",
    "type": "python",
    "version": "3.10",
    "release": "3.10.0",
    "mtime": 1634567890,
    "db_size": 12345678
  }
]

Estructura de index.json

{
  "entries": [
    {
      "name": "asyncio",
      "path": "library/asyncio",
      "type": "Concurrent Execution"
    },
    {
      "name": "asyncio.gather()",
      "path": "library/asyncio-task#asyncio.gather",
      "type": "Concurrent Execution"
    }
  ],
  "types": [
    {"name": "Built-in Functions", "count": 69},
    {"name": "Concurrent Execution", "count": 45}
  ]
}

🛠 Desarrollo

Ejecutar en modo desarrollo

cd devdocs-mcp

# Instalar dependencias
pip install -e .

# Ejecutar tests
python test_mcp.py

# Probar herramientas manualmente
python -c "
from devdocs_mcp.api import DevDocsAPI
api = DevDocsAPI()
results = api.search_in_index('python~3.10', 'asyncio', limit=5)
print(results)
"

Estructura de archivos

Archivo

Responsabilidad

server.py

Servidor MCP, definición de tools, handlers

api.py

Cliente HTTP para DevDocs API

cache.py

Sistema de caché en disco

utils.py

Conversión HTML → Markdown

Agregar una nueva herramienta

  1. Agregar método en :

def mi_nueva_funcion(self, param: str) -> dict:
    """Descripción de la función"""
    # Implementación
    return resultado
  1. Agregar Tool en :

Tool(
    name="mi_nueva_tool",
    description="Descripción para el modelo",
    inputSchema={
        "type": "object",
        "properties": {
            "param": {"type": "string", "description": "..."}
        },
        "required": ["param"]
    }
)
  1. Agregar handler en :

elif name == "mi_nueva_tool":
    result = await handle_mi_nueva_tool(arguments)

async def handle_mi_nueva_tool(args: dict) -> str:
    param = args.get('param', '')
    loop = asyncio.get_event_loop()
    result = await loop.run_in_executor(None, api.mi_nueva_funcion, param)
    return formatear_resultado(result)

🔧 Solución de Problemas

El servidor no inicia

# Verificar que Docker está corriendo
docker info

# Verificar que la imagen existe
docker images devdocs-mcp

# Reconstruir la imagen
docker build -t devdocs-mcp:latest -f docker/Dockerfile .

No aparecen las herramientas en Copilot

  1. Verificar configuración MCP en VS Code settings

  2. Reiniciar VS Code completamente

  3. Verificar logs: View > Output > GitHub Copilot

Error de conexión a DevDocs

# Verificar conectividad
curl https://devdocs.io/docs.json

# Verificar desde Docker
docker run --rm devdocs-mcp:latest python -c "
import httpx
r = httpx.get('https://devdocs.io/docs.json', follow_redirects=True)
print(f'Status: {r.status_code}')
"

Caché corrupto

# Limpiar caché (Docker)
docker volume rm devdocs-cache

# Limpiar caché (Local)
rm -rf ~/.cache/devdocs-mcp

Ver logs del servidor

# Ejecutar manualmente para ver errores
docker run -it --rm devdocs-mcp:latest

# Con más detalle
docker run -it --rm devdocs-mcp:latest python -c "
import logging
logging.basicConfig(level=logging.DEBUG)
from devdocs_mcp.server import main
main()
"

📊 Rendimiento

Tiempos típicos

Operación

Primera vez

Con caché

list_documentations

~500ms

~10ms

search_documentation

~300ms

~5ms

get_page_content

~200ms

~5ms

search_across_docs (9 techs)

~2s

~50ms

Tamaño de caché por tecnología

Tecnología

Páginas

Tamaño aprox.

Python 3.10

~450

~15 MB

React

~80

~3 MB

JavaScript

~200

~8 MB

Spring Boot

~150

~12 MB


📄 Licencia

Este proyecto está bajo la licencia MIT. Ver LICENSE para más detalles.


🙏 Agradecimientos


👨‍💻 Autor

Javier Garcia · @JavierDevCol

GitHub


⬆ Volver arriba

Hecho con ❤️ para la comunidad de desarrolladores

Install Server
A
security – no known vulnerabilities
F
license - not found
A
quality - confirmed to work

Resources

Looking for Admin?

Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.

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/JavierDevCol/devdocs-mcp'

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