SearchAPI
Fornece acesso padronizado ao Google Maps, Google Flights, Google Hotels e outros serviços via SearchAPI.
Documentação
Servidor MCP SearchAPI
Um servidor Model Context Protocol (MCP) pronto para produção que fornece recursos abrangentes de busca através da SearchAPI.io. Permite que assistentes de IA pesquisem no Google, Mapas, Voos, Hotéis e muito mais, com cache integrado, lógica de repetição e disjuntores.
Recursos • Início Rápido • Instalação • Configuração • Ferramentas Disponíveis
Recursos
🔍 Mecanismos de Busca
- Google Search - Resultados da web, grafo de conhecimento, caixas de resposta, perguntas relacionadas
- Google Videos - Busca de vídeos com filtros por duração, fonte e data de upload
- Google AI Mode - Visões gerais geradas por IA com fontes citadas e conteúdo estruturado
- Google Maps - Locais, empresas, avaliações e detalhes de localização
- Google Maps Place - Informações detalhadas para locais específicos (horários, fotos, comodidades)
- Google Events - Encontre shows, conferências, festivais e atividades locais
- Google Flights - Busca de voos com filtros abrangentes e calendários de preços
- Google Flights Location Search - Consulta de códigos de aeroporto e autocompletar
- Google Travel Explore - Descubra destinos e inspiração para viagens
- Google Hotels - Busca de hospedagem com comodidades, avaliações e filtros de preço
🏗️ Arquitetura Pronta para Produção
- Pool de Conexões - Gerenciamento eficiente de conexões HTTP com httpx
- Cache de Respostas - Cache configurável baseado em TTL com política de remoção LRU
- Lógica de Repetição - Backoff exponencial para falhas transitórias
- Disjuntor - Padrão à prova de falhas que previne falhas em cascata
- Coleta de Métricas - Contagem de requisições, latências, taxas de acerto de cache, rastreamento de erros
- Verificações de Saúde - Monitore a conectividade da API e o status do serviço
⚙️ Configuração e Monitoramento
- Validação Pydantic - Configuração type-safe com suporte a variáveis de ambiente
- Registro Estruturado - Níveis de log configuráveis com rastreamento detalhado de requisições
- Gerenciamento de Recursos - Limpeza automática e desligamento gracioso
- Variáveis de Ambiente - Configuração flexível para diferentes implantações
Início Rápido
Pré-requisitos
- Python 3.10 ou superior
- Chave de API da SearchAPI.io (Obtenha uma aqui)
Instalação com UV (Recomendado)
A maneira mais rápida de começar é 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
Instalação
Método 1: UV (Recomendado)
UV é o método mais rápido e 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: A partir do código-fonte
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
Configuração
Variáveis de Ambiente
Crie um arquivo .env na raiz do projeto:
# 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
Configuração do Cliente MCP
Claude Desktop
Adicione ao arquivo de configuração do Claude Desktop:
Localização:
- 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 diretamente:
{
"mcpServers": {
"searchapi": {
"command": "python",
"args": [
"/absolute/path/to/searchAPI-mcp/mcp_server_refactored.py"
],
"env": {
"SEARCHAPI_API_KEY": "your_api_key_here"
}
}
}
}
Usando ambiente 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)
Adicione a .vscode/mcp.json no seu workspace ou use o 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"
}
}
}
}
Com 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
Adicione 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 (Extensão do VS Code)
Nas configurações do Cline, adicione aos 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 qualquer cliente compatível com 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
Ferramentas Disponíveis
Saúde e Monitoramento
health_check
Verifique a saúde e o desempenho do serviço SearchAPI.
Retorna:
- Status de conectividade da API
- Latência de resposta
- Estado do disjuntor
- Estatísticas de cache
- Métricas de requisições
Exemplo:
{
"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
}
}
Utilitários de Tempo e Data
get_current_time
Obtenha a hora atual e sugestões de datas de viagem. Essencial para reservas de voos e hotéis.
Parâmetros:
format- Formato da data: "iso", "slash", "chinese", "timestamp", "full"days_offset- Dias a partir de hoje (pode ser negativo)return_future_dates- Retorna uma matriz de datas futurasfuture_days- Número de datas futuras (se return_future_dates=true)
Exemplo:
# 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)
Google Search
search_google
Pesquise no Google por resultados da web, grafos de conhecimento e caixas de resposta.
Parâmetros:
q(obrigatório) - Consulta de pesquisalocation- Nome do local (ex.: "Nova York, NY")gl- Código do país (padrão: "us")hl- Código do idioma (padrão: "en")time_period- Filtro de tempo: "last_hour", "last_day", "last_week", "last_month", "last_year"num- Resultados por página (padrão: "10")safe- Busca segura: "off", "active"
Exemplo:
search_google(
q="Python programming tutorials",
location="San Francisco, CA",
time_period="last_month",
num="20"
)
search_google_videos
Pesquise vídeos no Google Videos.
Parâmetros: Semelhantes ao search_google com filtros específicos de vídeo
q(obrigatório) - Consulta de pesquisatime_period- Filtrar por data de uploaddevice- "desktop" ou "mobile"
Exemplo:
search_google_videos(
q="machine learning tutorial",
time_period="last_week",
num="10"
)
search_google_ai_mode
Pesquise com visões gerais geradas por IA e fontes citadas.
Parâmetros:
q- Consulta de pesquisa (obrigatório, a menos que url seja fornecida)url- URL da imagem para pesquisalocation- Local para resultados localizados
Retorna:
- Visão geral gerada por IA com citações
- Blocos de conteúdo estruturado (parágrafos, listas, tabelas, código)
- Links de referência
- Resultados da web
Exemplo:
search_google_ai_mode(
q="How does machine learning work?",
location="United States"
)
Google Maps
search_google_maps
Pesquise por locais, empresas e serviços.
Parâmetros:
query(obrigatório) - Consulta de pesquisalocation_ll- Coordenadas lat/lng (formato: "@lat,lng,zoom")
Exemplo:
search_google_maps(
query="coffee shops near Central Park",
location_ll="@40.7829,-73.9654,15z"
)
search_google_maps_place
Obtenha informações detalhadas para um local específico.
Parâmetros:
place_id(obrigatório se não houver data_id) - ID do local no Google Mapsdata_id- Identificador alternativo do localgoogle_domain- Domínio do Google (padrão: "google.com")hl- Código do idioma (padrão: "en")
Exemplo:
search_google_maps_place(
place_id="ChIJN1t_tDeuEmsRUsoyG83frY4"
)
search_google_maps_reviews
Obtenha avaliações para um local específico.
Parâmetros:
place_id(obrigatório se não houver data_id) - ID do local no Google Mapsdata_id- Identificador alternativo do localsort_by- "most_relevant", "newest", "highest_rating", "lowest_rating"rating- Filtrar por avaliação: "1"-"5"
Exemplo:
search_google_maps_reviews(
place_id="ChIJN1t_tDeuEmsRUsoyG83frY4",
sort_by="newest",
rating="5"
)
Google Events
search_google_events
Pesquise por eventos, shows, conferências e atividades.
Parâmetros:
q(obrigatório) - Consulta de pesquisa (ex.: "shows em São Paulo", "conferências de tecnologia")location- Nome do local para resultados localizadoschips- Filtro de data ("today", "tomorrow", "week", "weekend", "month") ou tipo de eventogl- Código do país (padrão: "us")hl- Código do idioma (padrão: "en")page- Número da página (padrão: "1")
Exemplo:
search_google_events(
q="music festivals in Austin",
chips="weekend",
location="Austin, TX"
)
Google Flights
search_google_flights
Pesquise voos com filtros abrangentes.
Parâmetros:
departure_id(obrigatório) - Código do aeroporto (ex.: "GRU")arrival_id(obrigatório) - Código do aeroporto (ex.: "LAX")outbound_date(obrigatório) - Data de partida (AAAA-MM-DD)flight_type- "one_way", "round_trip", "multi_city"return_date- Data de retorno (obrigatório para round_trip)travel_class- "economy", "premium_economy", "business", "first"stops- "0" (sem escalas), "1", "2"adults- Número de adultoscurrency- Código da moeda (ex.: "BRL")
Exemplo:
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
Obtenha o calendário de preços para planejamento flexível de datas.
Parâmetros:
flight_type(obrigatório) - "one_way" ou "round_trip"departure_id(obrigatório) - Código do aeroportoarrival_id(obrigatório) - Código do aeroportooutbound_date(obrigatório) - Data de referênciareturn_date- Obrigatório para round_trip
Exemplo:
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
Pesquise códigos de aeroportos e locais.
Parâmetros:
q(obrigatório) - Consulta de pesquisa (nome do aeroporto, cidade ou código)gl- Código do país (padrão: "us")hl- Código do idioma (padrão: "en")
Exemplo:
search_google_flights_location_search(
q="Tokyo"
)
search_google_travel_explore
Explore destinos de viagem e encontre inspiração.
Parâmetros:
departure_id(obrigatório) - Código do aeroporto de partida ou localarrival_id- Destino (padrão: qualquer lugar)time_period- Período de viagem (ex.: "two_week_trip_in_december")interests- Filtrar por interesses: "popular", "outdoors", "beaches", "museums", "history", "skiing"travel_class- "economy", "premium_economy", "business", "first_class"adults- Número de adultos (padrão: "1")currency- Código da moeda (padrão: "USD")
Exemplo:
search_google_travel_explore(
departure_id="JFK",
interests="beaches",
time_period="two_week_trip_in_december"
)
Google Hotels
search_google_hotels
Pesquise hotéis e hospedagem.
Parâmetros:
q(obrigatório) - Consulta de localizaçãocheck_in_date(obrigatório) - Data de check-in (AAAA-MM-DD)check_out_date(obrigatório) - Data de check-out (AAAA-MM-DD)adults- Número de adultos (padrão: "2")rating- Avaliação mínima: "3", "4", "5"hotel_class- Classificação por estrelas: "2"-"5"price_min/price_max- Faixa de preçoamenities- Filtrar por comodidades (ex.: "pool,wifi,parking")free_cancellation- "true" ou "false"
Exemplo:
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
Obtenha informações detalhadas para um hotel específico.
Parâmetros:
property_token(obrigatório) - ID da propriedade dos resultados da pesquisacheck_in_date(obrigatório) - Data de check-incheck_out_date(obrigatório) - Data de check-outadults- Número de adultos
Exemplo:
search_google_hotels_property(
property_token="ChIJd8BlQ2BZwokRAFUEcm_qrcA",
check_in_date="2025-12-20",
check_out_date="2025-12-25",
adults="2"
)
Exemplos de Uso
Exemplo 1: Descubra e Planeje uma Viagem
# 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"
)
Exemplo 2: Pesquise com AI Mode
# 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
Exemplo 3: Monitore a Saúde do Serviço
# 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']}")
Desenvolvimento
Executando Testes
# Run all tests
python -m pytest
# Run specific test file
python test_refactored.py
Estrutura do 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 Principais
-
mcp_server_refactored.py - Implementação do servidor MCP usando FastMCP
- Definições de ferramentas com docstrings abrangentes
- Verificações de saúde e endpoints de monitoramento
- Desligamento limpo e gerenciamento de recursos
-
config.py - Gerenciamento de configuração
- Modelos Pydantic para configuração type-safe
- Validação de variáveis de ambiente
- Padrões sensatos com opções de substituição
-
client.py - Cliente HTTP pronto para produção
- Pool de conexões com httpx
- Lógica de repetição com backoff exponencial
- Cache de respostas baseado em TTL
- Padrão de disjuntor
- Coleta de métricas
Depuração
Use o MCP Inspector para testar ferramentas:
# Install inspector
npm install -g @modelcontextprotocol/inspector
# Run inspector
npx @modelcontextprotocol/inspector python mcp_server_refactored.py
Defina a variável de ambiente para registro detalhado:
LOG_LEVEL=DEBUG python mcp_server_refactored.py
Solução de Problemas
Problemas Comuns
Problema: Erro "Invalid API key"
- Solução: Certifique-se de que
SEARCHAPI_API_KEYesteja definida corretamente no ambiente ou no arquivo .env - Obtenha uma chave de API em https://www.searchapi.io/
Problema: Erro "Circuit breaker is OPEN"
- Causa: Muitas falhas consecutivas de API
- Solução: Verifique sua conexão com a internet e a chave de API. Aguarde 60 segundos para o disjuntor redefinir ou reinicie o servidor
Problema: Timeouts de conexão
- Solução: Aumente o timeout no .env:
TIMEOUT=60.0 - Verifique a conectividade de rede com a SearchAPI.io
Problema: Alta latência
- Solução: Ative o cache se estiver desativado:
ENABLE_CACHE=true - Aumente o tamanho do cache:
CACHE_MAX_SIZE=5000 - Verifique a ferramenta
health_checkpara métricas
Problema: Erros de codificação no Windows
- Solução: Defina a variável de ambiente na configuração do seu cliente MCP:
"env": { "PYTHONIOENCODING": "utf-8", "SEARCHAPI_API_KEY": "your_key" }
Obtendo Ajuda
- Consulte a Documentação do MCP
- Revise a Documentação do SearchAPI.io
- Abra uma issue no GitHub
Ajuste de Desempenho
Configuração de Cache
Para taxas de acerto de cache mais altas:
CACHE_TTL=7200 # 2 hours
CACHE_MAX_SIZE=5000 # Store more results
Para ambientes com restrição de memória:
CACHE_TTL=1800 # 30 minutes
CACHE_MAX_SIZE=100 # Smaller cache
Pool de Conexões
Para cenários de alto tráfego:
POOL_CONNECTIONS=50
POOL_MAXSIZE=50
Para cenários de baixo tráfego:
POOL_CONNECTIONS=5
POOL_MAXSIZE=5
Considerações de Segurança
⚠️ Notas de Segurança Importantes:
-
Proteção da Chave de API
- Nunca envie o arquivo
.envpara o controle de versão - Use variáveis de ambiente em produção
- Rotacione as chaves de API regularmente
- Nunca envie o arquivo
-
Limitação de Taxa
- O SearchAPI.io possui limites de taxa baseados no seu plano
- A lógica de nova tentativa integrada respeita os limites de taxa
- Monitore o uso com a ferramenta
health_check
-
Privacidade dos Dados
- As consultas de pesquisa são enviadas ao SearchAPI.io
- As respostas são armazenadas em cache localmente (configurável)
- Revise a política de privacidade do SearchAPI.io
Licença
Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.
Agradecimentos
- Model Context Protocol - Especificação do protocolo pela Anthropic
- FastMCP - Framework MCP para Python
- SearchAPI.io - Provedor de serviço de API de pesquisa
- httpx - Cliente HTTP moderno para Python
- Pydantic - Framework de validação de dados
Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request. Para mudanças significativas, abra uma issue primeiro para discutir o que você gostaria de alterar.
- Faça um fork do repositório
- Crie sua branch de funcionalidade (
git checkout -b feature/AmazingFeature) - Faça commit das suas alterações (
git commit -m 'Add some AmazingFeature') - Envie para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Histórico de Versões
v1.1.0 (Atual)
- ✅ Novo: Google Maps Place API - Informações detalhadas de lugares
- ✅ Novo: Google Events API - Pesquisa de eventos e atividades
- ✅ Novo: Google Travel Explore API - Descoberta de destinos
- ✅ Novo: Google Flights Location Search API - Consulta de aeroportos
- ✅ Capacidades aprimoradas de pesquisa para turismo e viagens
- ✅ Suporte abrangente ao fluxo de trabalho de planejamento de viagens
v1.0.0
- ✅ Arquitetura pronta para produção com FastMCP
- ✅ Pool de conexões e lógica de nova tentativa
- ✅ Cache de respostas com TTL
- ✅ Padrão de disjuntor (circuit breaker)
- ✅ Verificações de integridade e métricas abrangentes
- ✅ Google Search, Vídeos, Modo IA
- ✅ Google Maps e Avaliações
- ✅ Google Flights e Calendário
- ✅ Google Hotels e detalhes de propriedades
- ✅ Utilitários de tempo para planejamento de viagens
Feito com ❤️ para a comunidade MCP