Skip to main content
Glama
README.md
# 📚 DevDocs MCP Server

> **Model Context Protocol (MCP) Server** para acceder a la documentación de [DevDocs.io](https://devdocs.io) desde Claude Desktop, GitHub Copilot y otros clientes MCP.

[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![MCP](https://img.shields.io/badge/MCP-1.2.0+-green.svg)](https://modelcontextprotocol.io/)
[![Docker](https://img.shields.io/badge/docker-ready-blue.svg)](https://www.docker.com/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Author](https://img.shields.io/badge/Author-JavierDevCol-purple.svg)](https://github.com/JavierDevCol)

---

## 📖 Tabla de Contenidos

- [¿Qué es MCP?](#-qué-es-mcp)
- [¿Qué es DevDocs MCP?](#-qué-es-devdocs-mcp)
- [Características](#-características)
- [Arquitectura](#-arquitectura)
- [Instalación](#-instalación)
  - [Opción 1: Docker (Recomendado)](#opción-1-docker-recomendado)
  - [Opción 2: Instalación Local](#opción-2-instalación-local)
- [Configuración](#-configuración)
  - [GitHub Copilot (VS Code)](#github-copilot-vs-code)
  - [Claude Desktop](#claude-desktop)
- [Herramientas Disponibles](#-herramientas-disponibles)
- [Ejemplos de Uso](#-ejemplos-de-uso)
- [Sistema de Caché](#-sistema-de-caché)
- [API de DevDocs](#-api-de-devdocs)
- [Desarrollo](#-desarrollo)
- [Solución de Problemas](#-solución-de-problemas)
- [Licencia](#-licencia)

---

## 🤖 ¿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

```bash
# 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

```bash
# 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

```bash
# 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)

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

#### Sin Docker (Local)

```json
{
  "mcp": {
    "servers": {
      "devdocs": {
        "command": "python",
        "args": ["-m", "devdocs_mcp.server"],
        "cwd": "E:/DevDocs/devdocs-mcp/src"
      }
    }
  }
}
```

5. 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:

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

3. 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:**
```markdown
# 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é

```bash
# 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

```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

```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

```bash
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`**:
```python
def mi_nueva_funcion(self, param: str) -> dict:
    """Descripción de la función"""
    # Implementación
    return resultado
```

2. **Agregar Tool en `server.py`**:
```python
Tool(
    name="mi_nueva_tool",
    description="Descripción para el modelo",
    inputSchema={
        "type": "object",
        "properties": {
            "param": {"type": "string", "description": "..."}
        },
        "required": ["param"]
    }
)
```

3. **Agregar handler en `server.py`**:
```python
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

```bash
# 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

```bash
# 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

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

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

### Ver logs del servidor

```bash
# 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](LICENSE) para más detalles.

---

## 🙏 Agradecimientos

- [DevDocs.io](https://devdocs.io) por proporcionar la API de documentación
- [Anthropic](https://anthropic.com) por el protocolo MCP
- [Model Context Protocol](https://modelcontextprotocol.io) por la especificación

---

## 👨‍💻 Autor

<div align="center">

**Javier Garcia** · [@JavierDevCol](https://github.com/JavierDevCol)

[![GitHub](https://img.shields.io/badge/GitHub-JavierDevCol-181717?style=for-the-badge&logo=github)](https://github.com/JavierDevCol)

</div>

---

<div align="center">

**[⬆ Volver arriba](#-devdocs-mcp-server)**

Hecho con ❤️ para la comunidad de desarrolladores

</div>

TDQS

A3.9/5.0

Scored across 12 tools

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