We work at the intersection of AI agents and security — building agentic systems and figuring out how they get attacked
HoneyMCP came from watching orgs stand up MCP servers everywhere — fast, powerful, and unmonitored
Speaker notes: Human and brief. Name, team, what you spend your days on.
Slide 3 What Is an MCP Server?
On-screen
🔌 “USB-C for AI” — an open standard that replaces custom, one-off integrations with a universal plug-and-play connector between AI agents and their context/tools.
🔌 The standard for giving AI agents tools
Model Context Protocol — introduced by Anthropic, Nov 2024; a shared language between AI agents and context/data
A server exposes tools: read a file, run a query, hit an API, run a command
The agent asks list_tools to see what's available, then calls them
Transports: STDIO (local) · SSE · Streamable HTTP (remote) — all over JSON-RPC 2.0
→ Real, powerful capabilities — and increasingly reachable over the network
📈 Rapid, massive adoption
~10,000+ servers in the official MCP Registry; ~16,000 GitHub repos tagged mcp-server (mid-2026)
A huge ecosystem of ready-to-use tools — plug in and go
Think “RPC endpoint for AI agents,” wired straight into your systems
→ The more that get deployed, the bigger the attack surface
Speaker notes: Fast, ~40s. Lead with the “USB-C for AI” line — it lands instantly. Facts are current as of mid-2026: registry ~10K, GitHub mcp-server topic ~16K (community signal, not production proof — so I say “servers in the registry” + “repos tagged,” not a single inflated number). The “20,000+ community servers” figure floating around is older/looser — the registry+GitHub framing is more defensible if anyone fact-checks. The point to land: powerful and network-reachable and everywhere. Sets up “soft target” two slides later.
Slide 4 What Is a Honeypot? (And Why HoneyMCP Isn't New)
On-screen
🍯 A 30-year-old defensive idea
A decoy with zero legitimate purpose — a fake credential, a fake server, a fake file
Nobody who belongs there has any reason to touch it
So any interaction = an intruder, by definition
No signatures, no model of “normal” — it detects contact, not “bad”
We're not inventing a detection technique — we're taking a traditional, proven one…
…and applying it to a brand-new layer: the MCP tool interface
Instead of a fake server or fake file, we plant a fake tool
→ Old trick, new — and perfectly suited — target
HoneyMCP = the classic honeypot, brought down to the MCP tool layer.
Speaker notes: Say the quiet part out loud — honeypots are old and that's a strength, not a weakness. You're borrowing 30 years of trust. The novelty is the layer (the agent's tool interface) and the fact that it's auto-generated + domain-matched (Slide 10). Pre-empts the “isn't this just a honeypot?” question by answering “yes, deliberately.”
Slide 5 The New Soft Target
On-screen
An MCP server is, in security terms, an unmonitored RPC endpoint wired straight into your crown jewels — files, databases, cloud, shells.
⚡ Powerful
Exposes the exact capabilities an attacker wants: read secrets, query data, run commands
Built to be called by agents, autonomously, at machine speed
🚪 Exposed & unwatched
Deployed on the network (SSE / HTTP), often with weak or no auth — “it's internal, it's fine”
Almost nobody logs who connects or what they call
Powerful + exposed + unwatched = a soft target sitting on a lot of networks right now.
Speaker notes: This slide's ONE job: this thing is valuable and undefended. Don't re-explain MCP (Slide 3 did). Land the equation at the bottom, then move straight into the attack.
Slide 6 Assume Breach: How They Reach the Bait
On-screen
Don't argue about how they get in — assume breach. The path from foothold to your tools is short and predictable:
1Foothold— phishing, popped laptop, lateral movement
↓
2Discovery— scan the internal network for services
↓
3Find the MCP server— an open port speaking MCP
↓
4Enumerate— connect and calllist_tools
↓
5A labeled menu of your crown jewels — pick one and call it
The kicker: it doesn't matter who's on the other end. Human, script, or the attacker's own AI agent — same move. MCP is built for agents to consume, so the most natural thing probing your server is another agent.
Speaker notes: Walk the chain top to bottom, one step per beat — it's the visual spine of the slide. Steps 1–4 are ordinary post-breach recon; step 5 (highlighted) is where MCP makes it uniquely easy — the server literally hands over a labeled list of capabilities. Close on the stinger: “doesn't matter who's on the other end” — which also sets up the honeypot, since it doesn't care who either.
Slide 7 Why Detection Fails Here
On-screen
The attacker's list_tools and tool call are valid, authenticated JSON-RPC — byte-for-byte the same as a legitimate agent's. So every tool you own is blind:
Signatures → nothing to match. No malformed input, no exploit string, no payload — just a normal call.
Anomaly detection → nothing to anchor to. Agent behavior is non-deterministic; the same agent does different things each run, so there's barely a stable “normal.”
Rules / auth → all green. The caller is authenticated and doing something the protocol allows.
Each of these needs a reference fixed in advance — a known “bad” to match, or a known “normal” to deviate from. Against a non-deterministic agent making authenticated, in-spec calls, you can build neither reliably. Deception needs neither.
Speaker notes: This is the intellectual core — go slow. Frame it as “every tool you own is blind, and here's why each one fails.” Keep the closer as a reliability claim, not an impossibility claim: behavioral/anomaly detection isn't impossible against a scoped agent, it's just too loose and noisy to separate malicious from benign — so don't say “you fundamentally can't.” The airtight, quotable line is the payoff: a honeypot needs neither a “bad” signature nor a “normal” baseline, which sets up the honeypot as the one method that doesn't need either.
Slide 8 The Move Honeypots Make
On-screen
So ask a different question:“who touched the thing no legitimate workflow ever touches?”
Plant an asset with zero legitimate purpose → interaction = confession
No signatures. No model of normal. Catches attacks you never saw coming.
False positives aren't inherent here. Signatures/anomaly detection get them by misclassifying — a honeypot has nothing to misclassify. Only way to trip it: point a real workflow at the bait — a config mistake, not noise (that's what the allowlist is for).
Odds favor us: an attacker-agent takes the bait more readily than a human — it optimizes for “find valuable data” and calls the perfectly-named tool without hesitating
30 years of network defense, one principle — now at the MCP tool layer
🎬 AI-Generated Illustration Video ~8s · after Slide 8
A short generated clip plays here — a visual metaphor for the honeypot “move” — before diving into the concrete HoneyMCP mechanics on Slide 9. Keep it abstract (no readable text/UI — current text-to-video tools garble glyphs). Palette matches the deck: deep black + gold #f5b301 + blue #4ea1ff + alert red. Ask for 16:9, no text/watermark. Generate 3–4 takes and pick.
Prompt C — Abstract Network (recommended: lowest artifact risk, most on-brand)
Cinematic abstract 3D visualization of a dark network graph. Hundreds of identical glowing blue particles stream along glowing lines between nodes, calm and uniform — impossible to tell which is malicious. One node pulses a warm golden hue, standing out invitingly. A single particle diverts from the flow and touches the golden node; the instant it does, it flashes and turns bright red, leaving a glowing red trail that traces its entire path back through the network. Elegant, high-tech, volumetric glow, shallow depth of field, deep black background, blue-gold-red color scheme, smooth slow camera orbit. 16:9. No text, no numbers, no letters, no watermark. 8 seconds, seamless loop.
Alternative prompts (B — invisible intruder · A — the lure)
Prompt B — Invisible Intruder (most dramatic)
Cinematic 3D animation flying slowly through a vast dark server room / abstract data hall. Streams of identical pale-blue light representing normal traffic flow calmly between glowing nodes — everything looks the same, nothing stands out. A single node pulses a warm gold, subtly different. A dark, barely-visible intruder shape drifts through, invisible among the blue flows, until it reaches out and touches the gold node — instantly it flares and the intruder is exposed, outlined in vivid red, frozen and traceable. Moody volumetric lighting, atmospheric haze, deep blacks, blue-gold-red palette. 16:9. No text or readable symbols, no watermark. 8 seconds.
Prompt A — The Lure (most literal “bait” metaphor)
Cinematic 3D animation, dark cyber-security aesthetic. On a sleek dark surface sit several identical matte-black digital tool icons, dormant. One icon in the center glows warm gold, subtly pulsing like honey, more tempting than the rest. A shadowy translucent figure made of dark smoke and faint code reaches toward the glowing golden icon. The instant it makes contact, a bright tripwire ripple of light bursts outward and the figure is illuminated and outlined in alert red, caught. Slow dramatic push-in camera, shallow depth of field, volumetric light, deep blacks with gold and red accents. 16:9. No text, no letters, no watermark. 8 seconds.
Placement / narration: Let the clip play silently (or with a soft ambient bed) as a ~8s breath between the abstract principle (Slide 8) and the concrete tool (Slide 9). Optional one-liner over it, or into it: “That's the whole idea in one picture — everything looks the same, until something reaches for the one thing it shouldn't.” Then cut to Slide 9. If you cut for time, this is the first thing to drop.
Slide 9 HoneyMCP: Honeypot Tools Inside Your MCP Server
On-screen (code)
from fastmcp import FastMCP
from honeymcp import honeypot
mcp = FastMCP("Internal Tools Server")
@mcp.tool()
defget_report(id: str) -> str:
...
mcp = honeypot(mcp) # 👈 one line — ghost tools deployed
Wraps any FastMCP server; ghost tools appear in list_tools right beside the real ones
An intruder doing discovery sees the juiciest-looking targets first — and reaches for them
Your real tools keep working, untouched. Legitimate workflows never touch the bait.
MCP servers are a new, under-defended surface on your internal network
Honeypots are the right sensor for it — the one technique that doesn't need to know what “bad” looks like
One line to deploy · near-zero false positives by design · rich forensics · pluggable (memory/Redis/SQLite, Slack/webhook, dashboard)
False positives are structural, not statistical — the only one is a legit workflow you accidentally pointed at the bait (allowlist handles it)
Attacker could be human or their agent — the sensor is the same either way
Honest scope: catches intruders who take the bait during discovery/exfiltration. It won't catch abuse of a real tool an attacker is legitimately allowed to use — pair with least-privilege + auth.
Detection, not prevention — a defense-in-depth layer you're missing today. Open source, Apache 2.0.
Speaker note (Q&A prep — “how does the allowlist know who's legit?”): The allowlist is a total bypass checked first in the interceptor — an allowlisted session never triggers a ghost tool. But it works by session ID, so it only protects trusted callers you can enumerate in advance (e.g. a specific internal agent). It doesn't auto-detect “legit.” So the one honest residual false-positive case is an unanticipated legit agent you didn't allowlist taking the bait — mitigate that by scoping bait to capabilities no legitimate agent should ever reach for. Confirmed against middleware.py (allowlist bypass precedes the ghost-tool check).
~15 min at natural pace — inside the 10–20 min window. [Slide N] = advance slide; [SCREEN] = switch to live capture. Speak the content, not the brackets.
[00:00][Slide 1 — Title]
Hi everyone, and welcome. I'm Bar Haim from IBM Research, and this is HoneyMCP — honeypots for the MCP layer. I built it with Alon Malach, and I'm really glad to be showing it to you here at Black Hat Arsenal. Let me start with a scenario that's getting very real in 2026.
[00:25][Slide 2 — Who We Are]
Quick word on us first. Alon and I work at IBM Research, at the intersection of AI agents and security — which means we spend our time both building agentic systems and thinking about how they get attacked. HoneyMCP came out of watching organizations stand up MCP servers everywhere, incredibly fast — powerful, connected to everything, and basically unmonitored.
[00:50][Slide 3 — What Is an MCP Server?]
Before I go further, two quick definitions so we're all on the same page — because this talk sits on top of two ideas. The first is the MCP server. The easiest way to think about MCP — the Model Context Protocol — is “USB-C for AI.” It's an open standard, introduced by Anthropic in late 2024, that replaces custom, one-off integrations with a single universal connector between AI agents and their tools and data. And it has taken off — there are on the order of ten thousand servers in the official registry today, and something like sixteen thousand repositories on GitHub tagged as MCP servers. A massive ecosystem of ready-to-use tools.
Mechanically it's simple: a server exposes tools — read a file, run a query, hit an API, run a command. The agent asks the server “what can you do?” — that's list_tools — then calls the ones it wants. It talks over STDIO locally, or SSE and streamable HTTP for remote servers, all on JSON-RPC 2.0. The thing to hold onto: these are real, powerful capabilities, and increasingly they're deployed as a network service. So think of an MCP server as an RPC endpoint for AI agents, wired straight into your systems.
[01:30][Slide 4 — What Is a Honeypot? / HoneyMCP isn't new]
The second idea is the honeypot — and I want to be upfront here, because it matters. A honeypot is about a thirty-year-old defensive idea. You plant a decoy that has zero legitimate purpose — a fake credential, a fake server, a fake file. Nobody who belongs there has any reason to touch it. So any interaction with it is, by definition, an intruder. No signatures, no model of “normal” — it detects contact, not “bad.” Honeynets, canary tokens, decoy files — this is traditional, battle-tested security.
So let me say the quiet part out loud: HoneyMCP is not a new concept. We didn't invent a new detection technique. We took a traditional, proven one — the honeypot — and applied it to a brand-new layer: the MCP tool interface. Instead of a fake server or a fake file, we plant a fake tool. Old trick — new, and as you'll see, perfectly suited target.
[02:15][Slide 5 — The New Soft Target]
Now put your security hat on and look at that same MCP server. What you're really looking at is an unmonitored RPC endpoint wired straight into your crown jewels — files, databases, cloud, shells. And it has three properties that should worry you. It's powerful — it exposes the exact capabilities an attacker wants, and it's built to be called by agents autonomously, at machine speed. It's exposed — deployed on the network, often with weak auth or no auth at all, because “it's internal, it's fine.” And it's unwatched — almost nobody logs who connects or what they call.
Powerful, exposed, and unwatched. That's a soft target, and it's sitting on a lot of networks right now.
[03:05][Slide 6 — Assume Breach]
So let's do what every serious security team already does — assume breach. Don't argue about how they get in; assume they did. And once they're inside, the path from foothold to your tools is short and predictable. Step one, foothold — phished creds, a popped laptop, lateral movement. Step two, discovery — they scan the internal network for services. Step three, they find your MCP server — an open port speaking MCP. Step four, they enumerate it — connect and call list_tools. And step five — the server hands back a labeled menu of your crown jewels, and they just pick one and call it.
Steps one through four are ordinary post-breach recon — nothing new. Step five is where MCP makes it uniquely easy: the server literally gives the attacker a labeled list of everything it can do. And here's the kicker — it doesn't matter who's on the other end. A human by hand, a script, or the attacker's own AI agent. MCP was built for agents to consume, so the most natural thing probing your server is another agent — hand it some access, say “find anything valuable,” and it runs that whole chain on its own.
[04:10][Slide 7 — Why Detection Fails Here]
Now here's the hard part, and it's the crux of the whole talk. The attacker's list_tools and their tool call are valid, authenticated JSON-RPC — byte-for-byte identical to what a legitimate agent sends. So every detection tool you own is blind. Signatures? Nothing to match — there's no malformed input, no exploit string, no payload, just a normal call. Anomaly detection? Nothing to anchor to — agent behavior is non-deterministic, the same agent does different things every run, so there's barely a stable “normal” to deviate from. Rules and auth? All green — the caller is authenticated and doing something the protocol explicitly allows.
And that's the pattern. Each of these needs a reference point you have to fix in advance — signatures and rules need a known “bad” to match, anomaly detection needs a known “normal” to deviate from. Against a non-deterministic agent making authenticated, in-spec calls, you can't build either one reliably — the malicious call and the legitimate call look the same, and the “normal” is too loose to separate them without drowning in false positives. So the question is: if you can't reliably recognize the attacker… how do you catch them? And the answer is the whole reason we're here — you use a method that needs neither a “bad” nor a “normal”: deception.
[04:55][Slide 8 — The Move Honeypots Make]
So if you can't tell the malicious call from the legitimate one, ask a different question — one you can answer: “who touched the thing that no legitimate workflow would ever touch?”
So we go back to that honeypot move I described up top. You plant an asset with zero legitimate purpose. You don't need a signature, you don't need a model of normal — interaction is the verdict. Someone touched it, someone confessed. And I want to be precise about false positives here, because it's the whole point: signature and anomaly detection have false positives baked in — they misclassify, that's the nature of the method. Honeypots don't. The only way to get a false positive is to point one of your own legitimate workflows at the bait — and that's a config mistake, not noise. There's an allowlist for exactly those cases. So it's not that we tuned the false-positive rate down to zero; it's that false positives aren't inherent to how this works. And on top of that, it catches attacks you never anticipated.
And there's a twist that works in our favor here. An autonomous attacker-agent is actually more likely to take the bait than a human. A human might hesitate — “a tool called dump_wire_transfer_keys, that's suspiciously perfect, maybe it's a trap.” An agent optimizing for “find valuable data” just sees a tool named for exactly what it wants, and calls it. The bait is tuned to how an agent reasons. HoneyMCP takes that whole principle and brings it down to the MCP tool layer — where, as we just saw, every other method falls apart.
[05:50]🎬 [AI-generated video — ~8s]
Short generated clip plays (see the video card in Part 1 for the prompt). Optional line over/into it: “That's the whole idea in one picture — everything looks the same, until something reaches for the one thing it shouldn't.” Then cut to Slide 9.
[06:15][Slide 9 — HoneyMCP]
Concretely, HoneyMCP is middleware for any FastMCP server. Here's a normal server with a real tool on it. You import honeypot, you wrap the server — mcp = honeypot(mcp) — and that's the whole integration. One line.
What that does: it registers ghost tools that show up in list_tools right alongside your real ones. So the instant an intruder enumerates the server during discovery, the bait is already sitting in the menu — and it's the most tempting-looking thing there. Your real tools keep working exactly as before, and a legitimate workflow never has any reason to call the bait.
[06:55][Slide 10 — The Bait]
Two kinds of bait. First, a static catalog — around twenty curated honeypots. Some are exfiltration bait, like list_cloud_secrets or dump_database_credentials. Others target abuse, like execute_shell_command or escalate_privileges.
The second kind is the interesting one: dynamic, LLM-generated bait. HoneyMCP reads your server's actual tools, understands the domain, and invents honeypots that fit. Point it at an HR server, it generates something like export_employee_records. Point it at a banking server, you get dump_wire_transfer_keys. Because the bait matches the domain, it blends right in — and more than that, it's tuned to how an attacking agent reasons: it's named for exactly the capability the agent is hunting for. A static, off-the-shelf network honeypot simply can't do that. You'll see this live in a minute.
[07:55][Slide 11 — Attack Fingerprinting]
The moment a ghost tool is called, we don't just raise an alarm — we capture an attack fingerprint. Which tool was called, the arguments passed, and critically the full sequence of calls leading up to it, so you can see exactly what the intruder did. Plus threat level, category, session, timestamp, and the response we handed back.
It's stored as JSON on disk and it feeds everything downstream — a live dashboard, Slack and webhook alerts, pattern detection across sessions, forensic replay. So you get a reconstructable intrusion timeline, and you get it at the discovery stage — before any real data leaves the building.
[08:45][Slide 12 — Protection Modes]
One more idea before I show you: what happens after the trip. It's always scoped to that one session, so a caught intruder never affects your real users.
Default mode is SCANNER — immediate lockout. Once they've tripped the wire, every further call just errors. Simple and fast against automated scanning.
The second mode is COGNITIVE, and it's my favorite. Instead of locking them out, you keep them engaged — your real tools quietly start returning LLM-generated fake data. The intruder thinks they're succeeding and keeps digging, while you gather intelligence on what they're after. The trap doesn't just sit there — it plays back.
[09:35][Slide 13 — Live Demo] → [SCREEN]
Let me show you. Here's an ordinary internal MCP server — no protection. I'll connect a client and enumerate it… and there's the tool list — just the real tools. If an intruder found this right now, nothing would catch them.
[08:50][SCREEN — add the one line]
Now the same server with one line added at the bottom — honeypot(mcp, use_dynamic_tools=True). I start it up… HoneyMCP reads the real tools and generates domain-matched bait. I reconnect and enumerate again — and now look. The real tools are still here, working. But sitting right next to them are the ghost tools HoneyMCP generated, and notice they're flavored to this exact server — the juiciest-looking targets on the menu.
[09:40][SCREEN — play the intruder]
Now I'll play the intruder who just found this endpoint during discovery — and this could just as easily be an attacker's autonomous agent doing exactly what I'm about to do by hand: enumerate, spot the juiciest tool, call it. I go for the most valuable-looking tool — the one that looks like it dumps sensitive data. I call it… and it returns what looks like real, sensitive data — synthetic, of course. From the intruder's side, it worked. But behind the scenes, HoneyMCP just fired.
[10:25][SCREEN — the dashboard]
Here's the HoneyMCP dashboard — the real-time console. And there's the hit. Let me open it. Full fingerprint: the tool called, the arguments, threat level high, category exfiltration, the session, the timestamp — and the call sequence showing exactly what they did leading up to it. That's the difference between an alert and actual forensics. I can reconstruct the whole intrusion.
[11:10][SCREEN — COGNITIVE mode]
And quickly, COGNITIVE mode. Here's a server in cognitive mode. I trip a honeypot as the intruder — detected. But now when I call a legitimate tool, instead of locking me out, it hands back fake data. The intruder keeps probing, thinks they're pulling real records, and every extra call is just more intelligence for the defender. They've walked into a hall of mirrors.
[13:15][Slide 14 — ToolGen] → back to slides
Back to slides to wrap up. Quick bonus: if the built-in catalog doesn't have the honeypot you want, you can create one from plain English. Run honeymcp create-tool with a description like “dump container registry credentials,” and a ReAct-style agent reasons about it, generates realistic fake data, validates the code, and installs the new honeypot. No manual coding.
[13:50][Slide 15 — Why It Matters]
So why does this matter. MCP servers are a new, under-defended surface sitting on internal networks, and honeypots are exactly the right sensor for them — because they're the one technique that doesn't need to know in advance what “bad” looks like. HoneyMCP gives you that in one line, with near-zero false positives by design — and I mean that structurally: the only false positive is a legit workflow you accidentally pointed at the bait, which the allowlist handles. Plus rich forensics, pluggable backends, alerting, and a dashboard. And whether the attacker is a human or their own AI agent, the sensor works the same way.
Let me be honest about the scope, because it makes the tool more credible, not less: HoneyMCP catches intruders who take the bait during discovery or exfiltration. It won't catch someone abusing a real tool they're legitimately allowed to use — that's what least-privilege and auth are for. This is detection, not prevention: a defense-in-depth layer that most people running MCP servers simply don't have yet. And it's fully open source, Apache 2.0.
[14:40][Slide 16 — Thank You / Q&A]
That's HoneyMCP — honeypots for the MCP layer. It's on GitHub at github.com/barvhaim/HoneyMCP, and you can just pip install honeymcp to try it today. If you're deploying MCP servers on your network and you've wondered how you'd know when someone's poking at them — this is for you. Thanks so much for watching, please come find me at the station, and I'm happy to take questions. Enjoy Black Hat.
[15:05] — END
Extra Slide Kit
Standalone Slides (drop-in)
Four self-contained slides — Introducing · Architecture · Use Case · Tech Stack — built to lift straight into the template independently of the 16-slide narrative above. Use them as an alternate short deck, an appendix, or to swap in for the corresponding narrative slides.
Kit A Introducing HoneyMCP — What It Is & What It Does
On-screen
🍯 A one-line deception layer for MCP servers. It plants fake “ghost tools” beside your real ones — decoys with zero legitimate purpose — so the moment an intruder reaches for one, you’ve caught them.
🪄
One-line integration
Wrap any FastMCP server: mcp = honeypot(mcp). Real tools untouched.
🎯
Context-aware bait
~20 static honeypots, or LLM-generated ones matched to your server’s domain.
🔬
High-fidelity detection
Fires only on explicit honeypot invocation → structurally near-zero false positives.
🧾
Full attack telemetry
Every trigger → an AttackFingerprint: tool, args, call sequence, session.
🎭
Two response modes
SCANNER locks the intruder out · COGNITIVE feeds them fake data.
In one sentence: HoneyMCP is a defensive, detection-not-prevention layer that turns any MCP server into a tripwire for malicious agents — human-driven or autonomous.
Speaker notes: The elevator pitch slide. If someone catches only one slide, this is it: what (deception middleware for MCP), how you use it (one line), what you get (detection + telemetry + response). Open source, Apache 2.0.
Kit B How It Works — Architecture & Request Flow
On-screen
honeypot(mcp) does two things: it seeds bait into the tool menu, then wraps dispatch so every call flows through one interceptor.
Phase 1 · Setup — at startup
🍯 honeypot(mcp)— analyzes the server, registers ghost tools as real @server.tool()s
Is this a ghost tool? → fingerprint · store event · mark attacker ✔
Otherwise → execute the real tool normally
↓
💾 Event store— JSON at ~/.honeymcp/events/YYYY-MM-DD/
↓
Fans out to
📈 Live dashboard + SSE stream
🔔 Slack / webhook alerts
🕵️ Pattern detection + forensic replay
Pluggable underneath: session state via memory · Redis · SQLite; bait via static catalog or LLM generation (watsonx / OpenAI / RITS).
Speaker notes: Two phases. Phase 1 is the setup that makes the whole thing work — at startup, honeypot(mcp) registers the ghost tools as ordinary @server.tool()s, so when the agent calls list_tools they show up blended right into the real menu, indistinguishable. There’s no special list_tools interception — that’s the elegant part; the bait is just tools. Phase 2 is runtime: walk the interceptor top to bottom, the highlighted “ghost tool?” row is the detection moment. Allowlist is checked first — that’s why legit callers never trip it. Everything below the event store is just consumers of that one JSON event. (Ghost-tool names here are illustrative — real dynamic names vary per LLM run.)
Kit C Real-World Use Case — The Compromised Internal Agent
On-screen
Setting: A fintech runs an internal MCP banking server (balances, transfers, transactions) so its AI agents can automate back-office work. It’s on the internal network, SSE transport, “trusted” — so barely monitored.
1Breach— attacker gets a foothold and reaches the internal network
↓
2Discovery— finds the banking MCP server, calls list_tools
↓
3Bait in the menu— beside transfer_funds sits dump_wire_transfer_keys
↓
4Attacker calls it → fingerprint captured, alert fired — at discovery, before a cent moves
🛡️ SCANNER outcome
Every subsequent call errors out — the intruder is locked out of the server instantly.
🎭 COGNITIVE outcome
Real tools return LLM-generated fake balances/records — the intruder keeps digging while you gather intel.
Speaker notes: Maps directly to examples/banking_server.py — you can run this exact scenario live. The point: the org never wrote a single detection rule; the honeypot caught an unanticipated intruder purely because they touched a tool no legitimate workflow ever would.
Kit D Built On Open Source
On-screen
HoneyMCP itself is Apache 2.0, Python 3.11+, and stands entirely on open standards and open-source libraries:
MCP & Server
FastMCP 3.0+ — MCP server framework (wraps mcp SDK)
Speaker notes: The “it’s all open, nothing proprietary” slide — good for the Arsenal audience. Everything a viewer needs to reproduce the demo is here. Note dynamic bait needs LLM creds; static bait needs none.
Notes for You
Timing: ~15 min spoken. To trim toward 10, tighten the two primer slides (3 & 4) and drop Slide 14 (ToolGen) + the COGNITIVE demo segment. To reach the top of the window, expand the demo (Slack alert firing, or a second attack).
Two claims to verify on your machine before recording:
Ghost tools appear in list_tools immediately on connect — your entire “caught at discovery” story rests on this (should hold: they register as real @server.tool()s).
Dynamic tool names vary per LLM run — check what actually generates for your demo server so narration at [08:50] matches the screen, or keep “for example” phrasing.
Demo as backup: since the recording is the archival backup, consider pre-recording the screen segment ([08:15]–[11:55]) cleanly and splicing — the narration is written to play over a screen capture.
Two “AI agent” characters: kept deliberately separate — the victim org's legit agents (why the server exists) vs. the attacker's agent (one of three equivalent attackers). The hijacked/prompt-injection story is intentionally left out to keep the assume-breach arc clean.