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

SΓ­

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

query

string

SΓ­

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

SΓ­

Slug de la tecnologΓ­a

path

string

SΓ­

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

SΓ­

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

SΓ­

Slug de la tecnologΓ­a

paths

array

SΓ­

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

SΓ­

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

SΓ­

Slug de la tecnologΓ­a

entry_type

string

SΓ­

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

SΓ­

Slug de la tecnologΓ­a

path

string

SΓ­

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

SΓ­

Slug de la tecnologΓ­a

output_dir

string

SΓ­

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 api.py:

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

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 server.py:

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 - A tier

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure 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