Skip to main content
Glama
NakanoSanku

grok-web-search-mcp

by NakanoSanku

Язык: English | 中文

Python License: MIT MCP xAI GitHub

О проекте

Агентам нужен живой доступ к вебу и X с цитатами, а не просто завершение чата. Этот проект оборачивает серверные инструменты xAI web_search и x_search в единый MCP-инструмент, поэтому такие хосты, как Grok, Cursor или Claude Desktop, могут вызывать их без встраивания клиентской логики xAI.

Репозиторий: https://github.com/NakanoSanku/grok-web-search-mcp

Вызов вышестоящего API (упрощённо):

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
    }
  ]
}

Цели дизайна:

  • Один MCP-инструмент, один контракт вызова — модели могут передавать только query / scope / recency / images

  • Компактные результаты — query / text / citations / sources_used (без сырого дампа вышестоящего API)

  • Настраиваемый base URL — официальный https://api.x.ai/v1 или OpenAI-совместимые прокси

  • Опциональный ввод изображений — прикрепляйте https-URL или data URI (локальные пути — по желанию)

  • PyPI не требуется — запуск прямо из GitHub через uvx --from git+...

Возможности

Возможность

Примечания

Живой веб-поиск

Grok формирует ответ с URL источников

Живой поиск по X

Включён по умолчанию; укажите scope="web" или scope="x" для ограничения

Фильтры X

Обрабатывает списки разрешений/запретов (макс. 20, @ удаляется) и включающий диапазон дат

Фильтры доменов

Разрешающий или запрещающий список (макс. 5, взаимоисключающие; схема/путь удаляются)

Понимание медиа в поиске

Изображения на веб-страницах и в постах X; видео в постах X

Ввод изображений клиентом

Опциональные images (https / data URI; локальные пути — по желанию)

Компактный JSON-вывод

Нет model / base_url / аннотаций / сырой полезной нагрузки в результатах инструмента

Ошибки протокола

Сбои вышестоящего API/валидации устанавливают MCP isError (а не поддельную полезную нагрузку ok: false)

Повторные попытки

429 / 502 / 503 / 504 и таймауты транспорта, с экспоненциальной задержкой

Дружелюбность к прокси

GROK_BASE_URL / XAI_BASE_URL

Установка из GitHub

uvx --from git+https://github.com/NakanoSanku/grok-web-search-mcp.git

Не включено: enable_image_search (встраивание веб-галереи изображений). Используйте images, когда изображение предоставляете вы; используйте enable_image_understanding для изображений на просматриваемых страницах и в постах X.

Создано с помощью

  • Python

  • FastMCP

  • httpx

  • xAI API

  • MCP

  • uv

Related MCP server: WebQuest MCP

Начало работы

Предварительные требования

  • Python 3.10+

  • Ключ xAI API (или ключ для совместимого шлюза)

  • uv (рекомендуется для uvx из GitHub)

# optional: install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

Быстрый старт (uvx из GitHub)

Для повседневного использования MCP локальный клон не требуется:

export GROK_API_KEY=xai-...
uvx --from git+https://github.com/NakanoSanku/grok-web-search-mcp.git grok-web-search-mcp

Зафиксируйте ветку, тег или коммит, когда нужна воспроизводимость:

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-mcp

Локальная установка для разработки

  1. Клонируйте репозиторий:

    git clone https://github.com/NakanoSanku/grok-web-search-mcp.git
    cd grok-web-search-mcp
  2. Установите зависимости:

    uv sync
    # or: pip install -e ".[dev]"
  3. Создайте локальный файл окружения:

    cp .env.example .env
  4. Отредактируйте .env и укажите как минимум GROK_API_KEY (см. Конфигурация).

Конфигурация

Переменная

Обязательная

По умолчанию

Описание

GROK_API_KEY

Да

—

Также принимает XAI_API_KEY / GROK_WEB_SEARCH_API_KEY

GROK_BASE_URL

Нет

https://api.x.ai/v1

Также XAI_BASE_URL / GROK_WEB_SEARCH_BASE_URL

GROK_MODEL

Нет

grok-4.5

Также XAI_MODEL

GROK_TIMEOUT

Нет

300

Таймаут запроса в секундах (1–3600). Высокое рассуждение + поиск могут требовать минут

GROK_CONNECT_TIMEOUT

Нет

15

Таймаут TCP/TLS-подключения (ограничен GROK_TIMEOUT)

GROK_ENABLE_IMAGE_UNDERSTANDING

Нет

true

Анализировать изображения на просматриваемых страницах и в постах X

GROK_REASONING_EFFORT

Нет

low

Длина рассуждений по умолчанию: low / medium / high; также XAI_REASONING_EFFORT

GROK_ALLOW_LOCAL_IMAGES

Нет

false

Разрешить images читать локальные файлы (ограничено cwd / GROK_LOCAL_IMAGE_ROOT)

GROK_LOCAL_IMAGE_ROOT

Нет

cwd

Каталог-изоляция для локальных изображений, когда включено

GROK_MAX_RETRIES

Нет

3

Повторные попытки для 429/5xx/таймаутов (0–8)

GROK_LOG_LEVEL

Нет

INFO

DEBUG / INFO / WARNING / ERROR

GROK_ENABLE_VIDEO_UNDERSTANDING

Нет

false

Анализировать видео в постах X (только для оператора; не аргумент инструмента)

GROK_ALLOWED_DOMAINS

Нет

—

Операторский веб-разрешающий список (макс. 5). Вызывающие стороны не могут его задать

GROK_EXCLUDED_DOMAINS

Нет

—

Операторский веб-запрещающий список (макс. 5)

GROK_ALLOWED_X_HANDLES

Нет

—

Операторский разрешающий список X-аккаунтов (макс. 20)

GROK_EXCLUDED_X_HANDLES

Нет

—

Операторский запрещающий список X-аккаунтов (макс. 20)

GROK_SEARCH_INSTRUCTIONS

Нет

—

Дополнительные правила, добавляемые к системному промпту сервера

Не храните секреты в git. По возможности используйте переменные окружения, внедряемые хостом, для MCP-конфигураций.

Использование

Запуск сервера

Рекомендуемый способ (из GitHub):

export GROK_API_KEY=xai-...
uvx --from git+https://github.com/NakanoSanku/grok-web-search-mcp.git grok-web-search-mcp

Из локальной копии:

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_mcp

Пример совместимого прокси:

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-mcp

Конфигурация MCP-хоста

Предпочтительно: запуск из GitHub через uvx (без локального пути).

Хосты в JSON-стиле (Cursor / Claude Desktop и т.д.):

{
  "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"
      }
    }
  }
}

Пользовательская конфигурация 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"

Зафиксируйте ref (ветку / тег / коммит):

args = [
  "--from",
  "git+https://github.com/NakanoSanku/grok-web-search-mcp.git@main",
  "grok-web-search-mcp",
]

Только для локальной разработки (абсолютный путь к копии):

[mcp_servers.grok-web-search]
command = "uv"
args = [
  "run",
  "--directory",
  "/absolute/path/to/grok-web-search-mcp",
  "grok-web-search-mcp",
]
enabled = true

Инструмент: web_search

Каждая модель хоста должна использовать один и тот же контракт из четырёх ключей. Дополнительные аргументы (model, reasoning_effort, system_prompt, фильтры доменов/аккаунтов) отклоняются. Параметры качества находятся в переменных окружения, чтобы поведение поиска не различалось между моделями.

Параметр

Тип

Описание

query

string

Обязательный. Вопрос на естественном языке, 2–600 символов. Не список ключевых слов (xAI Grok valuation) и не история чата. Наборы ключевых слов переписываются на стороне сервера.

scope

"all" | "web" | "x"

По умолчанию all (веб + X). Используйте web для общих фактов; x — только для постов/аккаунтов.

recency

"any" | "day" | "week" | "month" | "year"

По умолчанию any. Задавайте только когда пользователь запросил временное окно.

images

string[]?

Опциональные URL изображений (http(s) / data URI, макс. 5). Только если пользователь предоставил изображение.

Канонический пример:

{ "query": "What is xAI's latest valuation?" }

Затем сервер: нормализует query, внедряет фиксированный системный промпт, применяет операторские фильтры из окружения, сопоставляет recency с границами дат X и всегда использует настроенную модель / усилия рассуждений.

images — это части input_image из Responses API. Локальные пути файловой системы отключены по умолчанию. Это не «поиск в вебе стоковых изображений».

Структура ответа

Успех (MCP isError: false, структурированный контент):

{
  "query": "What is xAI?",
  "text": "...",
  "citations": [{"url": "https://x.ai", "title": "xAI"}],
  "sources_used": ["web", "x"],
  "scope": "all",
  "recency": "any"
}

Сбой — это ошибка инструмента на уровне протокола (isError: true) с коротким сообщением, например Grok API error (401): Invalid API key. Неполные или пустые ответы вышестоящего API также считаются ошибками, а не молчаливым успехом.

Намеренно не возвращаются: API-ключ, model, base_url, сырой JSON вышестоящего API или blob-объекты аннотаций (URL-адреса извлекаются только в citations). Диагностируйте конфигурацию вне результата инструмента (переменные окружения / настройки MCP на хосте / журналы stderr).

Пример 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())

Реальные вызовы расходуют квоту модели и серверного поиска. Модульные тесты используют моки и не обращаются к сети.

Разработка

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 live

Структура проекта:

src/grok_web_search_mcp/
  server.py    # MCP tool surface
  client.py    # Responses API client + image helpers
  config.py    # Environment settings
tests/

Дорожная карта

  • Один компактный MCP-инструмент web_search

  • Включить вышестоящие web_search и x_search по умолчанию

  • Фильтры по X-аккаунту/дате и понимание изображений/видео

  • Поддержка настраиваемого base_url / прокси

  • Фильтры разрешённых/запрещённых доменов

  • Опциональный мультимодальный ввод изображений

  • Установка / запуск из GitHub через uvx

  • Ошибки на уровне протокола, повторные попытки, тайм-ауты/стандартные параметры reasoning

  • Локальный jail для изображений (отключён по умолчанию)

  • Канонический контракт вызова MCP (query / scope / recency / images)

  • Документация/примеры для опционального Streamable HTTP transport

  • Оценочный стенд на основе golden-set для качества поиска

См. открытые issues.

Участие в разработке

Вклад приветствуется.

  1. Сделайте форк проекта

  2. Создайте свою ветку функции (git checkout -b feature/AmazingFeature)

  3. Сделайте коммит своих изменений (git commit -m 'Add some AmazingFeature')

  4. Запушьте в ветку (git push origin feature/AmazingFeature)

  5. Откройте Pull Request

Пожалуйста, сохраняйте набор инструментов компактным: предпочитайте один хорошо документированный инструмент множеству тонких обёрток.

Лицензия

Распространяется под лицензией MIT. Подробнее см. в LICENSE.

Благодарности

Available Tools

1 tool

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.1.0
    • First observedweb_search

TDQS

A4.5/5.0

Scored across 1 tool

Disambiguation5/5

Only one tool exists, so there is no possibility of confusion or overlap with other tools.

Naming Consistency5/5

With a single tool, naming consistency is inherently perfect as there is no pattern to break.

Tool Count4/5

A single tool is slightly minimal but reasonably scoped for a focused web search server, as the tool itself is comprehensive.

Completeness5/5

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

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that provides real-time web search and X (Twitter) search capabilities via the xAI API.
    2
    16 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP 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.
    3
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server providing web search, news search, and X/Twitter search capabilities via HTTP or stdio.
    -