codebadger は何をしますか?
🦡 codebadger は、AIエージェントやLLMに対して、Joernコードプロパティグラフ(CPG)を介してコードベースの構造とデータフローへの深くクエリ可能なアクセスを提供する、コンテナ化されたModel Context Protocol(MCP)サーバーです。
概要
codebadger は、Joern CPG(Code Property Graph)を活用して、コードベースの静的な解析を実行します。これにより、開発者は「この関数を呼び出しているのはどこか」「特定の変数のデータフローはどのようになっているか」といった複雑な質問を、自然言語または構造化されたクエリでAIに問い合わせることができます。
特徴
- コンテナ化: DockerまたはPodmanで簡単に起動でき、依存関係を気にする必要がありません。
- Joern CPG統合: コードベースをCPGに変換し、グラフベースのクエリを可能にします。
- MCP互換: Claude Code、Cursor、CodexなどのMCP対応クライアントで使用できます。
- データフロー分析: 変数や関数のデータフローを追跡し、セキュリティ脆弱性やバグを特定するのに役立ちます。
前提条件
- Docker または Podman がインストールされていること。
- 解析したいコードベースへのアクセス権があること。
- MCP対応のAIクライアント(Claude Code, Cursor, Codexなど)がセットアップされていること。
クイックスタート
# リポジトリをクローン
git clone https://github.com/Lekssays/codebadger.git
cd codebadger
# コンテナをビルドして起動
docker-compose up -d
# またはPodmanを使用する場合
podman-compose up -d
使用方法
MCPクライアントの設定
MCP対応クライアント(例: Claude Code)でcodebadgerを使用するには、以下の設定を追加します:
{
"mcpServers": {
"codebadger": {
"command": "docker",
"args": ["exec", "-i", "codebadger", "node", "/app/dist/index.js"],
"env": {}
}
}
}
サポートされるクエリ
codebadger は以下のようなクエリをサポートしています(例):
find_calls("function_name"): 特定の関数を呼び出しているすべての箇所を検索data_flow("variable_name"): 特定の変数のデータフローを追跡get_dependencies(): コードベース全体の依存関係グラフを取得get_ast("file_path"): 指定したファイルの抽象構文木(AST)を取得
設定
環境変数による設定:
| 変数名 | 説明 | デフォルト値 |
|---|---|---|
MCP_PORT | MCPサーバーのポート | 8080 |
JOERN_PORT | Joernサービスのポート | 9000 |
CODEBASE_PATH | 解析するコードベースのパス | /codebase |
LOG_LEVEL | ログレベル | info |
アーキテクチャ
+------------------+ +------------------+ +------------------+
| MCP Client | <--> | codebadger MCP | <--> | Joern CPG Engine |
| (Claude/Cursor) | | Server | | |
+------------------+ +------------------+ +------------------+
^ ^
| |
+------+------+ +------+------+
| Codebase | | CPG Graph |
| (files) | | (Neo4j) |
+-------------+ +-------------+
開発
ローカルでの実行
# 依存関係のインストール
npm install
# ビルド
npm run build
# テストの実行
npm test
貢献
プルリクエストは大歓迎です。大きな変更を加える場合は、まずイシューを開いて議論してください。
ライセンス
MIT