Iris

officiel

Serveur d'évaluation et d'observabilité natif MCP avec journalisation des traces, évaluation de la qualité des sorties, suivi des coûts, 12 règles d'évaluation intégrées, tableau de bord en temps réel et détection des PII.

Que pouvez-vous faire avec Iris MCP ?

  • Journaliser les exécutions de l’agent — Demandez l’enregistrement d’une exécution avec log_trace, y compris les spans, les appels d’outils, l’utilisation de jetons et le coût en USD.
  • Évaluer la qualité des sorties — Utilisez evaluate_output pour vérifier l’exhaustivité, la pertinence, la sécurité et le coût par rapport à 13 règles intégrées.
  • Interroger l’historique des traces — Récupérez les exécutions stockées avec get_traces, en filtrant par plage de temps, pagination et autres critères.
  • Gérer les règles personnalisées — Déployez de nouvelles règles d’évaluation avec deploy_rule ou supprimez-les via delete_rule pour adapter la notation.
  • Exécuter LLM-as-judge — Invoquez evaluate_with_llm_judge pour une notation sémantique sur cinq modèles, avec un plafond de coût strict par évaluation.
  • Vérifier les citations — Utilisez verify_citations pour extraire et vérifier les sources citées par rapport aux affirmations via un juge LLM.

Documentation

Iris — arrêtez de livrer des agents à l'aveugle

Glama Score Install in Cursor npm version npm downloads GitHub stars CI OpenSSF Scorecard OpenSSF Best Practices License: MIT Docker PulseMCP mcp.so

Iris évalue chaque exécution d'agent pour la qualité, la sécurité et le coût — sur votre machine, sans SDK et sans compte. La plupart des projets d'agents vérifient la qualité en exécutant quelques invites mémorisées et en examinant les résultats à l'œil nu. Iris remplace cela par des chiffres que vous pouvez auditer : les exécutions de vos agents atterrissent dans une base SQLite sur votre disque, 13 règles intégrées les notent de manière déterministe — PII, injection d'invite, marqueurs d'hallucination, seuils de coût — gratuitement, sans appels LLM, et un juge LLM optionnel avec un plafond de coût strict par évaluation gère les questions sémantiques. Chaque règle est inspectable et modifiable, car un juge que vous ne pouvez pas auditer n'est que de l'à-peu-près avec un chiffre dessus. Licence MIT, aucune télémétrie ; vos traces ne quittent jamais votre machine.

Nécessite Node.js 20 ou ultérieur. Vérifiez avec node --version.

Iris Dashboard

Un échec à l'écran en 60 secondes

Aucun câblage d'agent, aucune configuration — une seule commande :

npx @iris-eval/mcp-server --demo

Cela initialise une base de démonstration — une poignée de petits agents avec une semaine d'exécutions — et sert le tableau de bord à l'adresse http://localhost:6920 (votre navigateur s'ouvre automatiquement au premier lancement). Le tableau de bord atterrit sur Échecs : ce qui a échoué, du pire au plus récent. Ça vaut le coup de cliquer — une fuite de PII détectée par les règles de sécurité, une tentative d'injection d'invite signalée, et un score de juge LLM échoué avec sa justification.

Les données de démonstration vivent dans leur propre base (demo.db dans votre répertoire personnel Iris — ~/.iris sur macOS/Linux, %USERPROFILE%\.iris sur Windows) et ne se mélangent jamais à vos vraies traces. Supprimez tout avec une seule commande :

npx @iris-eval/mcp-server --demo-clear

Connectez votre propre agent

Ajoutez Iris à votre configuration MCP. Fonctionne avec Claude Desktop, Claude Code, Cursor, Windsurf, Continue, VS Code, Cline, Zed, Codex CLI, Gemini CLI — et tout autre agent compatible MCP. Un seul bloc, tableau de bord inclus :

{
  "mcpServers": {
    "iris-eval": {
      "command": "npx",
      "args": ["@iris-eval/mcp-server", "--dashboard"]
    }
  }
}

Votre agent découvre les neuf outils d'Iris à la connexion, et le tableau de bord sert à http://localhost:6920. Collez maintenant ceci à votre agent :

Enregistrez cette dernière tâche dans Iris et évaluez la sortie.

La trace atterrit sur le tableau de bord avec ses scores. Vous préférez le serveur MCP sans tête ? Retirez --dashboard des arguments — vous pouvez ouvrir le même tableau de bord à tout moment avec npx @iris-eval/mcp-server --dashboard.

Une chose à savoir d'emblée : les outils MCP sont appelés lorsque le modèle décide de les appeler. Iris n'intercepte pas votre agent, donc les traces sont enregistrées lorsque votre agent demande à les enregistrer — soit parce que vous le lui avez dit, soit parce que votre code appelle directement les outils. Demandez à votre agent de « logger ceci dans Iris et de l'évaluer » et il le fera. Si vous voulez une capture qui ne dépend pas du choix du modèle, POST /api/v1/traces fait exactement cela — votre code envoie la trace en HTTP simple, sans modèle dans la boucle (voir docs/http-ingest.md). La CLI et les SDK de la feuille de route seront des clients légers sur le même point de terminaison.

Capture via HTTP (sans modèle dans la boucle)

Avec le tableau de bord en cours d'exécution, tout ce qui peut envoyer une requête HTTP peut enregistrer une trace — et éventuellement exécuter les évaluations déterministes dans la même requête :

curl -s -X POST "http://127.0.0.1:6920/api/v1/traces" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_name": "support-bot",
    "input": "What is the refund policy?",
    "output": "Refunds are available within 30 days of purchase.",
    "evaluate": true,
    "eval_type": "safety"
  }'

Renvoie 201 avec le trace_id stocké et le résultat de l'évaluation. Le point de terminaison accepte le même corps que l'outil log_trace et se trouve derrière la même pile middleware en boucle locale que le reste du tableau de bord. Contrat complet, référence des champs et sémantique des erreurs : docs/http-ingest.md.

Vérifier l'installation

npx @iris-eval/mcp-server --self-test

Un diagnostic d'installation hors ligne : aller-retour de stockage, évaluations déterministes, tableau de bord + garde anti-rebond DNS — le tout dans un répertoire personnel temporaire isolé, afin que votre vraie base ne soit jamais ouverte. Code de sortie 0 = sain, 1 = un contrôle a échoué.

Configuration par outil

Claude Desktop

Modifiez votre fichier de configuration MCP :

  • macOS : ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows : %APPDATA%\Claude\claude_desktop_config.json

Ajoutez la configuration JSON ci-dessus, puis redémarrez Claude Desktop.

Claude Code

claude mcp add --transport stdio iris-eval -- npx @iris-eval/mcp-server

Puis redémarrez la session (/clear ou relancez) pour que les outils se chargent.

Note Windows : N'utilisez pas le wrapper cmd /c — il cause des problèmes d'analyse de chemins. La commande npx fonctionne directement.

Cursor / Windsurf

Ajoutez à votre .cursor/mcp.json d'espace de travail ou aux paramètres MCP globaux à l'aide de la configuration JSON ci-dessus.

VS Code (MCP natif)

Ajoutez à .vscode/mcp.json dans votre espace de travail (notez : VS Code utilise servers, pas mcpServers) :

{
  "servers": {
    "iris-eval": {
      "command": "npx",
      "args": ["@iris-eval/mcp-server"]
    }
  }
}

Cline

Ouvrez le panneau Serveurs MCP de Cline → Configurez les serveurs MCP, et ajoutez la configuration JSON mcpServers ci-dessus à cline_mcp_settings.json.

Zed

Ajoutez au settings.json de Zed :

{
  "context_servers": {
    "iris-eval": {
      "command": {
        "path": "npx",
        "args": ["@iris-eval/mcp-server"]
      }
    }
  }
}

OpenAI Codex CLI

Ajoutez à ~/.codex/config.toml :

[mcp_servers.iris-eval]
command = "npx"
args = ["@iris-eval/mcp-server"]

Gemini CLI

Ajoutez la configuration JSON mcpServers ci-dessus à ~/.gemini/settings.json.

Tout autre client compatible MCP

Iris est un serveur MCP stdio standard — une commande npx @iris-eval/mcp-server, pas de SDK, pas de modification de code. Si votre client prend en charge MCP, il prend en charge Iris. Les formats de configuration des clients changent ; en cas de doute, consultez la documentation MCP de votre client et pointez-le vers cette commande.

Autres méthodes d'installation

# Global install (recommended for persistent data and faster startup)
npm install -g @iris-eval/mcp-server
iris-mcp --dashboard

# Docker — two servers, two ports: 3000 = MCP HTTP transport,
# 6920 = dashboard (which also serves the POST /api/v1/traces ingest endpoint)
docker run -p 3000:3000 -p 6920:6920 -v iris-data:/data ghcr.io/iris-eval/mcp-server

Astuce : L'installation globale (npm install -g) stocke les traces de manière persistante à ~/.iris/iris.db. Avec npx, les traces persistent au même endroit, mais le démarrage est plus lent en raison de la résolution des paquets.

Ce que vous obtenez

Journalisation des tracesArborescences de spans hiérarchiques avec latence par appel d'outil, utilisation de jetons et coût en USD. Stockées dans SQLite, interrogeables instantanément.
Évaluation de la sortie13 règles intégrées dans 4 catégories : exhaustivité, pertinence, sécurité, coût. Détection de PII (19 motifs : SSN, carte de crédit, téléphone, e-mail, IBAN, date de naissance, NIR, IP, clé API, passeport, plus jetons AWS/Slack/SendGrid/GitHub/Google/npm/DigitalOcean, blocs de clés privées PEM et phrases de récupération), détection d'injection d'invite (37 motifs, phrasés et structurels), détection de sortie factice, détection d'hallucination (25 signaux de fabrication/contradiction ancrés au contexte — passez input pour les ancrer au matériel source de l'agent). Ajoutez des règles personnalisées avec des schémas Zod.
Juge LLMNotation sémantique optionnelle via Anthropic ou OpenAI — apportez votre propre clé API. Cinq modèles. Plafond de coût strict par évaluation (IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL, défaut 0,25 $), tarification par évaluation divulguée dans le résultat.
Visibilité des coûtsCoût agrégé sur tous les agents pour toute fenêtre temporelle. Définissez des seuils budgétaires. Soyez alerté lorsque les agents dépensent trop.
Tableau de bord webInterface en mode sombre en temps réel qui atterrit sur les échecs, du pire au plus récent — visualisation des traces, résultats d'évaluation, répartitions des coûts et une palette de commandes (⌘K) qui recherche vos propres règles, traces et évaluations.
Local d'abordTout vit dans SQLite sur votre disque. Pas de compte, pas d'inscription, pas de télémétrie. Le HTTP sortant ne se produit que là où vous y consentez : votre propre clé de juge LLM, la récupération de citations ou un exportateur OTel que vous configurez.

Où cela va ensuite : la feuille de route.

Outils MCP

Iris enregistre neuf outils que tout agent compatible MCP peut invoquer — cycle de vie complet des règles + traces + juge LLM + vérification sémantique des citations :

  • log_trace — Enregistre une exécution d'agent avec spans, appels d'outils, utilisation de jetons et coût
  • evaluate_output — Note la qualité de la sortie selon les règles d'exhaustivité, de pertinence, de sécurité et de coût (heuristique, déterministe, gratuit)
  • get_traces — Interroge les traces stockées avec filtrage, pagination et prise en charge de plages temporelles
  • list_rules — Énumère les règles d'évaluation personnalisées déployées (lecture seule)
  • deploy_rule — Enregistre une nouvelle règle d'évaluation personnalisée pour qu'elle se déclenche à chaque evaluate_output de cette catégorie
  • delete_rule — Supprime une règle personnalisée déployée (destructif, idempotent)
  • delete_trace — Supprime une trace stockée par identifiant (destructif, limité au locataire)
  • evaluate_with_llm_judge — Évaluation sémantique via LLM (Anthropic ou OpenAI). Cinq modèles : exactitude, utilité, sécurité, correction, fidélité. Plafond de coût, tarification par évaluation divulguée. Apportez votre propre clé API (IRIS_ANTHROPIC_API_KEY ou IRIS_OPENAI_API_KEY) — Iris ne transite ni ne relaie les appels LLM.
  • verify_citations — Extrait les citations de la sortie (numérotées, auteur-année, URL, DOI), récupère les sources derrière un résolveur protégé contre les SSRF et avec liste blanche de domaines, et utilise un juge LLM pour vérifier si chaque source soutient réellement l'affirmation citée. HTTP sortant sur consentement. Même exigence BYOK que evaluate_with_llm_judge.

Lorsque IRIS_OTEL_ENDPOINT est configuré, les appels log_trace émettent également un export JSON OTLP/HTTP au mieux-effort vers tout collecteur OpenTelemetry (Jaeger, Grafana Tempo, Datadog OTLP, Honeycomb, etc.). Voir docs/otel-integration.md.

Comment passed est décidé

evaluate_output renvoie à la fois un score et un indicateur passed — ils répondent à des questions différentes :

  • score (0..1) est la moyenne pondérée des règles exécutées — un gradient de qualité.
  • passed est le verdict livrer/ne pas livrer : true uniquement lorsque le score dépasse le seuil de passage (défaut 0,7) et qu'aucune règle critique n'a échoué.

Les véritables violations de sécurité échouent durement. no_pii, no_injection_patterns et no_blocklist_words sont des règles critiques : si l'une échoue, l'évaluation rapporte passed: false quel que soit le score des autres règles, et la réponse nomme les coupables dans critical_failures. Un SSN divulgué ne peut pas être moyenné. Les règles personnalisées déployées avec severity: "high" ou "critical" échouent durement de la même manière ; les sévérités low/medium n'affectent que le score. Une limite à connaître : une règle critique qui a été ignorée (contexte manquant ou toute autre cause d'ignorance) n'a pas jugé la sortie et ne fait pas opposition — rule_results montre chaque ignorance et sa raison, afin qu'une barrière qui doit échouer en position fermée sur les non-verdicts le puisse.

Un piège pour les barrières CI : si vous omettez eval_type, le bundle par défaut completeness s'exécute — les règles de sécurité non. La réponse fait écho à eval_type (plus un note lorsqu'il a été défini par défaut) afin que votre barrière puisse vérifier quel bundle a réellement été exécuté. Appuyez-vous sur passed pour le verdict et eval_type: "safety" pour la couverture.

Schémas complets des outils et configuration : iris-eval.com

Fonctionnalités hébergées

Iris s'exécute entièrement sur votre machine aujourd'hui, et tout ce qu'il fait est gratuit, sous licence MIT, sans limites et sans compte.

Le stockage hébergé, l'historique partagé d'équipe et les alertes sont à l'étude, pas en construction. Il n'y a pas de tarification et rien à acheter. Si un historique partagé vous serait utile, la liste d'attente est notre moyen de savoir si cela vaut la peine d'être construit — elle ne vous engage à rien.

Deux engagements tiennent quoi qu'il arrive : rien de ce qui est gratuit aujourd'hui ne passera derrière un paywall, et aucune certification de conformité ne sera revendiquée avant d'être détenue.

Exemples

Communauté

Configuration et sécurité

Arguments CLI

OptionDéfautDescription
--transportstdioType de transport : stdio ou http
--port3000Port du transport HTTP
--db-path~/.iris/iris.dbChemin de la base de données SQLite
--config~/.iris/config.jsonChemin du fichier de configuration
--api-keyClé API pour l'authentification HTTP
--dashboardfalseActiver le tableau de bord web
--dashboard-port6920Port du tableau de bord
--dashboard-host127.0.0.1Adresse de liaison du tableau de bord. Boucle locale par défaut — le tableau de bord n'est pas authentifié sauf si --api-key est défini, donc une liaison au-delà de la boucle locale expose tout votre historique de traces
--demofalseInitialiser une base de données de démonstration (séparée de vos vraies traces) et servir le tableau de bord à partir de celle-ci
--demo-clearfalseSupprimer la base de données de démonstration et quitter
--self-testfalseExécuter le diagnostic d'installation hors ligne dans un répertoire personnel temporaire isolé, puis quitter (0 = sain, 1 = un contrôle a échoué)

Variables d'environnement

VariableDescription
IRIS_TRANSPORTType de transport (stdio ou http)
IRIS_PORTPort du transport HTTP
IRIS_HOSTHôte du transport HTTP (défaut 127.0.0.1)
IRIS_HOMERépertoire pour tous les fichiers par utilisateur : config.json, iris.db, custom-rules.json, audit.log, preferences.json (défaut ~/.iris)
IRIS_DB_PATHChemin de la base de données SQLite (remplace IRIS_HOME pour la base uniquement)
IRIS_LOG_LEVELNiveau de journalisation : debug, info, warn, error
IRIS_DASHBOARDActiver le tableau de bord web (true/false ; false remplace également dashboard.enabled dans config.json)
IRIS_DASHBOARD_PORTPort du tableau de bord (défaut 6920)
IRIS_DASHBOARD_HOSTAdresse de liaison du tableau de bord (défaut 127.0.0.1)
IRIS_API_KEYClé API pour l'authentification HTTP
IRIS_ALLOWED_ORIGINSOrigines CORS autorisées, séparées par des virgules

Les arguments CLI ont priorité sur les variables d'environnement lorsque les deux sont définis.

Sécurité

Lors de l'utilisation du transport HTTP, Iris inclut :

  • Authentification par clé API avec comparaison à temps constant
  • CORS restreint à localhost par défaut
  • Limitation de débit (600 req/min API du tableau de bord, 20 req/min MCP)
  • En-têtes de sécurité Helmet
  • Validation des entrées Zod sur toutes les routes
  • Expressions régulières sûres contre ReDoS pour les règles d'évaluation personnalisées
  • Limites de corps de requête de 1 Mo
# Production deployment
iris-mcp --transport http --port 3000 --api-key "$(openssl rand -hex 32)" --dashboard
Dépannage

Première étape : exécutez l'auto-test

npx @iris-eval/mcp-server --self-test

Il vérifie le stockage, les évaluations déterministes et le tableau de bord dans un répertoire personnel temporaire isolé et affiche un verdict par étape — la sortie d'échec nomme l'étape défaillante. Le code de sortie 0 signifie que l'installation est saine.

Iris ne démarre pas / ERR_MODULE_NOT_FOUND

Vous avez peut-être une version plus ancienne en cache. Videz le cache npx et réessayez :

npx --yes @iris-eval/mcp-server@latest

Ou installez globalement pour éviter complètement les problèmes de cache :

npm install -g @iris-eval/mcp-server@latest

Les outils n'apparaissent pas dans Claude Code

Les outils MCP ne se chargent qu'au démarrage de la session. Après avoir ajouté iris-eval, redémarrez la session avec /clear ou relancez le terminal.

Vérification de version

Iris journalise sa version sur la première ligne de démarrage :

npx @iris-eval/mcp-server --dashboard
# First log line: "Starting Iris MCP server vX.Y.Z"

Pour une installation globale, npm ls -g @iris-eval/mcp-server affiche la version installée.

Mise à jour

# If using npx (clears cache and fetches latest)
npx --yes @iris-eval/mcp-server@latest

# If installed globally
npm update -g @iris-eval/mcp-server

Version de Node.js

Iris nécessite Node.js 20 ou ultérieur. Node 18 a atteint sa fin de vie en avril 2025 et n'est pas pris en charge.

node --version  # Must be v20.x or v22.x+

Windows : cmd /c n'est pas nécessaire

Le /doctor de Claude Code peut suggérer d'envelopper npx avec cmd /c. Ce n'est pas nécessaire et provoque des problèmes d'analyse de chemins. Utilisez npx directement :

# Correct
claude mcp add --transport stdio iris-eval -- npx @iris-eval/mcp-server

# Wrong (causes /c to be parsed as a path)
claude mcp add --transport stdio iris-eval -- cmd /c "npx @iris-eval/mcp-server"

Si Iris vous est utile, envisagez de mettre une étoile au dépôt — cela aide d'autres personnes à le trouver.

Star on GitHub

Sous licence MIT.