---
title: "MCP Gauntlet · Fuzz + load testing for MCP servers, before"
description: "Fuzz + load testing for MCP servers, before they ship. A Rust workspace: mcp-fuzz (a schema-aware fuzzer that finds crashes and hangs, SARIF output) and"
canonical: "https://matthiasmeyer.tech/repos/mcp-gauntlet"
language: "en"
last_updated: "2026-08-21"
markdown_versions: ["https://matthiasmeyer.tech/repos/mcp-gauntlet.md", "https://matthiasmeyer.tech/de/repos/mcp-gauntlet.md", "https://matthiasmeyer.tech/es/repos/mcp-gauntlet.md"]
image: "https://matthiasmeyer.tech/api/og/repo/mcp-gauntlet?lang=en"
publisher: "Matthias Meyer, https://matthiasmeyer.tech (llms.txt: https://matthiasmeyer.tech/llms.txt)"
---

security stable Rust

# MCP Gauntlet

Fuzz + load testing for MCP servers, before they ship

A Rust workspace: mcp-fuzz (a schema-aware fuzzer that finds crashes and hangs, SARIF output) and mcp-storm (a load tester with p50/p95/p99 and a CI gate), both on one shared async MCP client core (mcp-gauntlet-core). The pre-deploy counterpart to mcp-armor's runtime defense. 21 tests, three crates on crates.io, MIT.

[View on GitHub →](https://github.com/studiomeyer-io/mcp-gauntlet)[crates.io](https://crates.io/crates/mcp-fuzz)

## What it solves

MCP servers fail silently and ship fast. Most have no tests against malformed input and no latency budget, so the first time anyone finds out that a tool crashes on an empty array is when an agent sends one. The awkward part is that writing those tests by hand is boring enough that nobody does it.

## How it works

Two command line tools share one fast async MCP client. The fuzzer reads each tool input schema and derives its payloads from it, then throws hostile, boundary and malformed values at the server looking for crashes, hangs, internal errors and validation gaps that silently let bad input through, and it writes SARIF so GitHub code scanning picks the findings up. The load tester drives a set number of concurrent workers, reports p50, p95 and p99 latency and throughput per tool, and fails the build on a latency or error-rate threshold. Both are Rust, one static binary each, and both speak MCP over stdio or streamable HTTP.

## When to use it

Wire both into CI on the day you first publish a server. The payloads come from the server own schema, so there is no test suite to maintain, and a static binary drops into any pipeline without a runtime. It is the pre-deploy attacker to the runtime defence that mcp-armor provides.

## When not to use it

It tests the interface, not the logic behind it. A tool that accepts every input and returns a confidently wrong answer passes both tools cleanly. On crates.io the fuzzer is published under the name mcp-fuzz, which is worth knowing before you search for the repository name and conclude it is not there.

Stars

★ 0

installs

↓ 40

Clones (14d)

⊟ 40

Language

Rust

Updated

2026-08-21

## Install

```
cargo install mcp-fuzz mcp-storm
```

## Related repos

- MCP Armor

    → pre-deploy counterpart of

    →

    https://matthiasmeyer.tech/repos/mcp-armor

- MCP Protocol Conformance

    → load + fuzz layer for

    →

    https://matthiasmeyer.tech/repos/mcp-protocol-conformance

## Sitemap

Every page of this site as Markdown: [sitemap](https://matthiasmeyer.tech/sitemap.md). Curated entry point: [llms.txt](https://matthiasmeyer.tech/llms.txt).
