Search MCP Server
Un servidor que proporciona funcionalidades de búsqueda web y por similitud, diseñado para Claude Desktop. Requiere servicios externos de embeddings y API.
Documentación
parquet_mcp_server
Un potente servidor MCP (Protocolo de Control de Modelos) que proporciona herramientas para realizar búsquedas web y encontrar contenido similar. Este servidor está diseñado para funcionar con Claude Desktop y ofrece dos funcionalidades principales:
- Búsqueda Web: Realiza una búsqueda web y extrae los resultados
- Búsqueda de Similitud: Extrae información relevante de búsquedas anteriores
Este servidor es particularmente útil para:
- Aplicaciones que requieren capacidades de búsqueda web
- Proyectos que necesitan encontrar contenido similar basado en consultas de búsqueda
Instalación
Instalación mediante Smithery
Para instalar Parquet MCP Server para Claude Desktop automáticamente mediante Smithery:
npx -y @smithery/cli install @DeepSpringAI/parquet_mcp_server --client claude
Clonar este repositorio
git clone ...
cd parquet_mcp_server
Crear y activar el entorno virtual
uv venv
.venv\Scripts\activate # On Windows
source .venv/bin/activate # On macOS/Linux
Instalar el paquete
uv pip install -e .
Entorno
Crea un archivo .env con las siguientes variables:
EMBEDDING_URL=http://sample-url.com/api/embed # URL for the embedding service
OLLAMA_URL=http://sample-url.com/ # URL for Ollama server
EMBEDDING_MODEL=sample-model # Model to use for generating embeddings
SEARCHAPI_API_KEY=your_searchapi_api_key
FIRECRAWL_API_KEY=your_firecrawl_api_key
VOYAGE_API_KEY=your_voyage_api_key
AZURE_OPENAI_ENDPOINT=http://sample-url.com/azure_openai
AZURE_OPENAI_API_KEY=your_azure_openai_api_key
Uso con Claude Desktop
Añade esto a tu archivo de configuración de Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"parquet-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/home/${USER}/workspace/parquet_mcp_server/src/parquet_mcp_server",
"run",
"main.py"
]
}
}
}
Herramientas Disponibles
El servidor proporciona dos herramientas principales:
-
Buscar en la Web: Realiza una búsqueda web y extrae los resultados
- Parámetros requeridos:
queries: Lista de consultas de búsqueda
- Parámetros opcionales:
page_number: Número de página para los resultados de búsqueda (por defecto 1)
- Parámetros requeridos:
-
Extraer Información de la Búsqueda: Extrae información relevante de búsquedas anteriores
- Parámetros requeridos:
queries: Lista de consultas de búsqueda para fusionar
- Parámetros requeridos:
Ejemplos de Prompts
Aquí tienes algunos ejemplos de prompts que puedes usar con el agente:
Para Búsqueda Web:
"Please perform a web search for 'macbook' and 'laptop' and scrape the results from page 1"
Para Extraer Información de la Búsqueda:
"Please extract relevant information from the previous searches for 'macbook'"
Pruebas del Servidor MCP
El proyecto incluye un conjunto completo de pruebas en el directorio src/tests. Puedes ejecutar todas las pruebas usando:
python src/tests/run_tests.py
O ejecutar pruebas individuales:
# Test Web Search
python src/tests/test_search_web.py
# Test Extract Info from Search
python src/tests/test_extract_info_from_search.py
También puedes probar el servidor usando el cliente directamente:
from parquet_mcp_server.client import (
perform_search_and_scrape, # New web search function
find_similar_chunks # New extract info function
)
# Perform a web search
perform_search_and_scrape(["macbook", "laptop"], page_number=1)
# Extract information from the search results
find_similar_chunks(["macbook"])
Solución de Problemas
- Si obtienes errores de verificación SSL, asegúrate de que la configuración SSL en tu archivo
.envsea correcta - Si no se generan los embeddings, verifica:
- Que el servidor Ollama esté ejecutándose y sea accesible
- Que el modelo especificado esté disponible en tu servidor Ollama
- Que la columna de texto exista en tu archivo Parquet de entrada
- Si la conversión a DuckDB falla, verifica:
- Que el archivo Parquet de entrada exista y sea legible
- Que tengas permisos de escritura en el directorio de salida
- Que el archivo Parquet no esté corrupto
- Si la conversión a PostgreSQL falla, verifica:
- Que la configuración de conexión a PostgreSQL en tu archivo
.envsea correcta - Que el servidor PostgreSQL esté ejecutándose y sea accesible
- Que tengas los permisos necesarios para crear/modificar tablas
- Que la extensión pgvector esté instalada en tu base de datos
- Que la configuración de conexión a PostgreSQL en tu archivo
Función PostgreSQL para Búsqueda de Similitud Vectorial
Para realizar búsquedas de similitud vectorial en PostgreSQL, puedes usar la siguiente función:
-- Create the function for vector similarity search
CREATE OR REPLACE FUNCTION match_web_search(
query_embedding vector(1024), -- Adjusted vector size
match_threshold float,
match_count int -- User-defined limit for number of results
)
RETURNS TABLE (
id bigint,
metadata jsonb,
text TEXT, -- Added text column to the result
date TIMESTAMP, -- Using the date column instead of created_at
similarity float
)
LANGUAGE plpgsql
AS $$
BEGIN
RETURN QUERY
SELECT
web_search.id,
web_search.metadata,
web_search.text, -- Returning the full text of the chunk
web_search.date, -- Returning the date timestamp
1 - (web_search.embedding <=> query_embedding) as similarity
FROM web_search
WHERE 1 - (web_search.embedding <=> query_embedding) > match_threshold
ORDER BY web_search.date DESC, -- Sort by date in descending order (newest first)
web_search.embedding <=> query_embedding -- Sort by similarity
LIMIT match_count; -- Limit the results to the match_count specified by the user
END;
$$;
Esta función te permite realizar búsquedas de similitud en los embeddings vectoriales almacenados en una base de datos PostgreSQL, devolviendo resultados que cumplan con un umbral de similitud especificado y limitando el número de resultados según la entrada del usuario. Los resultados se ordenan por fecha y similitud.
Creación de tabla en Postgres
CREATE TABLE web_search (
id SERIAL PRIMARY KEY,
text TEXT,
metadata JSONB,
embedding VECTOR(1024),
-- This will be auto-updated
date TIMESTAMP DEFAULT NOW()
);