Skip to main content

Security and stress-testing framework for MCP (Model Context Protocol) servers

Project description

MCPSafe

PyPI version Python License: MIT Tests SARIF

MCP has 97 million installs. Zero dedicated security testing tools existed for it. Until now.

MCPSafe is the first open-source security and stress-testing framework for MCP (Model Context Protocol) servers. Connect it to any MCP server over stdio or HTTP and get a full audit โ€” prompt injection, path traversal, type confusion, missing auth, load behaviour, and more โ€” in a single command.

๐Ÿ“– Interactive Learning Guide

New to MCPSafe or want to understand how the code works? The learning guide covers every module, attack type, and code pattern โ€” with quizzes!

๐Ÿ‘‰ Open the MCPSafe Learning Guide

(Or open mcpsafe-learning-guide.html locally โ€” it's fully self-contained, no internet required.)


Real-World Results

MCPSafe has audited 14 MCP servers โ€” including Stripe's, Cloudflare's, and Anthropic's own reference server. All findings below are from the current v0.1.0 build with false-positive fixes applied.

6,425 tests ยท 1 CRITICAL ยท 35 HIGH ยท 550 MEDIUM ยท 90.0% pass rate

Server Transport Tests CRITICAL HIGH MEDIUM Overall
mcp.stripe.com (live, auth) ๐Ÿ’ณ HTTP 1,363 1 1 170 ๐Ÿ”ด CRITICAL
@modelcontextprotocol/server-everything stdio 383 โ€” 16 69 ๐ŸŸ  HIGH
@modelcontextprotocol/server-filesystem stdio 558 โ€” 1 91 ๐ŸŸ  HIGH
@modelcontextprotocol/server-github stdio 2,078 โ€” 1 1 ๐ŸŸ  HIGH
mcp-server-sqlite (uvx) stdio 216 โ€” 15 8 ๐ŸŸ  HIGH
mcp_text_processor (test server) stdio 298 โ€” 1 44 ๐ŸŸ  HIGH
docs.mcp.cloudflare.com (live) HTTP 74 โ€” โ€” 4 ๐ŸŸก MEDIUM
mcp-server-fetch (uvx) stdio 32 โ€” โ€” 3 ๐ŸŸก MEDIUM
mcp-server-git (uvx) stdio 545 โ€” โ€” 58 ๐ŸŸก MEDIUM
mcp_calculator (test server) stdio 212 โ€” โ€” 20 ๐ŸŸก MEDIUM
mcp_notes (test server) stdio 228 โ€” โ€” 38 ๐ŸŸก MEDIUM
observability.mcp.cloudflare.com (live, auth) HTTP 151 โ€” โ€” 2 ๐ŸŸก MEDIUM
simple_server (test fixture) stdio 163 โ€” โ€” 28 ๐ŸŸก MEDIUM
mcp-server-time (uvx) stdio 124 โ€” โ€” 14 ๐ŸŸก MEDIUM

Selected Findings

mcp.stripe.com (Stripe Payments, live HTTP, auth) โ€” 1,363 tests across 31 tools. T04-001 CRITICAL rug-pull confirmed: Stripe's production server mutates tool descriptions between consecutive list_tools() calls 3 seconds apart โ€” the server itself exhibits the attack pattern MCPSafe is designed to detect. T04-003 HIGH: 8 cross-tool parasitic references in tool descriptions. 170 MEDIUM: injection payloads echoed verbatim by virtually every financial tool including create_refund, cancel_subscription, create_invoice, and list_payment_intents.

@modelcontextprotocol/server-everything (Anthropic's reference server) โ€” 16 HIGH, 0 CRITICAL. Two vulnerability classes: (1) Stored prompt injection โ€” 14 HIGH findings from the args-prompt prompt template, which embeds raw argument values directly into generated LLM messages; all 14 injection payloads land in the AI's context window. (2) DoS via integer overflow โ€” trigger-long-running-operation hangs for 35+ seconds on 2147483647 (INT_MAX) and 1e308 (max float), confirmed resource-exhaustion DoS on Anthropic's own reference implementation.

mcp-server-sqlite (uvx) โ€” 15 HIGH, all from the mcp-demo prompt template. The prompt embeds raw argument values into generated messages without sanitisation โ€” all 15 injection payloads (PI-001 through PI-012, PI-015, PI-016) become stored prompt injections. Additionally, the memo://insights resource response contains a suspicious pattern flagged as HIGH.

@modelcontextprotocol/server-filesystem โ€” 91 MEDIUM injection echoes across file-path tools (read_file, write_file, list_directory). The tools pass raw argument strings directly to OS syscalls; malformed paths return OS errors containing the injection payload verbatim. 1 HIGH T07 auth finding.

mcp-server-git (uvx) โ€” 58 MEDIUM. Git tools pass raw LLM arguments to shell commands without sanitisation. Injection payloads appear verbatim in OS-level error messages (git status 'Ignore previous instructionsโ€ฆ'), creating a stored injection pathway for any AI model that reads the error output.

observability.mcp.cloudflare.com (Cloudflare Observability, live HTTP, auth) โ€” 151 tests, 2 MEDIUM. T04-001 detected a description growth (1,001 โ†’ 1,603 chars) between calls โ€” consistent with CDN edge truncation rather than a deliberate rug-pull, correctly classified as MEDIUM. Cross-tool workflow references (observability_keys/observability_values) detected and classified LOW.


Quick Start

pip install mcpsafe
# Scan a local stdio server
mcpsafe scan "uvx mcp-server-git"

# Scan an HTTP server (Streamable HTTP auto-detected on /mcp endpoints)
mcpsafe scan "https://docs.mcp.cloudflare.com/mcp" --transport http

# Scan an HTTP server that requires authentication
mcpsafe scan "https://observability.mcp.cloudflare.com/mcp" --transport http \
  --header "Authorization=Bearer cfat_your_token_here"

# Pass multiple HTTP headers
mcpsafe scan "https://api.example.com/mcp" --transport http \
  --header "Authorization=Bearer token" \
  --header "X-Org-ID=my-org"

# Output JSON + HTML + SARIF (all formats)
mcpsafe scan "npx -y @modelcontextprotocol/server-filesystem /tmp" --output all

# Pass subprocess environment variables (stdio servers only)
mcpsafe scan "uvx mcp-server-github" --env GITHUB_TOKEN=ghp_xxx

# Generate a config file
mcpsafe init

# Compare two scans to track regressions
mcpsafe compare report-v1.json report-v2.json

What It Tests

MCPSafe runs 117 test types across 8 modules covering discovery, security, performance, and schema validation.

Module Category Tests What It Checks
T01 Discovery DISCOVERY 6 Server enumeration, tool listing, resource/prompt exposure, metadata consistency
T02 Injection SECURITY 12 Prompt injection (PI-001โ€“PI-005), jailbreak attempts, system prompt leakage
T03 Fuzzer SECURITY 60 Type confusion, boundary values, oversized payloads, deep nesting, NaN/Infinity
T04 Tool Poison SECURITY 8 Tool description mutation (rug-pull attacks), baseline drift, hidden instructions
T05 Load PERFORMANCE 8 Concurrent load, burst testing, sustained throughput, latency degradation
T06 Schema SCHEMA 6 JSON Schema validation, required field enforcement, description quality
T07 Auth SECURITY 13 Missing auth, Bearer bypass, API key abuse, protocol version abuse, replay attacks
T08 Latency PERFORMANCE 4 Baseline latency, P95/P99 percentiles, timeout behaviour

Real Vulnerabilities MCPSafe Catches

Prompt injection via tool arguments โ€” The injection module (T02) sends 12 payloads per tool including classic overrides ("Ignore previous instructionsโ€ฆ"), role-confusion, system prompt extraction, and Base64-encoded instructions. Confirmed CRITICAL on mcp-server-git, server-filesystem, and 8 other servers tested.

Tool description rug-pull attacks (documented by Invariant Labs, 2025) โ€” A tool appears safe on connect but its description silently mutates to include data-exfiltration instructions. T04 snapshots all tool descriptions on connect and re-checks after a delay to detect mutation.

SQL/shell injection through string parameters โ€” T02 sends SQL metacharacters, UNION attacks, and shell metacharacters to every string-typed tool parameter. Confirmed CRITICAL on mcp-server-sqlite write_query.

Path traversal in resource URIs โ€” T07-003 tests ../ sequences and absolute paths in resource URIs. Confirmed on server-filesystem.

Cross-request data leakage under concurrency โ€” T05-001 embeds unique UUIDs in concurrent requests and checks whether responses contain data intended for a different caller โ€” the same class of bug found in the MCP TypeScript SDK (CVSS 7.1).

Missing authentication on HTTP endpoints โ€” T07-001 attempts raw HTTP access to MCP endpoints without credentials and detects servers that respond successfully when they should require auth.

T03 Fuzzer โ€” 60 Fuzz Cases

  • String attacks: null bytes, Unicode overlong sequences, ANSI escapes, format strings (%s %n), 1MB payloads
  • Integer boundary: MAX_INT32+1, MIN_INT32-1, beyond int64 (9_223_372_036_854_775_808), zero, negatives
  • Type confusion: strings where integers expected ("NaN", "Infinity", "-1"), objects in array slots
  • Array attacks: 10,000-element array, mixed-type array (1,000 elements), 100-level deep nested array
  • Number edge cases: "NaN", "Infinity", "-Infinity", 1e308 (overflow), 1e-308 (underflow)
  • Object attacks: deeply nested objects, conflicting keys, unexpected extra fields

T07 Auth โ€” 13 Tests

Includes: missing auth detection, Bearer token bypass, API key abuse, HMAC signature manipulation, JWT none-algorithm attack, OAuth scope escalation, session token fixation, privilege escalation via crafted tool calls, CORS misconfiguration, rate-limit detection (429/ratelimit/throttle), protocol version abuse against all known MCP versions (2024-11-05, 2024-10-07, 2025-03-26), and duplicate initialize() replay with session health check.

T06 Schema โ€” 6 Tests

Includes a description quality check (T06-006) that scores tool descriptions for LLM usability:

Finding Severity
No description at all MEDIUM
Useless description ("A tool", "Does stuff") MEDIUM
Description under 30 characters LOW
No parameter documentation signals LOW
All descriptions adequate PASS

CLI Reference

mcpsafe scan

Usage: mcpsafe scan [OPTIONS] TARGET

Options:
  --transport  TEXT     Transport type: stdio | http  [default: stdio]
  --output     TEXT     Report format: json | html | sarif | all  [default: json]
  --timeout    INT      Per-call timeout in seconds  [default: 30]
  --modules    TEXT     Comma-separated module IDs (e.g. T01,T02,T07)
  --env        TEXT     KEY=VALUE subprocess env var, stdio only (repeatable)
  --header     TEXT     KEY=VALUE HTTP request header, http transport (repeatable)
  --config     PATH     Path to mcpsafe.toml config file
  --out-dir    PATH     Directory for output reports  [default: ./mcpsafe-reports]
  --no-load            Skip T05-003 stress test and large injection payloads
  --verbose            Print full details for every finding as they are found

--header vs --env โ€” Use --header to pass HTTP request headers (Authorization, API keys) when scanning HTTP/HTTPS MCP servers. Use --env to set subprocess environment variables for stdio servers that read credentials from the environment.

HTTP transport auto-detection โ€” MCPSafe automatically selects the right HTTP client based on the URL. URLs ending in /mcp use the MCP Streamable HTTP protocol (required by Cloudflare and newer servers). URLs ending in /sse use the legacy SSE protocol. Any other URL appends /mcp and tries Streamable HTTP first.

mcpsafe init

Generate a commented mcpsafe.toml configuration file with all available options documented.

mcpsafe init                        # writes mcpsafe.toml in current directory
mcpsafe init --output /path/to/dir  # write to specific path
mcpsafe init --force                # overwrite existing file

MCPSafe warns if mcpsafe.toml contains sensitive key names (token, secret, key, password, api_key) and checks Unix file permissions (recommends chmod 600).

mcpsafe compare

Diff two JSON reports to surface new findings and regressions between scans.

mcpsafe compare baseline.json latest.json

mcpsafe list-modules

Show all available test modules and their test IDs.

mcpsafe version

Print the MCPSafe version and exit.


Output Formats

JSON

Structured report with all findings, server metadata, and summary statistics. All server-supplied strings are sanitised (NUL bytes, ANSI escapes, control characters stripped) before serialisation.

{
  "scan_id": "a1b2c3d4-...",
  "mcpsafe_version": "0.1.0",
  "started_at": "2025-01-15T10:23:45Z",
  "server_info": { "name": "mcp-server-git", "version": "0.1.0", "tool_count": 12 },
  "summary": { "total_tests": 512, "passed": 471, "failed": 41, "overall_severity": "CRITICAL" },
  "results": [ { "test_id": "T02-001", "severity": "CRITICAL", "description": "..." } ]
}

HTML

Self-contained single-file report (no CDN dependencies) with a severity donut chart, per-category findings tables, and a clean dark/light design. Suitable for sharing with stakeholders or attaching to a GitHub issue.

SARIF 2.1.0

GitHub Security tab compatible. Non-PASS findings are emitted as SARIF results.

MCPSafe Severity SARIF Level
CRITICAL / HIGH error
MEDIUM warning
LOW / INFO note
PASS (omitted)

GitHub Actions integration:

- name: Scan MCP server
  run: mcpsafe scan --transport stdio --target "uvx mcp-server-git" --output sarif --out-dir sarif-output

- name: Upload SARIF to GitHub Security
  uses: github/codeql-action/upload-sarif@v3
  with:
    sarif_file: sarif-output/

CI/CD Integration

MCPSafe exits with code 1 if CRITICAL or HIGH findings are detected, making it a natural pipeline gate.

# .github/workflows/mcp-security.yml
name: MCP Security Scan

on: [push, pull_request]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install MCPSafe
        run: pip install mcpsafe

      - name: Scan MCP server
        run: |
          mcpsafe scan \
            --transport stdio \
            --target "uvx mcp-server-git" \
            --output all \
            --out-dir ./mcpsafe-output

      - name: Upload SARIF to GitHub Security
        uses: github/codeql-action/upload-sarif@v3
        if: always()
        with:
          sarif_file: ./mcpsafe-output/

      - name: Upload HTML report
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: mcpsafe-report
          path: ./mcpsafe-output/*.html

Example Terminal Output

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ MCPSafe v0.1.0                              โ”‚
โ”‚ MCP Server Security & Stress Tester         โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Target:     uvx mcp-server-git
Transport:  stdio
Server:     mcp-server-git v0.6.2  (protocol 2024-11-05)
Tools:      12   Resources: 0   Prompts: 0

Running 8 modules (117 tests)...

  โœ“ T01 Discovery       6/6     0 findings
  โœ“ T08 Latency         4/4     0 findings
  โš  T06 Schema          6/6     3 findings  [MEDIUM]
  โœ— T02 Injection      12/12    5 findings  [CRITICAL]
  โš  T03 Fuzzer         60/60   18 findings  [MEDIUM]
  โœ“ T04 Tool Poison     8/8     0 findings
  โœ“ T07 Auth           13/13    0 findings
  โš  T05 Load            8/8     4 findings  [HIGH]

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ CRITICAL โ”‚  10   โ”‚
โ”‚ HIGH     โ”‚   0   โ”‚
โ”‚ MEDIUM   โ”‚  30   โ”‚
โ”‚ LOW      โ”‚   2   โ”‚
โ”‚ INFO     โ”‚   3   โ”‚
โ”‚ PASS     โ”‚  72   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Reports saved:
  JSON โ†’ ./mcpsafe-reports/mcpsafe-mcp-server-git-a1b2c3d4-20260413-102345.json
  HTML โ†’ ./mcpsafe-reports/mcpsafe-mcp-server-git-a1b2c3d4-20260413-102345.html
  SARIF โ†’ ./mcpsafe-reports/mcpsafe-mcp-server-git-a1b2c3d4-20260413-102345.sarif

Exiting with code 1 โ€” CRITICAL findings require attention.

Architecture

mcpsafe/
โ”œโ”€โ”€ cli.py              # click CLI: scan, init, compare, list-modules, version
โ”œโ”€โ”€ runner.py           # async orchestration, module dispatch, rich progress
โ”œโ”€โ”€ transport.py        # MCP connection factory (stdio / HTTP, async context managers)
โ”œโ”€โ”€ models.py           # dataclasses: TestResult, ScanReport, ServerInfo, Severity, Category
โ””โ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ _helpers.py     # shared: sanitise_server_string, looks_like_api_rejection, timing
โ”‚   โ”œโ”€โ”€ t01_discovery.py
โ”‚   โ”œโ”€โ”€ t02_injection.py
โ”‚   โ”œโ”€โ”€ t03_fuzzer.py
โ”‚   โ”œโ”€โ”€ t04_tool_poison.py
โ”‚   โ”œโ”€โ”€ t05_load.py
โ”‚   โ”œโ”€โ”€ t06_schema.py
โ”‚   โ”œโ”€โ”€ t07_auth.py
โ”‚   โ””โ”€โ”€ t08_latency.py
โ””โ”€โ”€ reporter/
    โ”œโ”€โ”€ _common.py      # canonical server_slug() used by all reporters
    โ”œโ”€โ”€ json_reporter.py
    โ”œโ”€โ”€ html_reporter.py
    โ””โ”€โ”€ sarif_reporter.py
templates/
โ””โ”€โ”€ report.html.j2

Design principles:

  • All I/O is async/await โ€” no blocking calls on the event loop
  • Every test returns a TestResult dataclass โ€” no raw dicts cross module boundaries
  • All MCP calls are wrapped in try/except โ€” no test can crash the runner
  • Timing is always measured in milliseconds via time.perf_counter()
  • Server-supplied strings are sanitised at every output boundary (terminal, JSON, HTML, SARIF)

Security Hardening (MCPSafe Itself)

MCPSafe is hardened against the same classes of attack it tests for:

Rich markup injection prevention โ€” Server-supplied strings are passed through rich.markup.escape() before embedding in terminal output. A malicious server cannot inject markup into the operator's terminal.

Immutable test results โ€” HtmlReporter uses dataclasses.replace() to create sanitised copies of TestResult objects rather than mutating originals. The source ScanReport is never modified, so JSON and HTML reports written sequentially are always consistent.

Recursive JSON sanitisation โ€” JsonReporter applies _sanitise_value() (depth-capped at 10) before json.dumps(). NUL bytes, ANSI escapes, and control characters from untrusted servers cannot corrupt SIEM parsers or log aggregators.

Per-scan state isolation โ€” t08_latency.py clears the module-level _baseline_latencies dict at the start of every scan, preventing timing data from a prior run leaking into sequential scans in the same process.

Config credential warnings โ€” mcpsafe init warns if mcpsafe.toml contains keys matching sensitive patterns and checks Unix file permissions.

Input validation โ€” --timeout and --concurrency are validated before the scan starts. mcpsafe compare uses a defensive _load_report() helper that validates JSON shape, required keys, and type-checks each result before display.


Options Reference

Option Default Description
--transport stdio Transport protocol: stdio, http
--output json Report format: json, html, sarif, all
--modules all Comma-separated module IDs to run
--out-dir ./mcpsafe-reports Directory to save reports
--timeout 30 Seconds per MCP call before timeout
--header โ€” KEY=VALUE HTTP request header, http transport only (repeatable)
--env โ€” KEY=VALUE subprocess env var, stdio transport only (repeatable)
--config โ€” Path to mcpsafe.toml
--no-load false Skip T05-003 stress test and large payloads
--verbose false Print each finding as it is discovered

Severity Levels

Level Meaning
CRITICAL Exploitable โ€” should block deployment
HIGH Serious โ€” requires prompt remediation
MEDIUM Potential vulnerability โ€” should be investigated
LOW Best-practice gap or informational weakness
INFO Neutral observation (e.g. expected rate-limit, API auth required)
PASS Test passed โ€” no issue found

Development

git clone https://github.com/Ravikiranbantwal/mcpsafe
cd mcpsafe
pip install -e ".[dev]"

# Run unit tests
pytest tests/ -v

# Run against a real server
mcpsafe scan "uvx mcp-server-git" --verbose

Adding a Test Module

  1. Create mcpsafe/tests/t09_yourmodule.py
  2. Implement async def run(session, server_info, config) -> list[TestResult]
  3. Register in mcpsafe/runner.py
  4. Use test IDs in format T09-001, T09-002, โ€ฆ

Contributing

Pull requests are welcome. Please open an issue before implementing a new test module.

  • Every public function needs a docstring and type hints
  • All MCP calls must be wrapped in try/except โ€” never let a test crash the runner
  • Run pytest tests/ before submitting

Legal / Responsible Use

MCPSafe is intended for use against MCP servers you own or have explicit written permission to test. Unauthorized scanning of third-party servers may violate computer fraud laws in your jurisdiction (including the CFAA in the US, the Computer Misuse Act in the UK, and equivalent legislation elsewhere). The authors accept no liability for misuse.

Use MCPSafe responsibly:

  • Only scan servers you own, operate, or have written authorisation to test
  • Do not use MCPSafe against production services without the operator's consent
  • Treat any findings as confidential until disclosed to the server operator

License

MIT โ€” see LICENSE.


Acknowledgements

Built on the official MCP Python SDK by Anthropic. MCPSafe is an independent open-source project and is not affiliated with or endorsed by Anthropic.

SARIF output format maintained by OASIS.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcpsafe-0.1.0.tar.gz (1.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcpsafe-0.1.0-py3-none-any.whl (107.5 kB view details)

Uploaded Python 3

File details

Details for the file mcpsafe-0.1.0.tar.gz.

File metadata

  • Download URL: mcpsafe-0.1.0.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mcpsafe-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d9ade8cf409e906e62b32502d84d78ff2abc616a790a7415e10563f1f480694f
MD5 cc1b4dbae74066b325b1f3132e0d58a1
BLAKE2b-256 ccebceb83ecafe82265aa63fdbaf1d7cdfcecb85929b01163bcc721cdfd67780

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcpsafe-0.1.0.tar.gz:

Publisher: publish.yml on Ravikiranbantwal/mcpsafe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mcpsafe-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mcpsafe-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 107.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mcpsafe-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6b0e8768592bba0bb05a9e5ff564a5528be5edeb94d8a5f06af8fa7900c17f3d
MD5 2d30b44528cd44479813868c7154965a
BLAKE2b-256 6d075a28f250ef7f7e03894b5acc732945e1fb471d341e16e32db2821eec32c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for mcpsafe-0.1.0-py3-none-any.whl:

Publisher: publish.yml on Ravikiranbantwal/mcpsafe

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page