addrbookFor publishers
← The evidence ledger

Evidence row 38908

Observed , by baseline/1.

Kind
listing
About
source_record mcp_registry:io.github.iris-eval/mcp-server
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
53fcd13359741c5ce769405449c12404b44faeb736ccdc5a4d2a404e9fd1e366
Leaf
0xce6b531a10c2d47b45b1939a7179026f5e406634a942d8401f338c65c21e83e7

What was observed

{
  "endpoints": [
    [
      "web",
      "https://iris-eval.com/"
    ]
  ],
  "name": "Iris",
  "owner_address": null,
  "raw": {
    "_meta": {
      "io.modelcontextprotocol.registry/official": {
        "isLatest": true,
        "publishedAt": "2026-10-25T21:36:56.554987Z",
        "status": "active",
        "statusChangedAt": "2026-10-25T21:36:56.554987Z",
        "updatedAt": "2026-10-25T21:36:56.554987Z"
      }
    },
    "server": {
      "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
      "description": "Stop shipping agents on vibes. Score every agent output for quality, safety, and cost.",
      "icons": [
        {
          "mimeType": "image/svg+xml",
          "sizes": [
            "any"
          ],
          "src": "https://iris-eval.com/iris-logo.svg"
        },
        {
          "mimeType": "image/png",
          "sizes": [
            "180x180"
          ],
          "src": "https://iris-eval.com/iris-logo-white-bg.png"
        }
      ],
      "name": "io.github.iris-eval/mcp-server",
      "packages": [
        {
          "environmentVariables": [
            {
              "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",
              "format": "string",
              "isSecret": true,
              "name": "IRIS_API_KEY"
            },
            {
              "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",
              "format": "string",
              "name": "IRIS_API_KEY_FILE"
            },
            {
              "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)",
              "format": "string",
              "name": "IRIS_ALLOW_UNAUTHENTICATED"
            },
            {
              "description": "SQLite database path",
              "format": "string",
              "name": "IRIS_DB_PATH"
            },
            {
              "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",
              "format": "string",
              "name": "IRIS_SQLITE_DRIVER"
            },
            {
              "description": "How long one trace search may read before it answers with the matches found so far, in milliseconds (50-60000, default 1000)",
              "format": "string",
              "name": "IRIS_SEARCH_BUDGET_MS"
            },
            {
              "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",
              "format": "string",
              "name": "IRIS_SEARCH_INDEX"
            },
            {
              "description": "Log level: debug, info, warn, error",
              "format": "string",
              "name": "IRIS_LOG_LEVEL"
            },
            {
              "description": "Directory for the database, custom rules and preferences (default ~/.iris)",
              "format": "string",
              "name": "IRIS_HOME"
            },
            {
              "description": "Enables evaluate_with_llm_judge and verify_citations with an Anthropic model. Optional: the deterministic rules never need a key",
              "format": "string",
              "isSecret": true,
              "name": "IRIS_ANTHROPIC_API_KEY"
            },
            {
              "description": "Enables evaluate_with_llm_judge and verify_citations with an OpenAI model. Optional: the deterministic rules never need a key",
              "format": "string",
              "isSecret": true,
              "name": "IRIS_OPENAI_API_KEY"
            },
            {
              "description": "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",
              "format": "string",
              "name": "IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL"
            },
            {
              "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)",
              "format": "string",
              "name": "IRIS_RELEVANCE_JUDGE_MODEL"
            },
            {
              "description": "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",
              "format": "string",
              "name": "IRIS_LLM_JUDGE_DAILY_BUDGET_USD"
            },
            {
              "description": "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",
              "format": "string",
              "name": "IRIS_RELEVANCE_JUDGE_DAILY_BUDGET_USD"
            },
            {
              "description": "Relevance judge calls one request may make (default 20)",
              "format": "string",
              "name": "IRIS_RELEVANCE_JUDGE_MAX_CALLS_PER_REQUEST"
            },
            {
              "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",
              "format": "string",
              "name": "IRIS_RELEVANCE_JUDGE_REDACT"
            },
            {
              "description": "Let verify_citations fetch URLs (off by default); a tool argument can turn it off for a call, never on",
              "format": "boolean",
              "name": "IRIS_CITATION_ALLOW_FETCH"
            },
            {
              "description": "Start the dashboard alongside the server (same as --dashboard)",
              "format": "boolean",
              "name": "IRIS_DASHBOARD"
            },
            {
              "description": "Dashboard port (default 6920); IRIS_PORT is the MCP HTTP transport port (default 3000)",
              "format": "number",
              "name": "IRIS_DASHBOARD_PORT"
            },
            {
              "description": "MCP HTTP transport port (default 3000); only used with --transport http",
              "format": "number",
              "name": "IRIS_PORT"
            },
            {
              "description": "OTLP/HTTP collector URL; when set, every stored trace is also exported as OpenTelemetry spans (best-effort, asynchronous)",
              "format": "string",
              "name": "IRIS_OTEL_ENDPOINT"
            },
            {
              "description": "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",
              "format": "string",
              "name": "IRIS_CITATION_DOMAINS"
            },
            {
              "description": "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",
              "format": "string",
              "name": "IRIS_CITATION_MAX_COST_USD_TOTAL"
            },
            {
              "description": "Transport: stdio (default) or http; same as --transport",
              "format": "string",
              "name": "IRIS_TRANSPORT"
            },
            {
              "description": "Bind host for the HTTP transport (default 127.0.0.1); only used with --transport http",
              "format": "string",
              "name": "IRIS_HOST"
            },
            {
              "description": "Comma-separated Origin allowlist for the HTTP transport and dashboard CORS (default http://localhost:*)",
              "format": "string",
              "name": "IRIS_ALLOWED_ORIGINS"
            },
            {
              "description": "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 size limit",
              "format": "number",
              "name": "IRIS_MAX_INPUT_ELEMENTS"
            },
            {
              "description": "The name of IRIS_MAX_INPUT_ELEMENTS before 0.21.0, read when the new name is unset",
              "format": "number",
              "name": "IRIS_MAX_TOOL_INPUT_ELEMENTS"
            },
            {
              "description": "Bind host for the dashboard (default 127.0.0.1); same as --dashboard-host",
              "format": "string",
              "name": "IRIS_DASHBOARD_HOST"
            },
            {
              "description": "Comma-separated key=value headers sent with every OTLP export (for example an auth token for your collector)",
              "format": "string",
              "name": "IRIS_OTEL_HEADERS"
            },
            {
              "description": "service.name resource attribute on exported spans (default iris-eval)",
              "format": "string",
              "name": "IRIS_OTEL_SERVICE_NAME"
            },
            {
              "description": "Timeout in milliseconds for each OTLP export request",
              "format": "number",
              "name": "IRIS_OTEL_TIMEOUT_MS"
            },
            {
              "description": "The receiver of the webhook that fires on a moment (docs/webhooks.md); merged over notify.webhook in config.json",
              "format": "string",
              "name": "IRIS_WEBHOOK_URL"
            },
            {
              "description": "The signing key of that webhook (any string, or whsec_ + base64); the iris format refuses to run without one",
              "format": "string",
              "isSecret": true,
              "name": "IRIS_WEBHOOK_SECRET"
            }
          ],
          "identifier": "@iris-eval/mcp-server",
          "registryType": "npm",
          "transport": {
            "type": "stdio"
          },
          "version": "0.21.0"
        },
        {
          "fileSha256": "bf9c40dd660283ccade5a2205c0b5cb4ab78602e396bb53414b819e32de6a9c7",
          "identifier": "https://github.com/iris-eval/mcp-server/releases/download/v0.21.0/iris-eval.mcpb",
          "registryType": "mcpb",
          "transport": {
            "type": "stdio"
          },
          "version": "0.21.0"
        }
      ],
      "repository": {
        "source": "github",
        "url": "https://github.com/iris-eval/mcp-server"
      },
      "title": "Iris",
      "version": "0.21.0",
      "websiteUrl": "https://iris-eval.com"
    }
  },
  "source": "mcp_registry",
  "summary": "Stop shipping agents on vibes. Score every agent output for quality, safety, and cost."
}

What the leaf hashes

{"body":"53fcd13359741c5ce769405449c12404b44faeb736ccdc5a4d2a404e9fd1e366","id":38908,"kind":"listing","method":"baseline/1","observed_us":1793025394255741,"prev":null,"subject":"mcp_registry:io.github.iris-eval/mcp-server","subject_kind":"source_record"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0xce6b7f2db83fa732570798a8a6a6949db21491f9fb0cfdc536cc9f1c8d89714c
  2. 0x35f3d2626ac9dc64d516e1a5654cd90595c44bf55a45d60b8d86de0ef147ebaa
  3. 0x157ec10b6d9279e57c87f43191f3c25d7915e1efaeb88471733ed3d5e4174ed7
  4. 0x2ed534b16d69a05a16e87f27ddca1326121b47cdb076a8667e970c6c6c119222
  5. 0x01760fbb563fe91d2432c7acdb92734ac507407febd60334f1b88328c4abf613
  6. 0xe9adacfdf4f0b033cbd8e4c96b90295e07e11dce30880251685d222fc257f987
  7. 0x72b460791fad99b103fe756c8a436b590d72cbfe275a74ba6c2dd95905207f77
  8. 0xb9b08e5d744892582d9fd9af0aadad7408c6affb0c07ff0b61dce5cca6fdbe8e
  9. 0x97dfc281379e4e08f95e76e04e8576366bfef3081095c78cabf9886de48c8e0a
  10. 0x2ade4beca319f9877e5b22694d275fbcb1a94a2e38ad058893960d379e44e892
  11. 0xd57a32d9d2666c4270544dcb78bbea2f4774705d3879a86973628e2542543e62
  12. 0xa45f4438c9296b0ba586fc2eec9f0202e5d3c61a1d3adc975b80f6a1f4a5ca57
  13. 0xe43762a621da83c0b4b63f549cd2e19c428ac702bfc1038d70233867b06c447f
  14. 0xefabf1105e09cf52c12c58e60cbb5048b9ac3f02631d1816a926e14bdd86fbdf
  15. 0xe94ca5b798e9899ad611e57835af42266e20f53f44977e487d81365e30972beb
  16. 0x703f95866af09c5e5d6ead7411e9a10f964a41a2aff64d4a55ff0053c023a023
  17. 0xd0651cb9bc8155eb52b5247d506e74b8a935057dc190ba52091702ac25ed3a40
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON