- TO
- FROM
- DATE
- RE
AI agents now reach the systems your team uses to ship, support, and operate the business through MCP.
The risk is not that they can read more context. It is that a suggested tool call can edit code, post to the wrong channel, mutate tickets, or touch customer data without a durable control.
Wicket is that durable control. Every tool call routes through the proxy and gets an allow-or-deny decision before it reaches your upstream MCP.
the prompt is not“A prompt instruction is not an authorization layer. Policy belongs in the path.”
— field note, post-incident
a permission system!
incident
| Field | Detail |
|---|---|
| Summary | Maintenance agent issued a broad delete_records call against prod.customer_records at 03:04 UTC |
| Impact | Production data deletion attempted outside release window |
| Root cause | Authorization enforced only by prompt instruction. No runtime policy in the request path. |
| Detection | Triggered Alex (on-call) via downstream alert at 03:07 UTC · 3 min after |
| Fix | Add an authorization layer in the request path. see § 02 ↓ |
request path
Wicket sits in the request path. Every MCP call crosses a policy check before the upstream MCP sees it.
forbid( principal, action in [ServiceMCP::Action::"delete_records", ServiceMCP::Action::"drop_table"], resource ) when { context.time.hour < 9 || context.time.hour > 17 };
↑ deny destructive ops outside 9–5. one rule. that's it.
outcome
Same agent, same call as § 01 — this time denied at the proxy and recorded. Every decision leaves a record answering who, what, when, and why.
| Field | Detail |
|---|---|
| Who | alex@company.com via maintenance-agent · 203.0.113.42 · Ashburn, VA |
| What | database.delete_records on prod.customer_records |
| When | 03:04:18 UTC · Apr 16, 2026 · session mcp_sess_7k91 |
| Why | Matched: release-window block · context.time.hour = 3 (allowed: 9–17) |
trust
The proxy sees enough to make a policy decision and write an audit record. It does not see the contents of your tool calls or their responses.
What gets recorded
- Principal — which member is making the call
- Action — which tool, on which resource
- Context — time, source IP, session
- Decision — allow or deny, matched rule, latency
What passes through and is gone
- Tool arguments — forwarded to upstream, never logged
- Tool responses — returned to the agent, never persisted
- Decrypted credentials — used in flight only, never written in plaintext
- Cross-tenant data — strict per-customer isolation, no shared store
Audit logs are yours alone — not pooled, not used for training. Each member brings their own keys; no shared service tokens. Revoke any individual without disrupting the team.