Documentación Crawler y servidor MCP
Este proyecto proporciona un conjunto de herramientas para rastrear sitios web, generar documentación Markdown y hacer que dicha documentación se pueda buscar a través de un servidor de Protocolo de contexto de modelo (MCP), diseñado para la integración con herramientas como Cursor.
Características
Rastreador web ( :
Rastrea sitios web a partir de una URL determinada utilizando
crawl4ai.Profundidad de rastreo configurable, patrones de URL (incluir/excluir), tipos de contenido, etc.
Limpieza opcional de HTML antes de la conversión a Markdown (elimina enlaces de navegación, encabezados y pies de página).
Genera un único archivo Markdown consolidado a partir del contenido rastreado.
Guarda la salida en
./storage/de forma predeterminada.
Servidor MCP ( :
Carga archivos Markdown desde el directorio
./storage/.Analiza Markdown en fragmentos semánticos basados en encabezados.
Genera incrustaciones vectoriales para cada fragmento utilizando
sentence-transformers(multi-qa-mpnet-base-dot-v1).Almacenamiento en caché: utiliza un archivo de caché (
storage/document_chunks_cache.pkl) para almacenar fragmentos procesados e incrustaciones.Primera ejecución: el inicio inicial del servidor después de rastrear nuevos documentos puede llevar algún tiempo, ya que necesita analizar, fragmentar y generar incrustaciones para todo el contenido.
Ejecuciones posteriores: si el archivo de caché existe y los tiempos de modificación de los archivos de origen
.mden./storage/no han cambiado, el servidor carga directamente desde el caché, lo que genera tiempos de inicio mucho más rápidos.Invalidación de caché: la caché se invalida y se regenera automáticamente si se modifica, agrega o elimina algún archivo
.mden./storage/desde la última creación de la caché.
Expone herramientas MCP a través de
fastmcppara clientes como Cursor:list_documents: enumera los documentos rastreados disponibles.get_document_headings: recupera la estructura del encabezado de un documento.search_documentation: realiza una búsqueda semántica en fragmentos de documentos utilizando similitud vectorial.
Integración de Cursor : Diseñado para ejecutar el servidor MCP a través del transporte
stdiopara su uso dentro de Cursor.
Related MCP server: WebSearch
Flujo de trabajo
Rastrear: utilice la herramienta
crawler_clipara rastrear un sitio web y generar un archivo.mden./storage/.Ejecutar servidor: configure y ejecute
mcp_server(normalmente administrado por un cliente MCP como Cursor).Cargar e incrustar: el servidor carga, fragmenta e incrusta automáticamente el contenido de los archivos
.mden./storage/.Consulta: utilice el cliente MCP (por ejemplo, Cursor Agent) para interactuar con las herramientas del servidor (
list_documents,search_documentation, etc.) para consultar el contenido rastreado.
Configuración
Este proyecto utiliza uv para la gestión y ejecución de dependencias.
Instalar : siga las instrucciones del sitio web de uv .
Clonar el repositorio:
git clone https://github.com/alizdavoodi/MCPDocSearch.git cd MCPDocSearchInstalar dependencias:
uv syncEste comando crea un entorno virtual (normalmente
.venv) e instala todas las dependencias enumeradas enpyproject.toml.
Uso
1. Documentación de rastreo
Ejecute el rastreador utilizando el script crawl.py o directamente a través de uv run .
Ejemplo básico:
Esto rastreará https://docs.example.com con la configuración predeterminada y guardará la salida en ./storage/docs.example.com.md .
Ejemplo con opciones:
Ver todas las opciones:
Las opciones clave incluyen:
--output/-o: especifica la ruta del archivo de salida.--max-depth/-d: establece la profundidad de rastreo (debe estar entre 1 y 5).--include-pattern/--exclude-pattern: Filtrar las URL para rastrear.--keyword/-k: Palabras clave para la puntuación de relevancia durante el rastreo.--remove-links/--keep-links: Controla la limpieza de HTML.--cache-mode: controla el almacenamiento en cachécrawl4ai(DEFAULT,BYPASS,FORCE_REFRESH).--wait-for: Esperar un tiempo específico (segundos) o un selector CSS antes de capturar el contenido (p. ej.,5o'css:.content'). Útil para páginas con carga retardada.--js-code: ejecuta JavaScript personalizado en la página antes de capturar el contenido.--page-load-timeout: establece el tiempo máximo (segundos) que se debe esperar para que se cargue una página.--wait-for-js-render/--no-wait-for-js-render: Habilita un script específico para gestionar mejor las aplicaciones de página única (SPA) con uso intensivo de JavaScript al desplazarse y hacer clic en los botones "Cargar más". Establece automáticamente un tiempo de espera predeterminado si no se especifica--wait-for.
Refinando los rastreos con patrones y profundidad
A veces, es posible que quieras rastrear solo una subsección específica de un sitio de documentación. Esto suele requerir un poco de prueba y error con --include-pattern y --max-depth .
--include-pattern: Restringe el rastreador para que solo siga los enlaces cuyas URL coincidan con los patrones especificados. Use comodines (*) para mayor flexibilidad.--max-depth: Controla la cantidad de clics que el rastreador recorrerá desde la URL de inicio. Una profundidad de 1 significa que solo rastrea páginas enlazadas directamente desde la URL de inicio. Una profundidad de 2 significa que rastrea esas páginas y las páginas enlazadas desde ellas (si también coinciden con los patrones de inclusión), y así sucesivamente.
Ejemplo: Rastrear solo la sección API de administración de Pulsar
Supongamos que solo desea el contenido en https://pulsar.apache.org/docs/4.0.x/admin-api-* .
URL de inicio: Puede comenzar en la página de descripción general:
https://pulsar.apache.org/docs/4.0.x/admin-api-overview/.Incluir patrón: solo desea enlaces que contengan
admin-api:--include-pattern "*admin-api*".Profundidad máxima: Debes determinar cuántos niveles de profundidad tienen los enlaces de la API de administración desde la página inicial. Comienza con
2y aumenta si es necesario.Modo detallado: use
-vpara ver qué URL se están visitando o se omiten, lo que ayuda a depurar los patrones y la profundidad.
Revise el archivo de salida ( ./storage/pulsar.apache.org.md por defecto en este caso). Si faltan páginas, intente aumentar --max-depth a 3 Si se incluyen demasiadas páginas no relacionadas, especifique --include-pattern o agregue reglas --exclude-pattern .
2. Ejecución del servidor MCP
El servidor MCP está diseñado para ser ejecutado por un cliente MCP como Cursor mediante el transporte stdio . El comando para ejecutar el servidor es:
Sin embargo, es necesario ejecutarlo desde el directorio raíz del proyecto ( MCPDocSearch ) para que Python pueda encontrar el módulo mcp_server .
⚠️ Precaución: Tiempo de incrustación
El servidor MCP genera incrustaciones localmente la primera vez que se ejecuta o cuando cambian los archivos Markdown de origen en ./storage/ . Este proceso implica cargar un modelo de aprendizaje automático y procesar todos los fragmentos de texto.
El tiempo varía: el tiempo necesario para la generación de la incrustación puede variar significativamente en función de:
Hardware: los sistemas con una GPU compatible (CUDA o Apple Silicon/MPS) serán mucho más rápidos que los sistemas con solo CPU.
Tamaño de los datos: la cantidad total de archivos Markdown y la longitud de su contenido afectan directamente el tiempo de procesamiento.
Tenga paciencia: Para conjuntos de documentación grandes o en hardware lento, el inicio inicial (o el inicio después de los cambios) puede tardar varios minutos. Los inicios posteriores que usen la caché serán mucho más rápidos. ⏳
3. Configuración de Cursor/Claude para el escritorio
Para utilizar este servidor con Cursor, cree un archivo .cursor/mcp.json en la raíz de este proyecto ( MCPDocSearch/.cursor/mcp.json ) con el siguiente contenido:
Explicación:
"doc-query-server": un nombre para el servidor dentro de Cursor."command": "uv": especificauvcomo el ejecutor del comando."args":"--directory", "/path/to/your/MCPDocSearch": Fundamentalmente , le indicauvque cambie su directorio de trabajo a la raíz de su proyecto antes de ejecutar el comando. Reemplace"run", "python", "-m", "mcp_server.main": el comandouvse ejecutará dentro del directorio y entorno virtual correctos.
Después de guardar este archivo y reiniciar Cursor, "doc-query-server" debería estar disponible en la configuración de MCP de Cursor y ser utilizable por el Agente (por ejemplo, @doc-query-server search documentation for "how to install" ).
Para Claude for Desktop, puede utilizar esta documentación oficial para configurar el servidor MCP
Dependencias
Bibliotecas clave utilizadas:
crawl4ai: funcionalidad básica de rastreo web.fastmcp: implementación del servidor MCP.sentence-transformers: Generando incrustaciones de texto.torch: Requerido porsentence-transformers.typer: Construyendo la CLI del rastreador.uv: Gestión de proyectos y medio ambiente.beautifulsoup4(víacrawl4ai): análisis de HTML.rich: Salida de terminal mejorada.
Arquitectura
El proyecto sigue este flujo básico:
crawler_cli: ejecuta esta herramienta, proporcionando una URL de inicio y opciones.Rastreo ( : la herramienta utiliza
crawl4aipara buscar páginas web, siguiendo enlaces según reglas configuradas (profundidad, patrones).Limpieza ( : opcionalmente, el contenido HTML se limpia (eliminando la navegación, los enlaces) utilizando BeautifulSoup.
Generación de Markdown ( : el HTML limpio se convierte a Markdown.
Almacenamiento ( : el contenido Markdown generado se guarda en un archivo en el directorio
./storage/.Inicio : cuando se inicia el servidor MCP (generalmente a través de la configuración de Cursor), ejecuta
mcp_server/data_loader.py.Carga y almacenamiento en caché : El cargador de datos busca un archivo de caché (
.pkl). Si es válido, carga fragmentos e incrustaciones desde la caché. De lo contrario, lee archivos.mddesde./storage/.Fragmentación e incrustación : Los archivos Markdown se analizan en fragmentos según los encabezados. Se generan incrustaciones para cada fragmento mediante
sentence-transformersy se almacenan en memoria (y en caché).Herramientas MCP ( : El servidor expone herramientas (
list_documents,search_documentation, etc.) a través defastmcp.Consulta (Cursor) : un cliente MCP como Cursor puede llamar a estas herramientas.
search_documentationutiliza las incrustaciones precalculadas para encontrar fragmentos relevantes en función de la similitud semántica con la consulta.
Licencia
Este proyecto está licenciado bajo la licencia MIT: consulte el archivo de LICENCIA para obtener más detalles.
Contribuyendo
¡Agradecemos sus contribuciones! No dude en abrir un problema o enviar una solicitud de incorporación de cambios.
Notas de seguridad
Caché Pickle: Este proyecto utiliza el módulo
picklede Python para almacenar en caché los datos procesados (storage/document_chunks_cache.pkl). Descompilar datos de fuentes no confiables puede ser inseguro. Asegúrese de que el directorio./storage/solo sea escribible por usuarios/procesos confiables.