lema-mcp について
lema-mcpは、コーディングエージェントがプロジェクトの決定と理由を参照するためのローカルMCP サーバーです。根拠となる議論を引用し、却下済みの案を示すほか、リポジトリの決定を記録して再提案を防ぎます。
主な機能
- 01根拠付きの決定理由を提示
- 02却下済み・確定済みの案を判定
- 03決定と却下した代替案を記録
- 04ADRに基づく決定の確認
- 05決定記録やプロジェクト文書の検索
活用シーン
- 01案がすでに却下されたか確認
- 02プロジェクトの選択理由を把握
- 03リポジトリチームの決定を記録
- 04関連する決定や文書を検索
MCP 対応
MCP クライアントに決定の照会、記録、検索ツールを提供します。React、Kubernetes、Rustの公開記録もMCP サーバー経由で利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
lema-mcp
コーディングエージェントはコードを読めます。しかし、その背後にある 議論 は読めません。
lema-mcp は、記録された 理由 と、プロジェクトがすでに却下した代替案を、出典付きでエージェントに提供します。React、Kubernetes、Rustには最初から対応しており、自分のリポジトリにもコマンド一つで導入できます。
ローカルの MCP サーバーです。自分のリポジトリならアカウントもデータベースもネットワークも不要です。30秒でインストールして、プロジェクトがなぜその決定を下したのか、あるいはこれから採用しようとしているアプローチがすでに却下されていないかを尋ねられます。
❌ lema がない場合
- エージェントは学習時の記憶から 理由 を作り上げます。流暢ではありますが、ときには間違っています。根拠は RFC/KEP/PR のスレッドにあり、コードには記されていません。
- メンテナーが2年前に すでに却下した アプローチを再提案します。却下された代替案は、ソースに 痕跡を残さない からです。
- 「これは以前に却下されたことがありますか?」と尋ねても、確信ありげな推測が返ってきます。それが実際の決定なのか、幻覚なのかを見分ける方法はありません。
✅ lema がある場合
- プロジェクトで実際に記録された議論に基づく、出典付きの回答を一つ返します。各
[n]は、決定が下された RFC/PR にリンクしています。 - プロジェクトがすでにアプローチを却下している場合は、型付きの
ruled_out判定を返します。記録された理由に加え、代わりの方法がドキュメントに記載されている場所も示します。 - あなたのアプローチがプロジェクトで現在有効な記録上の選択肢である場合は、型付きの
settled判定を返します。根拠となる決定を引用し、実施方法を示すドキュメントも案内します。 - 記録に記載がない場合は、正直に 「記録された決定はありません」 と返します。これは 不明 という意味であり、承認済み という意味ではありません。lema が推測で空白を埋めることはありません。
lema が扱うのは 推論、つまり決定の理由や却下された内容です。API の構文やコードサンプルではありません。そうした情報には、ドキュメント用ツールをお使いください。理由 を知るには lema が最適です。
30秒で試す — アカウント不要
npx lema-mcp try react # or: kubernetes · rust
これにより、プロジェクトの .mcp.json に読み取り専用のパブリックサーバーが書き込まれます。エージェントの MCP サーバーを再読み込みして(Claude Code の場合は /mcp)、代表的なツール check_approach を試してみてください。方向性を指定すると、記録された判定が返ります。
> "Let's add a delayMs prop to Suspense to debounce the fallback." (repo: react)
⛔ ruled_out — the React team considered and rejected this.
"<the recorded rationale, summarized — not a quote>" [1]
Where to look instead → https://react.dev/reference/react
[1] reactjs/rfcs#212
> "I'll add a global event bus for cross-component communication." (repo: react)
◦ no_recorded_ruling — React's public record doesn't settle this.
(Unknown — not approved.)
または、「React はなぜ mixin より Hooks を採用したのですか?」 のように自然な言葉で尋ねるだけで、記録に記載がない場合は正直に回答を控えたうえで、出典付きの回答が一つ返ります。
現在の対応対象:React · Kubernetes · Rust。lema のパブリック API(api.lema.sh)から提供されます。トークンは不要です。厳選した3プロジェクトのデモ用コーパスであり、所有するグラフの分析ではありません。
インストール
アカウント不要の公開デモ(React の記録された意思決定、セットアップ不要):
Cursor ボタンを押してもインストール画面が開かない場合(ブラウザーから cursor:// ディープリンクに移動できないときによくあります)、これを .cursor/mcp.json(プロジェクト)または ~/.cursor/mcp.json(グローバル)に貼り付けてください:
{
"mcpServers": {
"lema": {
"command": "npx",
"args": ["-y", "lema-mcp@latest"],
"env": { "LEMA_MCP_MODE": "public", "LEMA_PUBLIC_REPO": "react-rfcs" }
}
}
}
これで React の公開記録を参照できます。「React はなぜ X を見送ったのか?」と尋ねれば、引用付きの回答が得られます。アカウントは不要です。独自のリポジトリで記録を取得する場合や、デモの接続先を Kubernetes または Rust に変更する場合は、以下のクライアント別のセットアップを使用してください。
npx に必要なのは Node だけです。Go ツールチェーンもアカウントも不要です。lema の使用方法は、次の 2 つのコマンドでどちらもカバーできます。
npx lema-mcp try react # read-only: ask React/Kubernetes/Rust why + what's ruled out
npx lema-mcp init # your repo: decision capture + the never-reopen guard
どちらも破壊的な変更を加えず、冪等です。既存の設定にマージされ、再実行しても変更はありません。init と try は同じ lema サーバーキーを共有します。認証済みの init サーバーは上位互換で、公開ツールも提供するため、2 つは共存でき、try によってダウングレードされることはありません。
Claude Code
最も簡単なのは、lema に設定とフックを自動で書き込ませる方法です:
npx lema-mcp init # or: npx lema-mcp try react
または、.mcp.json に手動で追加してください(読み取りツールと記録ツールは追加されますが、init がインストールするガード/ナッジフックは追加されません):
{
"mcpServers": {
"lema": { "command": "npx", "args": ["-y", "lema-mcp@latest"] }
}
}
Cursor
.cursor/mcp.json(プロジェクト)または ~/.cursor/mcp.json(グローバル)に追加してください:
{
"mcpServers": {
"lema": { "command": "npx", "args": ["-y", "lema-mcp@latest"] }
}
}
代わりにアカウント不要の公開デモを使う場合は、env ブロックを追加してください:
{
"mcpServers": {
"lema": {
"command": "npx",
"args": ["-y", "lema-mcp@latest"],
"env": { "LEMA_MCP_MODE": "public", "LEMA_PUBLIC_REPO": "react-rfcs" }
}
}
}
Claude Desktop
「設定」→「開発者」→「設定を編集」の順に選択し、mcpServers に追加してください:
{
"mcpServers": {
"lema": {
"command": "npx",
"args": ["-y", "lema-mcp@latest"],
"env": { "LEMA_MCP_MODE": "public", "LEMA_PUBLIC_REPO": "react-rfcs" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json に追加してください:
{
"mcpServers": {
"lema": { "command": "npx", "args": ["-y", "lema-mcp@latest"] }
}
}
VS Code(GitHub Copilot)
.vscode/mcp.json に追加してください。VS Code では servers キーを使用する点に注意してください:
{
"servers": {
"lema": { "command": "npx", "args": ["-y", "lema-mcp@latest"] }
}
}
Go インストール/バージョン固定バイナリ
go install github.com/lemahq/lema-mcp/cmd/lema-mcp@latest
公開デモでは、LEMA_MCP_MODE=public と LEMA_PUBLIC_REPO=react-rfcs(k8s-enhancements・rust-rfcs)を設定してください。公開 API の URL はバイナリに組み込まれています。
公開設定で設定するのは LEMA_MCP_MODE と LEMA_PUBLIC_REPO(react-rfcs・k8s-enhancements・rust-rfcs)のみです。API URL はコンパイル時に組み込まれます。
ホスト型チーム:一度サインインすれば、リポジトリは自動的に解決されます
Lema にサインインしたら、Organization スコープの認証情報を 1 つ、リポジトリの外部に保存してください。標準のセットアップに含まれるのは ID 認証情報であり、ワークスペース UUID をコピーしたものではありません:
# ~/.config/lema/credentials
LEMA_API_URL=https://api.lema.sh
LEMA_API_TOKEN=lema_live_...
chmod 600 ~/.config/lema/credentials
npx lema-mcp@latest doctor context
MCP 設定を変更した後は、コーディングエージェントを再起動してください。その後、Lema はチェックアウトの検証済み Git リモートを Repository に照合し、Project を見つけて、すべての操作に変更されないターゲットレシートを 1 つ渡します。2 つのリポジトリを並行して開いても、変更可能な「アクティブリポジトリ」は作成されず、各ユーザーはそれぞれ自身の Organization スコープの認証情報を保持します。
複数リポジトリの Project、曖昧さの解消、リモートのないリポジトリ、ワークツリー、互換性オーバーライドについては、ターゲットコンテキスト:Project、リポジトリ、Runをお読みください。
使い方は 2 通り
1. 公開記録 — React、Kubernetes、Rust(読み取り専用、アカウント不要)
人気プロジェクトがある決定を下した理由を尋ねたり、記録された RFC/KEP の議論を確認して、その方針がすでに却下されていないかを調べたりできます。これが try サーバーです。
2. 独自のリポジトリ — 記録+再提案の防止(ローカル、アカウント不要)
ほとんどの「コンテキスト」ツールは読み取り専用で、ドキュメントを grep しやすくするだけです。lema も読み取りを行いますが、本来の役割は再提案の防止です。
- エージェントが選択肢を決定すると、選んだ案と却下した代替案、およびそれぞれを却下した理由(コードには決して残らない部分)を
record_decisionで記録します。 - 誰かが方針を提案する前に、
check_decidedは、その案が CLOSED なら以前の決定を返します。 - 編集のたびに、PreToolUse ガードフック(
initでインストール)が編集中の変更を読み取り、却下された案が再提案される前に CLOSED の決定を提示します。記録した決定とリポジトリ独自の ADR の両方に基づいて適用されます。
決定は .lema/decisions.jsonl に記録されます。これはコミットする単純な追記専用ファイルなので、チーム全体のエージェントが git を通じて同じ記憶を共有できます。キーは不要で、こちら側から LLM を呼び出すこともありません。エージェントが決定を導き出し、lema はそれを保存して返します。
再提案の防止の動作例
エージェントが、すでに却下した案を検討すると、元の理由とともに CLOSED として返されます。
⛔ CLOSED — 「SWR」を提案しないでください: 第一級のミューテーション/キャッシュ無効化に対応していないため、自前で実装する必要があります (決定日 2026-06-04 · 「Web アプリのデータ取得」· TanStack Query を選択)
これにより、エージェントは議論を蒸し返すのではなく、以前の決定を提示します。決定を置き換えると、以前選ばれていた案も CLOSED になります。どちらの方向にも適用されます。(これは使い捨ての一時ディレクトリで実行した npx lema-mcp demo の実際の出力です。)
ガードは助言的かつフェイルオープンです。デフォルトの context モードでは、その注記をブロックしない注意喚起として挿入します。編集を強制的にブロックしたり、自動承認したりすることはありません。LEMA_GUARD_MODE=ask は強い一致がある場合にあなたに確認を求め、off は緊急停止スイッチです。エラーが発生した場合は何も出力せず、処理を妨げません。
利用可能なツール
エージェントは MCP 経由でこれらを呼び出します。
公開記録(アカウント不要)
| ツール | 機能 |
|---|---|
check_approach ★ | アプローチを指定すると、3 値の判定を返します。ruled_out(却下済み。記録された理由を要約して引用します)、settled(プロジェクトで現在有効な記録上の選択肢です。根拠となる決定を引用します)、または no_recorded_ruling(正直なところ、記録された判定はありません)。すべての判定に、手順を説明するドキュメントへの参照が付いています。公開されている唯一の窓口であり、引用付きの「なぜこの決定に至ったのか」という回答(以前の why_decided)と、settled の確認を統合しています。 |
自分のリポジトリ
| ツール | 機能 |
|---|---|
record_decision | 確定した決定を記録します。選択した案と却下した代替案(それぞれを却下した理由を含む)に加え、根拠/参照情報/supersedes を記録します。却下された案と置き換えられた案は CLOSED として扱われます。追記専用です。 |
check_decided | 提案された方向性を、すでに CLOSED になっている決定と照合して判定します。型付きの判定結果(ruled_out/not_ruled_out/incomplete/error)を返します。自分の記録ストアとリポジトリの ADR の両方を対象にします。 |
search_decisions | 自然言語でのクエリから、トークン予算内で最も関連性の高い原子的な主張(選択/却下/制約/結果)を、その出典 ADR とともに取得します。 |
get_decision · list_decisions · get_decision_graph | 1 件の決定の全文、ステータス別の一覧、型付きエッジ(supersedes、depends_on など)のたどり方を取得します。 |
search_docs · get_doc | リポジトリ内のプロジェクト文書(ローカルモードで、文書ツリーのインデックス作成後)を、セクション単位かつ予算内で取得します。ファイル全体ではなく、該当するセクションを返します。 |
ask | チームのホスト型決定グラフ全体を対象に、引用付きの統合回答を 1 件返します(ホスト型モード)。 |
get_state_brief | プロジェクトのスコープに合わせた概要を使って、ホスト型 Run を再開します。まずプライマリリポジトリの状態を示し、その後、アクセス制御リストでフィルタリングされた、ほかの閲覧可能なリポジトリのコンテキストを示します。 |
自分のリポジトリでは、フルサーバーが読み取りツールと記録ツール(および公開用の
check_approach も)を登録します。一方、npx lema-mcp try サーバーが実行するのは、
公開用の入口のみです。
lema settle — ターミナルから判定する(ホスト型モード)
このパッケージでは lema コマンドもインストールされます。settle は
判定のターミナル側の処理です。ホスト型の決定に対する判定案を作成し、
ブラウザーでクリックすると確定するディープリンクを表示します。ターミナルの
認証情報では何も確定しません。この分離は構造上のものです。プログラムから操作する主体は、
設計上、確定する判定を作成できません。
lema settle accept <decision-id>... # draft an accept, print the bind link
lema settle reject <decision-id> --reason <why> # proposed drafts only; takes effect immediately
lema settle supersede <decision-id> --by <decision-id> # takes effect immediately
accept は判定案を作成します。reject と supersede は同じリクエスト内で
サーバーに反映されます(これらにはブラウザーでの確認手順がなく、コマンドでもその旨が
示されます)。決定 ID には、完全な UUID または一意な 6 文字以上の UUID プレフィックス
を使用します(d_xxxxxx ロケーターはコンテンツハッシュなので拒否されます)。
ホスト型の認証情報(LEMA_API_URL と LEMA_API_TOKEN)が必要です。
LEMA_WORKSPACE_ID は、CI、復旧、または曖昧さを解消する場合の任意の上書き設定です。
通常のリポジトリ設定では必要ありません。
lema が異なる理由(率直な説明)
lema のブランドそのものが誠実さです。それが「なぜ」を扱うツールへの信頼を支えます。
- 棄権 ≠ 承認です。 沈黙は沈黙として報告されます。lema は判定を捏造するくらいなら、 「記録された判定はありません」と伝えます。
- 引用ではなく、要約に根拠を添えます。 回答は記録された決定に基づき、 「記録によると……」のように言い換えます。主張ごとに、たどって確認できる参照情報を 示します。
- ローカルファーストです。 記録と適用処理はすべて、所有者であるユーザーのファイル内で ユーザーのマシン上で実行されます。こちら側ではキーもアップロードもモデル呼び出しも 必要ありません。
- グラフを捏造しません。 コールドインポートでは、決定間のエッジも、ソースが付与した 日付も書き込みません。lema が示すのは実際の記録内容だけで、根拠を示せないものは 何も表示しません。
強制機能によってエージェントの動作は変わりますか?
私たちが作成したものではない、実在する公開リポジトリを2つ(Backstage、vite)対象に検証しました。文書化された6つの決定事項を record_decision 形式に書き起こし、エージェントの編集案に対して実際の lema-mcp guard バイナリを実行しました。168回の試行でエラーは0件です。正直な結論は「存在証明」であり、「エージェントが58%の確率で間違える」ではありません。
- 2026年時点のフロンティアモデルの判断に反する唯一の決定事項(
node-fetch→ ネイティブのfetch)では、何も知らされていないエージェントが、却下されたライブラリを再提案した割合は 58.3%(24回中14回)でした。lema によって 0% になり、文書を事前にコンテキストへ読み込ませたグループと同等の結果になりました。しかも、文書をコンテキストに含める必要はありません。 - モデルがすでに正しく判断していた5つの決定事項について、lema は介入しませんでした。48回の試行を通して、再提案は 0%、誤った回答保留も 0% でした。余計な催促はありません。
公開リポジトリでのベンチマークでは、価値を過小評価します。公開されている決定事項は、モデルがトレーニングですでに取り込んでいるものに偏っているためです。強制機能が効果を発揮するのは、非公開、主流に反する、最近のもの、チーム固有の決定事項です。手法の詳細とすべての生の試行結果はこちらです:
./docs/enforcement-lift。
設定とプライバシー
LEMA_GUARD_MODE—context(デフォルト。ブロックしません)、ask(強い一致がある場合に人間へ確認を求めます)、またはoff。LEMA_DISABLE_QUERY_LOGGING=1— クエリのテキストを使用ログに一切記録しません。設定しない場合、クエリは認証情報に該当する形式の文字列を削除してから記録されます。LEMA_USAGE_LOG/LEMA_QUESTION_LOG/LEMA_GUARD_LOG— オプトインのローカルログファイルです。設定しない限り、すべて無効です。LEMA_API_URL+LEMA_API_TOKEN— ホスト型サービスの認証情報です。環境変数の値は~/.config/lema/credentialsより優先されます。LEMA_WORKSPACE_ID— CI、復旧、または曖昧な場合の互換性のために、明示的な対象を検証します。通常の Git 管理リポジトリでは設定しないでください。
サブコマンドとフラグ
init [dir]— リポジトリを記録用に設定します。サーバーを.mcp.jsonに登録し、管理対象の記録プロトコルブロックをAGENTS.mdに追記して、3つのフック(コミットのリマインダー、依存関係マニフェストの編集時に表示するnudge記録プロンプト、再オープンを防ぐguardチェック)をインストールします。何度実行しても安全です。try <react|kubernetes|rust>— 読み取り専用の公開デモサーバーを設定します。demo— 一時的なディレクトリを使った約30秒の再オープン防止のウォークスルーです(リポジトリには何も書き込みません)。CLOSED の動作を確認する最も手早い方法です。guard/nudge—initがインストールするフック本体です。助言のみを行い、失敗時も処理を継続し、常に終了コード0を返します。直接呼び出す必要はありません。doctor context— 現在の対象を解決し、プライバシーに配慮した証拠、末尾をマスキングした ID、修正方法を1つだけ表示します。context link --project ID --repository ID/context unlink— Git 管理外、リモートなし、またはチェックアウト先が曖昧な場合に、検証済みのリポジトリローカルな関連付けを追加、または復旧可能な形で削除します。serve(≡--http、デフォルトは:4321)— Lema Workbench GUI 用に、エンジンを localhost HTTP 経由で提供します。これは MCP Streamable HTTP エンドポイントではありません。このリリースでサポートされる MCP トランスポートは、ローカル stdio です。
フラグを指定しない場合、lema は決定事項のディレクトリ(docs/adr、doc/adr、docs/adrs、docs/decisions、docs/architecture/decisions、architecture/decisions、adr、.adr)と openspec/ ツリーを自動検出します。--adr-dir、--repo github.com/org/name(非公開リポジトリには GITHUB_TOKEN)、--ref、--pattern、--openspec-dir、または --capture-file で明示的に指定することもできます。
ホスト型検索(任意)。 LEMA_API_URL + LEMA_API_TOKEN を設定すると、search_decisions の検索先を、意思決定レイヤー全体を対象としたホスト型ハイブリッド検索にできます(MVP では検索のみ)。記録と強制処理は常にローカルで行われます。
ライセンス
MIT。lema-mcp は、理由の記録システムである lema の無料のローカル向け導入版です。ホスト型の意思決定グラフ、チーム向けの理由共有基盤、マネージャー向けの Intelligence レイヤーについては、lema.sh をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。