🚀 Code Lens MCP Server
Google Geminiを利用した自動コードレビュー、分析、およびドキュメント生成のためのMCPサーバーです。
🚀 クイックスタート
必要条件
- Node.js >= 24
- Gemini APIキー (
GEMINI_API_KEY または GOOGLE_API_KEY)
設定例
{
"mcpServers": {
"code-lens": {
"command": "npx",
"args": ["-y", "@j0hanz/code-lens-mcp@latest"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}
Dockerを使用する場合
docker run -i --rm -e GEMINI_API_KEY="your-api-key" ghcr.io/j0hanz/code-lens
または、Docker Composeを使用する場合:
GEMINI_API_KEY=your-api-key docker compose up
✨ 主な機能
- PRレビューパイプライン — 差分を生成し、影響を評価し、破壊的なAPI変更を検出し、マージ推奨事項付きのレビュー要約を生成します。
- ファイル分析 — 任意のソースファイルを読み込んで、リファクタリングの提案、コードの悪臭検出、ドキュメント生成、および自然言語での質問応答を行います。
- ロジック検証 — Geminiのコード実行サンドボックスを使用してアルゴリズムを検証します。
- 構造化出力 — すべてのツールは、Zod v4出力スキーマを介して検証済みのJSONを返します。
- ウェブ検索 — Google Search with Groundingを使用して最新の情報を取得します。
- タスクライフサイクルサポート —
load_file を除くすべてのツールは、ポーリング、キャンセル、および進捗更新を伴うMCPタスクで実行できます。
📦 インストール
各クライアントでのインストール方法
VS Code
{
"servers": {
"code-lens": {
"command": "npx",
"args": ["-y", "@j0hanz/code-lens-mcp@latest"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}
または、CLIを介してインストールする場合:
code --add-mcp '{"name":"code-lens","command":"npx","args":["-y","@j0hanz/code-lens-mcp@latest"]}'
詳細については、VS Code MCPドキュメント を参照してください。
VS Code Insiders
{
"servers": {
"code-lens": {
"command": "npx",
"args": ["-y", "@j0hanz/code-lens-mcp@latest"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}
または、CLIを介してインストールする場合:
code-insiders --add-mcp '{"name":"code-lens","command":"npx","args":["-y","@j0hanz/code-lens-mcp@latest"]}'
詳細については、VS Code Insiders MCPドキュメント を参照してください。
Cursor
{
"mcpServers": {
"code-lens": {
"command": "npx",
"args": ["-y", "@j0hanz/code-lens-mcp@latest"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}
詳細については、Cursor MCPドキュメント を参照してください。
その他のクライアント
他のクライアント(Visual Studio、Goose、LM Studioなど)のインストール方法もREADMEに記載されています。詳細は各クライアントのMCPドキュメントを参照してください。
💻 使用例
PRレビューパイプライン
generate_diff を呼び出して、未ステージまたはステージされた変更をキャプチャします。
analyze_pr_impact を実行して、影響の重大度と破壊的な変更を評価します。
generate_review_summary を実行して、リスク評価とマージ推奨事項を生成します。
detect_api_breaking_changes を実行して、公開APIの破壊的な変更をチェックします。
generate_test_plan を実行して、優先順位付けされたテストケースを生成します。
単一ファイル分析
load_file を呼び出して、ソースファイルをキャッシュします。
refactor_code を実行して、構造的な改善提案を取得します。
detect_code_smells を実行して、Fowler分類法に基づくコードの悪臭を検出します。
generate_documentation を実行して、JSDoc/TSDocスタブを生成します。
ask_about_code を使用して、キャッシュされたファイルに関する自然言語の質問応答を行います。
verify_logic を使用して、コード実行によりアルゴリズムを検証します。
パフォーマンス監査
- パフォーマンスに敏感な変更に対して
generate_diff を呼び出します。
analyze_time_space_complexity を実行して、Big-Oの劣化を検出します。
調査
web_search を使用して、Google Search with Groundingを介して最新のドキュメントまたはAPIリファレンスを取得します。
📚 ドキュメント
アーキテクチャ
[MCP Client]
│
│ Transport: stdio
▼
[MCP Server: code-lens]
│ Entry: src/index.ts → src/server.ts
│
├── initialize / initialized (lifecycle handshake)
│
├── tools/call ──────────────────────────────────────────────
│ │
│ │ Diff-based tools (require generate_diff first):
│ ├── [generate_diff] Sync — capture git diff
│ ├── [analyze_pr_impact] Flash — severity & impact
│ ├── [generate_review_summary] Flash — risk & merge rec
│ ├── [generate_test_plan] Flash — test cases
│ ├── [analyze_time_space_complexity] Flash — Big-O analysis
│ ├── [detect_api_breaking_changes] Flash — API breakage
│ │
│ │ File-based tools (require load_file first):
│ ├── [load_file] Sync — cache source file
│ ├── [refactor_code] Flash — refactoring
│ ├── [detect_code_smells] Flash — smell detection
│ ├── [generate_documentation] Flash — doc stubs
│ ├── [ask_about_code] Flash — Q&A
│ ├── [verify_logic] Flash — code execution
│ │
│ │ Standalone:
│ └── [web_search] Flash — Google Search
│
├── resources/read ──────────────────────────────────────────
│ ├── [internal://instructions] Server usage guide
│ ├── [internal://tool-catalog] Tool reference
│ ├── [internal://workflows] Workflow sequences
│ ├── [internal://server-config] Runtime config
│ ├── [internal://tool-info/{name}] Per-tool details
│ ├── [internal://diff/current] Cached diff (text/x-patch)
│ └── [internal://file/current] Cached source file
│
├── prompts/get ─────────────────────────────────────────────
│ ├── [get-help] Full server instructions
│ ├── [review-guide] Tool + focus area workflow
│ ├── [select-workflow] Pipeline by change type
│ ├── [analyze-file] File analysis pipeline
│ └── [tool-chain] Tool prerequisite chain
│
└── Capabilities: structured output, tool annotations, notifications
リクエストライフサイクル
[Client] -- initialize {protocolVersion, capabilities} --> [Server]
[Server] -- {protocolVersion, capabilities, serverInfo} --> [Client]
[Client] -- notifications/initialized --> [Server]
[Client] -- tools/call {name, arguments} --> [Server]
[Server] -- notifications/progress {token, progress, total} --> [Client]
[Server] -- {content, structuredContent, isError?} --> [Client]
タスクライフサイクル
generate_diff と load_file は同期のみです。その他のすべてのツールは taskSupport: optional を宣言しています。
- リクエスターはタスクTTLを指定できます。サーバーはその値を最大
MAX_TASK_TTL_MS まで使用し、指定されない場合は TASK_TTL_MS にフォールバックします。
- キャンセルされたタスクは
cancelled として終了し、tasks/result はキャンセル形状のツール結果を返します。
MCPサーフェス
ツール
| ツール |
説明 |
前提条件 |
モデル |
generate_diff |
gitの差分(未ステージ/ステージ)をキャプチャし、サーバー側でキャッシュします。 |
— |
Sync |
analyze_pr_impact |
重大度、カテゴリ、破壊的な変更、ロールバックの複雑さを評価します。 |
generate_diff |
Flash |
generate_review_summary |
PRの要約、リスク評価、マージ推奨事項を生成します。 |
generate_diff |
Flash |
generate_test_plan |
優先順位付けされたテストケースとカバレッジガイダンスを生成します。 |
generate_diff |
Flash |
analyze_time_space_complexity |
Big-O複雑度分析と劣化検出を行います。 |
generate_diff |
Flash |
detect_api_breaking_changes |
破壊的なAPI/インターフェースの変更を検出します。 |
generate_diff |
Flash |
load_file |
分析ツール用にソースファイルをキャッシュします。 |
— |
Sync |
refactor_code |
複雑さ、重複、命名、グルーピングの提案を行います。 |
load_file |
Flash |
detect_code_smells |
構造的なコードの悪臭(Fowler分類法)を検出します。 |
load_file |
Flash |
generate_documentation |
公開エクスポートのためのJSDoc/TSDoc/ドキュメントスタブを生成します。 |
load_file |
Flash |
ask_about_code |
キャッシュされたファイルに関する自然言語の質問応答を行います。 |
load_file |
Flash |
verify_logic |
Geminiのコード実行サンドボックスを介してアルゴリズムを検証します。 |
load_file |
Flash |
web_search |
Google Search with Groundingを使用します。 |
— |
Flash |
リソース
| URI |
説明 |
MIME |
internal://instructions |
サーバーの完全な使用手順 |
text/markdown |
internal://tool-catalog |
ツールのリファレンス: モデル、パラメータ、出力、データフロー |
text/markdown |
internal://workflows |
推奨されるワークフローとツールシーケンス |
text/markdown |
internal://server-config |
ランタイムの設定と制限 |
text/markdown |
internal://tool-info/{toolName} |
各ツールの詳細(パラメータ化) |
text/markdown |
internal://diff/current |
最も最近生成された差分 |
text/x-patch |
internal://file/current |
最も最近読み込まれたソースファイル |
text/plain |
プロンプト
| プロンプト |
説明 |
get-help |
サーバーの完全な使用手順: 機能、ツール、リソース、制約条件 |
review-guide |
特定のツールと焦点領域のワークフローガイド |
select-workflow |
変更タイプに基づく推奨ツールパイプライン |
analyze-file |
単一ファイル分析のための目標ベースのツールパイプライン |
tool-chain |
与えられたツールの完全な前提条件チェーン |
MCP機能
ツールアノテーション
すべてのツールはMCPツールアノテーションを公開します。
| アノテーション |
使用有無 |
readOnlyHint |
はい |
destructiveHint |
はい |
idempotentHint |
はい |
openWorldHint |
はい |
構造化出力
すべてのGeminiベースのツールは、Zod v4出力スキーマを使用して、テキスト content とともに検証済みの structuredContent を返します。
設定
| 変数 |
デフォルト |
説明 |
GEMINI_API_KEY |
— |
必須。 Gemini APIキー。GOOGLE_API_KEY にフォールバックします。 |
GEMINI_MODEL |
gemini-3-flash-preview |
すべてのツールのデフォルトGeminiモデルを上書きします。 |
MAX_DIFF_CHARS |
120000 |
文字数での最大差分サイズ。 |
MAX_CONCURRENT_CALLS |
10 |
最大同時Gemini API呼び出し数。 |
MAX_CONCURRENT_BATCH_CALLS |
2 |
最大同時バッチGemini呼び出し数。 |
MAX_CONCURRENT_CALLS_WAIT_MS |
2000 |
同時実行セマフォの待機タイムアウト。 |
TASK_TTL_MS |
300000 |
リクエストで task.ttl が指定されない場合のデフォルトのタスク結果保持時間(ミリ秒)。 |
MAX_TASK_TTL_MS |
3600000 |
リクエストで提供されるタスクTTLの上限。0 に設定すると上限を削除します。 |
GEMINI_BATCH_MODE |
off |
Geminiバッチモードを有効にします。 |
GEMINI_HARM_BLOCK_THRESHOLD |
BLOCK_NONE |
安全フィルターのしきい値(BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE, BLOCK_LOW_AND_ABOVE)。 |
GEMINI_DIFF_CACHE_ENABLED |
false |
大きな差分に対するGeminiコンテキストキャッシュを有効にします。 |
GEMINI_DIFF_CACHE_TTL_S |
3600 |
キャッシュのTTL(秒)(キャッシュが有効な場合)。 |
CLIフラグ
npx @j0hanz/code-lens-mcp@latest --model gemini-2.5-flash --max-diff-chars 200000
| フラグ |
環境変数の同等物 |
--model, -m |
GEMINI_MODEL |
--max-diff-chars |
MAX_DIFF_CHARS |
🔧 技術詳細
セキュリティ
| 制御 |
状態 |
| 入力検証 |
すべてのツール入力に対するZod v4スキーマ検証 |
| パスの安全性 |
load_file はパスをワークスペースルートに制限します |
| Stdoutの安全性 |
ログはstderrに出力されます。stdoutはMCPプロトコルに予約されています |
| 非ルートコンテナ |
Dockerは専用の mcp ユーザーとして実行されます |
開発
npm install
npm run build
npm run dev
npm run dev:run
npm run start
npm run type-check
npm run lint
npm run test
npm run format
npm run inspector
npm run knip
ビルドとリリース
- CI:
.github/workflows/release.yml
- Docker:
node:24-alpine を使用したマルチステージビルド (Dockerfile)
- Docker Compose:
docker-compose.yml
- npm:
@j0hanz/code-lens-mcp として公開されています。
トラブルシューティング
- APIキーが不足している場合: 環境変数またはクライアント設定の
env ブロックで GEMINI_API_KEY または GOOGLE_API_KEY を設定してください。
- "E_NO_DIFF" エラーが発生した場合: 差分ベースのレビューツールを実行する前に
generate_diff を呼び出してください。
- "E_NO_FILE" エラーが発生した場合: ファイル分析ツールを実行する前に
load_file を呼び出してください。
- 大きな差分が切り捨てられた場合:
MAX_DIFF_CHARS を増やしてください(デフォルト: 120,000文字)。
- Stdoutにノイズがある場合: 他のプロセスがstdoutに書き込まないようにしてください。サーバーはstdioトランスポートを使用しています。
クレジット
📄 ライセンス
MITライセンス。詳細は LICENSE を参照してください。
プルリクエスト を通じた貢献を歓迎します。