Lain Mcp について
Lainはコーディングエージェント向けにコードグラフを構築・検索し、開発者が呼び出し関係や変更の影響を把握できるようにします。MCP経由でシンボル、呼び出し経路、依存関係、Gitの同時変更情報を提供し、グラフはローカルに保存されます。セマンティック検索は任意です。
主な機能
- 01シンボル、呼び出し元、依存関係のグラフを構築
- 02呼び出し経路、変更影響、アーキテクチャの入口を検索
- 03Gitコミットの同時変更情報を利用
- 04リポジトリ横断の検索と影響分析に対応
- 05intents、presence、ファイルクレームでエージェントを調整
活用シーン
- 01関数を変更する前に影響範囲を確認
- 022つの関数間の呼び出し経路を追跡
- 03特定ファイルと一緒に変更されやすいファイルを特定
- 04別のエージェントが同じコードを編集中か確認
MCP 対応
MCP経由で、シンボル検索、呼び出し経路、変更影響、リポジトリ横断検索などのローカルコードグラフツールをコーディングエージェントに提供します。リポジトリのインデックスをstdioで提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Lain
コーディングエージェント向けのコードグラフ。 Lain は呼び出し元、依存関係、シンボル、Git の同時変更をマッピングし、それらを Model Context Protocol(MCP)経由で公開します。エージェントは関数を編集する前に、その関数に依存するものや、コードベース内のほかの部分からそこに至る経路を確認できます。

このデモでは、bytes と tokio のリポジトリをまたいでシンボルを追跡します。エージェントは MCP 経由で同じグラフを検索し、ブラウザーでは Lain がインデックス化した内容と、回答の根拠を確認できます。
エージェントに質問してみましょう。
If I change validate_token, what breaks?
Show me the call chain from entry to helper_a.
Which files usually change with auth.rs?
Is another agent already editing this code?
Lain は、ローカルインデックスからシンボル名とソースパスを回答します。インデックスは実行のたびにディスク上に保持され、複数のリポジトリを対象にできます。追跡するのはコミットであり、未コミットの編集内容ではありません。コミット後に再インデックス処理(lain reindex または新しいセッション)を行うと最新の状態になり、最近の作業を見落とす可能性がある回答では、その旨が示されます。セマンティック検索は任意で、埋め込みモデルがなくてもグラフクエリを利用できます。
インストール
リリースインストーラーを使用する場合:
curl -fsSL https://raw.githubusercontent.com/spuentesp/lain/main/install.sh | bash
source ~/.zshrc # or ~/.bashrc
lain --version
または npm を使用する場合(macOS、Linux、x64 Windows):
npm install -g @spuentesp/lain-mcp
lain --version
npm に関する注意点は 2 つあります。
- npm のグローバル bin ディレクトリに無関係な
lainファイルがすでにあると、npm install -gはEEXISTで失敗します。たとえば、npm のプレフィックスが~/.localのとき、~/.local/binに古い手動コピーがある場合です。npm 自体のエラーメッセージでは、そのファイルが無関係だとは判別できません。ファイルを移動または削除するか、別のプレフィックスにインストールしてください。npm install -g --prefix ~/.local/lain-npm @spuentesp/lain-mcp(その後、~/.local/lain-npm/binをPATHに追加します)。 - npm のインストールスクリプトが無効になっている場合(
--ignore-scripts、制限された CI など)、インストール時にプラットフォーム用バイナリは取得されません。最初にlainを実行するとダウンロードと検証が行われるため、初回実行時にはネットワークアクセスが必要です。キャッシュされた後は、lain をオフラインで使用できます。
ソースからビルドする場合にのみ、Rust 1.89 以降が必要です。クイックスタートでは、非対話型インストールと、任意のローカル埋め込みモデルについて説明しています。
エージェントを接続する
Lain にインデックス化させたいリポジトリで、セットアップコマンドを 1 つ実行します。
lain setup --agent claude-code
lain setup --agent codex
lain setup --agent cursor
lain setup --agent vscode
lain setup --agent continue
別の MCP ホストを使う場合は、lain setup --agent generic を実行します。各アダプターは、クライアント独自の設定を書き込みます。Claude Code では claude mcp add、Codex では ~/.codex/config.toml、Cursor では ~/.cursor/mcp.json、VS Code では .vscode/mcp.json(またはユーザー単位の mcp.json)、Continue ではリポジトリ内の .continue/mcpServers/ にあるブロックファイルを使用します。generic は、プロジェクトレベルのこの .mcp.json を書き込みます。
{
"mcpServers": {
"lain": {
"command": "/home/you/.local/lain/lain",
"args": ["mcp"]
}
}
}
command には、セットアップを実行した lain バイナリの絶対パスが常に設定されます。単なる名前ではないため、エージェントは引き継ぐ PATH に関係なく同じバイナリを実行できます。このパスはインストール方法によって異なります。リリースインストーラーでは ~/.local/lain/lain、npm パッケージでは起動する検証済みキャッシュバイナリのパス(Linux では ~/.cache/lain/<version>/<target>/lain、macOS では ~/Library/Caches/lain/…、Windows では %LOCALAPPDATA%\lain\Cache\…)になります。セットアップの最後に、そのコマンドを一度だけ起動して MCP ハンドシェイクを検証します。
ターミナルで --agent を指定せずに lain setup を実行すると、設定するクライアントを尋ねられます(Enter キーを押すと Claude Code が選択されます)。--lsp を指定しない場合は、インストールする任意の言語サーバーを尋ねられます(Enter キーを押すと何もインストールされません)。非対話型実行では、デフォルトで generic が選択され、言語サーバーはインストールされません。そのため、スクリプトでは --agent と --lsp を明示的に指定してください。
セットアップ後にエージェントを再起動します。Lain はエージェントの作業ディレクトリから上位にたどって .git を探し、.lain/graph.bin を構築して、リポジトリを stdio 経由で提供します。リポジトリが 1 つの場合、repos.yaml は必要ありません。
言語
Rust、Python、TypeScript、JavaScript、Go、Java、C、C++、C#、Ruby、
Swift、Kotlin、Scala、PHP のパーサーはバイナリに組み込まれており、Vue と
Svelte コンポーネントの <script> ブロックも同様です。追加のインストールなしで、
どの言語でも定義と呼び出しグラフを取得できます。
言語サーバーは任意で、精度を高める場合にのみ追加します。lain setup は検出した
言語を一覧表示し、インストールするサーバーを尋ねます。Enter キーを押すと、
何もインストールされません。非対話型の実行では、名前を指定しない限り何も
インストールされません。
lain setup --lsp python,go # just these
lain setup --lsp detected # every missing one for this repository
lain setup --lsp none
最初のクエリ
接続されたエージェントに尋ねます。
Use Lain to show the blast radius of validate_token.
または、ターミナルから同じツールを呼び出します。
lain oneshot get_blast_radius validate_token
validate_token の代わりに、リポジトリ内のシンボルを使用してください。グラフの
準備ができていない場合や、回答が古いように見える場合は、lain doctor を実行します。
複数のリポジトリ
lain repos add bytes https://github.com/tokio-rs/bytes.git
lain repos add tokio https://github.com/tokio-rs/tokio.git
lain workspaces create tokio-stack --members bytes,tokio
lain server --config ./repos.yaml --transport http --port 9999
コマンドセンターを開くには、http://localhost:9999 にアクセスします。サーバーは
localhost でのみ待ち受けます。ネットワーク上に公開するには、LAIN_BIND_ADDR=0.0.0.0
(LAIN_API_KEYS=key1,… と併用)を設定します。フェデレーションを利用すると、
組織全体の検索とリポジトリ横断の影響範囲クエリが可能になります。
フェデレーションガイドでは、設定、ソースの種類、障害状態について
説明しています。フェデレーションのスキーマをアップグレードした後は、lain reindex を実行して、
ソースからディスク上のグラフを再構築します。
グラフを確認する
ソースのチェックアウトから実行します。
scripts/demo.sh --quick
このスクリプトは、既知の呼び出しグラフを持つ小さなリポジトリを作成し、実際の Lain サーバーを起動して、回答とそのグラフを比較します。チェックに失敗すると、 ゼロ以外の終了コードを返します。完全な実行では、このリポジトリに対する処理時間も記録します。
Lain が提供する機能
| 必要なこと | ツールまたは機能 |
|---|---|
| シンボルを変更する前に呼び出し元を確認する | get_blast_radius、assess_change |
| 2 つの関数のつながりをたどる | get_call_chain |
| アーキテクチャ上のエントリーポイントを見つける | find_anchors、list_entry_points |
| 名前または意味から検索する | find_symbol、search_code |
| リポジトリをまたいでシンボルを追跡する | get_cross_repo_blast_radius、search_org |
| エージェントが同じコードを把握せずに編集するのを防ぐ | intents、presence、advisory file claims |
静的解析では、メッセージバス、依存性注入コンテナー、リフレクティブなルーターを介した
動的呼び出しをすべて証明することはできません。explain_dispatch は静的な呼び出し元と
規約に基づく一致、ランタイムトレース、Git の同時変更に関する証拠を組み合わせます。
結果が空の場合は、編集が安全だと主張するのではなく、insufficient_evidence になります。
ドキュメント
| まずはこちら | 内容 |
|---|---|
| クイックスタート | インストール、最初のクエリ、初期対応 |
| ユーザーマニュアル | CLI リファレンス、調整、運用、トラブルシューティング |
| ツールガイド | MCP ツール、引数、出力、制限事項 |
| スキルバンドル | エージェントに読み込ませるスキルと役割別レシピ |
| フェデレーション | 複数リポジトリの設定とクエリ |
| マルチプレイヤー | エージェントのプレゼンス、インテント、クレーム、フック |
| アーキテクチャ | グラフの構築と設計上の選択 |
| ドキュメント一覧 | メンテナンス対象のすべてのドキュメント |
プロジェクトのステータス
ライセンス
MIT — Copyright (c) 2026 spuentesp
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。