SearchAPI
Proporciona acceso estandarizado a Google Maps, Google Flights, Google Hotels y otros servicios a través de SearchAPI.
Documentación
Servidor MCP de SearchAPI
Un servidor de Model Context Protocol (MCP) listo para producción que proporciona capacidades de búsqueda integrales a través de SearchAPI.io. Permite que los asistentes de IA busquen en Google, Mapas, Vuelos, Hoteles y más, con caché integrada, lógica de reintentos y cortacircuitos.
Un servidor de búsqueda de nivel de producción basado en Model Context Protocol (MCP) que ofrece funciones de búsqueda completas a través de SearchAPI.io. Permite que los asistentes de IA busquen en Google, Mapas, Vuelos, Hoteles y más, con caché integrada, lógica de reintentos y cortacircuitos.
Características • Inicio rápido • Instalación • Configuración • Herramientas disponibles
Características
🔍 Motores de búsqueda
- Búsqueda de Google - Resultados web, grafo de conocimiento, cajas de respuesta, preguntas relacionadas
- Videos de Google - Búsqueda de videos con filtros por duración, fuente y fecha de publicación
- Modo IA de Google - Resúmenes generados por IA con fuentes citadas y contenido estructurado
- Google Maps - Lugares, negocios, reseñas y detalles de ubicación
- Lugar en Google Maps - Información detallada de ubicaciones específicas (horarios, fotos, servicios)
- Eventos de Google - Encuentra conciertos, conferencias, festivales y actividades locales
- Vuelos de Google - Búsqueda de vuelos con filtros completos y calendarios de precios
- Búsqueda de ubicación de vuelos de Google - Consulta de códigos de aeropuerto y autocompletado
- Exploración de viajes de Google - Descubre destinos e inspiración para viajar
- Hoteles de Google - Búsqueda de alojamiento con servicios, calificaciones y filtros de precio
🏗️ Arquitectura lista para producción
- Agrupación de conexiones - Gestión eficiente de conexiones HTTP con httpx
- Caché de respuestas - Caché configurable basada en TTL con expulsión LRU
- Lógica de reintentos - Retroceso exponencial para fallos transitorios
- Cortacircuitos - Patrón a prueba de fallos que previene fallos en cascada
- Recopilación de métricas - Conteo de solicitudes, latencias, tasas de acierto de caché, seguimiento de errores
- Comprobaciones de salud - Monitoreo de la conectividad de la API y el estado del servicio
⚙️ Configuración y monitoreo
- Validación Pydantic - Configuración con seguridad de tipos y soporte de variables de entorno
- Registro estructurado - Niveles de registro configurables con seguimiento detallado de solicitudes
- Gestión de recursos - Limpieza automática y apagado ordenado
- Variables de entorno - Configuración flexible para diferentes despliegues
Inicio rápido
Requisitos previos
- Python 3.10 o superior
- Clave de API de SearchAPI.io (Obtén una aquí)
Instalación con UV (Recomendado)
La forma más rápida de comenzar es usando uvx:
# Set your API key
export SEARCHAPI_API_KEY="your_api_key_here"
# Run directly with uvx (no installation needed)
uvx --from git+https://github.com/RmMargt/searchAPI-mcp.git mcp-server-searchapi
Instalación
Método 1: UV (Recomendado)
UV es el método más rápido y conveniente:
# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone the repository
git clone https://github.com/RmMargt/searchAPI-mcp.git
cd searchAPI-mcp
# Install dependencies
uv pip install -r requirements.txt
Método 2: pip
# Clone the repository
git clone https://github.com/RmMargt/searchAPI-mcp.git
cd searchAPI-mcp
# Create and activate virtual environment
python -m venv venv
source venv/bin/activate # On Windows: .\venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
Método 3: Desde el código fuente
git clone https://github.com/RmMargt/searchAPI-mcp.git
cd searchAPI-mcp
# Using uv
uv pip install httpx fastmcp python-dotenv pydantic pydantic-settings
# Or using pip
pip install httpx fastmcp python-dotenv pydantic pydantic-settings
Configuración
Variables de entorno
Crea un archivo .env en la raíz del proyecto:
# Required
SEARCHAPI_API_KEY=your_api_key_here
# Optional - API Configuration
SEARCHAPI_API_URL=https://www.searchapi.io/api/v1/search
TIMEOUT=30.0
MAX_RETRIES=3
RETRY_BACKOFF=1.0
# Optional - Cache Configuration
ENABLE_CACHE=true
CACHE_TTL=3600
CACHE_MAX_SIZE=1000
# Optional - Connection Pool
POOL_CONNECTIONS=10
POOL_MAXSIZE=10
# Optional - Monitoring
ENABLE_METRICS=true
LOG_LEVEL=INFO
Configuración del cliente MCP
Claude Desktop
Agrega a tu archivo de configuración de Claude Desktop:
Ubicación:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Usando UV (Recomendado):
{
"mcpServers": {
"searchapi": {
"command": "uvx",
"args": [
"--directory",
"/absolute/path/to/searchAPI-mcp",
"python",
"mcp_server_refactored.py"
],
"env": {
"SEARCHAPI_API_KEY": "your_api_key_here"
}
}
}
}
Usando Python directamente:
{
"mcpServers": {
"searchapi": {
"command": "python",
"args": [
"/absolute/path/to/searchAPI-mcp/mcp_server_refactored.py"
],
"env": {
"SEARCHAPI_API_KEY": "your_api_key_here"
}
}
}
}
Usando entorno virtual:
{
"mcpServers": {
"searchapi": {
"command": "/absolute/path/to/searchAPI-mcp/venv/bin/python",
"args": [
"/absolute/path/to/searchAPI-mcp/mcp_server_refactored.py"
],
"env": {
"SEARCHAPI_API_KEY": "your_api_key_here"
}
}
}
}
VS Code (Continue, Cline)
Agrega a .vscode/mcp.json en tu espacio de trabajo o usa el comando "MCP: Open User Configuration":
{
"servers": {
"searchapi": {
"command": "python",
"args": [
"/absolute/path/to/searchAPI-mcp/mcp_server_refactored.py"
],
"env": {
"SEARCHAPI_API_KEY": "your_api_key_here"
}
}
}
}
Con UV:
{
"servers": {
"searchapi": {
"command": "uvx",
"args": [
"--directory",
"/absolute/path/to/searchAPI-mcp",
"python",
"mcp_server_refactored.py"
],
"env": {
"SEARCHAPI_API_KEY": "your_api_key_here"
}
}
}
}
Editor Zed
Agrega a ~/.config/zed/settings.json:
{
"context_servers": {
"searchapi": {
"command": {
"path": "python",
"args": [
"/absolute/path/to/searchAPI-mcp/mcp_server_refactored.py"
],
"env": {
"SEARCHAPI_API_KEY": "your_api_key_here"
}
}
}
}
}
Cline (Extensión de VS Code)
En la configuración de Cline, agrega a Servidores MCP:
{
"mcpServers": {
"searchapi": {
"command": "python",
"args": [
"/absolute/path/to/searchAPI-mcp/mcp_server_refactored.py"
],
"env": {
"SEARCHAPI_API_KEY": "your_api_key_here"
}
}
}
}
Cliente MCP genérico
Para cualquier cliente compatible con MCP:
# Using stdio transport (default)
python /path/to/searchAPI-mcp/mcp_server_refactored.py
# With environment variable
SEARCHAPI_API_KEY=your_key python mcp_server_refactored.py
Herramientas disponibles
Salud y monitoreo
health_check
Comprueba la salud y el rendimiento del servicio de SearchAPI.
Devuelve:
- Estado de conectividad de la API
- Latencia de respuesta
- Estado del cortacircuitos
- Estadísticas de caché
- Métricas de solicitudes
Ejemplo:
{
"api_status": {
"status": "healthy",
"latency_ms": 145.23,
"circuit_breaker": "closed"
},
"cache_stats": {
"size": 42,
"max_size": 1000,
"ttl": 3600
},
"metrics": {
"request_count": 156,
"error_count": 2,
"cache_hit_rate": 0.67
}
}
Utilidades de hora y fecha
get_current_time
Obtén la hora actual y sugerencias de fechas de viaje. Esencial para reservas de vuelos y hoteles.
Parámetros:
format- Formato de fecha: "iso", "slash", "chinese", "timestamp", "full"days_offset- Días a partir de hoy (puede ser negativo)return_future_dates- Devuelve un arreglo de fechas futurasfuture_days- Número de fechas futuras (si return_future_dates=true)
Ejemplo:
# Get today's date in ISO format
get_current_time(format="iso")
# Returns: {"date": "2025-11-16", "now": {...}, "travel_dates": {...}}
# Get date 7 days from now with future dates array
get_current_time(days_offset=7, return_future_dates=True, future_days=30)
Búsqueda de Google
search_google
Busca en Google resultados web, grafos de conocimiento y cajas de respuesta.
Parámetros:
q(obligatorio) - Consulta de búsquedalocation- Nombre de ubicación (p. ej., "Nueva York, NY")gl- Código de país (predeterminado: "us")hl- Código de idioma (predeterminado: "en")time_period- Filtro de tiempo: "last_hour", "last_day", "last_week", "last_month", "last_year"num- Resultados por página (predeterminado: "10")safe- Búsqueda segura: "off", "active"
Ejemplo:
search_google(
q="Python programming tutorials",
location="San Francisco, CA",
time_period="last_month",
num="20"
)
search_google_videos
Busca videos en Google Videos.
Parámetros: Similares a search_google con filtros específicos de video
q(obligatorio) - Consulta de búsquedatime_period- Filtro por fecha de publicacióndevice- "desktop" o "mobile"
Ejemplo:
search_google_videos(
q="machine learning tutorial",
time_period="last_week",
num="10"
)
search_google_ai_mode
Busca con resúmenes generados por IA y fuentes citadas.
Parámetros:
q- Consulta de búsqueda (obligatorio a menos que se proporcione url)url- URL de imagen para buscarlocation- Ubicación para resultados localizados
Devuelve:
- Resumen generado por IA con citas
- Bloques de contenido estructurado (párrafos, listas, tablas, código)
- Enlaces de referencia
- Resultados web
Ejemplo:
search_google_ai_mode(
q="How does machine learning work?",
location="United States"
)
Google Maps
search_google_maps
Busca lugares, negocios y servicios.
Parámetros:
query(obligatorio) - Consulta de búsquedalocation_ll- Coordenadas lat/lng (formato: "@lat,lng,zoom")
Ejemplo:
search_google_maps(
query="coffee shops near Central Park",
location_ll="@40.7829,-73.9654,15z"
)
search_google_maps_place
Obtén información detallada de un lugar específico.
Parámetros:
place_id(obligatorio si no hay data_id) - ID de lugar de Google Mapsdata_id- Identificador alternativo de lugargoogle_domain- Dominio de Google (predeterminado: "google.com")hl- Código de idioma (predeterminado: "en")
Ejemplo:
search_google_maps_place(
place_id="ChIJN1t_tDeuEmsRUsoyG83frY4"
)
search_google_maps_reviews
Obtén reseñas de un lugar específico.
Parámetros:
place_id(obligatorio si no hay data_id) - ID de lugar de Google Mapsdata_id- Identificador alternativo de lugarsort_by- "most_relevant", "newest", "highest_rating", "lowest_rating"rating- Filtro por calificación: "1"-"5"
Ejemplo:
search_google_maps_reviews(
place_id="ChIJN1t_tDeuEmsRUsoyG83frY4",
sort_by="newest",
rating="5"
)
Eventos de Google
search_google_events
Busca eventos, conciertos, conferencias y actividades.
Parámetros:
q(obligatorio) - Consulta de búsqueda (p. ej., "conciertos en CDMX", "conferencias tecnológicas")location- Nombre de ubicación para resultados localizadoschips- Filtro de fecha ("today", "tomorrow", "week", "weekend", "month") o tipo de eventogl- Código de país (predeterminado: "us")hl- Código de idioma (predeterminado: "en")page- Número de página (predeterminado: "1")
Ejemplo:
search_google_events(
q="music festivals in Austin",
chips="weekend",
location="Austin, TX"
)
Vuelos de Google
search_google_flights
Busca vuelos con filtros completos.
Parámetros:
departure_id(obligatorio) - Código de aeropuerto (p. ej., "JFK")arrival_id(obligatorio) - Código de aeropuerto (p. ej., "LAX")outbound_date(obligatorio) - Fecha de salida (AAAA-MM-DD)flight_type- "one_way", "round_trip", "multi_city"return_date- Fecha de regreso (obligatoria para round_trip)travel_class- "economy", "premium_economy", "business", "first"stops- "0" (sin escalas), "1", "2"adults- Número de adultoscurrency- Código de moneda (p. ej., "USD")
Ejemplo:
search_google_flights(
departure_id="JFK",
arrival_id="LAX",
outbound_date="2025-12-15",
return_date="2025-12-22",
flight_type="round_trip",
travel_class="economy",
stops="0",
adults="2"
)
search_google_flights_calendar
Obtén el calendario de precios para planificar fechas flexibles.
Parámetros:
flight_type(obligatorio) - "one_way" o "round_trip"departure_id(obligatorio) - Código de aeropuertoarrival_id(obligatorio) - Código de aeropuertooutbound_date(obligatorio) - Fecha de referenciareturn_date- Obligatorio para round_trip
Ejemplo:
search_google_flights_calendar(
flight_type="round_trip",
departure_id="SFO",
arrival_id="NYC",
outbound_date="2025-12-01",
return_date="2025-12-08"
)
search_google_flights_location_search
Busca códigos de aeropuerto y ubicaciones.
Parámetros:
q(obligatorio) - Consulta de búsqueda (nombre de aeropuerto, ciudad o código)gl- Código de país (predeterminado: "us")hl- Código de idioma (predeterminado: "en")
Ejemplo:
search_google_flights_location_search(
q="Tokyo"
)
search_google_travel_explore
Explora destinos de viaje y encuentra inspiración.
Parámetros:
departure_id(obligatorio) - Código de aeropuerto de salida o ubicaciónarrival_id- Destino (predeterminado: cualquier lugar)time_period- Período de viaje (p. ej., "two_week_trip_in_december")interests- Filtro por intereses: "popular", "outdoors", "beaches", "museums", "history", "skiing"travel_class- "economy", "premium_economy", "business", "first_class"adults- Número de adultos (predeterminado: "1")currency- Código de moneda (predeterminado: "USD")
Ejemplo:
search_google_travel_explore(
departure_id="JFK",
interests="beaches",
time_period="two_week_trip_in_december"
)
Hoteles de Google
search_google_hotels
Busca hoteles y alojamiento.
Parámetros:
q(obligatorio) - Consulta de ubicacióncheck_in_date(obligatorio) - Fecha de entrada (AAAA-MM-DD)check_out_date(obligatorio) - Fecha de salida (AAAA-MM-DD)adults- Número de adultos (predeterminado: "2")rating- Calificación mínima: "3", "4", "5"hotel_class- Calificación por estrellas: "2"-"5"price_min/price_max- Rango de preciosamenities- Filtro por servicios (p. ej., "pool,wifi,parking")free_cancellation- "true" o "false"
Ejemplo:
search_google_hotels(
q="hotels in Paris",
check_in_date="2025-12-20",
check_out_date="2025-12-25",
adults="2",
rating="4",
amenities="wifi,pool",
price_max="300",
free_cancellation="true"
)
search_google_hotels_property
Obtén información detallada de un hotel específico.
Parámetros:
property_token(obligatorio) - ID de propiedad de los resultados de búsquedacheck_in_date(obligatorio) - Fecha de entradacheck_out_date(obligatorio) - Fecha de salidaadults- Número de adultos
Ejemplo:
search_google_hotels_property(
property_token="ChIJd8BlQ2BZwokRAFUEcm_qrcA",
check_in_date="2025-12-20",
check_out_date="2025-12-25",
adults="2"
)
Ejemplos de uso
Ejemplo 1: Descubre y planifica un viaje
# 1. Explore destinations from New York
destinations = search_google_travel_explore(
departure_id="JFK",
interests="beaches",
time_period="two_week_trip_in_december"
)
# 2. Get current date and travel dates
dates = get_current_time(return_future_dates=True, future_days=30)
check_in = dates["travel_dates"]["next_week"]
check_out = dates["travel_dates"]["next_month"]
# 3. Search for flights
flights = search_google_flights(
departure_id="JFK",
arrival_id="CDG",
outbound_date=check_in,
return_date=check_out,
flight_type="round_trip",
travel_class="economy",
adults="2"
)
# 4. Search for hotels
hotels = search_google_hotels(
q="hotels in Paris",
check_in_date=check_in,
check_out_date=check_out,
adults="2",
rating="4",
amenities="wifi,breakfast"
)
# 5. Find nearby restaurants
restaurants = search_google_maps(
query="restaurants near Eiffel Tower"
)
# 6. Get detailed place info
place_details = search_google_maps_place(
place_id=restaurants["local_results"][0]["place_id"]
)
# 7. Find local events
events = search_google_events(
q="concerts in Paris",
chips="weekend"
)
Ejemplo 2: Investiga con el modo IA
# Get AI-generated overview with sources
result = search_google_ai_mode(
q="What are the health benefits of Mediterranean diet?",
location="United States"
)
# Result includes:
# - result["markdown"] - AI overview in markdown format
# - result["text_blocks"] - Structured content blocks
# - result["reference_links"] - Cited sources
# - result["web_results"] - Traditional search results
Ejemplo 3: Monitorea la salud del servicio
# Check API health and metrics
health = health_check()
print(f"Status: {health['api_status']['status']}")
print(f"Latency: {health['api_status']['latency_ms']}ms")
print(f"Cache hit rate: {health['metrics']['cache_hit_rate']:.2%}")
print(f"Total requests: {health['metrics']['request_count']}")
Desarrollo
Ejecutar pruebas
# Run all tests
python -m pytest
# Run specific test file
python test_refactored.py
Estructura del código
searchAPI-mcp/
├── mcp_server_refactored.py # Main MCP server with FastMCP
├── config.py # Configuration with Pydantic validation
├── client.py # HTTP client with pooling, retry, caching
├── requirements.txt # Python dependencies
├── .env.example # Example environment variables
└── tests/ # Test files
Componentes clave
-
mcp_server_refactored.py - Implementación del servidor MCP usando FastMCP
- Definiciones de herramientas con documentación completa
- Comprobaciones de salud y endpoints de monitoreo
- Apagado limpio y gestión de recursos
-
config.py - Gestión de configuración
- Modelos Pydantic para configuración con seguridad de tipos
- Validación de variables de entorno
- Valores predeterminados sensatos con opciones de anulación
-
client.py - Cliente HTTP listo para producción
- Agrupación de conexiones con httpx
- Lógica de reintentos con retroceso exponencial
- Caché de respuestas basada en TTL
- Patrón de cortacircuitos
- Recopilación de métricas
Depuración
Usa el Inspector de MCP para probar herramientas:
# Install inspector
npm install -g @modelcontextprotocol/inspector
# Run inspector
npx @modelcontextprotocol/inspector python mcp_server_refactored.py
Configura la variable de entorno para registro detallado:
LOG_LEVEL=DEBUG python mcp_server_refactored.py
Solución de problemas
Problemas comunes
Problema: Error de "clave de API no válida"
- Solución: Asegúrate de que
SEARCHAPI_API_KEYesté configurada correctamente en el entorno o en el archivo .env - Obtén una clave de API en https://www.searchapi.io/
Problema: Error de "cortacircuitos ABIERTO"
- Causa: Demasiados fallos consecutivos de la API
- Solución: Comprueba tu conexión a internet y tu clave de API. Espera 60 segundos para que el cortacircuitos se restablezca, o reinicia el servidor
Problema: Tiempos de espera de conexión
- Solución: Aumenta el tiempo de espera en .env:
TIMEOUT=60.0 - Comprueba la conectividad de red con SearchAPI.io
Problema: Latencia alta
- Solución: Habilita la caché si está deshabilitada:
ENABLE_CACHE=true - Aumenta el tamaño de la caché:
CACHE_MAX_SIZE=5000 - Consulta la herramienta
health_checkpara ver las métricas
Problema: Errores de codificación en Windows
- Solución: Configura la variable de entorno en la configuración de tu cliente MCP:
"env": { "PYTHONIOENCODING": "utf-8", "SEARCHAPI_API_KEY": "your_key" }
Obtener ayuda
- Consulta la Documentación de MCP
- Revisa la Documentación de SearchAPI.io
- Abre un issue en GitHub
Ajuste de Rendimiento
Configuración de Caché
Para mayores tasas de acierto de caché:
CACHE_TTL=7200 # 2 hours
CACHE_MAX_SIZE=5000 # Store more results
Para entornos con memoria limitada:
CACHE_TTL=1800 # 30 minutes
CACHE_MAX_SIZE=100 # Smaller cache
Grupo de Conexiones
Para escenarios de alto tráfico:
POOL_CONNECTIONS=50
POOL_MAXSIZE=50
Para escenarios de bajo tráfico:
POOL_CONNECTIONS=5
POOL_MAXSIZE=5
Consideraciones de Seguridad
⚠️ Notas de Seguridad Importantes:
-
Protección de la Clave API
- Nunca confirmes el archivo
.enven el control de versiones - Usa variables de entorno en producción
- Rota las claves API regularmente
- Nunca confirmes el archivo
-
Límite de Tasa
- SearchAPI.io tiene límites de tasa según tu plan
- La lógica de reintento integrada respeta los límites de tasa
- Monitorea el uso con la herramienta
health_check
-
Privacidad de Datos
- Las consultas de búsqueda se envían a SearchAPI.io
- Las respuestas se almacenan en caché localmente (configurable)
- Revisa la política de privacidad de SearchAPI.io
Licencia
Este proyecto está licenciado bajo la Licencia MIT: consulta el archivo LICENCIA para más detalles.
Agradecimientos
- Model Context Protocol - Especificación del protocolo por Anthropic
- FastMCP - Framework MCP para Python
- SearchAPI.io - Proveedor de servicios de API de búsqueda
- httpx - Cliente HTTP moderno para Python
- Pydantic - Framework de validación de datos
Contribuciones
¡Las contribuciones son bienvenidas! No dudes en enviar un Pull Request. Para cambios importantes, abre primero un issue para discutir lo que te gustaría cambiar.
- Haz un fork del repositorio
- Crea tu rama de características (
git checkout -b feature/AmazingFeature) - Confirma tus cambios (
git commit -m 'Add some AmazingFeature') - Sube los cambios a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Registro de Cambios
v1.1.0 (Actual)
- ✅ Nuevo: Google Maps Place API - Información detallada de lugares
- ✅ Nuevo: Google Events API - Búsqueda de eventos y actividades
- ✅ Nuevo: Google Travel Explore API - Descubrimiento de destinos
- ✅ Nuevo: Google Flights Location Search API - Búsqueda de aeropuertos
- ✅ Capacidades mejoradas de investigación turística y de viajes
- ✅ Soporte integral del flujo de trabajo de planificación de viajes
v1.0.0
- ✅ Arquitectura lista para producción con FastMCP
- ✅ Grupo de conexiones y lógica de reintento
- ✅ Caché de respuestas con TTL
- ✅ Patrón de interruptor de circuito
- ✅ Verificaciones de salud y métricas integrales
- ✅ Google Search, Videos, Modo IA
- ✅ Google Maps y Reseñas
- ✅ Google Flights y Calendario
- ✅ Google Hotels y detalles de propiedades
- ✅ Utilidades de tiempo para planificación de viajes
Hecho con ❤️ para la comunidad MCP