Skip to content
Conduit

mcp server

mcpsec

An AI-driven dynamic protocol fuzzer for the Model Context Protocol (MCP). Prove runtime exploitability by discovering state violations, transport crashes, and application-layer logic flaws (SSRF, LFI

manthanghasadiya/mcpseccommunitylistedunreviewed

Set up

Runs on your computer. Pick your agent and operating system.

Before you start

  • uv (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "mcpsec": {
      "command": "uvx",
      "args": [
        "mcpsec"
      ]
    }
  }
}

same format Cursor, GitHub Copilot CLI, Junie, JetBrains AI Assistant, Augment (Auggie CLI), Factory Droid, Kiro, Devin CLI +12

Values in angle brackets are placeholders. Restart Claude Desktop after editing its config.Claude Desktop docs

README

synced Oct 17, 2026

mcpsec

Security scanner and protocol fuzzer for MCP servers

License: MIT Python 3.11+ PyPI CI CVEs Bugs Fixed Bugs Reported Fuzz Cases Sink Patterns Semgrep Rules

Installation • Quick Start • Audit v3 • Scanners • Fuzzing


Why mcpsec?

MCP (Model Context Protocol) connects AI agents to external tools. Claude Desktop, Cursor, VS Code Copilot, and every major AI IDE uses it. Security is often an afterthought.

Most MCP security tools do static analysis. mcpsec connects to live servers and proves exploitation.


Real Bugs Found

TargetVulnerabilitySeverityStatus
mobile-mcpURL Scheme Injection (CVE-2026-35394, CVSS 8.3) - Arbitrary code execution via unsanitized tool inputHighFixed - PR #299
MCP Python SDKClosedResourceError DoS (invalid UTF-8)HighIssue #2328 - Fix in PR #2334
radare2-mcpArbitrary RCE via shell escape (!) in run_command/run_javascriptCriticalIssue #45 - Fixed in commit 482cde6
radare2-mcpMultiple SIGSEGV via params type confusionHighIssue #42
radare2-mcpSIGSEGV in initialize via params type confusionHighIssue #52
MCP Python SDKUnicodeDecodeError DoSMediumFixed - PR #2302
mcp-server-fetch61 crash cases, exception handling DoSHighIssue #3359
mcp-server-git61 crash casesHighIssue #3359
MCP TypeScript SDKEPIPE crashMediumIssue #1564
MCP TypeScript SDKInteger overflow DoS (MAX_SAFE_INTEGER+1)MediumIssue #1765

More findings under responsible disclosure.


Installation

pip install mcpsec

For AI-powered features:

pip install mcpsec[ai]

Nix

nix-shell   # basic
nix-shell --arg withAll true   # all optional deps

Quick Start

Runtime Scanning

# Scan via stdio
mcpsec scan --stdio "npx @modelcontextprotocol/server-filesystem /tmp"

# Scan via HTTP with auth
mcpsec scan --http http://localhost:8080/mcp -H "Authorization: Bearer TOKEN"

# Auto-discover and scan all local servers
mcpsec scan --auto

# Enumerate attack surface
mcpsec info --stdio "python my_server.py"

Static Analysis (Audit v3)

# Local source - pattern-based + AI reachability
mcpsec audit --path ./my-mcp-server

# GitHub repository
mcpsec audit --github https://github.com/user/mcp-server

# With LLM-powered taint analysis
mcpsec audit --github https://github.com/user/mcp-server --ai

# Known vulnerable servers
mcpsec audit --github https://github.com/radareorg/radare2-mcp

Protocol Fuzzing

# Standard fuzzing (~200 cases)
mcpsec fuzz --stdio "python my_server.py"

# High intensity (~800 cases)
mcpsec fuzz --stdio "python my_server.py" --intensity high

# AI-powered payload generation
mcpsec fuzz --stdio "python my_server.py" --ai

Advanced

# SQL Injection scanner with DB fingerprinting
mcpsec sql --stdio "npx @benborla29/mcp-server-mysql" --fingerprint

# Dangerous tool chain detection
mcpsec chains --stdio "npx @example/complex-server"

# Interactive exploitation REPL
mcpsec exploit --stdio "npx vulnerable-server"

# Rogue server for client-side testing
mcpsec rogue-server --port 9999 --attack all

Static Analysis - Audit v3

New in v2.7.1 - Complete rewrite of the audit engine with a pattern-based architecture.

7-Stage Analysis Pipeline

Source Code
    │
    ├─ 1. Fetch        - Clone GitHub repo or load local path
    ├─ 2. Detect       - Identify language, MCP SDK, and framework
    ├─ 3. Sink Scan    - 3,450+ regex patterns across 12 languages
    ├─ 4. Semgrep      - 149 semantic rules (AST-level)
    ├─ 5. AST          - Python/JS taint flow analysis
    ├─ 6. Reachability - LLM taint tracing (heuristic fallback)
    └─ 7. Deduplicate  - Merge, rank, and report findings

Pattern Database - 3,450+ Sink Patterns

Vulnerability ClassPatternsLanguages
Command Injection181Python, JS/TS, Go, Rust, Java, C, C#, Ruby, PHP
SQL / NoSQL Injection~100All drivers + ORM-specific (Sequelize, SQLAlchemy, Drizzle, Kysely)
Path Traversal~60fs, aiofiles, Deno, Bun, tarfile, ZipSlip
SSRF~80requests, httpx, aiohttp, gRPC, OkHttp, WebSocket, got
Deserialization~60pickle, YAML, torch.load, numpy, joblib, BinaryFormatter
Code Execution~50eval, vm, exec, DOM XSS, format strings
Template Injection~30Jinja2, Pug, EJS, Handlebars, Lodash, ERB, Velocity, Thymeleaf
Crypto Weaknesses~40MD5/SHA-1, RC4, weak keys, JWT none alg
XXE~25lxml, untangle, DOMDocument, SAXParser
Log/Header/LDAP~50All major frameworks
Prototype Pollution~15Object.assign, deepmerge, __proto__
Sanitizers105Command, SQL, Path, XSS sanitizers (Python, JS, Go, Rust)
MCP-Specific~45Tool args → sinks, prompt/resource handlers (20+ SDKs)

Framework Detection

Automatically identifies:

  • MCP SDKs: @modelcontextprotocol/sdk, mcp (Python), mcp-go, rmcp (Rust), mcpx (C#)
  • Languages: TypeScript, JavaScript, Python, Go, Rust, Java, C#, PHP, Ruby, C/C++
  • Frameworks: Express, FastAPI, Django, Gin, Axum, Spring Boot, ASP.NET

Heuristic Fallback

When no LLM is configured, the reachability analyzer uses confidence scoring to report findings without false silence - high-confidence patterns (CRITICAL/HIGH + direct taint) are always reported.


Scanners

ScannerDescription
prompt-injectionHidden instructions in tool descriptions
command-injectionOS command injection with 138 payloads
path-traversalDirectory traversal with 104 payloads
ssrfServer-Side Request Forgery with 81 payloads
sqlSQL Injection (Error, Time, Boolean, Stacked)
auth-auditMissing authentication, dangerous tool combos
description-prompt-injectionLLM manipulation via descriptions
resource-ssrfSSRF via MCP resource URIs
capability-escalationUndeclared capability abuse
chainsDangerous tool combination detection
code-executionDetects eval(), exec(), and compile() sinks
template-injectionTargets SSTI and string formatting vulnerabilities
rag-poisoningIdentifies dangerous Write→Read data flows
idorInsecure Direct Object Reference detection
info-leakEnvironment variable and credential disclosure
deserializationPickle, XXE, and unsafe YAML parsing

Fuzz Generators

22 generators organized by intensity level:

Low (~65 cases): malformed_json, protocol_violation, type_confusion, boundary_testing, unicode_attacks

Medium (~200 cases): + session_attacks, encoding_attacks, integer_boundaries

High (~800 cases): + injection_payloads, method_mutations, param_mutations, timing_attacks, header_mutations, json_edge_cases, protocol_state, id_confusion, concurrency_attacks, regex_dos, deserialization

Insane (~1500+ cases): + resource_exhaustion, memory_exhaustion


How It Works

┌─────────┐     MCP Protocol      ┌────────────┐
│ mcpsec  │ ◄──── JSON-RPC ────►  │   Target   │
│         │    (stdio / HTTP)     │   Server   │
└────┬────┘                       └────────────┘
     │
     ├── Connect & enumerate attack surface
     ├── Run 10+ security scanners
     ├── Generate 800+ fuzz cases
     ├── Execute AI-powered payload mutations
     ├── Static audit: 3,450+ sink patterns + 149 Semgrep rules
     └── Report findings with PoC evidence

Configuration

AI Provider Setup

mcpsec setup

Supports: OpenAI, Anthropic, Google, Groq, DeepSeek, Ollama

Output Formats

# JSON
mcpsec scan --stdio "server" --output results.json

# SARIF 2.1.0 (GitHub/GitLab/Azure DevOps CI/CD)
mcpsec fuzz --stdio "server" --output results.sarif

See CHANGELOG.md for the full release history.


Contributing

See CONTRIBUTING.md for guidelines.

CI runs automatically on all PRs - linting with Ruff and cross-platform tests (Ubuntu, Windows, macOS).


Disclaimer

For authorized security testing only. Only scan servers you own or have explicit permission to test.


License

MIT


Built by Manthan Ghasadiya

↑↓ navigate openesc close