Skip to main content
Glama
sudo-hrmn

MCP-Gatekeeper

by sudo-hrmn

๐Ÿ›ก๏ธ MCP-Gatekeeper

Runtime Security Gateway & FastMCP Server for Model Context Protocol (MCP) Clients and Upstream Servers.

MCP-Gatekeeper is a defense-in-depth security proxy and FastMCP server that inspects 100% of tool-list refreshes and tool responses, preventing tool poisoning, response-borne prompt injection (e.g. MCPoison / CurXecute attacks), silent tool schema modification ("rug pulls"), SSRF exploits, and unauthorized high-risk operations.

Designed for instant deployment to fastmcp.cloud or local execution via fastmcp CLI.


๐Ÿš€ Key Features & Capabilities

  1. FastMCP Cloud Ready & Serverless Storage: Single-file FastMCP entry point (server.py) deployable directly to fastmcp.cloud with dynamic OS temp directory SQLite resolution (tempfile.gettempdir()).

  2. Rug-Pull Schema Protection: Connect-time tool schema baseline capture; diffs 100% of tool-list refreshes against approved baselines and blocks unapproved tool changes by default.

  3. SSRF Upstream Protection: Validates upstream URLs against forbidden hostnames, loopbacks (127.0.0.1, localhost), internal subnets (10.x.x.x, 192.168.x.x), and cloud metadata IPs (169.254.169.254).

  4. Two-Stage Response Injection Scanner:

    • Stage 1: High-performance rule-based prefilter targeting known instruction hijacking, exfiltration traps, and shell injection.

    • Stage 2: Deep semantic LLM classification utilizing any OpenAI-compatible API (LLM_API_KEY from .env, supporting OpenAI, Grok, DeepSeek, Anthropic, or local Ollama).

  5. Fail-Closed Security Design: Any classifier failure, network timeout, or unhandled exception defaults to blocking the payload and creating a security incident.

  6. Admin Authentication & Authorization Gate: Holds high-risk actions pending human approval (resolve_human_approval); requires valid admin_key matching ADMIN_API_KEY.

  7. Tamper-Evident Audit Trail: Every call, response, policy verdict, and admin decision is stored with SHA-256 hash chaining and hard query limits to prevent DoS attacks.

  8. Auth-Protected Admin Dashboard: Live HTML Admin Dashboard served directly via FastMCP at /dashboard?admin_key=YOUR_KEY.


Related MCP server: guardrails-mcp-server

๐Ÿ› ๏ธ Architecture Overview

High-Level System Architecture

flowchart TD
    subgraph Clients["AI Clients & Interfaces"]
        C1["Claude Desktop"]
        C2["Claude Code CLI"]
        C3["Google Antigravity"]
        C4["ChatGPT / Custom App"]
    end

    subgraph Gateway["๐Ÿ›ก๏ธ MCP-Gatekeeper (FastMCP Cloud)"]
        direction TB
        S["FastMCP Server\nserver.py"]
        
        subgraph Engine["Security & Policy Engines"]
            B["Schema Baseline Manager\n(Rug-Pull Detector)"]
            SSRF["SSRF Validator\n(Private IP / Metadata Shield)"]
            POL["Policy Engine\n(Allow/Block/Confirm/Rate-Limit)"]
            CONF["Confirmation Manager\n(Auth-Gated Approval)"]
            
            subgraph Classifier["Two-Stage Response Classifier"]
                R1["Stage 1: Rule Prefilter\n(Fast Pattern Match)"]
                R2["Stage 2: LLM Classifier\n(OpenAI / Grok / DeepSeek / Ollama)"]
            end
        end

        UI["Admin Control Center UI\n/dashboard?admin_key=..."]
    end

    subgraph External["Upstream Services & AI APIs"]
        UP["Upstream MCP Servers\n(GitHub, SQL, Web Search, APIs)"]
        LLM["LLM Classifier API\n(Groq / OpenAI / DeepSeek / Ollama)"]
    end

    subgraph Storage["Datastore & Audit"]
        DB[("SQLite DB (tempdir dynamic)")]
        AUDIT[("Tamper-Evident Audit Log\n(SHA-256 Hash Chained)")]
    end

    Clients -->|MCP SSE / stdio / JSON-RPC| S
    S --> SSRF
    S --> B
    S --> POL
    POL -->|Held Action| CONF
    POL -->|Allowed| UP
    UP -->|Tool Response| Classifier
    Classifier --> R1
    R1 -->|Ambiguous / Suspicious| R2
    R2 -->|API Query| LLM
    Classifier -->|Clean / Safe| Clients
    Classifier -->|Malicious / Timeout| Block["Fail-Closed Block Response"]

    UI -->|Manage Policies & Baselines| DB
    Engine -->|Record Calls & Incidents| DB
    Engine -->|Write Chain Record| AUDIT

Detailed Execution Flow & Security Pipeline

sequenceDiagram
    autonumber
    actor Client as AI Agent Client
    participant FastMCP as FastMCP Server (server.py)
    participant SSRF as SSRF & URL Shield
    participant Base as Schema Baseline Manager
    participant Policy as Policy Engine
    participant Gate as Human Confirmation Gate
    participant Admin as Admin Dashboard (/dashboard)
    participant Upstream as Upstream MCP Server
    participant Stage1 as Stage 1: Rule Prefilter
    participant Stage2 as Stage 2: LLM Classifier
    participant Audit as SHA-256 Audit Log

    Client->>FastMCP: 1. Request check_tool_security / register_upstream
    FastMCP->>SSRF: 2. Validate URL safety (Block Private/Metadata IPs)
    alt Invalid Scheme or SSRF IP Target
        SSRF-->>FastMCP: SSRF Risk Detected
        FastMCP-->>Client: Return Error: Upstream URL rejected
    end
    
    FastMCP->>Base: 3. Check tool baseline schema status
    alt Schema modified or unapproved (Rug-Pull)
        Base-->>FastMCP: Flagged schema mismatch
        FastMCP->>Audit: Log Rug-Pull Incident
        FastMCP-->>Client: Return Error: Tool schema unapproved
    else Approved Baseline
        Base-->>FastMCP: Baseline OK
    end

    FastMCP->>Policy: 4. Evaluate Call Policy
    alt Policy = Blocked / Rate-Limited
        Policy-->>FastMCP: Action Blocked
        FastMCP-->>Client: Return Error: Blocked by security policy
    else Policy = Held for Confirmation
        Policy->>Gate: 5. Create Pending Approval Request
        Gate->>Admin: Notify Admin on Dashboard
        Admin->>Gate: 6. Admin Approves / Denies (with admin_key)
        alt Denied, Missing Key, or Timed Out (Fail-Closed)
            Gate-->>FastMCP: Action Denied
            FastMCP-->>Client: Return Error: High-risk action denied
        else Approved
            Gate-->>FastMCP: Action Approved
        end
    end

    FastMCP->>Stage1: 7. Scan Response (Stage 1 Rule Prefilter)
    alt Stage 1 Matches Known Attack Vector
        Stage1-->>FastMCP: Verdict: Malicious
        FastMCP->>Audit: Record Security Incident & Audit Log
        FastMCP-->>Client: Return Safe Error: Response blocked
    else Stage 1 Suspicious / Ambiguous
        FastMCP->>Stage2: 8. Escalate to Stage 2 LLM Classifier
        Stage2-->>FastMCP: Verdict & Reason (or Fail-Closed on Error)
        alt Verdict = Malicious / Error
            FastMCP->>Audit: Record Security Incident & Audit Log
            FastMCP-->>Client: Return Safe Error: Response blocked
        else Verdict = Clean
            FastMCP->>Audit: Write Hash-Chained Audit Entry
            FastMCP-->>Client: 9. Return Verified Clean Response
        end
    else Stage 1 Clean
        FastMCP->>Audit: Write Hash-Chained Audit Entry
        FastMCP-->>Client: 9. Return Verified Clean Response
    end

๐Ÿ”‘ Environment Configuration

When deploying to FastMCP Cloud, configure these environment variables in your FastMCP Cloud Project Settings (or via .env for local execution):

# LLM Security Classifier API Key (Supports Groq, OpenAI, DeepSeek, Ollama)
LLM_API_KEY="your-llm-api-key-here"
LLM_API_URL="https://api.groq.com/openai/v1/chat/completions"
LLM_MODEL="allam-2-7b"

ADMIN_API_KEY="trust-gateway-admin-key-secret"
DATABASE_URL="sqlite+aiosqlite:///mcp_trust_gateway.db"
FAIL_CLOSED=true
CLASSIFIER_TIMEOUT_SECONDS=10.0
CONFIRMATION_TIMEOUT_SECONDS=60

โ˜๏ธ Live Deployment & Client Integration

1. FastMCP Cloud Deployment

This project is deployed live on FastMCP Cloud:

  • Live SSE Endpoint: https://mcp-gatekeeper-1.fastmcp.app/mcp

  • Admin Dashboard: https://mcp-gatekeeper-1.fastmcp.app/dashboard?admin_key=trust-gateway-admin-key-secret


2. Client Configurations

๐Ÿค– Google Antigravity & Claude Desktop (mcp_config.json)

{
  "mcpServers": {
    "mcp-gatekeeper": {
      "url": "https://mcp-gatekeeper-1.fastmcp.app/mcp"
    }
  }
}

๐Ÿ’ป Claude Code (CLI)

claude mcp add mcp-gatekeeper --transport sse \
  https://mcp-gatekeeper-1.fastmcp.app/mcp

๐Ÿงช Testing & Security Verification

Run the full pytest suite:

.venv/bin/pytest -v

Metrics Achieved

  • ๐Ÿ“Š Passed Unit & Security Tests: 12 / 12 passed

  • ๐Ÿ“Š Adversarial Catch Rate: 100%

  • ๐Ÿ“Š False Positive Rate: 0%


๐Ÿ“ Key Security Features & Design Decisions

  1. Fail-Closed Default: All ambiguous responses, classifier timeouts, network issues, or unapproved schema modifications fail closed (block action and alert admins).

  2. SSRF Prevention: All upstream URLs are sanitized to prevent internal port scanning and cloud metadata exfiltration (169.254.169.254).

  3. Auth-Gated Control Operations: Dashboard and approval actions (resolve_human_approval) require ADMIN_API_KEY verification.

  4. Credential Redaction: Secrets, API tokens, and passwords matching sensitive keys are automatically redacted before saving to audit storage.

  5. Stage 1 Fast Filter + LLM Escalation: Known malicious patterns are intercepted immediately by Stage 1, eliminating latency and API overhead for obvious attacks while leveraging an LLM for complex semantic analysis.

  6. Tamper-Evident Hash Chaining: Every log entry computes SHA256(actor | action | target | details | prev_hash | timestamp) ensuring non-repudiation and detection of log tampering.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Security gateway for MCP tool calls. Sits between your LLM client and MCP servers, enforcing per-tool policies (allow/block/approve/read-only), logging every call, and pausing dangerous operations for human approval in terminal or Slack.
    4 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for AI agent security guardrails. Provides input validation, prompt injection detection, PII redaction, output filtering, policy enforcement, rate limiting, and comprehensive audit logging.
    42 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A defensive gateway and firewall for AI agents using MCP servers, scanning tool calls, responses, and manifests for prompt injection, secrets, dangerous commands, and drift before allowing execution.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Governed MCP gateway that lets AI agents call tools with policy enforcement, prompt-injection screening, a kill-switch, and tamper-evident signed audit logs.
    Apache 2.0