Skip to main content
Glama
zk-armor
by zk-armor
README.md
# MCP Sphinx Docs

Un servidor MCP (Model Context Protocol) que convierte documentación de Sphinx a Markdown optimizado para consumo por LLMs.

## 🚀 Instalación y uso rápido

### Como herramienta de línea de comandos

```bash
# Convertir documentación desde una URL
npx @zk-armor/mcp-sphinx-docs convert-url https://btrfs.readthedocs.io/en/latest/ ./converted-docs

# Convertir archivos locales
npx @zk-armor/mcp-sphinx-docs convert-local ./docs ./markdown-docs
```

### Como servidor MCP

Agrega a tu configuración MCP (ej. Claude Desktop):

```json
{
  "mcpServers": {
    "mcp-sphinx-docs": {
      "command": "npx",
      "args": ["@zk-armor/mcp-sphinx-docs"]
    }
  }
}
```

## 🚀 Características

- **Conversión RST a Markdown**: Convierte archivos reStructuredText de Sphinx a Markdown limpio
- **Optimización para LLMs**: Aplica transformaciones específicas para mejorar el consumo por modelos de lenguaje
- **Procesamiento por lotes**: Convierte directorios completos de documentación
- **Chunking inteligente**: Divide documentos grandes en chunks apropiados para LLMs
- **Preservación de referencias**: Mantiene enlaces internos y referencias cruzadas
- **Análisis de estructura**: Analiza la estructura de proyectos Sphinx

## 📦 Instalación

### Como dependencia local
```bash
npm install
npm run build
```

### Como paquete global (para usar con npx)
```bash
npm install -g .
# O directamente desde este directorio:
npm link
```

## 🛠️ Uso

### Como servidor MCP

El servidor MCP proporciona las siguientes herramientas:

#### 1. `convert_sphinx_file`
Convierte un archivo RST individual a Markdown.

**Parámetros:**
- `sourcePath` (string, requerido): Ruta al archivo RST
- `outputPath` (string, opcional): Ruta de salida para el archivo Markdown
- `options` (object, opcional):
  - `optimize` (boolean, default: true): Aplicar optimizaciones para LLM
  - `chunkSize` (number, default: 4000): Tamaño máximo de chunk
  - `preserveReferences` (boolean, default: true): Preservar referencias internas

#### 2. `convert_sphinx_directory`
Convierte un directorio completo de documentación Sphinx.

**Parámetros:**
- `sourcePath` (string, requerido): Ruta al directorio de documentación Sphinx
- `outputPath` (string, requerido): Directorio de salida para archivos Markdown
- `options` (object, opcional):
  - `recursive` (boolean, default: true): Procesar subdirectorios
  - `optimize` (boolean, default: true): Aplicar optimizaciones para LLM
  - `chunkSize` (number, default: 4000): Tamaño máximo de chunk
  - `preserveStructure` (boolean, default: true): Preservar estructura de directorios

#### 3. `analyze_sphinx_structure`
Analiza la estructura de un proyecto de documentación Sphinx.

**Parámetros:**
- `sourcePath` (string, requerido): Ruta al directorio de documentación
- `depth` (number, default: 3): Profundidad máxima de análisis

### Como CLI (futuro)

```bash
# Convertir un archivo
npx sphinx-to-llm-markdown convert file.rst output.md

# Convertir un directorio
npx sphinx-to-llm-markdown convert ./docs ./markdown-docs

# Analizar estructura
npx sphinx-to-llm-markdown analyze ./docs
```

## 🏗️ Arquitectura

```
src/
├── index.ts              # Servidor MCP principal
├── converters/
│   └── sphinx-converter.ts  # Lógica de conversión RST → Markdown
├── optimizers/
│   └── llm-optimizer.ts     # Optimizaciones específicas para LLMs
└── utils/
    └── file-handler.ts      # Utilidades para manejo de archivos
```

### Componentes principales

- **SphinxConverter**: Parsea RST y convierte a Markdown
  - Maneja directivas Sphinx (toctree, note, warning, etc.)
  - Convierte referencias cruzadas
  - Preserva estructura de documentos

- **LLMOptimizer**: Optimiza el Markdown para LLMs
  - Simplifica estructura (máximo 4 niveles de headers)
  - Elimina redundancias
  - Añade contexto a secciones
  - Implementa chunking inteligente

- **FileHandler**: Maneja operaciones de archivos
  - Búsqueda recursiva de archivos RST
  - Análisis de estructura de directorios
  - Operaciones de E/S con manejo de errores

## 🧪 Ejemplo de uso

### Probar con documentación BTRFS

```bash
# Clonar la documentación de BTRFS (ejemplo)
git clone https://github.com/kdave/btrfs-progs.git
cd btrfs-progs/Documentation

# Usar el servidor MCP para convertir
# (desde el cliente MCP, como Claude Desktop)
```

### Estructura de entrada típica (Sphinx)
```
docs/
├── conf.py
├── index.rst
├── introduction.rst
├── features/
│   ├── compression.rst
│   └── snapshots.rst
└── _static/
```

### Estructura de salida (Markdown optimizado)
```
markdown-docs/
├── index.md
├── introduction.md
└── features/
    ├── compression.md
    └── snapshots.md
```

## 🔧 Configuración para VS Code

El proyecto incluye configuración para depurar el servidor MCP:

1. **`.vscode/mcp.json`**: Configuración del servidor MCP
2. **`.vscode/tasks.json`**: Tareas de build y watch
3. **`.github/copilot-instructions.md`**: Instrucciones para GitHub Copilot

### Depuración

```bash
# Compilar en modo watch
npm run watch

# En otra terminal, ejecutar el servidor
npm start
```

## 📝 Formatos soportados

### Entrada (RST/Sphinx)
- ✅ Headers con subrayado (=, -, ~, etc.)
- ✅ Listas con bullets y numeración
- ✅ Bloques de código con `::`
- ✅ Directivas básicas (note, warning, tip)
- ✅ Referencias doc (`:doc:`reference`)
- ✅ Referencias internas (`:ref:`reference`)
- ✅ Enlaces externos
- ✅ Énfasis y texto fuerte
- ⚠️ Tablas simples
- ⚠️ Autodoc (básico)

### Salida (Markdown optimizado)
- ✅ Headers normalizados (máximo 4 niveles)
- ✅ Listas con bullets consistentes
- ✅ Bloques de código con hints de lenguaje
- ✅ Blockquotes para notas/warnings
- ✅ Enlaces con texto descriptivo
- ✅ Separadores de sección
- ✅ Contexto agregado para secciones profundas

## 🛣️ Roadmap

### Fase actual: MVP ✅
- [x] Conversión básica RST → Markdown
- [x] Servidor MCP funcional
- [x] Optimizaciones básicas para LLM
- [x] Manejo de archivos y directorios

### Próximas características
- [ ] CLI independiente
- [ ] Soporte mejorado para tablas complejas
- [ ] Procesamiento de autodoc más sofisticado
- [ ] Configuración personalizable
- [ ] Tests automatizados
- [ ] Publicación en NPM

### Futuro
- [ ] Soporte para otros formatos de documentación
- [ ] Integración con APIs de LLM para validación
- [ ] Dashboard web para conversiones
- [ ] Plugins para diferentes frameworks de documentación

## 🤝 Contribución

1. Fork el proyecto
2. Crea una rama para tu feature (`git checkout -b feature/amazing-feature`)
3. Commit tus cambios (`git commit -m 'Add amazing feature'`)
4. Push a la rama (`git push origin feature/amazing-feature`)
5. Abre un Pull Request

## 📄 Licencia

ISC License - ver archivo LICENSE para detalles.

## 🔗 Enlaces útiles

- [Model Context Protocol](https://modelcontextprotocol.io/)
- [Sphinx Documentation](https://www.sphinx-doc.org/)
- [reStructuredText Primer](https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html)
- [BTRFS Documentation](https://btrfs.readthedocs.io/) (ejemplo de prueba)

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a distinct scope: single file conversion, directory conversion, and structural analysis. There is no overlap or ambiguity in their purposes.

Naming Consistency5/5

All tools follow a consistent verb_sphinx_noun pattern (convert/analyze + sphinx + file/directory/structure), making the naming predictable and clear.

Tool Count5/5

Three tools is a well-scoped set for a Sphinx documentation conversion server, covering the essential operations without unnecessary bloat.

Completeness5/5

The tool set covers the full conversion workflow (single file and whole directory) plus structural analysis, leaving no obvious dead ends for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues