grok-web-search-mcp
Idioma: English | 中文
Sobre el proyecto
Los agentes necesitan acceso en vivo a la web y a X con citas, no solo una respuesta de chat. Este proyecto envuelve las herramientas web_search y x_search del lado del servidor de xAI como una única herramienta MCP, de modo que hosts como Grok, Cursor o Claude Desktop puedan usarlas sin integrar la lógica de cliente de xAI.
Repositorio: https://github.com/NakanoSanku/grok-web-search-mcp
Llamada upstream (simplificada):
POST {base_url}/responses
Authorization: Bearer <api_key>
Content-Type: application/json
{
"model": "grok-4.5",
"input": [{"role": "user", "content": "<query>"}],
"tools": [
{"type": "web_search", "enable_image_understanding": true},
{
"type": "x_search",
"allowed_x_handles": ["xai"],
"from_date": "2025-10-01",
"to_date": "2025-10-10",
"enable_image_understanding": true,
"enable_video_understanding": true
}
]
}Objetivos de diseño:
Una herramienta MCP, un único contrato de llamada — los modelos solo pueden pasar
query/scope/recency/imagesResultados ligeros —
query/text/citations/sources_used(sin volcado bruto del upstream)URL base personalizable —
https://api.x.ai/v1oficial o proxies compatibles con OpenAIEntrada de visión opcional — adjunta URLs https o data URIs (las rutas locales son opt-in)
Sin necesidad de PyPI — ejecútalo directamente desde GitHub con
uvx --from git+...
Características
Capacidad | Notas |
Búsqueda web en vivo | Grok sintetiza una respuesta con URLs de origen |
Búsqueda en X en vivo | Incluida por defecto; establece |
Filtros de X | Gestiona listas de permitidos/denegados (máx. 20, sin |
Filtros de dominio | Lista de permitidos o denegados (máx. 5, mutuamente excluyentes; sin esquema/ruta) |
Comprensión de medios en la búsqueda | Imágenes en páginas web y publicaciones de X; vídeos en publicaciones de X |
Entrada de imágenes del cliente |
|
Salida JSON ligera | Sin |
Errores de protocolo | Los fallos de upstream/validación establecen |
Reintentos | 429 / 502 / 503 / 504 y timeouts de transporte, con backoff |
Compatible con proxies |
|
Instalación desde GitHub |
|
No incluido: enable_image_search (incrustación de galería de imágenes web). Usa images cuando tú proporciones una imagen; usa enable_image_understanding para imágenes en páginas visitadas y publicaciones de X.
Construido con
Related MCP server: WebQuest MCP
Cómo empezar
Requisitos previos
Python 3.10+
Una clave de API de xAI (o una clave para una puerta de enlace compatible)
uv (recomendado para
uvxdesde GitHub)
# optional: install uv
curl -LsSf https://astral.sh/uv/install.sh | shInicio rápido (uvx desde GitHub)
No se necesita clonar el repositorio para el uso diario con MCP:
export GROK_API_KEY=xai-...
uvx --from git+https://github.com/NakanoSanku/grok-web-search-mcp.git grok-web-search-mcpFija una rama, etiqueta o commit cuando necesites reproducibilidad:
uvx --from git+https://github.com/NakanoSanku/grok-web-search-mcp.git@main grok-web-search-mcp
# uvx --from git+https://github.com/NakanoSanku/grok-web-search-mcp.git@v0.3.0 grok-web-search-mcpInstalación para desarrollo local
Clona el repositorio:
git clone https://github.com/NakanoSanku/grok-web-search-mcp.git cd grok-web-search-mcpInstala las dependencias:
uv sync # or: pip install -e ".[dev]"Crea un archivo de entorno local:
cp .env.example .envEdita
.envy establece al menosGROK_API_KEY(consulta Configuración).
Configuración
Variable | Requerida | Por defecto | Descripción |
| Sí | — | También acepta |
| No |
| También |
| No |
| También |
| No |
| Timeout de solicitud en segundos (1–3600). El razonamiento alto + la búsqueda pueden necesitar minutos |
| No |
| Timeout de conexión TCP/TLS (limitado por |
| No |
| Analiza imágenes en páginas visitadas y publicaciones de X |
| No |
| Longitud de razonamiento por defecto: |
| No |
| Permite que |
| No | cwd | Directorio de restricción para imágenes locales cuando está habilitado |
| No |
| Reintentos para 429/5xx/timeouts (0–8) |
| No |
|
|
| No |
| Analiza vídeos en publicaciones de X (solo operador; no es un argumento de herramienta) |
| No | — | Lista de permitidos web del operador (máx. 5). Los llamadores no pueden establecerla |
| No | — | Lista de denegados web del operador (máx. 5) |
| No | — | Lista de permitidos de handles de X del operador (máx. 20) |
| No | — | Lista de denegados de handles de X del operador (máx. 20) |
| No | — | Reglas adicionales añadidas al prompt de sistema propiedad del servidor |
Mantén los secretos fuera de git. Siempre que sea posible, prefiere variables de entorno inyectadas por el host para las configuraciones MCP.
Uso
Ejecutar el servidor
Recomendado (desde GitHub):
export GROK_API_KEY=xai-...
uvx --from git+https://github.com/NakanoSanku/grok-web-search-mcp.git grok-web-search-mcpDesde una copia local:
export GROK_API_KEY=xai-...
# Windows PowerShell: $env:GROK_API_KEY="xai-..."
uv run grok-web-search-mcp
# or
uv run python -m grok_web_search_mcpEjemplo de proxy compatible:
export GROK_API_KEY=sk-xxx
export GROK_BASE_URL=http://127.0.0.1:8317/v1
export GROK_MODEL=grok-4.5
uvx --from git+https://github.com/NakanoSanku/grok-web-search-mcp.git grok-web-search-mcpConfiguración del host MCP
Preferido: ejecutar desde GitHub con uvx (sin ruta local).
Hosts de estilo JSON (Cursor / Claude Desktop, etc.):
{
"mcpServers": {
"grok-web-search": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/NakanoSanku/grok-web-search-mcp.git",
"grok-web-search-mcp"
],
"env": {
"GROK_API_KEY": "xai-your-key",
"GROK_BASE_URL": "https://api.x.ai/v1",
"GROK_MODEL": "grok-4.5"
}
}
}
}Configuración de usuario de Grok (~/.grok/config.toml):
[mcp_servers.grok-web-search]
command = "uvx"
args = [
"--from",
"git+https://github.com/NakanoSanku/grok-web-search-mcp.git",
"grok-web-search-mcp",
]
enabled = true
[mcp_servers.grok-web-search.env]
GROK_API_KEY = "xai-your-key"
GROK_BASE_URL = "https://api.x.ai/v1"
GROK_MODEL = "grok-4.5"Fija una ref (rama / etiqueta / commit):
args = [
"--from",
"git+https://github.com/NakanoSanku/grok-web-search-mcp.git@main",
"grok-web-search-mcp",
]Solo desarrollo local (ruta absoluta a una copia del repositorio):
[mcp_servers.grok-web-search]
command = "uv"
args = [
"run",
"--directory",
"/absolute/path/to/grok-web-search-mcp",
"grok-web-search-mcp",
]
enabled = trueHerramienta: web_search
Cada modelo del host debe usar el mismo contrato de cuatro claves. Los argumentos adicionales (model, reasoning_effort, system_prompt, filtros de dominio/handles) son rechazados. Los ajustes de calidad viven en variables de entorno para que el comportamiento de búsqueda no varíe entre modelos.
Parámetro | Tipo | Descripción |
| string | Requerido. Una pregunta en lenguaje natural, de 2 a 600 caracteres. No es una lista de palabras clave ( |
|
| Por defecto |
|
| Por defecto |
| string[]? | URLs de imágenes opcionales (http(s) / data URI, máx. 5). Solo si el usuario proporcionó una imagen. |
Ejemplo canónico:
{ "query": "What is xAI's latest valuation?" }El servidor entonces: normaliza query, inyecta un prompt de sistema fijo, aplica los filtros del operador desde el entorno, asigna recency a los límites de fecha de X y siempre usa el modelo / esfuerzo de razonamiento configurado.
images son partes input_image de la Responses API. Las rutas del sistema de archivos local están deshabilitadas por defecto. Esto no es "buscar imágenes de stock en la web."
Forma de la respuesta
Éxito (MCP isError: false, contenido estructurado):
{
"query": "What is xAI?",
"text": "...",
"citations": [{"url": "https://x.ai", "title": "xAI"}],
"sources_used": ["web", "x"],
"scope": "all",
"recency": "any"
}El fallo es un error de herramienta a nivel de protocolo (isError: true) con un mensaje corto, por ejemplo Grok API error (401): Invalid API key. Las respuestas upstream incompletas o vacías también son errores, no éxitos silenciosos.
Intencionadamente no se devuelven: API key, model, base_url, JSON upstream sin procesar ni blobs de anotaciones (las URL se extraen únicamente en citations). Diagnostica la configuración fuera del resultado de la herramienta (env / ajustes MCP del host / registros de stderr).
Ejemplo de cliente Python
import asyncio
from grok_web_search_mcp.client import GrokWebSearchClient
from grok_web_search_mcp.config import Settings
async def main():
async with GrokWebSearchClient(Settings.from_env()) as client:
result = await client.web_search("What is xAI?")
print(result.to_dict())
asyncio.run(main())Las llamadas reales consumen cuota de modelo y de búsqueda del lado del servidor. Las pruebas unitarias usan mocks y no acceden a la red.
Desarrollo
git clone https://github.com/NakanoSanku/grok-web-search-mcp.git
cd grok-web-search-mcp
uv sync --extra dev
uv run pytest
# live API (optional): GROK_LIVE=1 uv run pytest -m liveEstructura del proyecto:
src/grok_web_search_mcp/
server.py # MCP tool surface
client.py # Responses API client + image helpers
config.py # Environment settings
tests/Hoja de ruta
Herramienta MCP
web_searchúnica y ligeraHabilitar
web_searchyx_searchdel upstream por defectoFiltros de handle/fecha de X y comprensión de imágenes/vídeos
Soporte de
base_url/ proxy personalizadosFiltros de permitir/denegar dominios
Entrada de imágenes multimodal opcional
Instalar / ejecutar desde GitHub mediante
uvxErrores a nivel de protocolo, reintentos, valores predeterminados de timeout/razonamiento
Aislamiento de imágenes locales (deshabilitado por defecto)
Contrato de llamada MCP canónico (
query/scope/recency/images)Documentación/ejemplos opcionales de transporte HTTP Streamable
Banco de pruebas de evaluación de conjunto golden para la calidad de búsqueda
Consulta los issues abiertos.
Contribuciones
Las contribuciones son bienvenidas.
Haz un fork del proyecto
Crea tu rama de características (
git checkout -b feature/AmazingFeature)Haz commit de tus cambios (
git commit -m 'Add some AmazingFeature')Haz push a la rama (
git push origin feature/AmazingFeature)Abre un Pull Request
Por favor, mantén la superficie de la herramienta ligera: prefiere una herramienta bien documentada a muchos wrappers finos.
Licencia
Distribuido bajo la Licencia MIT. Consulta LICENSE para más información.
Agradecimientos
Available Tools
1 toolweb_searchA
Live web and X search via Grok. Returns ok, text (answer), citations (URL list). Optional images: public URL, data:image/...;base64,..., or local file path (max 5) to ask about a picture while searching. Supports web domain filters, X handle/date filters, and reasoning_effort (low/medium/high). Image understanding applies to browsed pages and X posts; video understanding applies to X posts only.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Optional model override (default from GROK_MODEL / grok-4.5). | |
| query | Yes | Natural-language search question or topic. | |
| images | No | Optional image input(s) for visual questions: URL / data-URI / local path (comma or newline separated, max 5). Not an image-search API. | |
| to_date | No | Optional inclusive X search end date (YYYY-MM-DD). | |
| from_date | No | Optional inclusive X search start date (YYYY-MM-DD). | |
| image_detail | No | Vision detail for input images: low | high | auto (default high). | |
| system_prompt | No | Optional system instruction prepended to the request. | |
| allowed_domains | No | Optional comma-separated allowlist (max 5). Mutually exclusive with excluded_domains. | |
| excluded_domains | No | Optional comma-separated denylist (max 5). | |
| reasoning_effort | No | Optional thinking length for reasoning models: low | medium | high. | |
| allowed_x_handles | No | Optional comma-separated X handle allowlist (max 20). Mutually exclusive with excluded_x_handles. | |
| excluded_x_handles | No | Optional comma-separated X handle denylist (max 20). | |
| enable_image_understanding | No | Analyze images found on browsed pages and X posts (default on). | |
| enable_video_understanding | No | Analyze videos found in X posts (default off). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses return format, image handling constraints (max 5, types), and scoping of image/video understanding. It lacks explicit mention of read-only nature but is otherwise transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (6 sentences), front-loaded with core purpose, and every sentence adds meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (14 parameters, optional features) and the presence of an output schema, the description covers most behavioral aspects. Minor gaps exist (e.g., rate limits, indexing scope), but overall it is thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by summarizing key parameters (domain filters, reasoning_effort) and clarifying behavior of image/video understanding fields, which are not detailed in schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs 'Live web and X search via Grok' and details return values. It uses a specific verb (search) and resource (web and X), and the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While no sibling tools exist for comparison, the description provides clear context on features and filters, sufficiently guiding usage. It could benefit from explicit when-not-to-use, but the absence of alternatives makes this less critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v0.1.0- First observed
web_search
TDQS
Only one tool exists, so there is no possibility of confusion or overlap with other tools.
With a single tool, naming consistency is inherently perfect as there is no pattern to break.
A single tool is slightly minimal but reasonably scoped for a focused web search server, as the tool itself is comprehensive.
The tool covers web search, X search, image understanding, domain and date filters, and reasoning effort, leaving no obvious gaps for its stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Scrape, crawl and search the web for AI agents via MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that provides real-time web search and X (Twitter) search capabilities via the xAI API.228MIT
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that exposes powerful web search and scraping tools to AI agents and MCP-compatible clients.Apache 2.0
- AlicenseAqualityBmaintenanceMCP server for live X/Twitter and web search, driven by your locally logged-in Grok CLI and leveraging your X Premium or SuperGrok subscription quota.31MIT
- FlicenseNot gradedqualityCmaintenanceMCP server providing web search, news search, and X/Twitter search capabilities via HTTP or stdio.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/NakanoSanku/grok-web-search-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server