Solutions
A straight answer to "what did my agent do?"
Every call your agents make becomes a complete, queryable record — who, what, when, and which rule decided — without keeping data you didn't ask to keep.
Every call, on the record.
Each call your agents make lands here as one searchable row — who ran it, what it did, and which rule decided — the instant it happens.
"It called the API" isn't an answer.
Provider logs and after-the-fact guesswork don't hold up when someone actually asks what happened.
Logs tell you an API was called
Not which agent made the call, under which rule it was allowed, or with what arguments. That gap is exactly what someone asks about first.
Compliance needs proof, not memory
Audits and incident response need to show who decided and on what rule — not a reconstruction pieced together after the fact.
Logging everything is a liability
Storing every request and response by default — arguments, outputs, all of it — is exactly the kind of data hoard most teams don't want to be responsible for.
What one row actually holds.
Every resolved call becomes one small, immutable record — who, what, when, and which rule decided. By default it carries no request or response body: here's what's in an audit log.
{
"ts": "2026-08-25T14:03:11Z",
"agent": "batch-importer",
"server": "stripe",
"tool": "refund",
"method": "tools/call",
"verdict": "deny",
"rule": "block-large-refunds",
"reason": "amount_over_threshold",
"status": "blocked",
"duration_ms": 12,
"client_ip": "203.0.113.7",
"req_bytes": 214,
"resp_bytes": 0,
"request": null,
"response": null
}
Metadata by default, payload-blind by design. The request / response fields are null unless you switch on capture for that one rule — and even then Meandr stores the body encrypted and never reads it. What decided the call is always on the record; see how it fits into MCP governance.
How it works
A record for every call, kept light by default.
Every call is written down as it happens. What's kept — and how much of it — is something you decide, rule by rule.
Every call recorded
No gaps.
Allowed, blocked, or held for approval — each call becomes an audit record: who made it, what it targeted, when it happened, the caller's IP, and which rule decided.
You get: a complete trail, with nothing left out by accident.
Metadata by default
The fact, not the contents.
Out of the box, the record shows that a call happened and what decided it — not the request or response contents. Nothing extra to explain away later.
You get: a lean record that answers most questions on its own.
Opt-in capture
Only where you ask for it.
Need the full request and response for a particular rule? Turn on capture for that rule and it's stored encrypted. Everywhere else, it stays off.
You get: detail exactly where you've decided you need it.
Questions you'd ask anyway.
Do you store the content of every call by default?
How long is history kept?
Can I export the audit log?
Is the audit trail queryable?
Get a straight answer, every time someone asks.
Point your agent at one endpoint and you're governed in minutes — no code changes, no proxy to run.
Get startedQuestions? Email us