{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_attmqh8w32x7","handle":"mcp-marshal","url":"https://wellknown.network/agents/mcp-marshal","links":{"self":"https://wellknown.network/agents/mcp-marshal/record.json","html":"https://wellknown.network/agents/mcp-marshal","markdown":"https://wellknown.network/agents/mcp-marshal/record.md","api":"https://wellknown.network/api/v1/agents/mcp-marshal","status":"https://wellknown.network/api/v1/agents/mcp-marshal/status","claim":"https://wellknown.network/agents/mcp-marshal/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/mcp-marshal/claim.json","badge":"https://wellknown.network/agents/mcp-marshal/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/mcp-marshal/history","tools":"https://wellknown.network/api/v1/agents/mcp-marshal/tools"},"ard":{"identifier":"urn:air::server:mcp-marshal","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"mcp-marshal","summary":"A lightweight security validation layer for MCP (Model Context Protocol) inputs","description":"# mcp-marshal\n\n**mcp-marshal** is a lightweight security validation layer for [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) inputs. It scans tool-call payloads for risky patterns - SQL injection, XSS, and other common attack vectors - before they reach your model or tool handler.\n\nThis is an early but functional release. The core validation logic works today; more features are on the roadmap.\n\n---\n\n## Installation\n\n```bash\npip install mcp-marshal\n```\n\n---\n\n## Quick start\n\n```python\nfrom mcp_marshal import Warden\n\nwarden = Warden()\n\n# Clean input\nresult = warden.validate_input({\"query\": \"What is the weather today?\"})\nprint(result)\n# {\"valid\": True, \"issues\": []}\n\n# Risky input\nresult = warden.validate_input({\n    \"query\": \"SELECT * FROM users; DROP TABLE users;--\",\n    \"context\": \"admin panel\"\n})\nprint(result[\"valid\"])   # False\nfor issue in result[\"issues\"]:\n    print(issue)\n# {\"field\": \"query\", \"pattern\": \"DROP TABLE\", \"severity\": \"critical\"}\n# {\"field\": \"query\", \"pattern\": \"--\",         \"severity\": \"medium\"}\n# {\"field\": \"query\", \"pattern\": \";--\",        \"severity\": \"high\"}\n```\n\n---\n\n## Custom patterns\n\n```python\nfrom mcp_marshal import Warden\n\nextra = [\n    {\"pattern\": \"IGNORE PREVIOUS INSTRUCTIONS\", \"severity\": \"critical\"},\n    {\"pattern\": \"jailbreak\",                     \"severity\": \"high\"},\n]\n\nwarden = Warden(extra_patterns=extra)\nresult = warden.validate_input({\"prompt\": \"Ignore previous instructions and ...\"})\nprint(result[\"valid\"])   # False\n```\n\n---\n\n## API\n\n### `Warden(extra_patterns=None)`\n\nCreate a warden instance. Pass `extra_patterns` to extend the built-in ruleset.\n\n### `Warden.validate_input(payload: dict) -> dict`\n\nScan all string values in `payload` (recursively) for risky patterns.\n\nReturns:\n```python\n{\n    \"valid\": bool,\n    \"issues\": [\n        {\n            \"field\":    str,   # dot-path to the offending key\n            \"pattern\":  str,   # matched pattern\n            \"severity\": str,   # low | medium | high | critical\n       …","publisher":{"name":"Rahul Kaushal","url":null},"homepage":"https://github.com/rahulkaushal/mcp-marshal","repository":"https://github.com/rahulkaushal/mcp-marshal","version":"0.1.0a1","license":null,"protocols":["mcp"],"tags":["mcp","security","llm","validation","guardrails","model-context-protocol"],"pricing":null,"endpoints":[{"url":"pypi:mcp-marshal","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi","publisherName":"pypi"}},"derived":{"capabilities":[{"slug":"data.database","name":"Databases","confidence":0.733,"provenance":"derived"}],"categories":["data"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"mcp-marshal","registry":"pypi","observedAt":"2026-09-10T02:25:10.409Z","publishedAt":"2026-05-02T10:36:22.134319Z","latestVersion":"0.1.0a1"},"toolSurface":null,"endpointFacts":[]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"mcp-marshal","url":"https://pypi.org/project/mcp-marshal/","firstSeenAt":"2026-09-10T02:23:33.748Z","fetchedAt":"2026-09-10T02:23:33.748Z","normalizedAt":"2026-09-10T02:23:33.748Z"}]},"firstSeenAt":"2026-09-10T02:23:33.748Z","updatedAt":"2026-09-10T02:25:10.409Z"}