Armor

by studiomeyer-io

1 stars
202 downloads
Not rated
GitHub Website

About

Drop-in Rust sidecar for MCP servers — scans tool calls for prompt injection, validates Ed25519 manifest signatures, blocks marketplace-poisoning vectors. <5ms p99 overhead. Defense against OX Security MCP advisory (10+ CVEs, April 2026).

Details

Author
studiomeyer-io
GitHub stars
1
Downloads
202
Categories
Other

- off — disabled
- Dynamic linker: LD_PRELOAD, LD_LIBRARY_PATH, DYLD_INSERT_LIBRARIES, DYLD_LIBRARY_PATH
- Language runtime: NODE_OPTIONS, PYTHONPATH, JAVA_TOOL_OPTIONS
- mcp-armor (this one) — runtime defense sidecar: scans tool calls, verifies signed manifests, blocks known-bad CVEs
- mcp-herald — static migration linter for the MCP 2026-07-28 spec

The README includes setup instructions such as mcp-armor wrap -- npx -y @modelcontextprotocol/server-filesystem /tmp.

mcp-armor

crates.io
CI
Supply Chain
OpenSSF Scorecard
License: MIT

Drop-in Rust sidecar that wraps any MCP server. Scans tool calls for prompt injection, validates Ed25519 manifest signatures (with TOFU keystore + Sigstore Rekor bridge since v0.2), exports OTLP gRPC telemetry (on opentelemetry 0.30 since v0.4 — closes the shutdown-hang class), blocks marketplace-poisoning vectors, strips loader-class env keys from spawned children (LD_PRELOAD, NODE_OPTIONS, … — new in v0.3), folds Unicode confusables to detect homoglyph evasion (Cyrillic іgnоrеignore — new in v0.3), strips ANSI/terminal escape sequences and flags tool-name homoglyph collisions on tools/call (both new in v0.7), and — new in v0.8 — scans every tools/list catalog for tool-description / full-schema poisoning (model-directed instructions hidden in a tool's description or its parameter schema — the first-sight poisoning Layer 7 drift can't see) plus a directory-traversal argument pattern. Single signed binary, p99 budget under 5 ms (enforced in CI).

> Anthropic has classified the underlying MCP-design issues (auto-invoke, marketplace tool-list trust, no manifest signing) as out-of-scope for the spec. mcp-armor implements the runtime defenses they declined to spec.

mcp-armor sits between an MCP client (Claude Desktop, Windsurf, Cursor) and an upstream server. JSON-RPC traffic flows through a four-stage scanner (Aho-Corasick prefilter → regex stage → NFKC + zero-width + Bidi + tag-unicode strip → re-scan → UTS-39 confusable skeleton fold → re-scan). Block decisions are recorded to an in-memory ring buffer, and the read-only control-plane MCP server surfaces the audit history back to the client. On wrap, loader-class env keys (LD_PRELOAD, NODE_OPTIONS, PYTHONPATH, …) are stripped from the child process before spawn().

Sister project: studiomeyer-io/ai-shield — TypeScript policy engine that mcp-armor's evasion patterns are ported from (Round 4 zero-width + tag-unicode work).

A note from us

We have been building tools and systems for ourselves for the past two years. The fact that this repo is small and has few stars is not because it is new. It is because we only just decided to share what we have built. It is not a fresh experiment, it is a long story with a recent commit.

We love building things and sharing them. We do not love social media tactics, growth hacks, or chasing stars and followers. So this repo is small. The code is real, it gets used, issues get answered. Judge for yourself.

If it helps you, sharing, testing, and feedback help us. If it could be better, an issue is more useful. If you build something with it, tell us at hello@studiomeyer.io. That genuinely makes our day.

From a small studio in Palma de Mallorca.

Install

Pre-built binaries (signed via cosign):

gh release download --repo studiomeyer-io/mcp-armor --pattern 'mcp-armor--x86_64-unknown-linux-musl.tar.gz'
tar xf mcp-armor--x86_64-unknown-linux-musl.tar.gz
sudo install mcp-armor /usr/local/bin/

Or from source:

```sh

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.