Search / io.github.iris-eval/mcp-server
Iris
L0· runs locallyStop shipping agents on vibes. Score every agent output for quality, safety, and cost.
v0.20.0 · active · repository · website · descriptor JSON · versions
Search / io.github.iris-eval/mcp-server
L0· runs locallyStop shipping agents on vibes. Score every agent output for quality, safety, and cost.
v0.20.0 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"iris-eval": {
"command": "npx",
"args": [
"-y",
"@iris-eval/[email protected]"
],
"env": {
"IRIS_API_KEY": "${IRIS_API_KEY}",
"IRIS_ANTHROPIC_API_KEY": "${IRIS_ANTHROPIC_API_KEY}",
"IRIS_OPENAI_API_KEY": "${IRIS_OPENAI_API_KEY}",
"IRIS_WEBHOOK_SECRET": "${IRIS_WEBHOOK_SECRET}"
}
}
}
}claude mcp add iris-eval -e "IRIS_API_KEY=${IRIS_API_KEY}" -e "IRIS_ANTHROPIC_API_KEY=${IRIS_ANTHROPIC_API_KEY}" -e "IRIS_OPENAI_API_KEY=${IRIS_OPENAI_API_KEY}" -e "IRIS_WEBHOOK_SECRET=${IRIS_WEBHOOK_SECRET}" -- npx -y @iris-eval/[email protected][mcp_servers.iris-eval]
command = "npx"
args = ["-y", "@iris-eval/[email protected]"]
env = { "IRIS_API_KEY" = "${IRIS_API_KEY}", "IRIS_ANTHROPIC_API_KEY" = "${IRIS_ANTHROPIC_API_KEY}", "IRIS_OPENAI_API_KEY" = "${IRIS_OPENAI_API_KEY}", "IRIS_WEBHOOK_SECRET" = "${IRIS_WEBHOOK_SECRET}" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"iris-eval": {
"type": "local",
"command": [
"npx",
"-y",
"@iris-eval/[email protected]"
],
"enabled": true,
"environment": {
"IRIS_API_KEY": "{env:IRIS_API_KEY}",
"IRIS_ANTHROPIC_API_KEY": "{env:IRIS_ANTHROPIC_API_KEY}",
"IRIS_OPENAI_API_KEY": "{env:IRIS_OPENAI_API_KEY}",
"IRIS_WEBHOOK_SECRET": "{env:IRIS_WEBHOOK_SECRET}"
}
}
}
}{
"mcpServers": {
"iris-eval": {
"command": "npx",
"args": [
"-y",
"@iris-eval/[email protected]"
],
"env": {
"IRIS_API_KEY": "${IRIS_API_KEY}",
"IRIS_ANTHROPIC_API_KEY": "${IRIS_ANTHROPIC_API_KEY}",
"IRIS_OPENAI_API_KEY": "${IRIS_OPENAI_API_KEY}",
"IRIS_WEBHOOK_SECRET": "${IRIS_WEBHOOK_SECRET}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=iris-eval&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBpcmlzLWV2YWwvbWNwLXNlcnZlckAwLjIwLjAiXSwiZW52Ijp7IklSSVNfQVBJX0tFWSI6IiR7SVJJU19BUElfS0VZfSIsIklSSVNfQU5USFJPUElDX0FQSV9LRVkiOiIke0lSSVNfQU5USFJPUElDX0FQSV9LRVl9IiwiSVJJU19PUEVOQUlfQVBJX0tFWSI6IiR7SVJJU19PUEVOQUlfQVBJX0tFWX0iLCJJUklTX1dFQkhPT0tfU0VDUkVUIjoiJHtJUklTX1dFQkhPT0tfU0VDUkVUfSJ9fQ%3D%3D"
}{
"servers": {
"iris-eval": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@iris-eval/[email protected]"
],
"env": {
"IRIS_API_KEY": "${IRIS_API_KEY}",
"IRIS_ANTHROPIC_API_KEY": "${IRIS_ANTHROPIC_API_KEY}",
"IRIS_OPENAI_API_KEY": "${IRIS_OPENAI_API_KEY}",
"IRIS_WEBHOOK_SECRET": "${IRIS_WEBHOOK_SECRET}"
}
}
}
}{
"mcpServers": {
"iris-eval": {
"command": "npx",
"args": [
"-y",
"@iris-eval/[email protected]"
],
"env": {
"IRIS_API_KEY": "${IRIS_API_KEY}",
"IRIS_ANTHROPIC_API_KEY": "${IRIS_ANTHROPIC_API_KEY}",
"IRIS_OPENAI_API_KEY": "${IRIS_OPENAI_API_KEY}",
"IRIS_WEBHOOK_SECRET": "${IRIS_WEBHOOK_SECRET}"
}
}
}
}extensions:
"iris-eval":
enabled: true
name: "iris-eval"
type: stdio
cmd: "npx"
args:
- "-y"
- "@iris-eval/[email protected]"
envs:
"IRIS_API_KEY": "${IRIS_API_KEY}"
"IRIS_ANTHROPIC_API_KEY": "${IRIS_ANTHROPIC_API_KEY}"
"IRIS_OPENAI_API_KEY": "${IRIS_OPENAI_API_KEY}"
"IRIS_WEBHOOK_SECRET": "${IRIS_WEBHOOK_SECRET}"
timeout: 300
Placeholders to fill from your own secret store: ${IRIS_API_KEY}, ${IRIS_ANTHROPIC_API_KEY}, ${IRIS_OPENAI_API_KEY}, ${IRIS_WEBHOOK_SECRET}. The registry never accepts secret values.
This is a local package: the command runs on your machine.
Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)stability.changes, stability.rug_pulltool list unknowndeps.known_vulns, deps.mcp_sdk_version, deps.resolvabledeps.dev does not know @iris-eval/[email protected]No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website ~liveness-unmeasured +updated-16d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
@iris-eval/[email protected] npmthis version is not known to the dependency resolver
Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.
| package | registry | version | runtime | secrets |
|---|---|---|---|---|
@iris-eval/mcp-server | npm | 0.20.0 | – | IRIS_API_KEY, IRIS_ANTHROPIC_API_KEY, IRIS_OPENAI_API_KEY, IRIS_WEBHOOK_SECRET |
https://github.com/iris-eval/mcp-server/releases/download/v0.20.0/iris-eval.mcpb | mcpb | 0.20.0 | – |
No tools observed. Local packages are never executed by the registry.
Schemas: list_tools.
{
"name": "io.github.iris-eval/mcp-server",
"icons": [
{
"src": "https://iris-eval.com/iris-logo.svg",
"sizes": [
"any"
],
"mimeType": "image/svg+xml"
},
{
"src": "https://iris-eval.com/iris-logo-white-bg.png",
"sizes": [
"180x180"
],
"mimeType": "image/png"
}
],
"title": "Iris",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"version": "0.20.0",
"packages": [
{
"version": "0.20.0",
"transport": {
"type": "stdio"
},
"identifier": "@iris-eval/mcp-server",
"registryType": "npm",
"environmentVariables": [
{
"name": "IRIS_API_KEY",
"format": "string",
"isSecret": true,
"description": "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"
},
{
"name": "IRIS_API_KEY_FILE",
"format": "string",
"description": "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"
},
{
"name": "IRIS_ALLOW_UNAUTHENTICATED",
"format": "string",
"description": "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)"
},
{
"name": "IRIS_DB_PATH",
"format": "string",
"description": "SQLite database path"
},
{
"name": "IRIS_SQLITE_DRIVER",
"format": "string",
"description": "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"
},
{
"name": "IRIS_SEARCH_BUDGET_MS",
"format": "string",
"description": "How long one trace search may read before it answers with the matches found so far, in milliseconds (50-60000, default 1000)"
},
{
"name": "IRIS_SEARCH_INDEX",
"format": "string",
"description": "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"
},
{
"name": "IRIS_LOG_LEVEL",
"format": "string",
"description": "Log level: debug, info, warn, error"
},
{
"name": "IRIS_HOME",
"format": "string",
"description": "Directory for the database, custom rules and preferences (default ~/.iris)"
},
{
"name": "IRIS_ANTHROPIC_API_KEY",
"format": "string",
"isSecret": true,
"description": "Enables evaluate_with_llm_judge and verify_citations with an Anthropic model. Optional: the deterministic rules never need a key"
},
{
"name": "IRIS_OPENAI_API_KEY",
"format": "string",
"isSecret": true,
"description": "Enables evaluate_with_llm_judge and verify_citations with an OpenAI model. Optional: the deterministic rules never need a key"
},
{
"name": "IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL",
"format": "string",
"description": "Hard cap on the worst-case cost of one judge or citation call (default 0.25)"
},
{
"name": "IRIS_RELEVANCE_JUDGE_MODEL",
"format": "string",
"description": "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)"
},
{
"name": "IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD",
"format": "string",
"description": "What the relevance judge may spend per UTC day, per tenant, in USD (default 1); past it answers_the_ask reads the ask lexically"
},
{
"name": "IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST",
"format": "string",
"description": "Relevance judge calls one request may make (default 20)"
},
{
"name": "IRIS_RELEVANCE_JUDGE_REDACT",
"format": "string",
"description": "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"
},
{
"name": "IRIS_CITATION_ALLOW_FETCH",
"format": "boolean",
"description": "Let verify_citations fetch URLs (off by default)"
},
{
"name": "IRIS_DASHBOARD",
"format": "boolean",
"description": "Start the dashboard alongside the server (same as --dashboard)"
},
{
"name": "IRIS_DASHBOARD_PORT",
"format": "number",
"description": "Dashboard port (default 6920); IRIS_PORT is the MCP HTTP transport port (default 3000)"
},
{
"name": "IRIS_PORT",
"format": "number",
"description": "MCP HTTP transport port (default 3000); only used with --transport http"
},
{
"name": "IRIS_OTEL_ENDPOINT",
"format": "string",
"description": "OTLP/HTTP collector URL; when set, every stored trace is also exported as OpenTelemetry spans (best-effort, asynchronous)"
},
{
"name": "IRIS_CITATION_DOMAINS",
"format": "string",
"description": "Comma-separated domain allowlist for verify_citations fetches (only consulted when IRIS_CITATION_ALLOW_FETCH is on)"
},
{
"name": "IRIS_TRANSPORT",
"format": "string",
"description": "Transport: stdio (default) or http; same as --transport"
},
{
"name": "IRIS_HOST",
"format": "string",
"description": "Bind host for the HTTP transport (default 127.0.0.1); only used with --transport http"
},
{
"name": "IRIS_ALLOWED_ORIGINS",
"format": "string",
"description": "Comma-separated Origin allowlist for the HTTP transport and dashboard CORS (default http://localhost:*)"
},
{
"name": "IRIS_DASHBOARD_HOST",
"format": "string",
"description": "Bind host for the dashboard (default 127.0.0.1); same as --dashboard-host"
},
{
"name": "IRIS_OTEL_HEADERS",
"format": "string",
"description": "Comma-separated key=value headers sent with every OTLP export (for example an auth token for your collector)"
},
{
"name": "IRIS_OTEL_SERVICE_NAME",
"format": "string",
"description": "service.name resource attribute on exported spans (default iris-eval)"
},
{
"name": "IRIS_OTEL_TIMEOUT_MS",
"format": "number",
"description": "Timeout in milliseconds for each OTLP export request"
},
{
"name": "IRIS_WEBHOOK_URL",
"format": "string",
"description": "The receiver of the webhook that fires on a moment (docs/webhooks.md); merged over notify.webhook in config.json"
},
{
"name": "IRIS_WEBHOOK_SECRET",
"format": "string",
"isSecret": true,
"description": "The signing key of that webhook (any string, or whsec_ + base64); the iris format refuses to run without one"
}
]
},
{
"version": "0.20.0",
"transport": {
"type": "stdio"
},
"fileSha256": "45fc7164f9b598500f9fb10162478dd13027d28be9d876c2fa9ca0ad4ffcdca3",
"identifier": "https://github.com/iris-eval/mcp-server/releases/download/v0.20.0/iris-eval.mcpb",
"registryType": "mcpb"
}
],
"repository": {
"url": "https://github.com/iris-eval/mcp-server",
"source": "github"
},
"websiteUrl": "https://iris-eval.com",
"description": "Stop shipping agents on vibes. Score every agent output for quality, safety, and cost."
}