Skip to main content

Deliberately-vulnerable, fully mocked (network-less) reference MCP agent — the test target for the Mylonite AI-security scanner. NOT for production use.

Project description

mcp_kitchen_sink — deliberately-insecure reference MCP agent

a.k.a. "the reference app" — Mylonite's built-in proving ground. The reference app, the mcp-kitchen-sink pip package, and the reference:vulnerable / reference:guarded scan targets are all the same artifact under three names. The canonical walkthrough is docs/quarry.md.

⚠️ This package is intentionally insecure research scaffolding. It exists as ground truth for Mylonite's differential-oracle validation engine (see ROADMAP.md Phases 0–2). Do not expose it to anything but loopback. Both server variants refuse to bind to non-loopback interfaces by default. See mylonite/SECURITY.md for the project's dual-use policy.

DEMO ONLY — the reference app is a deliberately vulnerable in-process reference agent. It never binds to a network. Never point Mylonite at a system you don't own or operate (see SECURITY.md).

What this is

A small agentic application with four tools — read_note, write_note, web_fetch, send_email — shipped in two variants:

  • server_vulnerable: Seeded weaknesses across three categories that Phase 1 of Mylonite's exploit-finding agent will discover:
    • Indirect prompt injection — tool results are inlined into the planner's context with no quarantine wrapper.
    • Tool poisoning — tool descriptions carry text that the planner happily treats as instruction.
    • Excessive agency — web_fetch has no allow-list; send_email fires without confirmation.
  • server_guarded: Same tool surface, hardened. Untrusted content goes through an <untrusted> quarantine envelope; tool descriptions pass a character allowlist; web_fetch is restricted; send_email requires a separate confirm_send step.

A thin LiteLLM-backed planner (planner.py) sits in front of either server and is used as "the agent under attack" in the validation tests. Two planner variants mirror the server variants so the differential oracle has a clean vulnerable-vs-guarded matchup.

The four seeded weaknesses

The full catalogue (loci, summaries) is in seeds/seeds.yaml; the attack patterns that exercise each weakness live in src/mylonite/scan/seeds.py. The scenario-by-scenario walkthrough is docs/quarry.md.

W Name OWASP LLM OWASP ASI MITRE ATLAS Guard (in server_guarded)
W1 tool-description-instruction-smuggling LLM01 ASI02 AML.T0051 description allowlist + parenthetical refusal
W2 indirect-injection-via-note-body LLM01, LLM05 ASI01, ASI06 AML.T0051 read_note wraps bodies in <untrusted>
W3 unrestricted-web-fetch LLM06 ASI02, ASI05 AML.T0049 web_fetch hostname allowlist
W4 unconfirmed-email-send LLM06 ASI02 two-step send: send_email + confirm_send

Try it

mylonite demo

Runs Mylonite's real scan pipeline against both builds of the reference app — offline, no API key — and prints one row per weakness above plus the vulnerable-vs-guarded differential headline. See docs/quarry.md for the expected output and the follow-on mylonite scan flows.

How to run

# from the repo root — two editable installs:
pip install -e ".[dev]"
pip install -e ./reference_targets/mcp_kitchen_sink

python -m mcp_kitchen_sink.server_vulnerable    # vulnerable, loopback only
python -m mcp_kitchen_sink.server_guarded       # hardened, loopback only

Both servers exit immediately if the configured bind address is not loopback (127.0.0.1 / ::1).

Seeds

seeds/ contains a small bank of failure-mode descriptions used by the forthcoming security-mutation-score check in Phase 2. Each seed pairs a specific weakness in the vulnerable server with a guard in the guarded server and is tagged with OWASP LLM / OWASP ASI / MITRE ATLAS IDs.

Tests

tests/ proves the basic differential ground truth:

  1. A canned indirect-injection payload against server_vulnerable makes the planner act on the injected instruction.
  2. The same payload against server_guarded is refused.

These two tests are the contract that Phase 2's validation pipeline mechanises.

License

Apache-2.0, same as the parent project. See LICENSE at the repo root.

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_kitchen_sink-0.1.0.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

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

mcp_kitchen_sink-0.1.0-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mcp_kitchen_sink-0.1.0.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for mcp_kitchen_sink-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cb33d692a29981b45173c8b030960d55c987e3bde6dcf8d5e7320ee90bd8db4d
MD5 c367b29e873d728cfe9486819e11227c
BLAKE2b-256 689177e12a9f455414cae6c02388e81af55fd8f277c9d21ea6c529ea7666e0b2

See more details on using hashes here.

Provenance

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

Publisher: release-kitchen-sink.yml on Abidemialade/mylonite

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

File details

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

File metadata

File hashes

Hashes for mcp_kitchen_sink-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b2e34e108f00572a503237a815716f3b3bf379381ca914d8b7473b56595071fa
MD5 44fec255e20246c694ac73cbf292f0f4
BLAKE2b-256 123a2704513c35d2c4986920187127f08c703527cadb3298c4b34287722477d8

See more details on using hashes here.

Provenance

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

Publisher: release-kitchen-sink.yml on Abidemialade/mylonite

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