Stop shipping agents on vibes. Score every agent output for quality, safety, and cost.
Connect Runs on your machine
claude mcp add mcp-server -e IRIS_API_KEY=<IRIS_API_KEY> -e IRIS_API_KEY_FILE=<IRIS_API_KEY_FILE> -e IRIS_ALLOW_UNAUTHENTICATED=<IRIS_ALLOW_UNAUTHENTICATED> -e IRIS_DB_PATH=<IRIS_DB_PATH> -e IRIS_SQLITE_DRIVER=<IRIS_SQLITE_DRIVER> -e IRIS_SEARCH_BUDGET_MS=<IRIS_SEARCH_BUDGET_MS> -e IRIS_SEARCH_INDEX=<IRIS_SEARCH_INDEX> -e IRIS_LOG_LEVEL=<IRIS_LOG_LEVEL> -e IRIS_HOME=<IRIS_HOME> -e IRIS_ANTHROPIC_API_KEY=<IRIS_ANTHROPIC_API_KEY> -e IRIS_OPENAI_API_KEY=<IRIS_OPENAI_API_KEY> -e IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL=<IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL> -e IRIS_RELEVANCE_JUDGE_MODEL=<IRIS_RELEVANCE_JUDGE_MODEL> -e IRIS_LLM_JUDGE_DAILY_BUDGET_USD=<IRIS_LLM_JUDGE_DAILY_BUDGET_USD> -e IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD=<IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD> -e IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST=<IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST> -e IRIS_RELEVANCE_JUDGE_REDACT=<IRIS_RELEVANCE_JUDGE_REDACT> -e IRIS_CITATION_ALLOW_FETCH=<IRIS_CITATION_ALLOW_FETCH> -e IRIS_DASHBOARD=<IRIS_DASHBOARD> -e IRIS_DASHBOARD_PORT=<IRIS_DASHBOARD_PORT> -e IRIS_PORT=<IRIS_PORT> -e IRIS_OTEL_ENDPOINT=<IRIS_OTEL_ENDPOINT> -e IRIS_CITATION_DOMAINS=<IRIS_CITATION_DOMAINS> -e IRIS_CITATION_MAX_COST_USD_TOTAL=<IRIS_CITATION_MAX_COST_USD_TOTAL> -e IRIS_TRANSPORT=<IRIS_TRANSPORT> -e IRIS_HOST=<IRIS_HOST> -e IRIS_ALLOWED_ORIGINS=<IRIS_ALLOWED_ORIGINS> -e IRIS_MAX_INPUT_ELEMENTS=<IRIS_MAX_INPUT_ELEMENTS> -e IRIS_MAX_TOOL_INPUT_ELEMENTS=<IRIS_MAX_TOOL_INPUT_ELEMENTS> -e IRIS_DASHBOARD_HOST=<IRIS_DASHBOARD_HOST> -e IRIS_OTEL_HEADERS=<IRIS_OTEL_HEADERS> -e IRIS_OTEL_SERVICE_NAME=<IRIS_OTEL_SERVICE_NAME> -e IRIS_OTEL_TIMEOUT_MS=<IRIS_OTEL_TIMEOUT_MS> -e IRIS_WEBHOOK_URL=<IRIS_WEBHOOK_URL> -e IRIS_WEBHOOK_SECRET=<IRIS_WEBHOOK_SECRET> -- npx -y @iris-eval/[email protected]
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"-y",
"@iris-eval/[email protected]"
],
"env": {
"IRIS_API_KEY": "<IRIS_API_KEY>",
"IRIS_API_KEY_FILE": "<IRIS_API_KEY_FILE>",
"IRIS_ALLOW_UNAUTHENTICATED": "<IRIS_ALLOW_UNAUTHENTICATED>",
"IRIS_DB_PATH": "<IRIS_DB_PATH>",
"IRIS_SQLITE_DRIVER": "<IRIS_SQLITE_DRIVER>",
"IRIS_SEARCH_BUDGET_MS": "<IRIS_SEARCH_BUDGET_MS>",
"IRIS_SEARCH_INDEX": "<IRIS_SEARCH_INDEX>",
"IRIS_LOG_LEVEL": "<IRIS_LOG_LEVEL>",
"IRIS_HOME": "<IRIS_HOME>",
"IRIS_ANTHROPIC_API_KEY": "<IRIS_ANTHROPIC_API_KEY>",
"IRIS_OPENAI_API_KEY": "<IRIS_OPENAI_API_KEY>",
"IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL": "<IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL>",
"IRIS_RELEVANCE_JUDGE_MODEL": "<IRIS_RELEVANCE_JUDGE_MODEL>",
"IRIS_LLM_JUDGE_DAILY_BUDGET_USD": "<IRIS_LLM_JUDGE_DAILY_BUDGET_USD>",
"IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD": "<IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD>",
"IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST": "<IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST>",
"IRIS_RELEVANCE_JUDGE_REDACT": "<IRIS_RELEVANCE_JUDGE_REDACT>",
"IRIS_CITATION_ALLOW_FETCH": "<IRIS_CITATION_ALLOW_FETCH>",
"IRIS_DASHBOARD": "<IRIS_DASHBOARD>",
"IRIS_DASHBOARD_PORT": "<IRIS_DASHBOARD_PORT>",
"IRIS_PORT": "<IRIS_PORT>",
"IRIS_OTEL_ENDPOINT": "<IRIS_OTEL_ENDPOINT>",
"IRIS_CITATION_DOMAINS": "<IRIS_CITATION_DOMAINS>",
"IRIS_CITATION_MAX_COST_USD_TOTAL": "<IRIS_CITATION_MAX_COST_USD_TOTAL>",
"IRIS_TRANSPORT": "<IRIS_TRANSPORT>",
"IRIS_HOST": "<IRIS_HOST>",
"IRIS_ALLOWED_ORIGINS": "<IRIS_ALLOWED_ORIGINS>",
"IRIS_MAX_INPUT_ELEMENTS": "<IRIS_MAX_INPUT_ELEMENTS>",
"IRIS_MAX_TOOL_INPUT_ELEMENTS": "<IRIS_MAX_TOOL_INPUT_ELEMENTS>",
"IRIS_DASHBOARD_HOST": "<IRIS_DASHBOARD_HOST>",
"IRIS_OTEL_HEADERS": "<IRIS_OTEL_HEADERS>",
"IRIS_OTEL_SERVICE_NAME": "<IRIS_OTEL_SERVICE_NAME>",
"IRIS_OTEL_TIMEOUT_MS": "<IRIS_OTEL_TIMEOUT_MS>",
"IRIS_WEBHOOK_URL": "<IRIS_WEBHOOK_URL>",
"IRIS_WEBHOOK_SECRET": "<IRIS_WEBHOOK_SECRET>"
}
}
}
}
{
"mcpServers": {
"mcp-server": {
"command": "npx",
"args": [
"-y",
"@iris-eval/[email protected]"
],
"env": {
"IRIS_API_KEY": "<IRIS_API_KEY>",
"IRIS_API_KEY_FILE": "<IRIS_API_KEY_FILE>",
"IRIS_ALLOW_UNAUTHENTICATED": "<IRIS_ALLOW_UNAUTHENTICATED>",
"IRIS_DB_PATH": "<IRIS_DB_PATH>",
"IRIS_SQLITE_DRIVER": "<IRIS_SQLITE_DRIVER>",
"IRIS_SEARCH_BUDGET_MS": "<IRIS_SEARCH_BUDGET_MS>",
"IRIS_SEARCH_INDEX": "<IRIS_SEARCH_INDEX>",
"IRIS_LOG_LEVEL": "<IRIS_LOG_LEVEL>",
"IRIS_HOME": "<IRIS_HOME>",
"IRIS_ANTHROPIC_API_KEY": "<IRIS_ANTHROPIC_API_KEY>",
"IRIS_OPENAI_API_KEY": "<IRIS_OPENAI_API_KEY>",
"IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL": "<IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL>",
"IRIS_RELEVANCE_JUDGE_MODEL": "<IRIS_RELEVANCE_JUDGE_MODEL>",
"IRIS_LLM_JUDGE_DAILY_BUDGET_USD": "<IRIS_LLM_JUDGE_DAILY_BUDGET_USD>",
"IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD": "<IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD>",
"IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST": "<IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST>",
"IRIS_RELEVANCE_JUDGE_REDACT": "<IRIS_RELEVANCE_JUDGE_REDACT>",
"IRIS_CITATION_ALLOW_FETCH": "<IRIS_CITATION_ALLOW_FETCH>",
"IRIS_DASHBOARD": "<IRIS_DASHBOARD>",
"IRIS_DASHBOARD_PORT": "<IRIS_DASHBOARD_PORT>",
"IRIS_PORT": "<IRIS_PORT>",
"IRIS_OTEL_ENDPOINT": "<IRIS_OTEL_ENDPOINT>",
"IRIS_CITATION_DOMAINS": "<IRIS_CITATION_DOMAINS>",
"IRIS_CITATION_MAX_COST_USD_TOTAL": "<IRIS_CITATION_MAX_COST_USD_TOTAL>",
"IRIS_TRANSPORT": "<IRIS_TRANSPORT>",
"IRIS_HOST": "<IRIS_HOST>",
"IRIS_ALLOWED_ORIGINS": "<IRIS_ALLOWED_ORIGINS>",
"IRIS_MAX_INPUT_ELEMENTS": "<IRIS_MAX_INPUT_ELEMENTS>",
"IRIS_MAX_TOOL_INPUT_ELEMENTS": "<IRIS_MAX_TOOL_INPUT_ELEMENTS>",
"IRIS_DASHBOARD_HOST": "<IRIS_DASHBOARD_HOST>",
"IRIS_OTEL_HEADERS": "<IRIS_OTEL_HEADERS>",
"IRIS_OTEL_SERVICE_NAME": "<IRIS_OTEL_SERVICE_NAME>",
"IRIS_OTEL_TIMEOUT_MS": "<IRIS_OTEL_TIMEOUT_MS>",
"IRIS_WEBHOOK_URL": "<IRIS_WEBHOOK_URL>",
"IRIS_WEBHOOK_SECRET": "<IRIS_WEBHOOK_SECRET>"
}
}
}
}
{
"servers": {
"mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@iris-eval/[email protected]"
],
"env": {
"IRIS_API_KEY": "<IRIS_API_KEY>",
"IRIS_API_KEY_FILE": "<IRIS_API_KEY_FILE>",
"IRIS_ALLOW_UNAUTHENTICATED": "<IRIS_ALLOW_UNAUTHENTICATED>",
"IRIS_DB_PATH": "<IRIS_DB_PATH>",
"IRIS_SQLITE_DRIVER": "<IRIS_SQLITE_DRIVER>",
"IRIS_SEARCH_BUDGET_MS": "<IRIS_SEARCH_BUDGET_MS>",
"IRIS_SEARCH_INDEX": "<IRIS_SEARCH_INDEX>",
"IRIS_LOG_LEVEL": "<IRIS_LOG_LEVEL>",
"IRIS_HOME": "<IRIS_HOME>",
"IRIS_ANTHROPIC_API_KEY": "<IRIS_ANTHROPIC_API_KEY>",
"IRIS_OPENAI_API_KEY": "<IRIS_OPENAI_API_KEY>",
"IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL": "<IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL>",
"IRIS_RELEVANCE_JUDGE_MODEL": "<IRIS_RELEVANCE_JUDGE_MODEL>",
"IRIS_LLM_JUDGE_DAILY_BUDGET_USD": "<IRIS_LLM_JUDGE_DAILY_BUDGET_USD>",
"IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD": "<IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD>",
"IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST": "<IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST>",
"IRIS_RELEVANCE_JUDGE_REDACT": "<IRIS_RELEVANCE_JUDGE_REDACT>",
"IRIS_CITATION_ALLOW_FETCH": "<IRIS_CITATION_ALLOW_FETCH>",
"IRIS_DASHBOARD": "<IRIS_DASHBOARD>",
"IRIS_DASHBOARD_PORT": "<IRIS_DASHBOARD_PORT>",
"IRIS_PORT": "<IRIS_PORT>",
"IRIS_OTEL_ENDPOINT": "<IRIS_OTEL_ENDPOINT>",
"IRIS_CITATION_DOMAINS": "<IRIS_CITATION_DOMAINS>",
"IRIS_CITATION_MAX_COST_USD_TOTAL": "<IRIS_CITATION_MAX_COST_USD_TOTAL>",
"IRIS_TRANSPORT": "<IRIS_TRANSPORT>",
"IRIS_HOST": "<IRIS_HOST>",
"IRIS_ALLOWED_ORIGINS": "<IRIS_ALLOWED_ORIGINS>",
"IRIS_MAX_INPUT_ELEMENTS": "<IRIS_MAX_INPUT_ELEMENTS>",
"IRIS_MAX_TOOL_INPUT_ELEMENTS": "<IRIS_MAX_TOOL_INPUT_ELEMENTS>",
"IRIS_DASHBOARD_HOST": "<IRIS_DASHBOARD_HOST>",
"IRIS_OTEL_HEADERS": "<IRIS_OTEL_HEADERS>",
"IRIS_OTEL_SERVICE_NAME": "<IRIS_OTEL_SERVICE_NAME>",
"IRIS_OTEL_TIMEOUT_MS": "<IRIS_OTEL_TIMEOUT_MS>",
"IRIS_WEBHOOK_URL": "<IRIS_WEBHOOK_URL>",
"IRIS_WEBHOOK_SECRET": "<IRIS_WEBHOOK_SECRET>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
IRIS_API_KEYOptional, secret | API key for HTTP authentication. Required to bind the HTTP transport or the dashboard beyond loopback (0.0.0.0, a LAN address, a container): without it the server refuses to start |
IRIS_API_KEY_FILEOptional | Path to a file whose trimmed contents are the API key (the secret-file pattern Docker and Kubernetes mount). Set this or IRIS_API_KEY, not both; further keys and rotation are security.apiKeys in config.json |
IRIS_ALLOW_UNAUTHENTICATEDOptional | Set to 1 to run a non-loopback bind with NO API key on purpose (lifts the startup refusal; the network is then your boundary) |
IRIS_DB_PATHOptional | SQLite database path |
IRIS_SQLITE_DRIVEROptional | Which SQLite driver holds the database: native (better-sqlite3, the default) or node (Node's built-in node:sqlite, Node 22.13+). Unset: native, falling back to node when the native module cannot load |
IRIS_SEARCH_BUDGET_MSOptional | How long one trace search may read before it answers with the matches found so far, in milliseconds (50-60000, default 1000) |
IRIS_SEARCH_INDEXOptional | on (default) or off. off keeps no full-text index of the traces: writes are cheaper, and a search reads the traces within its time budget |
IRIS_LOG_LEVELOptional | Log level: debug, info, warn, error |
IRIS_HOMEOptional | Directory for the database, custom rules and preferences (default ~/.iris) |
IRIS_ANTHROPIC_API_KEYOptional, secret | Enables evaluate_with_llm_judge and verify_citations with an Anthropic model. Optional: the deterministic rules never need a key |
IRIS_OPENAI_API_KEYOptional, secret | Enables evaluate_with_llm_judge and verify_citations with an OpenAI model. Optional: the deterministic rules never need a key |
IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVALOptional | Hard cap on the worst-case cost of one LLM judge call (default 0.25); max_cost_usd can lower it for a call, never raise it |
IRIS_RELEVANCE_JUDGE_MODELOptional | A priced judge model; answers_the_ask then asks it on every evaluation with input, sending that input and output to the model's provider, and gates on its verdict (off by default) |
IRIS_LLM_JUDGE_DAILY_BUDGET_USDOptional | What every judge call together may spend per UTC day, per tenant, in USD (default 1): the relevance judge, evaluate_with_llm_judge and verify_citations. Past it no judge call is made |
IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USDOptional | The name of IRIS_LLM_JUDGE_DAILY_BUDGET_USD before 0.21.0. Read when the new name is unset, and it then limits every judge call |
IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUESTOptional | Relevance judge calls one request may make (default 20) |
IRIS_RELEVANCE_JUDGE_REDACTOptional | on (default) replaces the PII and credentials no_pii flags before the relevance judge sends input and output to its provider; off sends them as they are |
IRIS_CITATION_ALLOW_FETCHOptional | Let verify_citations fetch URLs (off by default); a tool argument can turn it off for a call, never on |
IRIS_DASHBOARDOptional | Start the dashboard alongside the server (same as --dashboard) |
IRIS_DASHBOARD_PORTOptional | Dashboard port (default 6920); IRIS_PORT is the MCP HTTP transport port (default 3000) |
IRIS_PORTOptional | MCP HTTP transport port (default 3000); only used with --transport http |
IRIS_OTEL_ENDPOINTOptional | OTLP/HTTP collector URL; when set, every stored trace is also exported as OpenTelemetry spans (best-effort, asynchronous) |
IRIS_CITATION_DOMAINSOptional | Comma-separated domain allowlist for verify_citations fetches (only consulted when IRIS_CITATION_ALLOW_FETCH is on); a tool argument can narrow it, never add to it |
IRIS_CITATION_MAX_COST_USD_TOTALOptional | The most one verify_citations call may spend on judge calls, in USD (default 1); max_cost_usd_total can lower it, never raise it |
IRIS_TRANSPORTOptional | Transport: stdio (default) or http; same as --transport |
IRIS_HOSTOptional | Bind host for the HTTP transport (default 127.0.0.1); only used with --transport http |
IRIS_ALLOWED_ORIGINSOptional | Comma-separated Origin allowlist for the HTTP transport and dashboard CORS (default http://localhost:*) |
IRIS_MAX_INPUT_ELEMENTSOptional | The most array elements and object keys one input may hold before it is validated (default 100000): a tool call's arguments, and a dashboard or OTLP JSON request body. A tool call over it gets an error result; a body, 413. OTLP protobuf has its own ceiling, one element per 5 bytes of the request si… |
IRIS_MAX_TOOL_INPUT_ELEMENTSOptional | The name of IRIS_MAX_INPUT_ELEMENTS before 0.21.0, read when the new name is unset |
IRIS_DASHBOARD_HOSTOptional | Bind host for the dashboard (default 127.0.0.1); same as --dashboard-host |
IRIS_OTEL_HEADERSOptional | Comma-separated key=value headers sent with every OTLP export (for example an auth token for your collector) |
IRIS_OTEL_SERVICE_NAMEOptional | service.name resource attribute on exported spans (default iris-eval) |
IRIS_OTEL_TIMEOUT_MSOptional | Timeout in milliseconds for each OTLP export request |
IRIS_WEBHOOK_URLOptional | The receiver of the webhook that fires on a moment (docs/webhooks.md); merged over notify.webhook in config.json |
IRIS_WEBHOOK_SECRETOptional, secret | The signing key of that webhook (any string, or whsec_ + base64); the iris format refuses to run without one |
Details
| Package | @iris-eval/[email protected] (NPM, stdio) |
| Package | https://github.com/iris-eval/mcp-server/releases/download/v0.21.0/[email protected] (MCPB, stdio) |
| First published | 25 Oct 2026 |
| Last updated | 25 Oct 2026 |
| Registry name | io.github.iris-eval/mcp-server |
More ai and media servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
