mcpField
O
Opengrok MCP Server

Opengrok MCP Server

ローカル
github.com/IcyHot09検索106 週間前に更新

Opengrok MCP Server について

Opengrok MCP Serverは、MCPクライアントをOpenGrokでインデックス化されたコードベースにつなぎ、検索や調査を可能にします。Code Modeではサンドボックス内で複数処理のJavaScriptを実行し、中間結果の送信を抑えます。

主な機能

  1. 01コード、定義、参照、履歴の検索
  2. 02ファイルの読み取りとディレクトリ閲覧
  3. 03Blame、差分、呼び出しグラフの確認
  4. 04インポート関係と依存関係の追跡
  5. 05Code Modeでの複数段階の調査

活用シーン

  1. 01大規模リポジトリで定義と呼び出し元を検索
  2. 02行の変更者と変更時期を確認
  3. 03リファクタリング前に依存関係を追跡

MCP 対応

MCPクライアントにOpenGrokの検索・リポジトリ調査機能を提供します。stdioまたはHTTPに対応し、Code Modeと標準ツールを利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

OpenGrok MCP Server のロゴ

OpenGrok MCP Server

OpenGrok でインデックス化されたあらゆるコードベースを対象とするコードインテリジェンス — 検索、読み取り、blame、シンボルナビゲーション、差分、コミット履歴、コールグラフ、依存関係マップ、ガイド付き調査に対応します。Code Mode と AST を考慮したコード読み取りにより、トークン効率を最適化しています。

npm MCP Registry CI GitHub Release


クイックスタート

オプション 1 — VS Code 拡張機能

VS Code Marketplace から OpenGrok MCP をインストールするか、拡張機能パネルで「OpenGrok」を検索してください。初回起動時に設定パネルが開きます。OpenGrok のエンドポイント、ユーザー名、パスワードを入力し、Save Settings をクリックして、プロンプトが表示されたら再読み込みしてください。

この拡張機能はビジュアルな設定 UI を提供し、MCP サーバーのプロセスを自動的に管理します。Python、外部の Node.js のインストール、手動での環境設定は不要です。

オプション 2 — npm / npx CLI

npm install -g opengrok-mcp-server
opengrok-mcp setup      # interactive wizard: URL, credentials, MCP client registration

インストールせずに実行するには、次のコマンドを使用します。

npx opengrok-mcp-server setup

その他の CLI コマンド:

opengrok-mcp status      # health check: validates connectivity and detects installed MCP clients
opengrok-mcp setup --test                     # test the stored connection without the wizard
opengrok-mcp setup --set contextBudget=generous  # update one stored setting non-interactively
opengrok-mcp export-audit --format json --output audit.jsonl  # export the audit log
opengrok-mcp version     # print version and exit
opengrok-mcp help        # show all commands

あらゆる MCP 対応クライアント(CLI または IDE)で動作します。設定形式とトラブルシューティングについては、MCP_CLIENTS.md をご覧ください。

認証情報は OS のキーチェーン(macOS Keychain、Windows Credential Manager、Linux libsecret)に保存されます。ヘッドレス環境では、AES-256-GCM で暗号化されたファイルが代わりに使用されます。


ヒント

自動更新 — 拡張機能は 24 時間に 1 回 GitHub で新しいリリースを確認し、利用可能な場合は通知します。オンデマンドで確認するには、OpenGrok: Check for Updates を使用してください。


問題

大規模なコードベースを扱うエンジニアは、AI コーディングアシスタントを使う際に特有のギャップに直面します。モデルのコンテキストウィンドウに含まれるのは、現在開いているファイル、会話、手動で共有された情報です。しかし、本番環境のコードベースには、構造、履歴、モジュール間の関係があり、それらはすべてそのウィンドウの外に存在しています。

あるモジュールで定義され、ほかの 70 のモジュールから呼び出されるシンボル。動作を理解するには、その関数を形作った 3 つのコミットを確認する必要がある関数。十数個のディレクトリにまたがるインクルードチェーン。リファクタリングの前に、どのコンポーネントがサービスに依存しているかを示すコールグラフ。

コードインデックスにアクセスできないと、モデルは推測でこうしたギャップを埋めます。ファイルパスを捏造し、関数シグネチャをでっち上げ、変更を誤った作者に帰属させます。モデルの誤りは、知能が足りないためではなく、孤立しているために生じます。

OpenGrok は、すでに人間のエンジニア向けにこの問題を解決しています。数十のプログラミング言語のソースをインデックス化し、コミット済みの履歴全体にわたる全文検索インデックスを保持し、REST API を通じて定義の検索、参照グラフ、blame、ディレクトリの走査、ファイル履歴を提供します。問題は、AI ツールからそこにアクセスする方法がなかったことです。


仕組み

┌──────────────────────────────────────────────────────┐
│  AI Client  (Claude, Copilot, Cursor, Codex …)       │
└─────────────────────┬────────────────────────────────┘
                      │  MCP  (stdio or HTTP)
┌─────────────────────▼────────────────────────────────┐
│  OpenGrok MCP Server  (Node.js)                      │
│  opengrok_api  ──── full API spec, once per session  │
│  opengrok_execute ─ run JavaScript in sandbox        │
│                                                      │
│  OpenGrok client ── search · symbols · blame · diffs │
└─────────────────────┬────────────────────────────────┘
                      │  HTTP (REST + web fallback)
┌─────────────────────▼────────────────────────────────┐
│  OpenGrok                                       │
│  search · symbols · call graphs · index health       │
└──────────────────────────────────────────────────────┘

サーバーは、2 つの主要なツールを公開します。opengrok_api は、セッション開始時に API 仕様全体を提供します。それ以降のすべての操作は opengrok_execute を介して行われます。AI は env.opengrok.* オブジェクト(search、getFileContent、getFileAnnotate、getFileHistory、browseDir、getFileSymbols)を使った JavaScript プログラムを作成し、1 回の実行として送信します。

中間結果はサンドボックス内にとどまり、最終的な return 値だけがコンテキストウィンドウに返されます。シンボルを見つけ、定義を読み、誰が変更したかを確認し、呼び出し元をたどるという一連の調査が、各結果をその都度コンテキスト経由でやり取りするのではなく、1 つのスクリプトで完了します。複雑な調査では、トークンを通常 80~95%節約できます。

すべての env.opengrok.* 呼び出しは、サンドボックスコード内では同期的に見えます。QuickJS WASM VM は、SharedArrayBuffer + Atomics チャネル(データ領域 8 MB、呼び出しごとのタイムアウト 62 秒、実行時間のハード上限 62 秒)を介して、非同期 HTTP 呼び出しを透過的に中継しながら、Node.js のイベントループをブロックしません。

メモリバンク — 2 つのファイルが、ターンやセッションの再起動をまたいで保持されます。現在の調査状態を記録する active-task.md(4 KB)と、追記専用の調査結果を記録する investigation-log.md(32 KB)です。サンドボックス内では、env.opengrok.readMemory() / env.opengrok.writeMemory() を使います。詳しくは、以下のメモリバンクのリファレンスを参照してください。


リファレンス

ツールリファレンス

ツールは合計 31 個です。Code Mode では 2~5 個(opengrok_api + opengrok_execute と、OPENGROK_ENABLE_MEMORY_TOOLS=true の場合はメモリツール 3 個)、標準モードでは 26 個(OPENGROK_CODE_MODE=false)です。

主要ツール
ツール用途
opengrok_search_code全文検索、定義検索、参照検索、パス検索、履歴検索を行います。file_type による絞り込みと cursor によるページネーションに対応しています。
opengrok_find_fileファイル名またはディレクトリパターンでファイルを検索します。cursor によるページネーションに対応しています。
opengrok_get_file_contentソースコードを読み取ります。大きなファイルでは start_line / end_line を使用してください。
opengrok_get_file_historyファイルのコミット履歴を取得します。cursor によるページネーションに対応しています。
opengrok_browse_directoryフォルダー構造と、その中に含まれるファイルを表示します。cursor / limit によるページネーションに対応しています。
opengrok_list_projectsインデックス化されたすべてのリポジトリを一覧表示します。
opengrok_get_file_annotate行ごとの blame 注釈を取得します。revision、start_line / end_line による範囲指定、includeContent に対応しています。
opengrok_get_file_symbolsファイルからクラス、関数、マクロ、構造体を抽出します。cursor によるページネーションに対応しています。
opengrok_search_suggestクエリのオートコンプリート候補を取得します。ランキングに利用する context の受け渡しに対応しています。
複合ツール

複数の API 呼び出しを 1 つの操作にまとめます。

ツール置き換える操作節約量
opengrok_get_symbol_context定義の検索 + ソースの読み取り + ヘッダーの取得 + 参照の取得トークンを約 92%削減
opengrok_search_and_read検索 + 周辺コンテキストの読み取り(上限:OPENGROK_SEARCH_AND_READ_CAP)トークンを約 92%削減
opengrok_batch_search2~5 件の並列検索、重複結果の排除トークンを約 73%削減
opengrok_index_healthレイテンシー、接続状態、陳腐化スコア診断
調査ツール
ツール目的
opengrok_what_changedコミットごとにグループ化された最近の行変更 — 作成者、日付、SHA、コンテキスト付きの変更行
opengrok_dependency_map#include/import チェーンを深さ3まで幅優先探索し、uses/used_by を含む有向グラフを返します
opengrok_search_pattern正規表現によるコード検索。file:line:content 形式の一致を返します
opengrok_blame行範囲(line_start/line_end)と任意の差分を指定できる Blame
opengrok_call_graphOpenGrok API v2 を使用した呼び出しチェーンの追跡(OPENGROK_API_VERSION=v2 が必要。v1 では refs ベースのフォールバックを使用)
opengrok_get_file_diffコンテキスト行を含む、2つのリビジョン間の統合差分
opengrok_get_compile_infoローカルの compile_commands.json から C/C++ のコンパイラフラグとインクルードパスを取得します
opengrok_get_all_matches検索結果が省略されている場合に、ファイル内の一致するすべての行を取得します
opengrok_get_file_history_with_filesRSS フィードを介して、変更されたファイルの一覧を含むコミット履歴を取得します
opengrok_get_download_urlファイルの直接ダウンロード URL(HTTP 呼び出しなし)
opengrok_list_groupsプロジェクトグループ(管理者認証が必要な場合は空)
opengrok_get_suggest_popularityプロジェクトフィールドの人気の候補(管理者認証が必要な場合は空)
opengrok_get_project_repositoriesプロジェクトのリポジトリ(管理者認証が必要な場合は空)

(注:検索ツールは言語フィルタリングに対応しています。file_type には正規のアナライザー名を指定してください。C++ は cxx、Go は golang、シェルは sh、JS は javascript です。エイリアスも使用できます:cpp/c++→cxx、go→golang、bash/shell→sh、js→javascript、ts→typescript、cs→csharp、py→python、rb→ruby、rs→rust。)

defs/refs/symbol のフォールバックに関する注意 — defs、refs、symbol の検索にはプロジェクトスコープが必要です(projects を渡すか、OPENGROK_DEFAULT_PROJECT を設定してください)。プロジェクトスコープがない場合、プロジェクトをまたいだ検索結果が多くなりすぎることがあります。これらの種類の検索で REST エンドポイントがエラーまたは空の結果を返すインスタンスでは、クライアントが自動的に Web UI の解析にフォールバックするため、LLM は引き続き回答を得られます。opengrok_call_graph には API v2 が必要で、v1 では refs ベースの表示に切り替わります。

Code Mode API

OPENGROK_CODE_MODE=true を設定します(デフォルト)。セッション開始時に opengrok_api を1回呼び出して、API 仕様全体を取得してください。それ以降のすべての操作は opengrok_execute を介して実行します。

サンドボックス API の呼び出しはすべて同期処理です。フラットなグローバル関数(search(...))を使用し、await は不要です。env.opengrok.* オブジェクト形式(env.opengrok.search(...))も同等です。

検索と探索

メソッド戻り値
env.opengrok.search(query, opts?)全文、defs、refs、symbol、path、hist。オプション:searchType、projects、maxResults(デフォルトは5)、startIndex、cursor、fileType、sort、maxHitsPerFile、dir、pathFilter、file、expandFunction
env.opengrok.batchSearch(queries[], opts?)クエリごとに1つの結果セット(最大10件)。ホスト上で並列実行されます。クエリごとに expandFunction: true を指定すると、囲む関数のコンテキストが含まれます
env.opengrok.findFile(pattern, opts?){ totalCount, results: [{project, path}], cursor? }
env.opengrok.searchSuggest(query, opts?){ query, field, suggestions, time }。オプション:field、project/projects、context(ランキングに使用する他のフィールド値)
env.opengrok.getAllMatchesInFile(project, path, query, opts?)検索結果が省略されている場合に、ファイル内の一致するすべての行を取得します。search() に file: フィルターを指定した場合にも自動的に使用されます(ページネーションなし)

search() では正規のファイルタイプ名のみを使用します(例:cxx、golang、sh)。上記のエイリアス一覧を参照してください。一致した結果を囲む関数本体まで展開するには、expandFunction: true を渡します(ホスト側の読み取りが追加され、1回の呼び出しにつき最大3ファイルです)。 カーソルページネーション — cursor フィールドを返すメソッド(search、findFile、browseDir、getFileSymbols、getFileHistory、getFileDiff)はページネーションに対応しています。次のページを取得するには、カーソルを次の呼び出しで opts.cursor として渡してください。カーソルの有効期限が切れている場合(セッションが再起動された、または時間が経過しすぎた場合)、レスポンスに { _cursorExpired: true } が含まれます。最初からページネーションをやり直してください。

読み取りとナビゲーション

メソッド戻り値
env.opengrok.getFileContent(project, path, opts?){ project, path, content, lineCount, sizeBytes, startLine }。範囲を指定した読み取りでは、デフォルトで範囲を囲む関数まで拡張されます。正確に指定した範囲を維持するには、{expandFunction: false} を渡してください
env.opengrok.browseDir(project, path?, opts?){ project, path, entries, cursor? }
env.opengrok.getFileSymbols(project, path, opts?){ project, path, symbols, cursor? }
env.opengrok.getFileOverview(project, path, opts?){ lang, sizeLines, sizeBytes, imports, topLevelSymbols, recentAuthors, lastRevision }。インポートを含めるには includeImports:true を渡してください(デフォルトでは省略されます)

履歴と Blame

メソッド戻り値
env.opengrok.getFileAnnotate(project, path, opts?){ project, path, lines: [{lineNumber, revision, author, date, content}] }。オプション:revision、startLine/endLine(範囲外の場合はエラーが発生します)、includeContent(デフォルトは true)
env.opengrok.getFileHistory(project, path, opts?){ project, path, entries, cursor? }(maxEntries、cursor)
env.opengrok.getFileHistoryWithFiles(project, path, opts?)RSS フィード経由のコミット履歴と、同じ変更で更新されたファイルの一覧(maxEntries)
env.opengrok.getFileDiff(project, path, rev1, rev2, opts?){ hunks, unifiedDiff, stats }。includeHunks:true(デフォルト)ではハンクを保持し、false では {unifiedDiff,stats} のみを返します。ハンク単位のカーソルページネーションに対応しています
env.opengrok.getGuidanceForPath(project, path, opts?){ guidance: [{path, scope, content, truncated}], missingCount, errorCount, incomplete, capped, searchedUpTo } — AGENTS.md/CLAUDE.md の検出

コードインテリジェンス

メソッド戻り値
env.opengrok.traceCallChain(symbol, opts?)呼び出しチェーンのトレース。direction: 'callers'|'callees'|'both'。非同期 — 初回の呼び出しでは {status:'computing'} が返される場合があります。同じ呼び出しを再試行すると、キャッシュされた結果を取得できます
env.opengrok.getSymbolContext(symbol, opts?)定義、参照、ヘッダーを統合して返します。tree-sitter により、定義は関数本体全体まで展開されます
env.opengrok.dependencyMap(project, path, opts?)依存関係グラフ:uses(インポート)と used_by(参照)。高速パスを備えた非同期処理です。{status:'computing'} が返される場合は、再試行するとキャッシュされたグラフを取得できます。direction: 'uses'|'used_by'|'both'
env.opengrok.getCompileInfo(path)C/C++ のコンパイラフラグとインクルードパス。ローカルのコンパイルデータベースが設定されていない場合は null

traceCallChain の呼び出し元は refs 検索から取得され、呼び出し先は対応言語(C/C++、Java、Go、Python、JS/TS、Rust など)の tree-sitter AST 解析から取得されます。時間のかかる2つのメソッドはいずれも、バックグラウンドクライアント(レート制限がなく、操作ごとの予算が短い、同系列の接続)に処理を分散します。そのため、深いトラバースでフォアグラウンドのレート制限枠を消費しません。

システム

メソッド戻り値
env.opengrok.indexHealth(){ connected, latencyMs, baseUrl, serverVersion?, suggestConfig? }
env.opengrok.listProjects(filter?){ projects } — インデックス化されたすべてのリポジトリ(標準モードでの同等機能:opengrok_list_projects)
env.opengrok.readMemory(filename)active-task.md または investigation-log.md を読み込みます(未初期化の場合は null)
env.opengrok.writeMemory(filename, content, mode?)'overwrite'(デフォルト)または 'append'。実行ごとに最大 5 回書き込み可能です
env.opengrok.elicit(message, schema)ユーザーに選択を求めます(OPENGROK_ENABLE_ELICITATION=true が必要です)
env.opengrok.sample(prompt, opts?)クライアントの LLM に AI テキストをリクエストします(OPENGROK_ENABLE_SAMPLING=true が必要です。未対応の場合は null が返されるため、必ず null チェックを行ってください)

例

// Example opengrok_execute code
const refs = env.opengrok.search("handleCrash", { searchType: "refs", maxResults: 5 });
const first = refs.results[0];
const content = env.opengrok.getFileContent(first.project, first.path, {
  startLine: first.matches[0].lineNumber - 5,
  endLine: first.matches[0].lineNumber + 10,
});
return { callerFile: first.path, code: content.content };

search() が 結果なし を返し、サンプリングが有効な場合、結果には _suggestions: string[] が自動的に挿入されます。sample() を明示的に呼び出す前に、この値を確認してください。

Tree-sitter による解析機能 — 範囲読み取りと expandFunction は、tree-sitter AST 解析を使用して、一致箇所をそれを含む関数本体まで拡張します(WASM 文法を使用するため、ホスト側のツールチェーンは不要です)。ティアごとに行数の上限が適用されます:minimal は 200 行、standard は 400 行、generous は 600 行です。OPENGROK_GRAMMAR_DIR で文法ディレクトリを上書きできます。npm run copy-grammars で新しい文法を追加できます(CONTRIBUTING.md を参照)。

fitToBuffer による切り詰め — 8 MB のブリッジバッファーを超えるサンドボックスの結果は、fitToBuffer() によって、JSON の途中ではなく結果要素の単位で保持しながら切り詰められます。切り詰められた結果には _truncated: true が付与されます。この値がある場合は、クエリの範囲を狭めるか、cursor を使ってページ分割してください。

Elicitation(OPENGROK_ENABLE_ELICITATION=false で無効化、デフォルト:true)

有効にすると、OPENGROK_DEFAULT_PROJECT が設定されておらず、プロジェクトが複数存在する場合、セッション開始時に opengrok_api がユーザーに作業対象のプロジェクトを選択するよう求めます。サンドボックスコードから env.opengrok.elicit() を呼び出し、実行中に複数の一致候補からユーザーに選択を求めることもできます。MCP Elicitation に対応するクライアントが必要です。Claude Code v2.1.76 以降は対応しています。それ以外のクライアントでは、エラーにならず { action: "cancel" } にフォールバックします。

Sampling(OPENGROK_ENABLE_SAMPLING=true、デフォルト:false)

MCP Sampling を介して LLM の呼び出しをクライアントに委譲し、別途 API キーを用意せずにクライアントのモデルのサブスクリプションを使用します。サンドボックスエラーの説明、大規模な依存関係グラフの要約(10 ノード超)、結果なしのクエリの再構成(_suggestions の挿入)の 3 か所で自動的に実行されます。VS Code Copilot はサンプリングに対応していますが、他のクライアントの対応状況は異なります。サンプリングが利用できない場合、サーバーはエラーにならずに処理を続行します。

警告

サンプリングは自動的に実行され、オンデマンドではありません。1 回の調査セッションで、サンドボックスエラー、結果なしの検索、大規模な依存関係グラフに対して、多数のサンプリング呼び出しが発生する可能性があります。クライアントによっては、最初の確認プロンプト後、呼び出しごとにプレミアムリクエストを消費します。この点を踏まえて有効にしてください。

Memory Bank

Code Mode には、デフォルトで 2 つのツール(api と execute。OPENGROK_ENABLE_MEMORY_TOOLS=true の場合は 5 つ)が含まれます。次の 2 つのファイルは、ターン間およびセッションの再起動後も保持されます。

ツール用途
opengrok_memory_status2 つのメモリファイルのステータス、サイズ、および 3 行のプレビュー
opengrok_read_memoryactive-task.md または investigation-log.md を読み込みます
opengrok_update_memory書き込みまたは追記を行います。investigation-log.md のエントリには日時が自動的に付与されます
ファイルサイズ上限用途
active-task.md≤ 4 KB現在のタスクの状態:task:、last_symbol:、next_step:、open_questions:、status:
investigation-log.md≤ 32 KB追記専用の調査ログ。## YYYY-MM-DD HH:MM: 見出しごとに調査結果をまとめます
Delta エンコーディングでは、変更されていないコンテンツを繰り返し読み込むと `[unchanged]` が返されます。情報量に基づくスコアリングを用いたトリミングにより、容量が限られている場合は価値の高いログエントリが保持されます。
設定
コア
変数デフォルト説明
OPENGROK_BASE_URL(blank)OpenGrok サーバーのベース URL(必須)。セットアップウィザードまたは VS Code の設定で指定します。
OPENGROK_USERNAME(blank)認証ユーザー名。匿名アクセスの場合は設定しないでください。
OPENGROK_PASSWORD(blank)認証パスワード。opengrok-mcp setup を使用して OS のキーチェーンに保存することを推奨します。
OPENGROK_PASSWORD_FILE(blank)OpenGrok のパスワードを含むファイルへのパス(CI/コンテナーでファイルとしてマウントするシークレット)。OPENGROK_PASSWORD の代わりに使用します。
OPENGROK_VERIFY_SSLtrue自己署名証明書の TLS 検証を無効にするには、false に設定します。
OPENGROK_TIMEOUT30HTTP リクエストのタイムアウト(秒)。
コードモードとパフォーマンス
変数デフォルト説明
OPENGROK_CODE_MODEtrueコードモード(2~5 個のツール:opengrok_api + opengrok_execute + 有効時は 3 個のメモリツール)。従来の標準ツール 26 個を使用するには、false に設定します。
OPENGROK_CONTEXT_BUDGETstandardレスポンスサイズの段階:minimal(8 KB、tree-sitter の予算は 200 行)/standard(16 KB、400 行)/generous(32 KB、600 行)。
OPENGROK_MAX_RESPONSE_BYTES—レスポンスごとのバイト数上限を上書きします(OPENGROK_CONTEXT_BUDGET より優先されます)。
OPENGROK_SEARCH_AND_READ_CAP—opengrok_search_and_read の複合上限を上書きします(デフォルト:段階ごとに 2 KB/4 KB/8 KB)。
OPENGROK_RESPONSE_FORMAT_OVERRIDE—全体で使用する形式を指定します:markdown/json/tsv/toon/yaml/text。
OPENGROK_DEFAULT_PROJECT—すべての検索対象を絞り込むデフォルトのプロジェクト名。
OPENGROK_DEFAULT_MAX_RESULTS25検索結果のデフォルト上限数。
OPENGROK_LOCAL_COMPILE_DB_PATHS—C/C++ のフラグ抽出に使用する compile_commands.json へのパスをカンマ区切りで指定します。
OPENGROK_GRAMMAR_DIR自動検出tree-sitter の文法 WASM ファイルへのパスを上書きします。デフォルトでは、バンドルディレクトリから上の階層をたどって grammars/ を探します。
メモリバンク
変数デフォルト説明
OPENGROK_ENABLE_MEMORY_TOOLSfalseコードモードのメモリツール 3 個(メモリの状態確認、読み取り、更新)を登録します。無効の場合は api と execute のみです。
OPENGROK_MEMORY_BANK_DIRサーバーのデフォルトactive-task.md と investigation-log.md の保存ディレクトリを上書きします。
OPENGROK_ENABLE_OBSERVATION_MASKERfalse全文表示ウィンドウが埋まった後、opengrok_execute の結果の先頭に簡潔な履歴要約を付加します。コンテキストを切り詰めるクライアントでのみ有用です。
OPENGROK_OBSERVATION_MASKER_TURNS10古い結果が簡潔にまとめられる前に、opengrok_execute の直近の結果を全文のまま保持する数。
レート制限
変数デフォルト説明
OPENGROK_RATELIMIT_ENABLEDtrueトークンバケット方式のレート制限を有効にします。
OPENGROK_RATELIMIT_RPM60全体の 1 分あたりのリクエスト数の上限。
OPENGROK_PER_TOOL_RATELIMIT—ツールごとの RPM 上書き設定:opengrok_execute:15,opengrok_batch_search:20。デフォルトは opengrok_execute が 15 rpm、opengrok_batch_search が 5 rpm、opengrok_dependency_map が 10 rpm、opengrok_call_graph が 5 rpm です。
レスポンスキャッシュ
変数デフォルト説明
OPENGROK_CACHE_ENABLEDtrueTTL レスポンスキャッシュを有効にします。
OPENGROK_CACHE_MAX_SIZE500キャッシュエントリの最大数です。
OPENGROK_CACHE_MAX_BYTES52428800キャッシュ合計サイズの最大値(バイト単位、50 MB)です。
OPENGROK_CACHE_SEARCH_TTL300検索結果キャッシュの TTL(秒単位)です。
OPENGROK_CACHE_FILE_TTL600ファイル内容キャッシュの TTL(秒単位)です。
OPENGROK_CACHE_HISTORY_TTL1800ファイル履歴キャッシュの TTL(秒単位)です。
OPENGROK_CACHE_PROJECTS_TTL3600プロジェクト一覧キャッシュの TTL(秒単位)です。
MCP プロトコル
変数デフォルト説明
OPENGROK_ENABLE_ELICITATIONtrueopengrok_api の起動時のプロジェクト選択と、サンドボックス内の env.opengrok.elicit() を有効にします。
OPENGROK_ENABLE_SAMPLINGfalseエラーの説明、グラフの要約、検索結果がない場合の復旧に MCP Sampling を使用します。
OPENGROK_ENABLE_FILES_APIfalseinvestigation-log.md 用の FileReferenceCache(SHA-256 によるコンテンツアドレス指定)を有効にします。
OPENGROK_SAMPLING_MODEL—Sampling 呼び出しで使用するモデルの優先設定です。
OPENGROK_SAMPLING_MAX_TOKENS256Sampling 応答のトークン上限です(最大:4096)。
OpenGrok API
変数デフォルト説明
OPENGROK_API_VERSIONv1REST API のバージョンです。opengrok_call_graph には v2 を使用してください。
セキュリティと監査
変数デフォルト説明
OPENGROK_AUDIT_LOG_FILE—構造化監査ログ(CSV または JSON)のファイルパスです。
OPENGROK_STRICT_SSRFfalseプライベート/ループバック IP 範囲に解決されるベース URL とリダイレクトを拒否します(デフォルト:警告のみ)。
ロギング
変数デフォルト説明
OPENGROK_LOG_LEVELinfo標準エラー出力への詳細な構造化ログを有効にするには、debug を設定します。
プロキシ
変数デフォルト説明
HTTP_PROXY—外部リクエスト用の HTTP プロキシです。
HTTPS_PROXY—外部リクエスト用の HTTPS プロキシです。

VS Code ユーザーは、代わりに VS Code の設定で opengrok-mcp.baseUrl、opengrok-mcp.codeMode、opengrok-mcp.contextBudget、opengrok-mcp.memoryBankDir、opengrok-mcp.defaultProject、opengrok-mcp.responseFormatOverride、opengrok-mcp.compileDbPaths、opengrok-mcp.enableObservationMasker、opengrok-mcp.observationMaskerTurns を設定できます。パスワードなどのシークレット値が VS Code の設定に書き込まれることはありません。

MCP SDK に関する注記: このバージョンでは @modelcontextprotocol/sdk v1.30.0(v1 系列)を使用します。

HTTP トランスポートと認証

デフォルトでは、サーバーは stdio を介して通信します。チームで共有するデプロイでは、HTTP トランスポート層をライブラリ API(src/server/transport/http-transport.ts の startHttpTransport())として利用できますが、CLI のエントリーポイントにはまだ接続されていません。以下に OPENGROK_HTTP_PORT の記載がありますが、main.ts は HTTP サーバーを自動的に起動するためにこの値をまだ読み取りません。カスタムデプロイでは startHttpTransport() を直接使用してください。

セッション管理
  • 各 HTTP クライアントには、分離された McpServer インスタンスが割り当てられます(セッションごとのファクトリーパターン)。
  • セッションは30分間操作がないと期限切れになります。OPENGROK_HTTP_MAX_SESSIONS は同時セッション数を制限します(デフォルト:100)。
  • GET /mcp/sessions は、アクティブなセッション数と最も古いセッションの経過時間を含む JSON を返します。
#### 認証
方法設定
静的 Bearer トークンOPENGROK_HTTP_AUTH_TOKEN=mysecret
OAuth 2.1 リソースサーバーOPENGROK_JWKS_URI=https://idp.example.com/.well-known/jwks.json + OPENGROK_RESOURCE_URI=https://opengrok-mcp.example.com
名前付きロールによる RBACOPENGROK_RBAC_TOKENS='alice-token:admin,bot-token:readonly'

リソースサーバーモードでは、このサーバーは独自の IdP が発行した JWT を検証します。組み込みの /token エンドポイントはありません。OPENGROK_JWT_ISSUER が設定されている場合、他の発行者のトークンは拒否されます。RFC 9728 の保護リソースメタデータは /.well-known/oauth-protected-resource で提供されます。

RBAC ロール
ロール権限
adminすべてのツールと設定へのフルアクセス
developerすべての検索、読み取り、メモリ、コードツール
readonly検索および読み取りツールのみ。メモリへの書き込みとコードの実行は不可

不明なトークンやトークンがない場合は、403 Forbidden で拒否されます。認証が設定されていない場合、未認証のリクエストには admin が付与されます(ローカル開発モード)。

CORS

ブラウザーベースのクライアントには、オリジンの許可リスト(カンマ区切りの OPENGROK_ALLOWED_ORIGINS)が適用されます。認証が設定されていない場合、ローカル開発用にループバックオリジン(localhost、127.0.0.1、[::1])が許可されます。認証(OPENGROK_HTTP_AUTH_TOKEN または RBAC トークン)を設定すると、ループバックは暗黙的に許可されなくなります。ローカルオリジンも含め、許可するすべてのオリジンを明示的に列挙してください。

セキュリティ
領域保護
SSRFbuildSafeUrl での DNS リバインディング検出と IPv6 マップアドレスのブロック。OPENGROK_STRICT_SSRF による厳格モード
パストラバーサルassertSafePath での NFC 正規化と双方向 Unicode 文字のブロック
HTML インジェクション表示前にすべてのパーサーのテキストノードをエンティティデコード
プロンプトインジェクションすべてのフォーマッターで Markdown フィールドをエスケープ
トークン比較すべての Bearer トークン比較に crypto.timingSafeEqual を使用
CORSOPENGROK_ALLOWED_ORIGINS による許可リスト。本番環境ではワイルドカードなし
セキュリティヘッダーHTTP レスポンスに X-Content-Type-Options、X-Frame-Options、CSP を設定
認証情報の暗号化AES-256-GCM。古い暗号化ファイルから自動アップグレード
レート制限整数ベースのトークンバケット(浮動小数点のずれを解消)。ツールごとのデフォルト設定(opengrok_execute:15 rpm)
サンドボックス分離QuickJS WASM VM。ファイルシステムとネットワークへのアクセスなし、許可リストにあるメソッドのみ。タイムアウトは 62 秒、バッファーは 8 MB
監査ログインジェクション対策のエスケープを施した構造化監査エントリー

セキュリティアーキテクチャの全容(脅威モデル、防御レイヤー、強化ガイド)については、SECURITY.md を参照してください。

サンドボックスの信頼に関する推奨事項: VS Code の MCP 設定で OpenGrok MCP を設定する際、sandboxEnabled: true を指定すると、確認プロンプトなしでツール呼び出しが自動承認されます。すべてのツール実行はホストへのアクセスがない QuickJS WASM サンドボックス内で行われるため、安全です。このサーバーを通じて、LLM が任意のシステムコマンドを実行することはできません。


VS Code との統合

コマンド操作
OpenGrok: Open Configuration対話型の設定 GUI
OpenGrok: Test ConnectionAPI アクセスとトークンの有効性を確認
OpenGrok: Show Server Logsバックグラウンドプロセスの stdout/stderr を表示
OpenGrok: Status Menuステータスバーからすばやくアクセスできるステータスメニュー
OpenGrok: Check for Updates更新の確認を手動で実行

メモ

VS Code はワークスペースごとにツールの認可を管理します。別のリポジトリを開いた場合は、Copilot のツールパネルで OpenGrok のチェックボックスを再度オンにしてください。

設定パネルと VS Code の設定 UI では、同じ設定を管理できます。ガイド付きセットアップ、シークレット、テスト、再読み込みの確認にはパネルを使用してください。ワークスペースごとのオーバーライド、Settings Sync、スクリプトでのデフォルト設定には、settings.json の opengrok-mcp.* 設定を使用してください。Code Mode を推奨します。無効にすると、従来の標準ツールが使用され、新しい Code Mode 専用の機能は利用できません。


トラブルシューティング

ヒント

opengrok-mcp status を実行すると、接続を確認し、設定済みの MCP クライアントを確認できます。

警告

VS Code の再読み込み後や拡張機能の更新後、一時的にツールが Copilot のツール一覧から消えることがあります。ツールアイコンをクリックして「Update Tools」を選択し、続けて Developer: Reload Window を実行すると、ツールが再表示されます。

接続に失敗する — OPENGROK_BASE_URL を確認してください。VPN またはプロキシがエンドポイントをブロックしていないことを確認してください。

401 Unauthorized — OpenGrok: Open Configuration を実行して、認証情報を再入力してください。

自己署名 SSL 証明書エラー — VS Code の設定で opengrok-mcp.verifySsl を false に設定するか、MCP クライアントの設定で OPENGROK_VERIFY_SSL=false に設定してください。

クエリが遅い、またはタイムアウトする — file_type フィルタリングを使って対象範囲を絞るか、特定のプロジェクトを指定してください。opengrok_index_health でインデックスの状態を確認してください。

詳細ログ — OPENGROK_LOG_LEVEL=debug を設定してください。

OpenGrok の互換性
エンジンのバージョン状態備考
v1.13.x 以降対応REST API 全機能
v1.7.0 — v1.12.xレガシーモードシンボルと blame に HTML スクレイピングを使用
v1.7.0 未満非対応動作が予測できません

さらに詳しく

クライアントのセットアップ · アーキテクチャ · セキュリティ · コントリビューション · 変更履歴


ライセンス情報

このシステムは、PolyForm Noncommercial License 1.0.0 に基づいて配布されています。

  • ✅ 許可される用途: 個人利用、趣味のプロジェクト、学術研究、教育
  • ❌ 禁止される用途: 商用、業務、エンタープライズ、または有料でのあらゆる利用

商用ライセンス: エンタープライズ環境(社内ツール、CI パイプライン、業務インフラ)でこの拡張機能を使用するには、商用ライセンスが必須です。 エンタープライズ向けの料金については、[email protected] までお問い合わせください。

利用規約の全文は LICENSE-COMMERCIAL.md をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。