code-firewall-mcp について
Code Firewall MCPは、正規化したコード構造を既知の危険パターンのブラックリストと照合し、実行ツールに渡す前にコードを検査します。ファイルやコード文字列を類似度でチェックするMCPワークフロー向けです。
主な機能
- 01tree-sitterによるコード解析
- 02コード構造の正規化
- 03Ollamaによる埋め込み
- 04ブラックリストとの類似度照合
- 05ファイルとコード文字列の検査
- 06ブラックリストと近似例の管理
活用シーン
- 01実行ツールに渡す前のコード検査
- 02既知の危険パターンの変種を遮断
- 03監査で見つかったコードの登録
- 04近似例の記録による分類調整
MCP 対応
MCPサーバーは、ファイルやコード文字列の検査、危険パターンと近似例の管理、ファイアウォール状態の確認ツールを公開します。rlm_execなどの実行ツールの前段に置けます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Code Firewall MCP
MCP(Model Context Protocol)向けの、構造的類似性に基づくコードセキュリティフィルターです。既知の危険なパターンのブラックリストとコード構造を照合し、危険なコードパターンが実行ツールに到達する前にブロックします。
仕組み
flowchart LR
A[Code<br/>file/string] --> B[Parse & Normalize<br/>tree-sitter]
B --> C[Embed<br/>Ollama]
C --> D{Similarity Check<br/>vs Blacklist}
D -->|≥ threshold| E[🚫 BLOCKED]
D -->|< threshold| F[✅ ALLOWED]
F --> G[Execution Tools<br/>rlm_exec, etc.]
style E fill:#ff6b6b,color:#fff
style F fill:#51cf66,color:#fff
style D fill:#339af0,color:#fff
- 解析 tree-sitterを使用してコードを具象構文木(CST)に解析します
- 正規化 識別子とリテラルを取り除き、構造の骨格を作成します
- 埋め込み Ollamaを通じて正規化した構造をベクトル化します
- 照合 ChromaDB内のブラックリスト登録済みパターンと比較します
- 類似度がしきい値を超えた場合はブロックし、それ以外は許可します
重要なポイント
os.system("rm -rf /")やos.system("ls")のようなコードパターンは、構造が同一です。固有のコマンドや識別子を正規化で取り除くことで、具体的な引数にかかわらず危険なパターンを検出できます。
セキュリティ上重要な識別子は正規化の際も保持されます(例:eval、exec、os、system、subprocess、Popen、shell)。これにより、埋め込み表現で危険なパターンを判別できるようにします。
インストール
クイックスタート
オプション 1:PyPI(推奨)
uvx code-firewall-mcp
# or
pip install code-firewall-mcp
オプション 2:Claude Desktop のワンクリックインストール
Releasesから.mcpbをダウンロードし、ダブルクリックしてインストールします。
オプション 3:ソースからインストール
git clone https://github.com/egoughnour/code-firewall-mcp.git
cd code-firewall-mcp
uv sync
Claude Code / Claude Desktop への接続
~/.claude/.mcp.json(Claude Code)またはclaude_desktop_config.json(Claude Desktop)に追加します:
{
"mcpServers": {
"code-firewall": {
"command": "uvx",
"args": ["code-firewall-mcp"],
"env": {
"FIREWALL_DATA_DIR": "~/.code-firewall",
"OLLAMA_URL": "http://localhost:11434"
}
}
}
}
必要条件
- Python 3.10+(onnxruntimeとの互換性のため、3.14未満)
- Ollama(埋め込み用)
- ChromaDB(ベクトルストレージ用)
- tree-sitter(任意。より精度の高い解析に使用)
Ollama のセットアップ(埋め込み)
Code Firewallは、Apple Silicon搭載のmacOSにOllamaを自動でインストールして設定できます。インストール方法は2つあります:
方法1:Homebrewによるインストール
# 1. Check system requirements
firewall_system_check()
# 2. Install via Homebrew
firewall_setup_ollama(install=True, start_service=True, pull_model=True)
この操作で行われること:
- Homebrewを使ってOllamaをインストールします(
brew install ollama) - 管理対象のバックグラウンドサービスとしてOllamaを起動します
- 埋め込み用にnomic-embed-textモデルをダウンロードします
方法 2:直接ダウンロード(sudo 不要)
# 1. Check system
firewall_system_check()
# 2. Install via direct download - no sudo, no Homebrew
firewall_setup_ollama_direct(install=True, start_service=True, pull_model=True)
この方法で行うこと:
- https://ollama.com から Ollama をダウンロードします
~/Applications/に展開します(管理者権限は不要です)ollama serveで Ollama を起動します- nomic-embed-text モデルを取得します
手動セットアップ
# Install Ollama
brew install ollama
# or download from https://ollama.ai
# Start service
brew services start ollama
# or: ollama serve
# Pull embedding model
ollama pull nomic-embed-text
# Verify
firewall_ollama_status()
ツール
セットアップとステータスのツール
| ツール | 目的 |
|---|---|
firewall_system_check | システム要件を確認 — macOS、Apple Silicon、RAM を検証します |
firewall_setup_ollama | Homebrew 経由でインストール — 管理対象サービス、自動更新 |
firewall_setup_ollama_direct | 直接ダウンロードでインストール — sudo 不要、完全ヘッドレス |
firewall_ollama_status | Ollama の利用可能状況を確認 — 埋め込みの準備ができていることを検証します |
ファイアウォールのツール
| ツール | 目的 |
|---|---|
firewall_check | コードファイルを実行しても安全か確認します |
firewall_check_code | コード文字列を直接確認します(ファイル不要) |
firewall_blacklist | 危険なパターンをブラックリストに追加します |
firewall_record_delta | 分類器の精度向上のため、誤検知に近いバリエーションを記録します |
firewall_list_patterns | ブラックリストまたは差分コレクションのパターンを一覧表示します |
firewall_remove_pattern | ブラックリストまたは差分からパターンを削除します |
firewall_status | ファイアウォールのステータスと統計情報を取得します |
firewall_check
コードファイルを実行ツールに渡しても安全か確認します。
result = await firewall_check(file_path="/path/to/script.py")
# Returns: {allowed: bool, blocked: bool, similarity: float, ...}
firewall_check_code
コード文字列を直接確認します(ファイル不要)。
result = await firewall_check_code(
code="import os; os.system('rm -rf /')",
language="python"
)
firewall_blacklist
危険なパターンをブラックリストに追加します。
result = await firewall_blacklist(
code="os.system(arbitrary_command)",
reason="Arbitrary command execution",
severity="critical"
)
firewall_record_delta
分類器の精度向上のため、誤検知に近いバリエーションを記録します。
result = await firewall_record_delta(
code="subprocess.run(['ls', '-la'])",
similar_to="abc123",
notes="Legitimate use case for file listing"
)
firewall_list_patterns
ブラックリストまたは差分コレクションのパターンを一覧表示します。
firewall_remove_pattern
ブラックリストまたは差分からパターンを削除します。
firewall_status
ファイアウォールのステータスと統計情報を取得します。
設定
環境変数:
| 変数 | デフォルト | 説明 |
|---|---|---|
FIREWALL_DATA_DIR | /tmp/code-firewall | データ保存ディレクトリ |
OLLAMA_URL | http://localhost:11434 | Ollama サーバーの URL |
EMBEDDING_MODEL | nomic-embed-text | Ollama の埋め込みモデル |
SIMILARITY_THRESHOLD | 0.85 | ブロックするしきい値(0~1) |
NEAR_MISS_THRESHOLD | 0.70 | 誤検知に近いものを記録するしきい値 |
使用パターン
massive-context-mcp の前段フィルター
コードを rlm_exec に渡す前に、code-firewall-mcp をゲートキーパーとして使用します。
# 1. Check code safety
check = await firewall_check_code(user_code)
if check["blocked"]:
print(f"BLOCKED: {check['reason']}")
return
# 2. If allowed, proceed with execution
result = await rlm_exec(code=user_code, context_name="my-context")
massive-context-mcp との統合
ファイアウォール統合を有効にして massive-context-mcp をインストールします。
pip install massive-context-mcp[firewall]
有効にすると、rlm_exec は実行前にファイアウォールを使ってコードを自動的に確認します。
ブラックリストの構築
ブラックリストは使用するにつれて拡充されます。
- 初期シード:既知の危険なパターンを追加します
- 監査フィードバック:
rlm_auto_analyzeでセキュリティ上の問題が見つかったら、パターンを追加します - 差分の精緻化:誤検知に近いものを記録し、分類境界を改善します
# After security audit finds issues
await firewall_blacklist(
code=dangerous_code,
reason="Command injection via subprocess",
severity="critical"
)
構造の正規化
flowchart TD
subgraph Input
A1["os.system('rm -rf /')"]
A2["os.system('ls -la')"]
A3["os.system(user_cmd)"]
end
subgraph Normalization
B[Strip literals & identifiers<br/>Preserve security keywords]
end
subgraph Output
C["os.system('S')"]
end
A1 --> B
A2 --> B
A3 --> B
B --> C
style C fill:#ff922b,color:#fff
正規化処理では、以下を削除します。
- 識別子:
my_var→_(セキュリティ上重要なものを除く) - 文字列リテラル:
"hello"→"S" - 数値:
42→N - コメント:すべて削除します
保持される識別子(パターンマッチングの精度向上のため):
eval、exec、compile、__import__os、system、popen、subprocess、Popen、shellopen、read、write、socket、connectgetattr、setattr、__globals__、__builtins__- その他、セキュリティ上重要な名前……
例:
# Original
subprocess.run(["curl", url, "-o", output_file])
# Normalized (preserves 'subprocess' and 'run')
subprocess.run(["S", _, "S", _])
subprocess.run(["curl", ...]) と subprocess.run(["wget", ...]) はどちらも同じ構造に正規化されるため、一方をブラックリストに登録すると、もう一方も検出できます。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。