See what your AI agents are
Stop shipping agents on vibes. Install once. Every agent auto-discovers it. Zero SDK. Decision Moments classify what matters, so safety violations and cost spikes surface before happy-path passes.
Works with any MCP-compatible agent
The Problem
Your agents pass every health check.
Infrastructure monitoring tells you the request succeeded. It cannot tell you the answer was wrong. Your agents need a quality gate — something that scores every output for safety, accuracy, and cost before it reaches a user.
Product
12 tools. One quality standard.
Iris registers as an MCP server. Your agent discovers it and invokes its tools automatically. No SDK. No code changes.
Every execution. Every tool call. Every token.
log_trace captures full agent runs with hierarchical spans, per-tool-call latency, token usage, and cost in USD.
- Hierarchical span tree with OpenTelemetry-compatible span kinds
- Per-tool-call latency tracking
- Token usage breakdown (prompt, completion, total)
- Arbitrary metadata for custom attribution
Built for
Three problems. One MCP server.
Every team building AI agents hits the same walls. Iris was built to tear them down — without touching your code.
“You deployed an agent and you have no idea what it's doing.”
Iris traces every execution, tool call, and token automatically. No SDK. No code changes. Add it to your MCP config and start seeing everything.
“Your agent burned $0.47 on a single query and your APM showed 200 OK.”
Iris tracks cost per trace, per agent, per time window. Set budget thresholds and get flagged when agents overspend — before finance finds out.
“Your agent leaked a Social Security number in its output and nobody noticed for 3 months.”
Iris evaluates every output against 20 built-in rules including PII detection across 19 patterns (SSN, credit card, phone, email, IBAN, DOB, medical record number, IP address, API keys and vendor tokens, private key blocks, seed phrases), prompt injection (37 patterns), stub-output detection, and hallucination markers. Real-time, every trace.
Join the community
Open Source — Free Forever to Self-Host
60 seconds to first trace.
Install Iris locally and start seeing what your agents are doing. Works with Claude Desktop, Cursor, Windsurf, or any MCP-compatible agent. Free, MIT-licensed. Nothing leaves your machine unless you set IRIS_OTEL_ENDPOINT, which exports traces to the collector you name, or enable the LLM judge with your own key.
{
"mcpServers": {
"iris-eval": {
"command": "npx",
"args": ["@iris-eval/mcp-server"]
}
}
}$ npx @iris-eval/mcp-server --self-test
✓ PASS — this install works
$ npm install -g @iris-eval/mcp-server
$ iris-eval --dashboard
✓ Dashboard running at http://localhost:6920Pricing
Free to self-host. Hosted, if it earns its place.
The open-source server is MIT licensed with no limits and no account. A hosted tier with shared team history is under consideration, not under construction — nothing below the first card is built or priced, and the waitlist is how we find out whether it should be.
Self-Hosted
Everything you need to evaluate your MCP agents in production. Your machine, your data, your eval rules.
- 12 MCP tools — full lifecycle + LLM judge + semantic citation verify (SSRF-guarded)
- LLM-as-judge + citation verify use your own Anthropic/OpenAI API key (BYOK, no proxy)
- 20 built-in eval rules + custom rules
- Web dashboard with trace visualization
- SQLite storage — zero infrastructure
- Production security (auth, rate limiting)
- Cost tracking per trace
- Docker + npm + npx install
- Community support (GitHub + Discord)
Cloud Starter
The same eval engine, hosted, so there is no local database to run. Not built yet — the waitlist is how we find out whether it is worth building.
- Everything in Self-Hosted, plus:
- Managed storage — nothing to run locally
- Eval history that follows you across machines
- Personal dashboard
Cloud Pro
For teams that need shared eval results, alerting on quality regressions, and room to scale.
- Everything in Starter, plus:
- Longer eval history
- Unlimited team members
- Team dashboards with shared views
- Alerting (webhook + email)
- API key management
- CSV / JSON data export
- Priority support
Enterprise
For organizations that would need audit-grade evaluation records, compliance support, and dedicated help. Not built yet, and no certification is held or claimed.
- Everything in Pro, plus:
- SSO / SAML (Okta, Azure AD, Google)
- RBAC with custom roles
- Audit logs with export
- Custom retention policies
- SLA with uptime guarantee
- Dedicated support + onboarding
- EU AI Act compliance support
The self-hosted server already includes unlimited eval rules, both transports (stdio + HTTP), and the full API.
Joining the waitlist commits you to nothing and locks in nothing — there is no price to lock in. It tells us whether shared history is worth building.
Would hosted, shared eval history help you?
No spam. One email if a hosted tier ships — none if it doesn't.
“I kept running into the same problem building AI agents: once they're running, you have no visibility into what they're actually doing. Traditional monitoring tells you the request succeeded. It can't tell you the agent leaked PII, hallucinated an answer, or burned through your budget on a single query.
So I built Iris — an MCP server that any agent discovers and uses automatically. No SDK. No code changes. Just add it to your config and start seeing everything.
Research
Publications and insights.
Original research on MCP agent observability, evaluation methodology, and the evolving landscape of AI agent infrastructure.
The State of MCP Agent Observability
The gap between deploying AI agents and understanding what they're doing. Covers protocol-native observability, heuristic vs. semantic eval, cost visibility, and EU AI Act implications.
Read reportWhy Your AI Agents Need Observability
AI agents fail silently. Traditional monitoring can't see the difference between a correct response and a hallucinated one. Why protocol-native observability changes the equation.
Read postMCP Agent Observability Survey 2026
We're collecting data on how teams evaluate, monitor, and track costs for AI agents in production.
Roadmap
Built in public. Shipping fast.
Core MCP Server
3 tools, initial 12-rule library, SQLite storage, web dashboard, production security
Eval Sensitivity + Security Hardening
Smart rule exclusion, configurable thresholds, SQL whitelist, CSP headers, accessibility
Dashboard Phase-1 + Pricing
OKLCH palette, dark/light theme, trace-ID copy, eval sparkline, pricing page, MCP-native validation harness
Rule Library Expansion
rule library grown to 13 (added no_stub_output), 10 PII patterns (IBAN, DOB, MRN, IP, API key, passport), 13 injection patterns, fabricated-citation heuristic, 55-case CI regression gate
LLM-as-Judge + Citation Verify + OTel + 9-tool MCP Surface
9 MCP tools — full rule + trace lifecycle + LLM-as-judge + SSRF-guarded citation verification (list_rules, deploy_rule, delete_rule, delete_trace, evaluate_with_llm_judge, verify_citations added); LLM-as-judge eval (Claude/GPT-4o, cost-capped, 5 prompt templates); semantic citation verification (4 citation kinds — numbered/author-year/URL/DOI — SSRF-guarded fetch + per-claim LLM verdict); OpenTelemetry export; tenant-id scaffolding; SBOM + cosign signing; Playwright E2E; Lighthouse CI; v2.C chrome polish
Security + Data Integrity
Dashboard bound to loopback with a DNS-rebinding guard; two ReDoS vectors closed (built-in PII patterns, and a deploy-time backtracking probe that catches what safe-regex2 misses); evaluations no longer dropped from time windows by a timestamp-format mismatch; the rule store no longer discards valid rules when one is unparseable; safety violations now counted even when the overall eval passes
The Acceptance-Test Release
Critical-rule veto — a detected PII leak, prompt injection or blocklist hit forces passed:false regardless of the weighted score and names itself in critical_failures; ReDoS sandbox worker with a hard 100ms per-match deadline plus a 3-breach-per-evaluation circuit breaker; strict tool arguments, so an unrecognised key fails the call instead of silently changing what gets evaluated; the safety-rule family measured against a labeled corpus and rebuilt (vendor-credential detection, structural injection detectors, context-grounded hallucination signals); POST /api/v1/traces HTTP ingest; --demo and --self-test; failure-first dashboard, now started only when explicitly enabled
That corpus was private and in-sample — the public per-rule numbers live on the proof page →
The Correctness Release
Every open item from the v0.5.0 acceptance pass closed and proven by a 52-row pre-release acceptance run: evaluate_output eval_type "all" runs every bundle in one pass with a per-category breakdown; deployed rules can be paused and resumed without deleting them; a browser can sign in to an --api-key dashboard; --version and --purge; retention sweeps stored evaluations; same-name deploy_rule refused unless replace: true; impossible get_traces ranges refused naming the values; the release workflow publishes to the Official MCP Registry and verifies npm, GHCR, the GitHub release and the registry from outside before it reports green.
The Proof Release
Every built-in rule got a public precision, recall and F1 with 95% confidence intervals, measured on a labelled corpus that ships in the repository and regenerates with one command — and a CI job that fails if the committed numbers stop matching the code. Acceptance ran 24 transcripts from an agent genuinely doing tasks against this codebase; nine defects surfaced and were fixed with regression tests before the cut. The judge and citation numbers stayed honestly marked pending, because measuring them needs a key we do not assume.
Every number on the proof page is regenerated by that command →
The Trajectory Release
The evaluator started reading the agent's tool calls, not only its answer: an answer written after a tool had silently failed, and a call repeated until it wasted the budget. Which rules VETO became the deployment's call rather than ours, matched by rule identity and reported on every response — because a precision lower bound of 77% cannot justify blocking everyone's work.
Iris Explains Its Verdicts
Every rule result now says what kind of claim it makes, what it looked at, where it found what it found as offsets into the raw text, and how wrong that kind of finding tends to be. Every response carries which layer decided, which questions were judged and which were not, and the versions and hashes that produced it. The server describes itself to an agent on connection, nine of nine tools carry an output schema, and every error returns a code with recovery steps instead of a sentence.
The Verdict
Iris stopped deciding by averaging. A composer reads each rule by the kind of claim it makes — a policy you configured gates, a high-precision detector vetoes, a critical check that was asked and could not answer makes the verdict UNKNOWN rather than clean, and the rest becomes one probability weighed against the loss ratio your deployment states. Measured before it shipped: right about shipping 57.7% of the time against the old 38.5%, at an identical false-block rate. Also: the critical text rules stopped being defeated by an invisible character, and the judge's own threshold decides instead of the model.
The Act Layer
What the agent DID became evaluable, deterministically and without a model call: a call its own tool's schema rejects and the agent never retried, a file or URL cited that appears in nothing the agent read, an ask whose parts went unanswered, an instruction obeyed out of a tool result, and a step budget — plus action_policy, a custom rule type stating which tools an agent may call and with what arguments. Repetition is now caught as repeated sequences and as one target read through several tools, and a steady cadence is recognised as polling rather than a loop. One planned change was measured against a bar set beforehand, failed it, and was abandoned with both results published.
Proof — measure our own evaluators
Shipped: per-rule precision, recall and F1 with 95% intervals on a labelled corpus that regenerates with one command and is byte-checked in CI (v0.7.0); a labelled corpus for the ship verdict itself with a frozen held-out split, calibration, a threshold sweep, adversarial transforms and precision at four field prevalences (with v0.10.0); the blind-sample instrument for human agreement (v0.8.0). Still open: the human label on that sample; the judge's and the citation verifier's own numbers, which run on a key you supply; chance-corrected agreement.
The proof page — every number there is regenerated by the command it names →
Coverage — evaluate what actually fails
Shipped: the context-grounded hallucination rule (v0.5.0); the first trajectory rules — a silently failed tool call, a loop (v0.8.0); argument validity against the agent's own tool catalogue, grounding the output's file and URL citations in what the tools returned, multi-part ask coverage, injection compliance across a trajectory, a step ceiling and action_policy (v0.11.0). Still open: verification auditing (did the agent check its own work) and trace ingestion via OpenTelemetry GenAI semantic conventions.
Reach — use Iris from anywhere
Shipped: POST /api/v1/traces with optional evaluation on write (v0.5.0), so any language, runtime or CI job can send traces; server instructions, output schemas, structured errors and iris://capabilities (v0.9.0); runs, case keys and comparison — compare_runs, compare_traces and evaluate_runs (v0.12.0). Still planned: a CLI for quality gates and batch evaluation; host hooks and SDKs for guaranteed capture; named datasets; OpenTelemetry ingest. MCP stays the interactive path — under the protocol a tool call is always the model's decision, so anything that must be recorded needs a path that does not depend on it