Code Firewall Mcp

io.github.egoughnourPublished by GitHub account egoughnourv0.7.0Updated Oct 24, 2026

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

VerifiedSTDIODesktop onlyDeveloper ToolsSecurity & Monitoring

Overview

AI-generated overview

A local MCP server that screens code against a blacklist of dangerous structural patterns before it is passed to execution tools.

What you can do
Check a code file or a raw code string for similarity to blacklisted dangerous patterns and get an allow or block result with a similarity score and reason. Add, list and remove blacklist patterns and record near-miss variants to sharpen the classifier. Read firewall status and statistics. Check system requirements and Ollama availability, and install or start Ollama with an embedding model on macOS Apple Silicon.
When to use it
Use it as a pre-filter when an assistant passes model-generated or user-supplied code to execution tools, or when you want a structural, argument-independent check for risky patterns such as shell or subprocess calls.
Requirements
Runs locally over stdio as a Python package (Python 3.10+, below 3.14) or a Claude Desktop bundle. Needs an Ollama server for embeddings, ChromaDB for vector storage, and optionally tree-sitter. Configured through FIREWALL_DATA_DIR, OLLAMA_URL, EMBEDDING_MODEL and SIMILARITY_THRESHOLD; no authentication is declared.
Before you install
The setup tools can install software and start background services on the machine, and the direct-download method fetches Ollama from the internet. Blacklist and delta tools write to the local data directory, and removing a pattern weakens protection. Detection is similarity-based, so it can miss dangerous code or block legitimate code; treat it as one layer, not a guarantee.

Installation

In SourceWeft

  1. Open Code Firewall Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

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

Source: README.md at commit 8f3c2b2

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.7.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts