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


Related MCP server: DocsetMCP

πŸ€– ΒΏ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

Available Tools

12 tools
clear_cacheA

Limpia el cachΓ© local. Puedes limpiar todo o solo una tecnologΓ­a especΓ­fica.

Ejemplos:

  • Sin parΓ‘metros: limpia TODO el cachΓ©

  • tech="python~3.10": limpia solo cachΓ© de Python 3.10

ParametersJSON Schema
NameRequiredDescriptionDefault
techNoTecnologΓ­a especΓ­fica a limpiar (opcional, si no se especifica limpia todo)

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates this is a destructive operation ('limpia' implies removal/deletion) and explains the scope of destruction (all cache vs specific technology). However, it doesn't mention potential side effects like temporary performance impact or whether the operation requires specific permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and concise. The first sentence states the core purpose, the second explains the two usage modes, and the examples provide immediate clarity without redundancy. Every sentence earns its place, and the information is front-loaded with the most important details first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with no annotations and no output schema, the description does an excellent job covering the essential context. It explains what the tool does, how to use it, and provides examples. The only minor gap is the lack of information about what happens after execution (success indicators, potential errors, or system state changes).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage, so the baseline is 3. The description adds significant value by providing concrete examples of parameter usage ('tech="python~3.10"') and explaining the semantic difference between providing vs not providing the parameter. This goes beyond the schema's technical documentation to show practical application.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('limpia' - cleans) and resource ('cachΓ© local' - local cache). It distinguishes itself from sibling tools like get_cache_stats (which reads cache) by performing a destructive operation. The description explicitly covers both full and partial cache clearing scenarios.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use different parameter configurations: 'Sin parΓ‘metros: limpia TODO el cachΓ©' (without parameters: cleans ALL cache) versus 'tech="python~3.10": limpia solo cachΓ© de Python 3.10' (cleans only Python 3.10 cache). This gives clear alternatives within the same tool based on the user's needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_documentationA

Exporta toda la documentaciΓ³n de una tecnologΓ­a a archivos locales. Los archivos se guardan como Markdown en el directorio especificado.

ADVERTENCIA: Puede tomar varios minutos para documentaciones grandes. Usa max_pages para limitar la cantidad de pΓ‘ginas a exportar.

Ejemplos:

  • tech="spring_boot", output_dir="./spring_docs" β†’ exporta todo Spring Boot

  • tech="python~3.10", output_dir="./python_docs", max_pages=50 β†’ exporta 50 pΓ‘ginas

ParametersJSON Schema
NameRequiredDescriptionDefault
techYesSlug de la tecnologΓ­a
output_dirYesDirectorio donde guardar los archivos
max_pagesNoMΓ‘ximo de pΓ‘ginas a exportar (opcional, None = todas)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context about potential long execution times ('Puede tomar varios minutos') and the optional max_pages parameter for limiting output, but does not cover other aspects like error handling, file overwriting behavior, or required permissions. It compensates partially but not fully for the lack of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with the core purpose, followed by key details (format, warning, parameter usage), and ending with concrete examples. Every sentence earns its place by providing essential information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (export operation with potential long runtime) and lack of annotations or output schema, the description is reasonably complete. It covers the main purpose, key behavioral traits, and parameter usage through examples, but could improve by addressing error cases or output structure more explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds minimal value beyond the schema by mentioning max_pages in the warning and examples, but does not provide additional syntax or format details. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Exporta toda la documentaciΓ³n') and resource ('de una tecnologΓ­a'), distinguishing it from sibling tools like get_documentation_index or get_page_content which retrieve rather than export. It specifies the output format (Markdown files) and destination (local directory), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (exporting entire documentation sets to local files) and includes a warning about time for large documentations, but does not explicitly state when not to use it or name alternatives among siblings. It implies usage for bulk exports versus single-page retrieval tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cache_statsB

Muestra estadΓ­sticas del cachΓ© local. Incluye: directorio, archivos totales, tamaΓ±o, documentaciones cacheadas.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool shows statistics, implying a read-only operation, but doesn't clarify if it requires specific permissions, has side effects, or details the output format (e.g., structured data or plain text). For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, using two sentences: one states the purpose, and the other lists included statistics. Each sentence adds value without redundancy. However, it could be slightly more front-loaded by integrating the list into the first sentence for better flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (0 parameters, no output schema), the description is minimally adequate. It covers the purpose and what statistics are shown, but lacks details on behavioral aspects like permissions or output format. Without annotations or an output schema, the description should do more to explain the tool's operation and results, leaving room for improvement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description adds value by listing what statistics are included (directory, total files, size, cached documentations), which provides context beyond the empty schema. This compensates adequately for the lack of parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Muestra estadΓ­sticas del cachΓ© local' (Shows local cache statistics). It specifies the verb 'muestra' (shows) and resource 'estadΓ­sticas del cachΓ© local' (local cache statistics), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'clear_cache' or 'offline_mode_status', which also relate to cache operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It lists what the tool includes (directory, total files, size, cached documentations) but doesn't indicate scenarios for use, prerequisites, or comparisons to siblings like 'clear_cache' or 'offline_mode_status'. Without such context, the agent must infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_documentation_indexB

Obtiene informaciΓ³n del Γ­ndice de una documentaciΓ³n. Muestra estadΓ­sticas: total de entradas, pΓ‘ginas ΓΊnicas, tipos de contenido.

Útil para entender la estructura de una documentación antes de buscar.

ParametersJSON Schema
NameRequiredDescriptionDefault
techYesSlug de la tecnologΓ­a

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions what the tool returns ('Muestra estadΓ­sticas: total de entradas, pΓ‘ginas ΓΊnicas, tipos de contenido'), which is helpful, but doesn't cover other important aspects like whether it's a read-only operation, potential rate limits, authentication needs, or error conditions. For a tool with no annotations, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with three sentences that each serve a purpose: stating the tool's function, listing what it returns, and providing usage context. It's front-loaded with the core purpose. While efficient, the second sentence could be slightly more structured (e.g., using bullet points for the statistics), but overall it's well-organized with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (single parameter, no output schema, no annotations), the description is adequate but has gaps. It explains the purpose and usage context well, but without annotations or output schema, it should ideally provide more behavioral details (e.g., read-only nature, return format). The description covers the basics but doesn't fully compensate for the lack of structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the single parameter 'tech' documented as 'Slug de la tecnologΓ­a'. The description doesn't add any parameter-specific information beyond what the schema provides. According to the rules, when schema_description_coverage is high (>80%), the baseline score is 3 even with no param info in the description, which applies here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Obtiene informaciΓ³n del Γ­ndice de una documentaciΓ³n' (Gets information from a documentation index). It specifies the verb 'obtiene' (gets) and resource 'Γ­ndice de documentaciΓ³n' (documentation index), and distinguishes it from siblings like get_page_content or search_documentation by focusing on index statistics rather than content retrieval. However, it doesn't explicitly differentiate from get_type_entries or list_documentations, which might also relate to documentation structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: 'Útil para entender la estructura de una documentación antes de buscar' (Useful for understanding the structure of documentation before searching). This implicitly suggests using it as a preliminary step before content-focused tools like search_documentation or get_page_content. However, it doesn't explicitly state when not to use it or name specific alternatives among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_examplesA

Extrae solo los bloques de código/ejemplos de una pÑgina de documentación. Útil cuando solo necesitas ver ejemplos de uso, no toda la documentación.

Ejemplos:

  • tech="python~3.10", path="library/asyncio" β†’ ejemplos de asyncio

  • tech="javascript", path="global_objects/promise" β†’ ejemplos de Promise

ParametersJSON Schema
NameRequiredDescriptionDefault
techYesSlug de la tecnologΓ­a
pathYesPath de la pΓ‘gina

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It describes what the tool does (extracts code/example blocks) and includes usage examples, but lacks details on behavioral traits like rate limits, error handling, or output format. It's adequate but has gaps in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by a usage guideline and examples. Every sentence earns its place, with no wasted words, making it highly efficient and well-structured for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is moderately complete: it covers purpose, usage, and parameter examples, but lacks details on output format, error cases, or system behavior. For a tool with 2 parameters and 100% schema coverage, it's adequate but could be more comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds value by providing concrete examples (e.g., tech='python~3.10', path='library/asyncio') that illustrate parameter usage, but doesn't add new semantic details beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Extrae solo los bloques de cΓ³digo/ejemplos') and resource ('de una pΓ‘gina de documentaciΓ³n'), distinguishing it from siblings like get_page_content or get_documentation_index that retrieve full content. The purpose is precise and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool ('Útil cuando solo necesitas ver ejemplos de uso, no toda la documentación') and provides examples that clarify its scope versus alternatives like get_page_content for full documentation. This gives clear context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_multiple_pagesB

Obtiene múltiples pÑginas de documentación a la vez. Útil para obtener documentación relacionada en una sola llamada.

Ejemplos:

  • tech="python~3.10", paths=["library/asyncio", "library/asyncio-task", "library/asyncio-stream"]

  • tech="react", paths=["hooks-intro", "hooks-state", "hooks-effect"]

ParametersJSON Schema
NameRequiredDescriptionDefault
techYesSlug de la tecnologΓ­a
pathsYesLista de paths de pΓ‘ginas a obtener

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe important behavioral aspects: whether this is a read-only operation, if it has rate limits, what authentication is required, what happens if some paths don't exist, or what the return format looks like. The examples show parameter usage but don't explain behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence states the core purpose, the second provides usage context, and examples follow. The Spanish examples are relevant but could be more concise. Overall, most sentences earn their place, though the structure could be slightly tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a tool that fetches multiple resources, the description is incomplete. It doesn't explain what format the results come in, whether it's paginated, what happens with invalid paths, or any error conditions. For a tool with 2 required parameters and no structured output documentation, more behavioral context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage with clear parameter documentation, so the baseline is 3. The description adds minimal value beyond the schema: the examples illustrate how parameters work together (tech with paths array), showing that 'tech' is a technology slug and 'paths' are documentation page paths. However, it doesn't add significant semantic context beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Obtiene mΓΊltiples pΓ‘ginas de documentaciΓ³n a la vez' (gets multiple documentation pages at once). It specifies the verb ('obtiene') and resource ('pΓ‘ginas de documentaciΓ³n'), but doesn't explicitly differentiate from siblings like 'get_page_content' beyond the 'mΓΊltiples' aspect. The examples help illustrate the scope but don't provide explicit sibling comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some usage context: 'Útil para obtener documentación relacionada en una sola llamada' (useful for getting related documentation in a single call). This implies when to use it (for related pages) but doesn't explicitly state when NOT to use it or mention alternatives like 'get_page_content' for single pages. The guidance is helpful but not comprehensive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_page_contentA

Obtiene el contenido completo de una pΓ‘gina de documentaciΓ³n. Devuelve el contenido en formato Markdown.

IMPORTANTE: Necesitas el path exacto de la pΓ‘gina. Usa search_documentation para encontrarlo.

Ejemplos:

  • tech="python~3.10", path="library/asyncio" β†’ documentaciΓ³n de asyncio

  • tech="spring_boot", path="actuator" β†’ documentaciΓ³n de actuator

  • tech="javascript", path="global_objects/promise" β†’ documentaciΓ³n de Promise

ParametersJSON Schema
NameRequiredDescriptionDefault
techYesSlug de la tecnologΓ­a
pathYesPath de la pΓ‘gina (obtenido de search_documentation)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it returns complete content in Markdown format, requires exact paths, and has a dependency on search_documentation. However, it doesn't mention potential limitations like rate limits, authentication needs, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: purpose statement first, critical requirement second, dependency guidance third, and illustrative examples last. Every sentence adds value with zero redundancy. The Spanish language doesn't affect conciseness scoring.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with 2 well-documented parameters and no output schema, the description is mostly complete. It explains what the tool does, when to use it, and provides examples. The main gap is lack of output format details beyond 'Markdown' (structure, size limits, error responses).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds minimal value beyond the schema: it reinforces that 'path' must be exact and obtained from search_documentation, and provides concrete examples showing how tech and path parameters combine. However, it doesn't explain parameter formats or constraints beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('obtiene el contenido completo'), target resource ('una pΓ‘gina de documentaciΓ³n'), and output format ('formato Markdown'). It distinguishes this tool from siblings like search_documentation (which finds paths) and get_multiple_pages (which handles multiple pages).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('Necesitas el path exacto') and when to use an alternative ('Usa search_documentation para encontrarlo'). It provides clear prerequisites and distinguishes this from search tools in the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_type_entriesA

Obtiene entradas filtradas por tipo (class, function, method, module, etc.). Primero usa get_documentation_index para ver los tipos disponibles.

Ejemplos:

  • tech="python~3.10", entry_type="class" β†’ lista todas las clases

  • tech="javascript", entry_type="method" β†’ lista todos los mΓ©todos

  • tech="react", entry_type="hook" β†’ lista todos los hooks

ParametersJSON Schema
NameRequiredDescriptionDefault
techYesSlug de la tecnologΓ­a
entry_typeYesTipo a filtrar (class, function, method, module, etc.)
limitNoMΓ‘ximo de resultados (default: 50)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains the filtering behavior and provides usage examples, which adds context. However, it doesn't mention important behavioral aspects like pagination (though limit parameter exists), error conditions, or what happens when no matches are found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and concise. It starts with the core purpose, provides a usage prerequisite, then gives concrete examples - each sentence earns its place. No wasted words, and the information is front-loaded appropriately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only filtering tool with no output schema and no annotations, the description provides good context about purpose, prerequisites, and usage examples. However, it doesn't describe the return format or structure of results, which would be helpful given the absence of output schema. The examples partially compensate for this gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description adds value by providing concrete examples of parameter usage (e.g., 'tech="python~3.10", entry_type="class"'), but doesn't add semantic meaning beyond what the schema provides. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('obtiene'/'gets') and resource ('entradas filtradas por tipo'/'entries filtered by type'), and distinguishes it from sibling tools by mentioning the specific filtering capability. It provides concrete examples that illustrate the exact functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('para ver los tipos disponibles'/'to see available types') and provides a clear prerequisite: 'Primero usa get_documentation_index' ('First use get_documentation_index'). This gives specific guidance on the proper sequence of operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentationsA

Lista todas las documentaciones disponibles en DevDocs. Puedes filtrar por nombre de tecnologΓ­a.

Ejemplos de uso:

  • Sin filtro: lista todas las ~600 documentaciones

  • Con filtro "python": lista Python 2.7, 3.8, 3.9, 3.10, 3.11, 3.12

  • Con filtro "react": lista React, React Native, React Router, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoFiltro opcional por nombre (ej: 'python', 'javascript', 'spring')

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the tool's function and provides examples of output (e.g., listing Python versions), but it doesn't mention potential limitations like pagination, rate limits, authentication needs, or what happens when no filter is applied beyond stating it lists '~600 documentaciones'. The examples add some behavioral context but leave gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by a brief explanation of filtering, and then three concise usage examples that efficiently demonstrate key scenarios. Every sentence adds clear value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 optional parameter, no output schema, no annotations), the description is somewhat complete but has gaps. It explains what the tool does and provides examples, but lacks details on output format, error handling, or behavioral traits like performance or limitations. For a simple list tool, this is adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline is 3. The description adds value by providing concrete examples of filter usage ('python', 'react') and illustrating the output differences, which enhances understanding beyond the schema's generic description. However, it doesn't explain parameter constraints or edge cases in detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Lista todas las documentaciones') and resource ('en DevDocs'), distinguishing it from siblings like search_documentation or get_documentation_index by focusing on listing all available documentations rather than searching or retrieving specific content. The Spanish phrasing is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (to list all documentations with optional filtering by technology name) and includes usage examples, but it doesn't explicitly state when not to use it or mention specific alternatives like search_documentation for more complex searches. The examples help illustrate the filtering behavior effectively.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

offline_mode_statusA

Muestra quΓ© documentaciones estΓ‘n disponibles offline (en cachΓ©). Indica quΓ© tecnologΓ­as tienen el Γ­ndice cacheado y cuΓ‘ntas pΓ‘ginas.

Útil para saber qué documentación puedes consultar sin conexión a internet.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It describes what the tool returns (which technologies have cached indexes and page counts) but doesn't disclose behavioral aspects like whether it requires authentication, has rate limits, or how current the cache status information is. The description adds basic context but lacks operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise with three sentences that each earn their place: first states the core function, second specifies what information is returned, third provides usage context. No wasted words and front-loaded with the main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description provides good completeness: it explains what the tool does, what information it returns, and when to use it. However, without annotations or output schema, it could benefit from more detail about the return format (e.g., structured data vs plain text) to reach full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, and it focuses on what the tool returns instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('Muestra quΓ© documentaciones estΓ‘n disponibles offline') and resources ('documentaciones', 'tecnologΓ­as', 'pΓ‘ginas'). It distinguishes from siblings by focusing on cached/offline status rather than searching, listing, or manipulating documentation content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'Útil para saber qué documentación puedes consultar sin conexión a internet.' This provides clear context about using it to determine offline availability, distinguishing it from siblings that perform operations like clearing cache, exporting, or searching documentation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_across_docsA

Busca un término en MÚLTIPLES documentaciones a la vez. Útil cuando no sabes en qué tecnología buscar.

Si no especificas techs, busca en las mΓ‘s populares: JavaScript, Python, React, Node, TypeScript, HTML, CSS, Vue, Angular.

Ejemplos:

  • query="websocket" β†’ busca en todas las populares

  • query="async", techs=["python~3.10", "javascript", "rust"] β†’ busca en especΓ­ficas

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesTΓ©rmino de bΓΊsqueda
techsNoLista de tecnologΓ­as donde buscar (opcional)
limit_per_techNoMΓ‘ximo de resultados por tecnologΓ­a (default: 5)

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the default behavior (searching popular techs when none specified) and provides examples, which adds useful context. However, it doesn't disclose important behavioral traits like rate limits, authentication needs, response format, or pagination behavior. For a search tool with no annotations, this leaves significant gaps in understanding how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and concise. It starts with the core purpose, immediately provides usage guidance, explains default behavior, and gives practical examples. Every sentence earns its place with no wasted words. The information is front-loaded with the most important details first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (cross-documentation search), no annotations, and no output schema, the description is incomplete. While it covers purpose and usage well, it lacks information about the response format, result structure, error conditions, or performance characteristics. For a tool that searches across multiple documentations, the agent needs more context about what to expect in return.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the baseline is 3. The description adds significant value beyond the schema by explaining the default behavior when techs aren't specified (searches popular technologies) and providing concrete examples showing parameter usage. It clarifies that 'techs' is optional and shows the syntax for specific tech versions ('python~3.10'). This elevates the score above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: searching for a term across multiple documentations simultaneously. It specifies the verb 'busca' (search) and the resource 'MÚLTIPLES documentaciones', distinguishing it from sibling tools like 'search_documentation' which likely searches within a single documentation. The description explicitly mentions this is useful when you don't know which technology to search in.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool: when you don't know which technology to search in. It also specifies what happens when you don't provide techs (searches in popular technologies) and gives concrete examples showing both default and specific usage scenarios. This clearly differentiates it from alternatives like 'search_documentation'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_documentationA

Busca dentro del índice de una documentación específica. Útil para encontrar clases, funciones, métodos, módulos, etc.

IMPORTANTE: Primero debes saber el slug exacto de la documentaciΓ³n. Usa list_documentations para encontrarlo.

Ejemplos:

  • tech="python~3.10", query="asyncio" β†’ encuentra mΓ³dulo asyncio

  • tech="spring_boot", query="actuator" β†’ encuentra docs de actuator

  • tech="javascript", query="Promise" β†’ encuentra Promise API

ParametersJSON Schema
NameRequiredDescriptionDefault
techYesSlug de la tecnologΓ­a (ej: 'python~3.10', 'spring_boot', 'javascript')
queryYesTΓ©rmino de bΓΊsqueda
limitNoMΓ‘ximo de resultados (default: 20)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the tool is 'Útil para encontrar' items, implying it's a read-only search operation, but doesn't explicitly state it's non-destructive or safe. It doesn't disclose behavioral traits like rate limits, authentication needs, or what happens with invalid inputs. The description adds some context about requiring exact slugs but lacks comprehensive behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded with the core purpose. The IMPORTANTE section efficiently handles prerequisites, and examples are relevant. However, the Spanish language might add slight cognitive load for non-Spanish agents, and the structure could be slightly tighter (e.g., combining the first two lines).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is moderately complete. It covers purpose, prerequisites, and examples but lacks details about return format, error handling, or pagination (implied by 'limit' parameter). For a search tool with 3 parameters and no structured output documentation, it should provide more about what results look like or how they're structured.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing good documentation for all three parameters. The description adds minimal value beyond the schema: it reinforces that 'tech' requires an exact slug (implied in schema's examples) and provides example queries, but doesn't explain parameter interactions or search semantics (e.g., how 'query' matches text). Baseline 3 is appropriate since the schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches within a specific documentation index and provides examples of what it finds (classes, functions, methods, modules). It distinguishes from siblings like 'search_across_docs' by specifying it searches within a single documentation index rather than across multiple. However, it doesn't explicitly contrast with 'get_documentation_index' which might retrieve the index itself rather than search within it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'Primero debes saber el slug exacto de la documentaciΓ³n. Usa list_documentations para encontrarlo.' It provides a clear prerequisite and directs to a specific alternative tool (list_documentations) for obtaining required information. The examples also illustrate appropriate use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updates
    • First observedclear_cache
    • First observedexport_documentation
    • First observedget_cache_stats
    • First observedget_documentation_index
    • First observedget_examples
    • First observedget_multiple_pages
    • First observedget_page_content
    • First observedget_type_entries
    • First observedlist_documentations
    • First observedoffline_mode_status
    • First observedsearch_across_docs
    • First observedsearch_documentation

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have distinct purposes, but some overlap exists: get_page_content and get_multiple_pages both retrieve documentation content, and search_documentation and search_across_docs both handle searching, though with different scopes. The descriptions clarify the differences, but an agent might occasionally misselect between these pairs.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with clear verb_noun structures (e.g., clear_cache, get_page_content, search_documentation). The naming is predictable and uniform throughout the set, making it easy for agents to understand and use.

Tool Count5/5

With 12 tools, the server is well-scoped for managing DevDocs documentation. The count is reasonable, covering key operations like listing, searching, retrieving, exporting, and caching without being overwhelming or insufficient for the domain.

Completeness4/5

The tool set provides comprehensive coverage for documentation access, including listing, searching, retrieving, exporting, and caching. A minor gap is the lack of tools for updating or deleting cached documentation, but core workflows are fully supported, and agents can work around this with existing tools like clear_cache.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Provides access to 600+ documentation libraries from DevDocs.io including Python, JavaScript, React, Django, and more. Enables searching, browsing, and retrieving documentation content directly through Claude Desktop.
    5
    5
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides AI assistants with instant access to local Dash documentation docsets and cheatsheets, enabling offline documentation searches across 165+ programming languages, frameworks, and developer tools directly within conversations.
    9
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants like Claude to search and retrieve technical documentation from a local DevDocs instance for hundreds of programming languages and frameworks.
    1
    MIT

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