エディタでレガシー解析(MCP)
English: Legacy analyser in your editor (MCP)
kurahi legacy mcp は、レガシー解析をエンジニアが普段使っている
ツール(VS Code、Eclipse系のメインフレームIDE、Model Context Protocol(MCP)に対応した任意の
クライアント)に提供します。独立した製品用サーバーです。読むのは指定した1つのプロジェクト
フォルダだけで、ゲートウェイもKurahiの設定も不要、稼働中のKurahiサービスとは何も共有しません。
kurahi legacy mcp --root /path/to/project # stdio(クライアントが起動)kurahi legacy mcp --root /path/to/project --http 7465 # ループバックHTTP、http://127.0.0.1:7465/mcp| オプション | 意味 |
|---|---|
--root <dir> |
プロジェクトフォルダ。必須。すべてのツールはこの中に限定。 |
--http <port> |
stdioの代わりに 127.0.0.1:<port> でストリーミングHTTPを提供 |
--max-bytes <n> |
1回の応答の上限(バイト、既定65536、最小4096) |
--allow-host <host...> |
--http と併用:前段のTLSリバースプロキシのHost名も受け付ける(リモートツールキット) |
ツール
「ツール」の見出しすべて読み取り専用(readOnlyHint)で、共通の引数を3つ持ちます:path(ルートからの相対で
プロジェクト内のサブフォルダまたはファイル、既定はルート)、offset と limit(ページ送り)。
| ツール | 返す内容 |
|---|---|
legacy_index_status |
対象範囲に最新のインデックスがあるか、件数。解析は行わない |
legacy_index_build |
COBOL、コピーブック、JCLを解析してインデックスを作成。プログラム、コピーブック、ジョブ、診断 |
legacy_query |
構造:呼び出し元・先、CALL/PERFORMグラフ、ファイルアクセス、データ項目と参照、ジョブステップ、データセット、未解決の参照 |
legacy_rules |
ルール候補:条件、定数を含む演算、丸め、88レベル値、定数 |
legacy_dictionary |
コピーブックのデータ辞書:レベル、PIC、USAGE、長さ、オフセット、位置、OCCURS、REDEFINES、値 |
legacy_impact |
データ項目の変更が及ぶ範囲と、各項目を結ぶ根拠の事実 |
legacy_design_doc |
コードから生成する設計書(日本語/英語)。セクションごとに返却し、すべての事実に path:line を付記 |
legacy_wave_plan |
依存関係とリスクに基づく移行ウェーブの提案(人による確認が前提) |
modernise_plan |
検出した言語、COBOL/JCL・Java・SQL DDL・FORTRAN・PL/I・PLC の棚卸し、言語をまたぐテーブル、カバレッジ、予定中のアシスタント(解析は行わない) |
modernise_crud |
COBOL・PL/I・Java・JCL ユーティリティをまたぐ SQL テーブルの CRUD、およびファイル(COBOL・FORTRAN・PL/I)の CRUD と根拠 |
modernise_impact |
テーブル・列・ファイル・FORTRAN の COMMON ブロック・Java クラス・プログラムの変更が言語をまたいで及ぶ範囲 |
modernise_inventory |
Java の型、SQL テーブル、FORTRAN の単位と COMMON ブロック、PL/I の手続きの一覧、または 1 件の詳細 |
ほかのツールは初回利用時にインデックスを作成します。legacy_index_build は再作成を強制します。
対象範囲のファイルが1つでも変わると、インデックスは自動的に作り直されます。
応答
「応答」の見出し各結果は短いテキスト要約(1つ目のコンテンツ)、完全なJSON(2つ目のコンテンツ)、同じJSONの
structuredContent を持ちます。形式は英語版の例と同じです。
- すべての事実に
at: "path:line"が付きます(プロジェクトルートからの相対パス)。解析器 自身のfileとlineも残ります。引用し、エディタで開いてください。 - ページ送り。 結果の最上位のリストはすべて
offsetとlimit(既定100、最大1000)で区切られ ます。page.totalは最も長いリストの件数、page.nextOffsetは次の位置(最後のページではnull)。 - サイズ上限。 1ページが
--max-bytesを超える場合、まずページを小さくし(reduced.reasonに記載、nextOffsetも小さいページに合わせる)、次に長いテキスト(DOTグラフなど)を2,000文字で 切り詰めます。1件でも収まらない場合は、範囲を絞るよう(path、program、小さいlimit) 求めるエラーになります。
クライアント設定
「クライアント設定」の見出しVS Code(.vscode/mcp.json)
「VS Code(.vscode/mcp.json)」の見出し{ "servers": { "kurahi-legacy": { "type": "stdio", "command": "kurahi", "args": ["legacy", "mcp", "--root", "${workspaceFolder}"] } }}ループバックHTTPの場合(先に kurahi legacy mcp --root … --http 7465 を自分で起動):
{ "inputs": [ { "type": "promptString", "id": "kurahi-legacy-token", "description": "kurahi-legacy token", "password": true } ], "servers": { "kurahi-legacy": { "type": "http", "url": "http://127.0.0.1:7465/mcp", "headers": { "Authorization": "Bearer ${input:kurahi-legacy-token}" } } }}任意のMCPクライアント(Eclipse系IDEを含む)
「任意のMCPクライアント(Eclipse系IDEを含む)」の見出し多くのクライアントは一般的な mcpServers 形式を受け付けます。プロジェクトフォルダは絶対パスで
指定します:
{ "mcpServers": { "kurahi-legacy": { "command": "kurahi", "args": ["legacy", "mcp", "--root", "/path/to/project"] } }}URLでしか接続できないクライアントはHTTP形式を使います:URL http://127.0.0.1:<port>/mcp、
ヘッダー Authorization: Bearer <token>。クライアントの PATH に kurahi がない場合は、
command に実行ファイルのフルパスを指定してください。
セキュリティ
「セキュリティ」の見出し- ルートは1つ、外には出ない。 起動時にルートを実パスに解決します。
path引数はそれに対して 解決し、外に出るものは拒否します:../、別の場所の絶対パス、ルート外を指すシンボリックリンク (実パスで確認)。解析器が読まないフォルダ(_answer-keys、.git、node_modules、.kurahi) も拒否します。インデクサはツリー内のシンボリックリンクをたどりません。 - 読み取り専用。 ツールはソースのテキストを解析するだけです。リポジトリ内のコード、 スクリプト、JCLを実行せず、ネットワークに接続せず、ソースに書き込みません。
- 書き込み先はプロジェクトのKurahiフォルダだけ:
.kurahi/legacy-mcp/cache/(インデックス) と.kurahi/legacy-mcp/audit.jsonl。これらのフォルダはサーバー自身が作成し(モード0700)、.kurahiやその下のフォルダがシンボリックリンクの場合は起動しません。ファイルはリンクを たどらずに開きます。.kurahi/を.gitignoreに追加してください。 - 監査ログ。 1回の呼び出しにつきJSON 1行:時刻、ツール、引数のSHA-256(引数そのものは
保存しない)、
ok、結果のバイト数、所要時間、失敗時はerror(path-refused、error、overflow)。 - HTTPはループバックのみ(
127.0.0.1)。ベアラートークンが必須です(KURAHI_LEGACY_MCP_TOKEN、 16文字以上。未設定なら起動時に生成して標準エラーに表示)。HostとOriginをループバック アドレスと照合し(DNSリバインディング対策)、POSTのみ、Content-Lengthで1 MiBまでを受け 付けます。TLSはありません。ポートを転送しないでください。
制限事項
「制限事項」の見出し- 事実であって意味ではない。 解析器は構造と正確なソーステキストを報告します。業務上の意味は 推測しません。解釈と引用は読み手が行います。
- 解析器の対応範囲。 方言の対応、5,000ファイル・1ファイル4 MiBの上限、解析の診断は レガシー解析と同じです。部分的なインデックスは診断にその旨が出ます。
- 鮮度の判定は保守的。 呼び出しごとに対象範囲をたどり、全ファイル(ソース以外も)のサイズと
更新時刻を比較します。何か変わればインデックスを作り直します。非常に大きなツリーでは
pathで範囲を絞ってください。インデックス作成は同期処理で、その間ほかの呼び出しは待ちます。 - 監査ログはサーバーが追記するだけで、改ざん検知はありません。 プロジェクトフォルダに書き込める 人は編集できます。ゲートウェイのハッシュチェーン監査ログとは別物で、ローテーションもしません。
- キャッシュは、フィンガープリントがツリーと一致すれば信頼されます。 プロジェクトに書き込める
人は偽のキャッシュを置けます。
legacy_index_buildはソースから作り直し、.kurahi/legacy-mcp/cache/はいつ削除しても安全です。 - ページ送りは1階層のみ。 結果の最上位のリストを区切ります。入れ子のリストはそのまま返り、 サイズ上限の対象になります。
- HTTPはステートレス。 サーバーからの通知やセッションはなく、各リクエストは独立しています。
- クライアントとの互換性は、プロトコルのリファレンスクライアント(stdio、インメモリ、HTTP)で 確認しています。