Web fetch and search MCP Server
Proporciona capacidades de búsqueda web, búsqueda en Wikipedia y obtención de contenido web utilizando OCaml.
Documentación
Servidor MCP de búsqueda y obtención web
Un servidor de Protocolo de Contexto de Modelo (MCP) que proporciona capacidades de búsqueda web, búsqueda en Wikipedia y obtención de contenido web, escrito en OCaml utilizando el tiempo de ejecución asíncrono eio.
Características
- Búsqueda DuckDuckGo: Busca en la web utilizando el motor de búsqueda de DuckDuckGo
- Búsqueda en Wikipedia: Busca artículos y contenido en Wikipedia
- Obtención de contenido web: Obtiene y analiza contenido de páginas web, con soporte tanto para HTML limpio como para formatos Markdown
- Limitación de velocidad: Limitación de velocidad integrada para respetar los límites del servicio
- Protocolo MCP: Totalmente compatible con la especificación del Protocolo de Contexto de Modelo (incluyendo https://tangled.sh/@anil.recoil.org/ocaml-mcp/)
- Asíncrono: Construido sobre Eio para operaciones concurrentes eficientes
Herramientas proporcionadas
search
Busca en DuckDuckGo y devuelve resultados formateados.
Parámetros:
query(cadena, obligatorio): La cadena de consulta de búsquedamax_results(entero, opcional): Número máximo de resultados a devolver (predeterminado: 10)
Ejemplo:
{
"query": "OCaml programming language",
"max_results": 5
}
search_wikipedia
Busca en Wikipedia y devuelve resultados formateados.
Parámetros:
query(cadena, obligatorio): La cadena de consulta de búsquedamax_results(entero, opcional): Número máximo de resultados a devolver (predeterminado: 10)
Ejemplo:
{
"query": "OCaml programming language",
"max_results": 5
}
fetch_content
Obtiene y analiza contenido de una URL de página web.
Parámetros:
url(cadena, obligatorio): La URL de la página web de la que obtener contenidomax_length(entero, opcional): Longitud máxima (en bytes) del contenido a devolver (predeterminado: 8192). Establece-1para deshabilitar el límite de longitud.start_from(entero, opcional): Desplazamiento de bytes para comenzar a devolver contenido (predeterminado: 0)
Ejemplo:
{
"url": "https://example.com/article",
"max_length": 16384,
"start_from": 1024
}
fetch_markdown
Obtiene y analiza contenido de una URL de página web como Markdown.
Parámetros:
url(cadena, obligatorio): La URL de la página web de la que obtener contenidomax_length(entero, opcional): Longitud máxima (en bytes) del contenido a devolver (predeterminado: 8192). Establece-1para deshabilitar el límite de longitud.start_from(entero, opcional): Desplazamiento de bytes para comenzar a devolver contenido (predeterminado: 0)
Ejemplo:
{
"url": "https://example.com/article",
"max_length": 16384,
"start_from": 1024
}
Uso
Ejecutar el servidor
El binario snf-mcp admite dos modos de operación:
- Modo servidor HTTP (predeterminado): Escucha en un puerto de red
- Modo de entrada/salida estándar: Se comunica a través de stdin/stdout
Advertencia: el binario instalado se llama snf-mcp
Inicia el servidor MCP en modo HTTP en el puerto 3000:
dune exec snf-mcp -- --serve 3000
Usa el modo de entrada/salida estándar (útil para integrarse con clientes LLM):
dune exec snf-mcp
Cuando se instala a través de OPAM, puedes ejecutarlo directamente:
snf_mcp [--serve PORT | --stdio]
--serve Run http server, listening on PORT
--stdio Use stdio for communication instead of port (default)
--debug Enable debug logging
--verbose Enable verbose logging
--quiet Suppress non-error logs (default)
-help Display this list of options
--help Display this list of options
Probar el servidor
Modo HTTP
Cuando se ejecuta en modo HTTP, puedes probar si el servidor funciona enviando mensajes del protocolo MCP usando curl.
Primero inicia el servidor con:
dune exec snf-mcp --serve 8080
Luego, en una terminal diferente, puedes usar curl para interactuar con el servidor. Aquí hay algunas solicitudes de ejemplo:
Listar herramientas disponibles:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'
Realizar una búsqueda:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "OCaml programming language",
"max_results": 3
}
}
}'
Obtener contenido de página web:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "fetch_content",
"arguments": {
"url": "https://ocaml.org"
}
}
}'
Buscar en Wikipedia:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "search_wikipedia",
"arguments": {
"query": "OCaml programming language",
"max_results": 3
}
}
}'
Obtener contenido de página web como Markdown:
curl -X POST http://localhost:8080 -H "Content-Type: application/json" -d '{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "fetch_markdown",
"arguments": {
"url": "https://ocaml.org"
}
}
}'
Modo de entrada/salida estándar
Cuando se usa el modo stdio, puedes canalizar solicitudes JSON-RPC al binario:
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | dune exec snf-mcp | jq
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search","arguments":{"query":"OCaml programming language"}},"id":2}' | dune exec snf-mcp | jq
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search_wikipedia","arguments":{"query":"OCaml programming language"}},"id":3}' | dune exec snf-mcp | jq
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"fetch_content","arguments":{"url":"https://ocaml.org"}},"id":4}' | dune exec snf-mcp | jq
echo '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"fetch_markdown","arguments":{"url":"https://ocaml.org"}},"id":5}' | dune exec snf-mcp | jq
Este modo es particularmente útil al integrarse con clientes LLM que se comunican a través de stdin/stdout.
Instalación
Compilar desde el código fuente
- Clona el repositorio
- Instala las dependencias y compila:
$ cd snf_mcp
$ opam install . --deps-only
$ dune build
$ dune install
Esto hará que el binario snf-mcp esté disponible en tu PATH.
Integración con clientes MCP
Este servidor puede integrarse con cualquier cliente compatible con MCP. Configura tu cliente para conectarse a este servidor utilizando el método de transporte apropiado. A continuación mostramos cómo configurar la versión stdio; la versión remota es muy similar. Ten en cuenta que este es software temprano y no se recomienda para producción ni para exponerse en redes no protegidas.
CLI LLM
Instala el plugin llm-tools-mcp con
llm install llm-tools-mcp
luego edita (o crea) ~/.llm-tools-mcp/mcp.json con
{
"mcpServers": {
"snf_mcp": {
"command": "/path/to/snf-mcp",
"args": [
"--stdio"
]
}
}
}
LMStudio
Edita el archivo json desde la interfaz agregando la misma entrada json que en el ejemplo de CLI LLM anterior. Consulta también la documentación oficial.
Jan
Usa la ruta completa a snf_mcp como comando, y --stdio como único argumento.
Consulta también la documentación oficial.
Nota: solo pude configurar servidores mcp basados en stdio con Jan.
Limitación de velocidad
El servidor implementa limitación de velocidad para ser respetuoso con los servicios externos:
- Solicitudes de búsqueda (DuckDuckGo y Wikipedia): Limitadas a 30 solicitudes por minuto
- Obtención de contenido: Limitada a 20 solicitudes por minuto
Solución de problemas
Problemas de limitación de velocidad
Si encuentras errores o mensajes de tiempo de espera, es posible que estés alcanzando los límites de velocidad. El servidor esperará automáticamente cuando se alcancen los límites de velocidad, pero los servicios externos podrían bloquear las solicitudes si detectan uso automatizado.
Calidad de búsqueda
Los resultados de búsqueda de DuckDuckGo se analizan a partir de la respuesta HTML. Si los resultados de búsqueda parecen incorrectos o incompletos, podría deberse a:
- DuckDuckGo cambiando su estructura HTML
- Detección de bots que impide resultados adecuados
- Problemas con el formato de la consulta de búsqueda
Intenta reformular tu consulta o verifica si el servicio de DuckDuckGo funciona normalmente.
Calidad de extracción de contenido
La herramienta fetch_markdown intenta usar la biblioteca de Python trafilatura si está disponible en tu sistema, ya que produce una extracción de texto de mayor calidad. Si no se encuentra trafilatura, recurre a jina reader.
Para obtener mejores resultados, considera instalar trafilatura, por ejemplo, de una de las siguientes 3 formas:
uv tool install trafilatura # Method 1: Using `uv` tool
pipx install trafilatura # Method 2: Using `pipx`
pip install trafilatura # Method 3: Using `pip`
PENDIENTE
- Usar paginación en la obtención