Iris
officielServeur 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_outputpour 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_ruleou supprimez-les viadelete_rulepour adapter la notation. - Exécuter LLM-as-judge — Invoquez
evaluate_with_llm_judgepour une notation sémantique sur cinq modèles, avec un plafond de coût strict par évaluation. - Vérifier les citations — Utilisez
verify_citationspour 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
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.

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 commandenpxfonctionne 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. Avecnpx, 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 traces | Arborescences 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 sortie | 13 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 LLM | Notation 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ûts | Coû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 web | Interface 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'abord | Tout 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ûtevaluate_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 temporelleslist_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 à chaqueevaluate_outputde cette catégoriedelete_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_KEYouIRIS_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 queevaluate_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é.passedest le verdict livrer/ne pas livrer :trueuniquement 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
- Configuration Claude Desktop — Configuration MCP pour les modes stdio et HTTP
- TypeScript — Client SDK MCP — connexion et invocation des outils
- Transport HTTP (TS + Python) — code client complet pour l'intégration de style REST
- Instrumentation LangChain (Python, conceptuel) — échafaudage montrant la forme ; nécessite que votre code d'agent soit exécutable
- Instrumentation CrewAI (Python, conceptuel) — échafaudage ; même avertissement
Communauté
- GitHub Issues — Signalements de bugs et demandes de fonctionnalités
- GitHub Discussions — Questions et idées
- Guide de contribution — Comment contribuer
- HTTP Ingest — Capture déterministe de traces via
POST /api/v1/traces - Roadmap — Ce qui arrive ensuite
Configuration et sécurité
Arguments CLI
| Option | Défaut | Description |
|---|---|---|
--transport | stdio | Type de transport : stdio ou http |
--port | 3000 | Port du transport HTTP |
--db-path | ~/.iris/iris.db | Chemin de la base de données SQLite |
--config | ~/.iris/config.json | Chemin du fichier de configuration |
--api-key | — | Clé API pour l'authentification HTTP |
--dashboard | false | Activer le tableau de bord web |
--dashboard-port | 6920 | Port du tableau de bord |
--dashboard-host | 127.0.0.1 | Adresse 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 |
--demo | false | Initialiser 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-clear | false | Supprimer la base de données de démonstration et quitter |
--self-test | false | Exé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
| Variable | Description |
|---|---|
IRIS_TRANSPORT | Type de transport (stdio ou http) |
IRIS_PORT | Port du transport HTTP |
IRIS_HOST | Hôte du transport HTTP (défaut 127.0.0.1) |
IRIS_HOME | Répertoire pour tous les fichiers par utilisateur : config.json, iris.db, custom-rules.json, audit.log, preferences.json (défaut ~/.iris) |
IRIS_DB_PATH | Chemin de la base de données SQLite (remplace IRIS_HOME pour la base uniquement) |
IRIS_LOG_LEVEL | Niveau de journalisation : debug, info, warn, error |
IRIS_DASHBOARD | Activer le tableau de bord web (true/false ; false remplace également dashboard.enabled dans config.json) |
IRIS_DASHBOARD_PORT | Port du tableau de bord (défaut 6920) |
IRIS_DASHBOARD_HOST | Adresse de liaison du tableau de bord (défaut 127.0.0.1) |
IRIS_API_KEY | Clé API pour l'authentification HTTP |
IRIS_ALLOWED_ORIGINS | Origines 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.
Sous licence MIT.