mcpField
C
code-firewall-mcp

code-firewall-mcp

ローカル
github.com/egoughnourセキュリティ041 週間前に更新

code-firewall-mcp について

Code Firewall MCPは、正規化したコード構造を既知の危険パターンのブラックリストと照合し、実行ツールに渡す前にコードを検査します。ファイルやコード文字列を類似度でチェックするMCPワークフロー向けです。

主な機能

  1. 01tree-sitterによるコード解析
  2. 02コード構造の正規化
  3. 03Ollamaによる埋め込み
  4. 04ブラックリストとの類似度照合
  5. 05ファイルとコード文字列の検査
  6. 06ブラックリストと近似例の管理

活用シーン

  1. 01実行ツールに渡す前のコード検査
  2. 02既知の危険パターンの変種を遮断
  3. 03監査で見つかったコードの登録
  4. 04近似例の記録による分類調整

MCP 対応

MCPサーバーは、ファイルやコード文字列の検査、危険パターンと近似例の管理、ファイアウォール状態の確認ツールを公開します。rlm_execなどの実行ツールの前段に置けます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
pypicode-firewall-mcp0.7.0
mcpbcode-firewall-mcp.mcpb

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Code Firewall MCP

PyPI Claude Desktop Tests Release Python 3.10+ License: MIT

Top Language Code Size Last Commit Repository Size

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
  1. 解析 tree-sitterを使用してコードを具象構文木(CST)に解析します
  2. 正規化 識別子とリテラルを取り除き、構造の骨格を作成します
  3. 埋め込み Ollamaを通じて正規化した構造をベクトル化します
  4. 照合 ChromaDB内のブラックリスト登録済みパターンと比較します
  5. 類似度がしきい値を超えた場合はブロックし、それ以外は許可します

重要なポイント

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_ollamaHomebrew 経由でインストール — 管理対象サービス、自動更新
firewall_setup_ollama_direct直接ダウンロードでインストール — sudo 不要、完全ヘッドレス
firewall_ollama_statusOllama の利用可能状況を確認 — 埋め込みの準備ができていることを検証します
ファイアウォールのツール
ツール目的
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_URLhttp://localhost:11434Ollama サーバーの URL
EMBEDDING_MODELnomic-embed-textOllama の埋め込みモデル
SIMILARITY_THRESHOLD0.85ブロックするしきい値(0~1)
NEAR_MISS_THRESHOLD0.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 は実行前にファイアウォールを使ってコードを自動的に確認します。

ブラックリストの構築

ブラックリストは使用するにつれて拡充されます。

  1. 初期シード:既知の危険なパターンを追加します
  2. 監査フィードバック:rlm_auto_analyze でセキュリティ上の問題が見つかったら、パターンを追加します
  3. 差分の精緻化:誤検知に近いものを記録し、分類境界を改善します
# 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、shell
  • open、read、write、socket、connect
  • getattr、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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。