Code Firewall Mcp

io.github.egoughnour由 GitHub 帳號 egoughnour 發布v0.7.0更新於 Oct 24, 2026

Structural similarity-based code filter. Stops malicious code pattern reaching execution tools.

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

一個本機 MCP 伺服器,在程式碼交給執行工具之前,用危險結構模式黑名單對程式碼進行篩檢。

可以做什麼
檢查程式碼檔案或程式碼字串與黑名單中危險模式的相似度,回傳允許或攔截結果、相似度分數與原因。新增、列出與移除黑名單模式,並記錄近似變體以改進分類。查看防火牆狀態與統計資訊。檢查系統需求與 Ollama 可用性,並在 macOS Apple Silicon 上安裝或啟動 Ollama 及嵌入模型。
適用情境
當助理要把模型產生或使用者提供的程式碼交給執行工具時,可作為前置過濾;也適合需要不依賴具體參數、依結構辨識 shell 或 subprocess 等風險模式的場合。
執行需求
以 Python 套件(Python 3.10 以上、低於 3.14)或 Claude Desktop 安裝包形式透過 stdio 在本機執行。需要 Ollama 伺服器提供嵌入、ChromaDB 做向量儲存,tree-sitter 為選用。透過 FIREWALL_DATA_DIR、OLLAMA_URL、EMBEDDING_MODEL 與 SIMILARITY_THRESHOLD 設定;未宣告身分驗證。
安裝前請注意
安裝類工具會在機器上安裝軟體並啟動背景服務,直接下載方式還會從網際網路取得 Ollama。黑名單與近似變體工具會寫入本機資料目錄,移除模式會削弱防護。偵測基於相似度,可能漏掉危險程式碼或誤擋正常程式碼,應視為一層防護而非保證。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Code Firewall Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Code Firewall MCP

[PyPI] [Claude Desktop] [Tests] [Release] [Python 3.10+] [License: MIT]

[Top Language] [Code Size] [Last Commit] [Repository Size]

A structural similarity-based code security filter for MCP (Model Context Protocol). Blocks dangerous code patterns before they reach execution tools by comparing code structure against a blacklist of known-bad patterns.

How It Works

mermaid
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. Parse code to Concrete Syntax Tree (CST) using tree-sitter
  2. Normalize by stripping identifiers and literals → structural skeleton
  3. Embed the normalized structure via Ollama
  4. Compare against blacklisted patterns in ChromaDB
  5. Block if similarity exceeds threshold, otherwise allow

Key Insight

Code patterns like os.system("rm -rf /") and os.system("ls") have identical structure. By normalizing away the specific commands/identifiers, we can detect dangerous patterns regardless of the specific arguments used.

Security-sensitive identifiers are preserved during normalization (e.g., eval, exec, os, system, subprocess, Popen, shell) to ensure embeddings remain discriminative for dangerous patterns.

Installation

Quick Start

Option 1: PyPI (Recommended)

bash
uvx code-firewall-mcp# orpip install code-firewall-mcp

Option 2: Claude Desktop One-Click

Download the .mcpb from Releases and double-click to install.

Option 3: From Source

bash
git clone https://github.com/egoughnour/code-firewall-mcp.gitcd code-firewall-mcpuv sync

Wire to Claude Code / Claude Desktop

Add to ~/.claude/.mcp.json (Claude Code) or claude_desktop_config.json (Claude Desktop):

json
{  "mcpServers": {    "code-firewall": {      "command": "uvx",      "args": ["code-firewall-mcp"],      "env": {        "FIREWALL_DATA_DIR": "~/.code-firewall",        "OLLAMA_URL": "http://localhost:11434"      }    }  }}

Requirements

  • Python 3.10+ (< 3.14 due to onnxruntime compatibility)
  • Ollama (for embeddings)
  • ChromaDB (for vector storage)
  • tree-sitter (optional, for better parsing)

Setting Up Ollama (Embeddings)

Code Firewall can automatically install and configure Ollama on macOS with Apple Silicon. There are two installation methods:

Method 1: Homebrew Installation

python
# 1. Check system requirementsfirewall_system_check()
# 2. Install via Homebrewfirewall_setup_ollama(install=True, start_service=True, pull_model=True)

What this does:

  • Installs Ollama via Homebrew (brew install ollama)
  • Starts Ollama as a managed background service
  • Pulls nomic-embed-text model for embeddings

Method 2: Direct Download (No Sudo)

python
# 1. Check systemfirewall_system_check()
# 2. Install via direct download - no sudo, no Homebrewfirewall_setup_ollama_direct(install=True, start_service=True, pull_model=True)

What this does:

  • Downloads Ollama from https://ollama.com
  • Extracts to ~/Applications/ (no admin needed)
  • Starts Ollama via ollama serve
  • Pulls nomic-embed-text model

Manual Setup

bash
# Install Ollamabrew install ollama# or download from https://ollama.ai
# Start servicebrew services start ollama# or: ollama serve
# Pull embedding modelollama pull nomic-embed-text
# Verifyfirewall_ollama_status()

Tools

Setup & Status Tools

ToolPurpose
firewall_system_checkCheck system requirements — verify macOS, Apple Silicon, RAM
firewall_setup_ollamaInstall via Homebrew — managed service, auto-updates
firewall_setup_ollama_directInstall via direct download — no sudo, fully headless
firewall_ollama_statusCheck Ollama availability — verify embeddings are ready

Firewall Tools

ToolPurpose
firewall_checkCheck if a code file is safe to execute
firewall_check_codeCheck code string directly (no file required)
firewall_blacklistAdd a dangerous pattern to the blacklist
firewall_record_deltaRecord near-miss variants for classifier sharpening
firewall_list_patternsList patterns in blacklist or delta collection
firewall_remove_patternRemove a pattern from blacklist or deltas
firewall_statusGet firewall status and statistics

firewall_check

Check if a code file is safe to pass to execution tools.

python
result = await firewall_check(file_path="/path/to/script.py")# Returns: {allowed: bool, blocked: bool, similarity: float, ...}

firewall_check_code

Check code string directly (no file required).

python
result = await firewall_check_code(    code="import os; os.system('rm -rf /')",    language="python")

firewall_blacklist

Add a dangerous pattern to the blacklist.

python
result = await firewall_blacklist(    code="os.system(arbitrary_command)",    reason="Arbitrary command execution",    severity="critical")

firewall_record_delta

Record near-miss variants to sharpen the classifier.

python
result = await firewall_record_delta(    code="subprocess.run(['ls', '-la'])",    similar_to="abc123",    notes="Legitimate use case for file listing")

firewall_list_patterns

List patterns in the blacklist or delta collection.

firewall_remove_pattern

Remove a pattern from blacklist or deltas.

firewall_status

Get firewall status and statistics.

Configuration

Environment variables:

VariableDefaultDescription
FIREWALL_DATA_DIR/tmp/code-firewallData storage directory
OLLAMA_URLhttp://localhost:11434Ollama server URL
EMBEDDING_MODELnomic-embed-textOllama embedding model
SIMILARITY_THRESHOLD0.85Block threshold (0-1)
NEAR_MISS_THRESHOLD0.70Near-miss recording threshold

Usage Pattern

Pre-filter for massive-context-mcp

Use code-firewall-mcp as a gatekeeper before passing code to rlm_exec:

python
# 1. Check code safetycheck = await firewall_check_code(user_code)
if check["blocked"]:    print(f"BLOCKED: {check['reason']}")    return
# 2. If allowed, proceed with executionresult = await rlm_exec(code=user_code, context_name="my-context")

Integrated with massive-context-mcp

Install massive-context-mcp with firewall integration:

bash
pip install massive-context-mcp[firewall]

When enabled, rlm_exec automatically checks code against the firewall before execution.

Building the Blacklist

The blacklist grows through use:

  1. Initial seeding: Add known dangerous patterns
  2. Audit feedback: When rlm_auto_analyze finds security issues, add patterns
  3. Delta sharpening: Record near-misses to improve classification boundaries
python
# After security audit finds issuesawait firewall_blacklist(    code=dangerous_code,    reason="Command injection via subprocess",    severity="critical")

Structural Normalization

mermaid
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

The normalizer strips:

  • Identifiers: my_var → _ (except security-sensitive ones)
  • String literals: "hello" → "S"
  • Numbers: 42 → N
  • Comments: Removed entirely

Preserved identifiers (for better pattern matching):

  • eval, exec, compile, __import__
  • os, system, popen, subprocess, Popen, shell
  • open, read, write, socket, connect
  • getattr, setattr, __globals__, __builtins__
  • And more security-sensitive names...

Example:

python
# Originalsubprocess.run(["curl", url, "-o", output_file])
# Normalized (preserves 'subprocess' and 'run')subprocess.run(["S", _, "S", _])

Both subprocess.run(["curl", ...]) and subprocess.run(["wget", ...]) normalize to the same structure, so blacklisting one catches both.

License

MIT

來源:README.md,提交 8f3c2b2

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.7.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分