Episkey-G/GrokSearch-rs

Rust MCP server for Grok web search and Tavily-backed source retrieval

GrokSearch‑rs – 軽量なRust製MCPサーバー、Web検索ツール向け

概要 – Claudeスタイルのアシスタントが使用するMCP(Model‑Client‑Protocol)サーバーを実装した、小型で自己ホスト可能なRustバイナリです。web_search、get_sources、web_fetch、web_map、doctor、オプションのx_searchなどのツールを提供し、LLMがライブなWebコンテンツを取得、引用、レンダリングできるようにします。サーバーはstdio経由でローカル実行(クライアントが起動)するか、モバイルやマルチデバイス向けのストリーミング可能なHTTPエンドポイントとして公開できます。

重要性 – 最新のLLMエージェントには、最新かつ検証可能な情報が必要です。GrokSearch‑rsは以下を提供することでこれを実現します:

  • 設定可能な順序で複数の外部検索プロバイダー(Tavily、Exa、TinyFish、Firecrawl)をクエリ。
  • APIキー不要で動作するGitHub、StackExchange、arXiv、Wikipedia向けの専門抽出器で結果を強化。
  • セッションキャッシュを維持し、フォローアップ呼び出し(get_sources)が再検索せずに同じ引用を取得可能。
  • トークン制限を尊重:設定可能な文字数予算内に収まるようにレスポンスをトリミングし、簡潔または詳細なペイロードを選択可能。
  • xAIのGrok Responses APIとOpenAI互換のチャット完了ゲートウェイの両方をサポートし、環境変数で選択可能。

主な機能(READMEに記載)

機能 説明
引用付きライブWeb検索 上位ソースの要約とメタデータを返します。include_contentで抽出された全文を埋め込むことができます。
レスポンス予算 インラインソーステキスト(max_inline_sources)と総文字数(response_max_chars)を制限します。
構造化されたweb_fetch GitHubのissue/PR、StackExchangeのスレッド、arXivの論文、WikipediaのページをクリーンなMarkdownに解析。他のURLには汎用ソースチェーンにフォールバック。
2つのトランスポート ネイティブxAI Responses(/v1/responses)またはOpenAI互換のchat/completionsエンドポイント。
オプションのGrok OAuthモード ローカルにOAuthトークンを保存し、APIキーなしでサーバーを実行可能。
リモートHTTPモード(機能http) マルチテナント、ストリーミング可能なHTTPサーバー。キーはリクエストごとにヘッダーで送信され、サーバーに保存されることはありません。
プラグ可能なソースチェーン 順序付けられたプロバイダー(Tavily → Exa → TinyFish → Firecrawl)で、ラウンドロビンキーローテーションとフェイルオーバーを備えます。
X/Twitter検索(x_search) Grok Responsesトランスポートでのみ利用可能。
並行性 最大8つの同時stdioツール呼び出しを処理。追加の呼び出しはキューに入ります。
doctorツール 接続性と設定(マスク済み)を報告するクイックヘルスチェック。

インストール

npm install -g grok-search-rs   # プリビルドのネイティブRustバイナリを取得

インストールされたgrok-search-rsコマンドが、MCPクライアントが起動するものです。

実行オプション

  • StdIO(ローカル) – デフォルト。クライアントがバイナリをサブプロセスとして起動し、stdin/stdoutで通信します。
  • リモートHTTP – --features httpでコンパイル(または提供されているDockerイメージを使用)。サーバーは設定可能なアドレス(GROK_MCP_BIND)でリッスンし、ストリーミング可能なHTTPエンドポイントで同じツールを提供します。

設定 – すべての設定は、環境変数(stdioモード)またはHTTPヘッダー(リモートモード)として提供されます。単一のグローバルTOMLファイル(~/.config/grok-search-rs/config.toml)にキーを保存して、複数のクライアントで共有できます。

コア変数(抜粋):

GROK_SEARCH_API_KEY   – xAI/GrokのBearerトークン(OAuthの場合は空のまま)
GROK_SEARCH_URL       – GrokゲートウェイのベースURL(デフォルト https://api.x.ai)
TAVILY_API_KEY        – 汎用Web検索に必須。ローテーション用にカンマ区切りリストも可
FIRECRAWL_API_KEY     – Firecrawlフォールバックを有効化
EXA_API_KEY, TINYFISH_API_KEY – チェーン内のそれらのプロバイダーを有効化
GROK_SEARCH_MODEL     – 送信するモデル名(例:grok-4.20-fast)
GROK_SEARCH_RESPONSE_MAX_CHARS – レスポンス全体の予算(デフォルト 45 000)

HTTPトランスポートのヘッダーも同じ命名スキームに従います(例:X-Grok-Api-Key、X-Tavily-Api-Key)。

典型的なワークフロー

  1. 検索 – クエリでweb_searchを呼び出します。サーバーは簡潔な回答とソースのリストを返します。上位max_inline_sourcesには抽出されたテキストが含まれる場合があります。
  2. 詳細の取得 – 任意のソースURLでweb_fetchを使用して、クリーンなMarkdownを取得します(専門抽出器はGitHub、StackExchange、arXiv、Wikipediaでよりリッチな出力を提供)。
  3. ソースのページネーション – 元の検索で多くの引用が得られた場合、get_sourcesでクライアントがページングできます。
  4. 診断 – doctorを実行して、すべてのアップストリームAPIが到達可能で、設定が正しく読み込まれたことを確認します。

セルフホスティング – Linux x86_64およびaarch64用のプリビルドバイナリがリリースされており、Dockerイメージ(ghcr.io/episkey-g/grok-search-rs)もあります。Dockerfileと付属のdocker‑compose.yml/Caddyfileにより、ワンコマンドのHTTPSデプロイが可能です。

開発 – リポジトリは標準的なRustプロジェクトです。ソースからのビルド:

cargo build --release               # stdioバイナリ
cargo build --profile release-http --features http   # HTTP対応バイナリ

標準のRustツール(cargo fmt、cargo clippy、cargo test)を使用します。

対象ユーザー – 信頼性の高い引用付きWeb検索機能を必要とするLLM搭載アシスタント(Claude、ChatGPT、カスタムエージェント)を構築している人、特にキー、キャッシュ、レスポンスサイズを完全に制御したい人。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • Dispatch