Markdown Navigation MCP
Un servidor MCP que proporciona navegación y lectura eficiente de archivos markdown grandes usando ctags para reducir el uso de contexto.
Documentación
Markdown Navigation MCP Server
Navega eficientemente por archivos markdown grandes (más de 2.000 líneas) sin cargar documentos completos en el contexto. Reduce el uso de tokens entre un 50 y un 80 % al trabajar con documentación, archivos de planificación y especificaciones técnicas.
Inicio rápido
Requisitos previos: Universal Ctags y Go 1.21+
# Install ctags
brew install universal-ctags # macOS
sudo apt install universal-ctags # Ubuntu/Debian
sudo dnf install universal-ctags # Fedora
# Build and install
git clone <repo-url>
cd markdown-mcp
go build -o mdnav-server ./cmd/server
sudo cp mdnav-server /usr/local/bin/
Configurar Claude Code (~/claude.json):
{
"mcpServers": {
"markdown-nav": {
"command": "mdnav-server"
}
}
}
Características
- Configuración cero: ejecución automática de ctags bajo demanda
- Caché inteligente: respuestas en menos de un microsegundo para consultas repetidas
- Invalidación automática: la caché se actualiza cuando los archivos cambian
- Lectura selectiva: carga solo las secciones que necesitas
- Navegación por árbol: visualiza la estructura del documento sin leer el contenido
- Coincidencia de patrones: encuentra secciones mediante patrones regex
- Control de profundidad: limita la profundidad del árbol/secciones para vistas enfocadas
Herramientas
markdown_tree
Muestra la estructura del documento como un árbol (formato ASCII o JSON).
Parámetros clave:
file_path: Ruta al archivo markdownformat: "ascii" o "json" (predeterminado: "json")max_depth: Limita la profundidad del árbol de 1 a 6 (predeterminado: 2 muestra H1+H2)section_name_pattern: Regex para filtrar secciones
markdown_section_bounds
Obtiene los límites de número de línea de una sección específica.
Parámetros clave:
file_path: Ruta al archivo markdownsection_heading: Texto exacto del encabezado (sin símbolos #)
markdown_read_section
Lee el contenido de una sección específica.
Parámetros clave:
file_path: Ruta al archivo markdownsection_heading: Texto exacto del encabezado (sin símbolos #)max_subsection_levels: Limita la profundidad de las subsecciones (omitir para todas)
markdown_list_sections
Lista todas las secciones con filtros.
Parámetros clave:
file_path: Ruta al archivo markdownmax_depth: Nivel máximo de encabezado a mostrar (predeterminado: 2)section_name_pattern: Regex para filtrar nombres de secciones
Ejemplos de uso
Encontrar y leer una tarea específica
User: "Review Task 4 from the planning document"
Claude uses:
1. markdown_tree to see document structure
2. markdown_section_bounds to find Task 4 location
3. markdown_read_section to read only Task 4 content
Result: Complete task analysis using only relevant section (~200 lines instead of 2000)
Descubrir secciones de documentación
User: "What testing strategies are documented?"
Claude uses:
1. markdown_list_sections with pattern="test" to find testing sections
2. markdown_read_section for each relevant section
Result: Comprehensive overview without loading entire document
Para ver ejemplos más detallados de uso de herramientas con resultados reales, consulta examples/EXAMPLES.md.
Configuración
Ruta personalizada de ctags
Si ctags no está en PATH, especifica su ubicación:
{
"mcpServers": {
"markdown-nav": {
"command": "mdnav-server",
"args": ["-ctags-path", "/custom/path/to/ctags"]
}
}
}
Solución de problemas
"ctags not found in PATH"
- Instala Universal Ctags o usa la opción
-ctags-path
"section not found"
- Usa el texto exacto del encabezado (distingue mayúsculas y minúsculas, sin símbolos #)
- Ejecuta
markdown_list_sectionspara ver las secciones disponibles
"no entries found"
- Asegúrate de que el archivo tenga encabezados markdown (#, ##, ###, ####)
- Verifica que Universal Ctags (no Exuberant) esté instalado
Problemas de caché
- Reinicia el servidor MCP para limpiar la caché (se invalida automáticamente cuando los archivos cambian)
Desarrollo
Para detalles de implementación, arquitectura y pautas de contribución, consulta CLAUDE.md.
Comandos rápidos de desarrollo:
go test ./... # Run tests
golangci-lint run # Lint code
go build ./cmd/server # Build server
Licencia
Este proyecto está licenciado bajo la GNU General Public License v3.0.