Skip to main content

Security toolkit for FastAPI-based MCP servers โ€” pre-flight audit + runtime prompt-injection guardrail.

Project description

๐Ÿ›ก๏ธ mcp-rampart

Security ramparts for FastAPI apps exposed as MCP servers.
Pre-flight audit. Runtime prompt-injection guardrail. One package.

PyPI License Stars


from fastapi import FastAPI
from mcp_rampart import MCPRampart

app = FastAPI()
# ... your existing routes ...

rampart = MCPRampart(app)                       # 1. Speak MCP.
report = rampart.audit()                        # 2. Audit what you'd expose.
if report.has_blockers():
    report.print_text(); raise SystemExit(1)

rampart.enable_guardrails(policy="block")       # 3. Block prompt-injection at runtime.

TL;DR. MCP security tooling is fragmenting into layers. mcp-rampart is the only library that lives inside your MCP server โ€” auditing the routes you're about to expose and scanning the arguments of every tools/call request. Everything else (gateways, firewalls, config scanners) lives elsewhere on the wire.


The 4 layers of MCP security

MCP went from "experiment" to 97M+ installs per month in 2026. Security tooling caught up only recently, and most of it solves a different problem than the one you have. Here's the map:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 1 โ€” The LLM itself (Claude, GPT, Gemini)                  โ”‚
โ”‚  Worry: hallucination, jailbreaks at the model level             โ”‚
โ”‚  โ†’ out of scope for everyone โ€” model provider's problem          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ–ผ  (JSON-RPC over MCP transport)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 2 โ€” The MCP CLIENT (Claude Desktop, Cursor, agents)       โ”‚
โ”‚  Worry: the LLM calls something risky or exfiltrates data        โ”‚
โ”‚  Tools: pipelock, mcp-firewall, SecretiveShell/MCP-Bridge        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ–ผ  (HTTP / SSE)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 3 โ€” The GATEWAY / proxy in front of the MCP server        โ”‚
โ”‚  Worry: who's allowed to talk to this server, with what auth     โ”‚
โ”‚  Tools: apache/casbin-gateway, hyprmcp/mcp-gateway               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 4 โ€” The MCP SERVER itself โ† ๐Ÿ›ก๏ธ mcp-rampart                โ”‚
โ”‚  Worry: did I expose dangerous routes? is an injection hiding    โ”‚
โ”‚         inside the arguments of every tools/call?                โ”‚
โ”‚  Tools: mcp-rampart (this project)                               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ”‚
                       โ–ผ  (which servers are even installed?)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Layer 5 โ€” The USER's MCP config (~/.mcp.json, etc.)             โ”‚
โ”‚  Worry: am I installing a malicious server on my machine         โ”‚
โ”‚  Tools: apisec-inc/mcp-audit, ModelContextProtocol-Security/     โ”‚
โ”‚         mcpserver-audit                                          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
Layer Question it answers Representative tool
1 "Is the model itself safe?" (model provider)
2 "Is my agent leaking / calling something risky?" pipelock (583โญ)
3 "Who's allowed to talk to my server, with what auth?" casbin-gateway (559โญ), hyprmcp/mcp-gateway (92โญ)
4 "Did I just hand a language model access to my admin endpoints? Is an injection sneaking into the args of every call?" mcp-rampart
5 "Is this MCP server I'm installing actually safe?" apisec mcp-audit (149โญ), mcpserver-audit (16โญ)

You probably need more than one layer. mcp-rampart is the only library that operates at layer 4 โ€” the layer that solves the MCP-server author's problem rather than the operator's or the user's.


Why "framework-aware", not "MCP-generic"

You'll notice every tool at layers 2, 3, and 5 is framework-agnostic โ€” they intercept the wire (HTTP, JSON-RPC, config files) and don't care what's behind. That works for them because they don't need to.

mcp-rampart needs to look behind. The pre-flight audit literally cannot exist as a proxy:

What mcp-rampart can see Why (it's installed in the app)
@app.get("/api/admin/users/...") decorators reads app.routes directly
Pydantic response models declaring email, phone, ssn introspects route.response_model
Missing docstrings on tool handlers reads route.endpoint.__doc__
Untyped parameters that fall back to str reads inspect.signature(handler)
Path patterns that look like /auth/, /oauth/, /internal/ pattern-matches route.path

A proxy at layer 3 sees POST /mcp {"method":"tools/call","name":"delete_user","args":{...}}. It does not see @app.delete("/api/admin/users/{user_id}") three steps upstream. So it can't tell you "you're about to expose your admin to an LLM" โ€” it can only tell you "someone just called delete_user".

The trade-off: mcp-rampart is currently FastAPI-only. We're paying that price on purpose for now, because deep introspection is what makes the audit valuable. Node.js and Flask/Django are next on the roadmap.


Where mcp-rampart is uniquely positioned

Five concrete cells where mcp-rampart is the only โœ…:

mcp-rampart pipelock casbin-gw apisec mcp-audit hyprmcp
Runs inside your FastAPI app (no extra process) โœ… โŒ โŒ โŒ โŒ
Audits the routes you are about to expose (not someone else's) โœ… โŒ โŒ โŒ โŒ
Refuses to start the server on CRITICAL findings โœ… โŒ โŒ โŒ โŒ
Prompt-injection detection on every tools/call โœ… partial โŒ โŒ โŒ
Three-policy model (block / alert / log) + pluggable callbacks โœ… โŒ โŒ โŒ โŒ

Different shape, different question, different price tag.


Quick start

pip install mcp-rampart
from fastapi import FastAPI
from mcp_rampart import MCPRampart

app = FastAPI(title="My App")

@app.get("/api/users/{user_id}")
async def get_user(user_id: int):
    """Get a user by their ID."""
    return {"id": user_id, "name": "Alice"}

rampart = MCPRampart(app)                       # auto-discovers routes, mounts /mcp
print(rampart.summary())

# Pre-flight audit โ€” refuses to start the server on CRITICAL findings
report = rampart.audit()
report.print_text()
if report.has_blockers():
    raise SystemExit(1)

# Runtime guardrail โ€” every incoming tools/call is scanned
rampart.enable_guardrails(policy="block")

Your app now exposes:

  • GET /mcp โ€” server info and tool listing
  • POST /mcp โ€” MCP JSON-RPC endpoint (Streamable HTTP transport)

Any MCP client (Claude Desktop, ChatGPT, Gemini, Cursor, Codex) can connect.


The pre-flight audit, in detail

rampart.audit() walks every exposed tool and runs 7 checks. Each finding gets a severity tag, a suggestion, and a category code you can match in CI.

Severity Check Triggers whenโ€ฆ
๐Ÿ”ด CRITICAL EXPOSED_AUTH route path matches /auth/, /login, /token, /oauth, โ€ฆ
๐Ÿ”ด CRITICAL EXPOSED_ADMIN route path matches /admin/, /internal/, /debug/, โ€ฆ
๐ŸŸ  HIGH MISSING_DOCSTRING no description โ†’ LLM will guess and call the wrong tool
๐ŸŸ  HIGH SENSITIVE_PARAM_NAME parameter name contains password, token, api_key, โ€ฆ
๐ŸŸ  HIGH PII_IN_RESPONSE response schema declares fields like email, phone, ssn, โ€ฆ
๐ŸŸก MEDIUM DESTRUCTIVE_METHOD DELETE / PUT / PATCH exposed without an explicit consent flow
๐Ÿ”ต LOW UNTYPED_PARAMETER 3+ parameters falling back to str โ€” LLMs may send malformed inputs

Sample output on a deliberately bad app:

๐Ÿ›ก๏ธ  MCPRampart audit report
   13 tools from 13 routes
   ๐Ÿ”ด 2 critical ยท ๐ŸŸ  4 high ยท ๐ŸŸก 3 medium ยท ๐Ÿ”ต 1 low

   ๐Ÿ”ด [CRITICAL] POST   /api/auth/login           Authentication endpoint exposed to LLM clients
      โ†ณ Add '/api/auth/login' to exclude_paths
   ๐Ÿ”ด [CRITICAL] DELETE /api/admin/users/{user_id}  Admin / internal endpoint exposed to LLM clients
      โ†ณ Exclude this route from MCP exposure
   ๐ŸŸ  [HIGH]     GET    /api/users/me              Response may leak PII fields: email, phone, address
   โ€ฆ

Use it in CI:

- run: python -c "from myapp import rampart; r = rampart.audit(); r.print_text(); exit(1 if r.has_blockers() else 0)"

The runtime guardrail, in detail

The audit happens once, at startup. The guardrail runs forever โ€” on every tools/call request.

It scans the call's arguments (recursively, in dicts and lists) against a curated catalogue of prompt-injection patterns:

Confidence What gets caught
๐Ÿ”ด HIGH ignore previous instructions, you are now โ€ฆ, developer/admin/jailbreak mode, chat-template control tokens (<|im_start|>), [[system]] markers, SYSTEM: do โ€ฆ
๐ŸŸ  MEDIUM system prompt, act as โ€ฆ, pretend to be โ€ฆ, "reveal your instructions", "repeat everything above", "begin new session as"
๐Ÿ”ต LOW exfiltration verbs (send your tokens to โ€ฆ), <script> payloads, embedded curl/wget https://โ€ฆ, base64 obfuscation

Aggregate decision:

  • any HIGH match โ†’ BLOCK
  • 2+ MEDIUM matches โ†’ BLOCK
  • 1 MEDIUM or LOW โ†’ WARN (allowed, logged)
  • nothing โ†’ ALLOW

Enable in one line

rampart.enable_guardrails(policy="block")     # default
rampart.enable_guardrails(policy="alert")     # let through, log loudly, call on_alert
rampart.enable_guardrails(policy="log")       # observability / shadow mode

Plug your alerting in

def to_security_team(decision):
    slack.post(f"โš ๏ธ mcp-rampart blocked {decision.tool_name}: {decision.reason}")

rampart.enable_guardrails(policy="block", on_block=to_security_team)

Inspect what happened

rampart.guardrail.stats()
# โ†’ {"total": 1284, "blocked": 7, "alerted": 23, "clean": 1254}

for entry in rampart.guardrail.recent(10):
    print(entry.tool_name, entry.decision.allowed, entry.decision.reason)

What an MCP client sees when blocked:

{
  "isError": true,
  "content": [{
    "type": "text",
    "text": "๐Ÿ›ก๏ธ Blocked by MCPRampart runtime guardrail.\nReason: Prompt-injection detected (HIGH:1)\nTop matches: high instruction_override @ arguments.query"
  }]
}

๐ŸŽฏ Real-world findings โ€” see case-studies/

We ran rampart.audit() against the official examples of tadata-org/fastapi_mcp (the most popular FastAPIโ†’MCP library, 11.9k โญ):

Example ๐Ÿ”ด Crit ๐ŸŸ  High ๐ŸŸก Med ๐Ÿ”ต Low Verdict
01_basic_usage_example 0 0 2 0 โœ…
02_full_schema_description 0 0 2 0 โœ…
04_separate_server 0 0 2 0 โœ…
08_auth_token_passthrough 0 1 2 0 โœ…
09_auth_example_auth0 3 6 0 1 โŒ BLOCK

Headline: the official Auth0 example exposes /oauth/authorize, /oauth/register, and /.well-known/oauth-authorization-server to LLM clients. mcp-rampart catches all three and refuses to start the server. Full breakdown in case-studies/01-fastapi-mcp-examples.md.


How it works

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  Your FastAPI app                    โ”‚
โ”‚                                                     โ”‚
โ”‚   @app.get("/api/recipes")     โ† Existing routes    โ”‚
โ”‚   @app.post("/api/recipes")                         โ”‚
โ”‚   @app.delete("/api/admin/...")  โ† BAD              โ”‚
โ”‚                                                     โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚   โ”‚            mcp-rampart (embedded)            โ”‚   โ”‚
โ”‚   โ”‚                                             โ”‚   โ”‚
โ”‚   โ”‚  1. Introspect routes at startup            โ”‚   โ”‚
โ”‚   โ”‚  2. Extract Pydantic schemas + type hints   โ”‚   โ”‚
โ”‚   โ”‚  3. โšก Pre-flight security audit             โ”‚   โ”‚
โ”‚   โ”‚     โ†ณ refuse to start on CRITICAL findings  โ”‚   โ”‚
โ”‚   โ”‚  4. Generate MCP tool definitions           โ”‚   โ”‚
โ”‚   โ”‚  5. Mount JSON-RPC at /mcp                  โ”‚   โ”‚
โ”‚   โ”‚  6. ๐Ÿ›ก๏ธ  Scan every tools/call for injection โ”‚   โ”‚
โ”‚   โ”‚     โ†ณ block / alert / log per policy        โ”‚   โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
         โ”‚
         โ–ผ
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚  Claude   โ”‚ โ”‚  ChatGPT  โ”‚ โ”‚  Gemini   โ”‚ โ”‚ Cursor  โ”‚
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Roadmap

  • v0.1 โ€” FastAPI introspection, MCP Streamable HTTP transport, examples
  • v0.2 โ€” rampart.audit() with 7 security checks, severity levels, JSON/text output
  • v0.3 โ€” Runtime guardrails: prompt-injection detection + block/alert/log policy + structured callbacks
  • v0.4 โ€” Node.js / TypeScript port (mcp-rampart-js for Hono / Express / Fastify). Half of new MCP servers in 2026 ship in JS โ€” this is where the biggest reach gain is, not Python alternatives.
  • v0.5 โ€” Flask + Django adapters (the rest of the Python web ecosystem)
  • v0.6 โ€” Custom audit & guardrail rules (decorators / config / plugins) + tunable confidence thresholds
  • v0.7 โ€” Auth passthrough (OAuth2 / API keys / JWT), stdio transport
  • v1.0 โ€” Smart tool grouping (collapse CRUD into fewer tools), policy-as-code, OpenAPI/Asyncapi spec ingestion

FAQ

Why not just be a generic MCP proxy that works with any framework? Because the audit needs to read your code โ€” Pydantic models, decorators, type hints, docstrings. A proxy on the wire can't see those. See Why framework-aware.

Is this the same as pipelock / casbin-gateway / hyprmcp / apisec mcp-audit? No. They live at layers 2, 3, and 5. mcp-rampart lives at layer 4. See The 4 layers of MCP security.

Do I still need a gateway / firewall if I use mcp-rampart? Probably yes. mcp-rampart catches code-side issues and runtime injection. A gateway adds auth + rate-limiting + network policy. They're complementary.

What happens if mcp-rampart blocks a legitimate call? The MCP client receives an isError: true response with the diagnostic in the response body. Switch to policy="alert" while you tune patterns. You can also bypass per-route with rampart.exclude(...).

Can I add my own rules? Custom rules land in v0.6. Until then, subclass Auditor or InjectionDetector and pass it via custom_detector=.


Contributing

git clone https://github.com/miloudbelarebia/mcp-rampart
cd mcp-rampart
pip install -e ".[dev]"
pytest

See CONTRIBUTING.md for guidelines.


License

MIT โ€” see LICENSE.


Built with โค๏ธ by Miloud Belarebia
97M MCP installs per month. Someone has to audit what they expose.

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

mcp_rampart-0.3.4.tar.gz (29.3 kB view details)

Uploaded Source

Built Distribution

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

mcp_rampart-0.3.4-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

File details

Details for the file mcp_rampart-0.3.4.tar.gz.

File metadata

  • Download URL: mcp_rampart-0.3.4.tar.gz
  • Upload date:
  • Size: 29.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for mcp_rampart-0.3.4.tar.gz
Algorithm Hash digest
SHA256 1f47c18aa5c3c52020955caac9a8cfae181b55834517db2160fd94ee298bbb63
MD5 088638667182c860babbca214fcb4138
BLAKE2b-256 36e29be0237ba8f0f0aaa2ae1ac9ed7129dda398e0daa3f024116e7110c4783c

See more details on using hashes here.

File details

Details for the file mcp_rampart-0.3.4-py3-none-any.whl.

File metadata

  • Download URL: mcp_rampart-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 25.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for mcp_rampart-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 b03f54809b4785e1ea16a97e60584cd1ddfcde4ce700fadc880e38b95aa66c6e
MD5 2e4a6aa79e7166137226dad3ba8d2022
BLAKE2b-256 b2b9ce25f046277ed11fdbff688bf6bb6d653de1e82f826598abf721ea5af10a

See more details on using hashes here.

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