iris-eval/mcp-server

iris-eval/mcp-server

от iris-eval
Iris - open-source MCP сервер для оценки безопасности и качества AI-агентов. Проверяет вывод на PII, инъекции, галлюцинации, контролирует стоимость. Логирует трассировки, имеет веб-дашборд. Работает с любым MCP-клиентом без SDK.

Iris — The Agent Eval Standard for MCP

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

Know whether your AI agents are actually good enough to ship. Iris is an open-source MCP server that scores output quality, catches safety failures, and enforces cost budgets across all your agents. Any MCP-compatible agent discovers and uses it automatically — no SDK, no code changes.

Iris Dashboard

The Problem

Your agents are running in production. Infrastructure monitoring sees 200 OK and moves on. It has no idea the agent just:

  • Leaked a social security number in its response
  • Hallucinated an answer with zero factual grounding
  • Burned $0.47 on a single query — 4.7x your budget threshold
  • Made 6 tool calls when 2 would have sufficed

Iris evaluates all of it.

What You Get

Trace Logging Hierarchical span trees with per-tool-call latency, token usage, and cost in USD. Stored in SQLite, queryable instantly.
Output Evaluation 13 built-in rules across 4 categories: completeness, relevance, safety, cost. PII detection (10 patterns: SSN, credit card, phone, email, IBAN, DOB, MRN, IP, API key, passport), prompt injection (13 patterns), stub-output detection, hallucination markers (17 hedging phrases + fabricated-citation heuristic). Add custom rules with Zod schemas.
Cost Visibility Aggregate cost across all agents over any time window. Set budget thresholds. Get flagged when agents overspend.
Web Dashboard Real-time dark-mode UI with trace visualization, eval results, and cost breakdowns.
Инструменты были проиндексированы:
delete_rule

Удаляет развёрнутое кастомное правило оценки или, если передан enabled, отключает / повторно включает его без удаления. В обоих случаях изменение вступает в силу при следующем вызове evaluate_output; прошлые eval_results, ссылавшиеся на правило, сохраняются. Смежные инструменты: deploy_rule добавляет кастомные правила, list_rules перечисляет их (включая отключённые, с enabled: false), evaluate_output выполняет их. delete_trace удаляет трейсы (отдельная задача); log_trace / get_traces отвечают за чтение и запись трейсов. delete_rule - это путь НЕОБРАТИМОГО УДАЛЕНИЯ для хранилища кастомных правил и единственный путь MCP, который переключает правило; он НЕ затрагивает ни трейсы, ни eval_results, ни встроенные (не кастомные) правила. Поведение. Без enabled: НЕОБРАТИМОЕ УДАЛЕНИЕ. Переписывает /.iris/custom-rules.json без удалённой строки и добавляет запись `rule.delete` в журнал аудита (/.iris/audit.log). Не идемпотентно: если правило уже удалено, повторный вызов возвращает deleted: false, а не добавляет запись в журнал аудита заново. Правило немедленно перестаёт срабатывать в текущем процессе. С enabled: БЕЗ УДАЛЕНИЯ. Строка правила остаётся, меняются её флаг enabled и updatedAt, в журнал аудита добавляется запись rule.toggle (если флаг уже был в этом состоянии, запись не добавляется), а текущий движок снимает правило с регистрации (false) или регистрирует его заново (true), поэтому изменение применяется сразу; отключённое правило также не загружается при следующем запуске. Исторические eval_results, ссылающиеся на этот rule_id, остаются в базе данных: аналитика дрейфа и журнал аудита остаются валидными. В Cloud-версии операция привязана к тенанту; OSS работает с LOCAL_TENANT. Ограничение частоты: 20 запросов/мин на HTTP MCP. Формат вывода. Удаление: { "deleted": boolean, "rule_id": string }. deleted=true, если строка была удалена; deleted=false, если правила с таким id не существовало. Переключение (передан enabled): { "deleted": false, "toggled": boolean, "rule_id": string, "enabled"?: boolean, "rule"?: { ...the rule } }. toggled=true вместе с текущим состоянием правила, если id существует (также когда правило уже находилось в запрашиваемом состоянии); toggled=false и никаких…

Удаляет или отключает пользовательское правило.

Параметры
  • enabledboolean

    When present the rule is NOT deleted: false DISABLES it (kept in the store, stops firing immediately, history and provenance preserved); true RE-ENABLES a disabled rule. Omit to delete

  • rule_idstringобязательный

    Rule id to delete or toggle (format: rule-<hex>); obtained from list_rules or deploy_rule response

delete_trace

Удаляет один трейс по идентификатору. Каскадно удаляет спаны; eval_results сохраняют историю оценок с обнулённым trace_id. Смежные инструменты — log_trace создаёт трейсы, get_traces их запрашивает, evaluate_output / evaluate_with_llm_judge / verify_citations выставляют оценки. delete_rule обрабатывает удаление пользовательских правил (отдельная задача); list_rules / deploy_rule управляют жизненным циклом пользовательских правил. delete_trace — это РАЗРУШИТЕЛЬНОЕ удаление одной строки для трейсов; оно НЕ трогает eval_results (сохраняются для аудита и аналитики дрейфа), спаны удаляются каскадно автоматически. Поведение. РАЗРУШИТЕЛЬНОЕ — SQL DELETE в пределах tenant_id вызывающего. Каскадирование: спаны, принадлежащие этому трейсу, удаляются (FK ON DELETE CASCADE); eval_results, ссылавшиеся на этот трейс, получают trace_id = NULL (FK ON DELETE SET NULL), чтобы агрегированные дашборды и исторические оценки оставались валидными даже после удаления трейса. Не идемпотентно: повторное удаление уже удалённого трейса возвращает deleted: false. В версии v0.4 не создаёт запись в логе аудита — трейсы относятся к пользовательским данным, а не к изменениям политик. Ограничение 20 запросов/мин на HTTP MCP. Формат вывода. Возвращает JSON: { "deleted": boolean, "trace_id": string }. deleted=true если строка была удалена; deleted=false если трейса с таким id не существовало (или он принадлежал другому тенанту — кросс-тенантные удаления молча игнорируются). Используйте, когда трейс записан по ошибке, содержит конфиденциальные данные, которые нужно удалить для соответствия требованиям (например, клиент реализует право на забвение по GDPR), или при очистке тестовых данных. Комбинируйте с get_traces для поиска кандидатов: запрос с фильтрами → просмотр → delete_trace(id) для каждого целевого трейса. Для массового удаления по временному окну используйте deleteTracesOlderThan через CLI / настройку хранения — delete_trace это хирургический путь для одной строки. Не используйте для массовой очистки СТАРЫХ данных (используйте настройку хранения с --retention-days). Не используйте для ПРИОСТАНОВКИ трейса — трейсы неизменяемы после сохранения, приостанавливать нечего. Не используйте для удаления eval_results — eval_results намеренно переживают удаление своего трейса…

Удалить трассировку

Параметры
  • trace_idstringобязательный

    Trace id to delete (32-hex lowercase; obtained from log_trace response or get_traces)

deploy_rule

Разворачивает новое пользовательское правило оценки, которое срабатывает при каждом будущем вызове evaluate_output в своей категории eval. Смежные инструменты: list_rules перечисляет развёрнутые правила, delete_rule удаляет их (или отключает/включает их с помощью аргумента enabled), evaluate_output выполняет их. log_trace / get_traces / delete_trace управляют жизненным циклом трассировок отдельно; evaluate_with_llm_judge / verify_citations выполняют семантическую оценку (не на основе эвристических правил). deploy_rule - это WRITE-путь, который пополняет библиотеку пользовательских правил. Поведение. Вносит запись в /.iris/custom-rules.json (атомарная запись через временный файл и переименование) и добавляет в журнал аудита (/.iris/audit.log) запись rule.deploy. Правило активируется немедленно для работающего процесса и сохраняется между перезапусками. Каждый вызов создаёт новый rule_id. Имена правил уникальны среди развёрнутых правил: развёртывание правила с уже занятым именем ОТКЛОНЯЕТСЯ, если не указано replace: true; в этом случае существующие одноимённые правила удаляются (в журнал аудита записываются строки rule.delete, они исключаются из работающего движка), и новое правило занимает их место под новым id - ответ перечисляет, что было заменено. В Cloud-тарифе правила привязаны к тенанту; правила OSS принадлежат LOCAL_TENANT. Скорость ограничена 20 запросами в минуту на HTTP MCP. Формат вывода. Возвращает JSON: { "rule": { "id": "rule-XXXX", "name", "description", "evalType", "severity", "definition", "enabled": true, "createdAt", "updatedAt", "version": 1, "sourceMomentId?" }, "replaced?": [{ "id", "evalType", "severity" }], "warning?": string }. Возвращённое правило - это каноническая сохранённая форма; сохраните id, если планируете позже отключить или удалить его. replaced и warning появляются только тогда, когда replace: true удалил более раннее правило с тем же именем. Используйте, когда агент замечает повторяющийся паттерн сбоя и решает закрепить его как постоянное правило. Поле source_moment_id сохраняет происхождение: последующий аудит может проследить правило до момента, который его вдохновил. Комбинируйте с evaluate_output и get_traces: 1)…

Развернуть пользовательское правило

Параметры
  • definitionobjectобязательный

    Check definition (regex, length, keyword, cost, or schema). Accepts exactly type, config, weight and an optional name — an unknown key is rejected

  • descriptionstring

    What this rule checks for and why it matters

  • eval_typeenum

    Eval category this rule belongs to; the rule fires on evaluate_output calls whose eval_type equals it (and on eval_type="all"). Canonical snake_case spelling — pass exactly one of eval_type / evalType

  • evalTypeenum

    camelCase alias of eval_type, accepted for compatibility — prefer eval_type (snake_case is canonical across the tools)

  • namestringобязательный

    Human-readable rule name (1-80 chars; used in eval results). Must be unique among deployed rules unless replace=true

  • replaceboolean

    When a rule with this name is already deployed: false (default) rejects the call; true deletes the existing same-named rule(s) and deploys this one in their place (fresh id; audit rows preserved)

  • severityenum

    What a FAILURE of this rule means. low/medium: informational — contributes to the weighted score only (plus dashboard sort + audit alerts). high/critical: hard-fail — a failing evaluation of this rule forces the overall passed=false regardless of the weighted score

  • source_moment_idstring

    Optional Decision Moment ID the rule was derived from (preserves workflow-inversion provenance). Canonical snake_case — pass exactly one of source_moment_id / sourceMomentId

  • sourceMomentIdstring

    camelCase alias of source_moment_id, accepted for compatibility — prefer source_moment_id

evaluate_outputидемпотентный

Оценивает выходные данные агента по настраиваемым правилам проверки и возвращает оценку 0..1 и разбивку по каждому правилу. Соседние инструменты: evaluate_with_llm_judge выполняет семантическую LLM-оценку (медленнее, стоит денег; этот инструмент эвристический, бесплатный, детерминированный), verify_citations проверяет привязку цитат, log_trace фиксирует выполнения, get_traces запрашивает их, list_rules / deploy_rule / delete_rule управляют жизненным циклом пользовательских правил. evaluate_output - БЫСТРЫЙ ПУТЬ для проверок длины, ключевых слов, PII, инъекций и порогов стоимости там, где достаточно правил. Поведение. Детерминированная оценка внутри процесса: одинаковые входные данные всегда дают одинаковый результат. Записывает одну запись eval_result в хранилище Iris (привязанную к trace_id, если он указан; иначе непривязанную). В эвристическом режиме не выполняет внешних сетевых вызовов (в v0.4 добавляется тип проверки llm_as_judge, который ВЫЗЫВАЕТ LLM API; для этого см. отдельный инструмент evaluate_with_llm_judge). Ограничен по частоте до 20 запросов в минуту на HTTP MCP, без ограничений на stdio. Выполняется примерно за 5-50 мс для проверки на основе правил. Форма вывода. Возвращает JSON: { "id": "<uuid>", "eval_type": "<bundle that ran>", "score": 0..1, "passed": boolean, "critical_failures?": string[], "critical_skipped?": string[], "rule_results": [{ "ruleName", "ruleId?", "category?", "passed", "score", "message", "skipped?", "skipReason?", "budgetExceeded?", "configInvalid?" }], "suggestions": string[], "rules_evaluated": number, "rules_skipped": number, "insufficient_data": boolean, "categories?": { "<bundle>": { "score", "passed", "rules_evaluated", "rules_skipped", "insufficient_data", "critical_failures?", "critical_skipped?" } }, "note?": string }. ruleId присутствует в результатах, созданных развернутым правилом (rule-XXXX), поэтому два правила с одинаковым именем остаются различимыми. categories появляется только для eval_type="all" и содержит по одной записи на каждый bundle, в котором были правила, с той же семантикой порога и критического вето, что и при запуске одного bundle; category в каждом результате правила показывает, из какого bundle он получен. insufficient_data=true...

Оценить вывод

Параметры
  • cost_usdnumber

    Cost in USD — consulted by the cost bundle (eval_type="cost" or "all") AND by any cost_threshold custom rule regardless of eval_type; omit it and such a rule skips rather than passes (a critical one is listed in critical_skipped)

  • custom_rulesobject[]

    Custom evaluation rules, max 10 per call (deploy persistent rule sets via deploy_rule instead) — fires REGARDLESS of eval_type; pass eval_type="custom" if you want ONLY these. Each entry accepts exactly name, type, config, weight — an unknown key (e.g. a misspelled weight) is rejected

  • eval_typeenum

    Rule bundle to apply: completeness | relevance | safety | cost | custom | all — picks which built-in rules fire. "all" runs every bundle in one call and adds a per-category breakdown. Defaults to "completeness" when omitted (the response then carries a note that safety rules did not run)

  • expectedstring

    Expected output for comparison — consulted only by the completeness bundle's expected_coverage rule; NOT used by relevance (the relevance rules compare the output against input)

  • inputstring

    Original input for context (the ask + any source material the agent was given) — REQUIRED when eval_type="relevance" (keyword_overlap and topic_consistency compare the output against it and skip without it); also grounds the safety bundle's hallucination signals

  • outputstringобязательный

    The output text to evaluate (the agent's response that gets scored against rules)

  • token_usageobject

    Token usage breakdown — only consulted by the cost bundle (eval_type="cost" or "all"; used for token-budget rules)

  • trace_idstring

    Link evaluation to a trace — surfaces this eval in the dashboard's trace drill-through. Must be the id of a stored trace (from log_trace / get_traces); an unknown id is rejected before anything is evaluated

evaluate_with_llm_judgeвнешний мир

Оценивает вывод агента с помощью LLM-судьи (Anthropic или OpenAI). Возвращает калиброванную оценку 0..1 с обоснованием, разбивкой по измерениям и точной стоимостью. Смежные инструменты: evaluate_output применяет эвристические правила (бесплатно, детерминированно, задержка ~мс, без API-ключа); этот инструмент проводит семантическую оценку на основе LLM (платно, задержка 1-10 с, требуется API-ключ). verify_citations - это СПЕЦИАЛИЗИРОВАННАЯ форма LLM-оценки, которая проверяет только обоснованность цитат. log_trace / get_traces отвечают за ввод-вывод трейсов; list_rules / deploy_rule / delete_rule управляют жизненным циклом эвристических правил. evaluate_with_llm_judge - это ОБЩИЙ путь семантической оценки. Поведение. Вызывает внешний LLM API (Anthropic или OpenAI) - платно за вызов, занимает 1-10 секунд, соблюдает ограничение IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL. Не детерминирован при temperature > 0; значение по умолчанию temperature=0 даёт почти детерминированные оценки. Записывает одну строку eval_result в хранилище Iris (связанную с trace_id, если он указан), а также фиксирует id ответа провайдера, задержку, количество токенов и стоимость в полезной нагрузке rule_results. Действует лимит 20 запросов в минуту на HTTP MCP; ваш LLM-провайдер также устанавливает собственные лимиты частоты (при 429 мы прозрачно повторяем запрос один раз). Формат вывода. Возвращает JSON: { "id": "<uuid>", "score": 0..1, "passed": boolean, "rationale": string, "dimensions": {...}, "model": string, "provider": "anthropic"|"openai", "template": string, "input_tokens": number, "output_tokens": number, "cost_usd": number, "latency_ms": number }. dimensions содержит подоценки по каждому измерению (например, шаблон accuracy возвращает {factual_claims, citations, internal_consistency}). Используется, когда эвристические правила (через evaluate_output) слишком грубы для нужного сигнала качества: семантическая корректность, фактическая точность по сравнению с эталоном, верность RAG источникам, нюансированная безопасность/полезность. Шаблон подбирается под задачу: accuracy (обнаружение галлюцинаций), helpfulness (отвечает ли на запрос), safety (потенциальный вред за пределами regex-проверки PII), correctness (по сравнению с эталонным ответом - передаётся…

Оценить с помощью LLM Judge

Параметры
  • expectedstring

    Reference answer (required for correctness template)

  • inputstring

    User question / prompt that produced the output (improves accuracy for helpfulness/safety)

  • max_cost_usdnumber

    Cost cap in USD; defaults to IRIS_LLM_JUDGE_MAX_COST_USD_PER_EVAL or 0.25

  • max_output_tokensinteger

    Judge output token cap; default 512

  • modelstringобязательный

    Model ID. Supported: anthropic = claude-opus-4-7 | claude-sonnet-4-6 | claude-haiku-4-5 | claude-haiku-4-5-20251001; openai = gpt-4o | gpt-4o-mini | o1-mini.

  • outputstringобязательный

    The agent output text to evaluate

  • providerenum

    Auto-detected from model when omitted

  • source_materialstring

    Provided RAG sources (required for faithfulness template)

  • temperaturenumber

    Sampling temperature; default 0 (deterministic)

  • templateenumобязательный

    Judge dimension: accuracy (factual correctness), helpfulness (does it address the ask), safety (harm potential), correctness (vs reference answer — requires expected), faithfulness (RAG grounding — requires source_material).

  • timeout_msinteger

    Per-request timeout; default 60_000

  • trace_idstring

    Link this evaluation to a stored trace (id from log_trace / get_traces); an unknown id is rejected BEFORE the judge is called

get_tracesтолько чтениеидемпотентный

Запрашивает сохранённые трейсы выполнения агентов с фильтрами, пагинацией и опциональной сводкой для дашборда. Смежные инструменты: log_trace создаёт трейсы, delete_trace удаляет один трейс, evaluate_output / evaluate_with_llm_judge / verify_citations оценивают их, list_rules / deploy_rule / delete_rule управляют жизненным циклом пользовательских правил. get_traces - это операция чтения (READ) для исторических выполнений агентов, она никогда ничего не изменяет. Поведение. Только чтение: не изменяет хранилище и не вызывает внешние сервисы. Идемпотентен: повторные вызовы с теми же аргументами возвращают те же результаты (новые трейсы, записанные после вызова, разумеется, будут видны при последующих вызовах). В пределах своего тенанта: запрашивает только его строки (LOCAL_TENANT в OSS). Пагинирует результаты (лимит по умолчанию 50, максимум 1000). Ограничен по частоте: 20 запросов/мин через HTTP MCP, без ограничений через stdio. Формат вывода. Возвращает JSON: { "traces": [{...traceRow}], "total": number, "limit": number, "offset": number, "summary"?: { total_traces, avg_latency_ms, total_cost_usd, error_rate, eval_pass_rate, traces_per_hour, top_agents } }. Каждая запись трейса включает trace_id, agent_name, framework, input, output, tool_calls, latency_ms, token_usage, cost_usd, metadata, timestamp. summary включается только при include_summary: true. Используйте, когда нужны исторические данные: разобраться в прошлом сбое, рассчитать тренды качества, сравнить агентов или передать данные в аналитическую задачу. Укажите agent_name / framework / since / until, чтобы сузить запрос. Укажите min_score / max_score, чтобы выявить выбросы. Укажите sort_by: "cost_usd" + sort_order: "desc", чтобы найти самые дорогие трейсы. Укажите include_summary: true, когда нужны агрегаты в стиле дашборда за один запрос. Не используйте для оценки трейса (используйте evaluate_output). Не используйте для создания трейса (используйте log_trace). Не используйте как живой поток событий: это запрос, а не подписка; опрашивайте с экспоненциальной задержкой или используйте SSE-эндпоинт дашборда для работы в реальном времени. Параметры. limit по умолчанию 50, максимум 1000 (всё, что выше, возвращает 400).

Получить трассы

Параметры
  • agent_namestring

    Filter by agent name — exact match (no wildcards in v0.4)

  • frameworkstring

    Filter by agent framework — exact match (e.g., langchain, autogen)

  • include_summaryboolean

    Include dashboard summary stats in same response — saves a round-trip when ingesting for dashboards

  • limitinteger

    Results per page (default 50, max 1000 — values >1000 return 400)

  • max_scorenumber

    Maximum eval score filter (0..1; values outside are rejected) — applied to LATEST eval per trace

  • min_scorenumber

    Minimum eval score filter (0..1; values outside are rejected) — applied to LATEST eval per trace, not all evals; must be <= max_score when both are set

  • offsetinteger

    Zero-based pagination offset — skip first N results (non-negative integer)

  • sincestring

    ISO 8601 timestamp (or date) lower bound — return traces with timestamp >= this; anything that is not an ISO timestamp is rejected, never treated as "no bound"

  • sort_byenum

    Sort by timestamp | latency_ms | cost_usd (default timestamp)

  • sort_orderenum

    Sort order: asc | desc (default desc — most recent / highest first)

  • untilstring

    ISO 8601 timestamp (or date) upper bound — return traces with timestamp <= this; must not be earlier than since

list_rulesтолько чтениеидемпотентный

Перечисляет развернутые пользовательские правила оценки из локального хранилища правил. Родственные инструменты: deploy_rule добавляет пользовательские правила, delete_rule удаляет их, evaluate_output прогоняет их по выводу агента. log_trace / get_traces / delete_trace занимаются жизненным циклом трейсов отдельно. list_rules - это путь чтения для хранилища пользовательских правил; больше ничто не показывает этот перечень. Поведение. Только чтение ~/.iris/custom-rules.json (кэшируется в памяти; после запуска сервера диск при каждом вызове не читается). Никаких изменений, никаких внешних сетевых вызовов. В облачной версии ограничено тенантом; OSS возвращает все правила для единственного локального тенанта. Лимит частоты: 20 запросов/мин на HTTP MCP, на stdio без ограничений. Возвращает ответ менее чем за 5 мс. Формат вывода. Возвращает JSON: { "rules": [{ "id": "rule-XXXX", "name", "description", "evalType", "severity", "definition": { name, type, config, weight? }, "enabled": boolean, "createdAt": ISO timestamp, "updatedAt": ISO timestamp, "version": number, "sourceMomentId?": string }], "total": number, "enabled_count": number }. Когда правила не развернуты, возвращается пустой массив и total=0. Развернутое правило срабатывает только на тех вызовах evaluate_output, у которых eval_type совпадает с его evalType (или eval_type="all", который прогоняет все пакеты). Используйте, когда нужно узнать, какие пользовательские правила сейчас активны (перед вызовом evaluate_output, перед развертыванием похожего правила, чтобы избежать дублей, или при построении панели мониторинга). Фильтруйте по eval_type, чтобы сузить до конкретной категории, или передавайте enabled_only: true, чтобы исключить отключенные правила. Для просмотра данных трейсов используйте get_traces; для подсчета оценок - evaluate_output; list_rules применяйте только когда нужен РЕЕСТР ПРАВИЛ. Не используйте для подсчета трейсов или оценок (это get_traces). Не используйте для просмотра встроенных (не пользовательских) правил: они поставляются с бинарником iris и перечислены в docs/api-reference.md, а не в хранилище правил. Не используйте для развертывания правила (используйте deploy_rule); не используйте для удаления (используйте delete_rule). Параметры. Фильтр eval_type сравнивается точным совпадением с полем evalType каждого правила (без подстановочных символов). enabled_only исключает…

Список пользовательских правил

Параметры
  • enabled_onlyboolean

    Return only enabled rules (excludes disabled ones)

  • eval_typeenum

    Filter to rules of a specific eval category

log_trace

Сохраняет единичный трейс выполнения агента (входные данные, выходные данные, спаны, вызовы инструментов, стоимость, задержку, использование токенов). Смежные инструменты: evaluate_output выполняет эвристическую оценку трейса; evaluate_with_llm_judge проводит семантическую оценку на основе LLM; verify_citations проверяет достоверность цитат; get_traces запрашивает сохранённые трейсы; delete_trace удаляет один трейс; list_rules / deploy_rule / delete_rule управляют пользовательскими правилами оценки. log_trace — это WRITE-путь, который записывает выполнения; всё остальное читает, оценивает или управляет связанными с трейсом сущностями. Поведение. Записывает одну строку в хранилище Iris (по умолчанию SQLite, в Cloud-тарифе Postgres). Когда установлен IRIS_OTEL_ENDPOINT, ТАКЖЕ запускает асинхронный best-effort экспорт в настроенный коллектор OTLP/HTTP (Jaeger, Tempo, Datadog OTLP, OTEL Collector). OTel-экспорт работает по принципу fire-and-forget: его успех не влияет на ответ инструмента; ошибки логируются, но трейс всё равно сохраняется локально. В stdio-режиме аутентификация не используется. В HTTP-режиме Bearer-токен требуется ТОЛЬКО когда задан --api-key / IRIS_API_KEY (рекомендуется); без настроенного ключа auth-промежуточный слой просто пропускает запрос, а записи выполняются без аутентификации. Стандартный HTTP-сервер защищён привязкой к loopback (127.0.0.1) и проверкой Origin, а не учётными данными. Лимит запросов: 20 в минуту для HTTP MCP, безлимит для stdio. Не идемпотентен: каждый вызов генерирует свежий trace_id, поэтому повторная отправка того же payload создаёт дубликат трейса. Формат вывода. Возвращает JSON-строку: { "trace_id": "<32-hex>", "status": "stored" }. trace_id — это ключ, который вы затем передаёте в evaluate_output или get_traces. Используйте, когда нужно записать выполнение агента для последующей оценки, анализа или аудита. Вызывайте его ПОСЛЕ того, как агент выдал результат; затем вызывайте evaluate_output для оценки; вызывайте get_traces для запроса исторических трейсов. Сохраняйте богатый контекст: spans (дерево спанов), tool_calls (какие инструменты вызывались с задержками/ошибками), token_usage, cost_usd, metadata (произвольные пары ключ-значение). Всё опционально, кроме agent_name. Не используйте, когда…

Лог трассировки

Параметры
  • agent_namestringобязательный

    Agent name — used for filtering in get_traces (e.g., "customer-support-bot")

  • cost_usdnumber

    Total cost in USD — overrides per-span aggregation when provided (treated as authoritative)

  • frameworkstring

    Agent framework identifier (e.g., langchain, autogen, custom)

  • inputstring

    Agent input text — the user prompt or upstream input that produced this output

  • latency_msnumber

    Total execution time in milliseconds (end-to-end agent latency)

  • metadataobject

    Opaque key-value tags (e.g. {requestId, userId, env}) — queryable in dashboard, not via get_traces filters

  • outputstring

    Agent output text — what the agent produced (pass to evaluate_output for scoring)

  • spansobject[]

    Detailed execution spans (hierarchical span tree with timings, attributes, events)

  • timestampstring

    Trace timestamp (ISO 8601); defaults to now() when omitted

  • token_usageobject

    Token usage breakdown (prompt/completion/total — used for cost analysis)

  • tool_callsobject[]

    Tool calls made during execution (per-call latency, errors, input/output)

verify_citationsвнешний мир

Извлекает цитаты из вывода агента, загружает указанные источники и использует LLM-судью, чтобы проверить, подтверждает ли каждый источник утверждение в контексте. Возвращает вердикт по каждой цитате и общий коэффициент подтверждения. Смежные инструменты: evaluate_with_llm_judge выполняет общую семантическую оценку (точность, полезность, корректность, достоверность); этот инструмент специально проверяет обоснованность цитат (действительно ли указанный источник подтверждает утверждение). Эвристика no_hallucination_markers из evaluate_output дёшево выявляет цитаты, похожие на ВЫДУМАННЫЕ (бесплатно, без загрузки); этот инструмент разрешает и проверяет их (платно, загрузка по согласию, защита от SSRF). log_trace и get_traces обрабатывают ввод-вывод трассировок. verify_citations выполняет путь GROUNDING-CHECK: самый узкий по охвату и самый глубокий по строгости. Поведение. Трёхфазный конвейер: (1) извлечение регулярными выражениями нумерованных ссылок [N], скобочных (Автор, Год), обычных URL и DOI (в процессе, без сети); (2) загрузка цитат по URL и DOI с защитой от SSRF: список разрешённых схем, блокировка приватных, link-local и cloud-metadata IP-адресов, опциональный список разрешённых доменов (IRIS_CITATION_DOMAINS), таймаут 10 секунд, лимит тела 5 МБ, ручное отслеживание перенаправлений (максимум 3, с повторной проверкой), локальный LRU-кэш; (3) вызов LLM-судьи для каждой цитаты с вопросом «подтверждает ли этот источник данное утверждение?» и вердиктом на 256 токенов. Включается через allow_fetch=true или IRIS_CITATION_ALLOW_FETCH=1: Iris по умолчанию отказывает в исходящих HTTP-запросах. Стоимость всего вызова ограничена параметром max_cost_usd_total (по умолчанию $1.00): конвейер останавливается, когда лимит будет превышен. Скорость ограничена 20 запросами в минуту на HTTP MCP. Записывает одну строку eval_result с пометкой о происхождении для каждой цитаты. Формат вывода. Возвращает JSON: { "id": "<uuid>", "overall_score": 0..1|null, "passed": boolean, "total_citations_found": number, "total_resolved": number, "total_judged": number, "total_supported": number, "total_cost_usd": number, "citations": [{ "citation": { "raw", "kind", "identifier", "offset_start", "offset_end" }, "resolve_status": "ok"|"skipped"|"error", "resolve_error"?, "source"?: { "url", "status",…

Проверить ссылки

Параметры
  • allow_fetchboolean

    Permit outbound HTTP to resolve URLs/DOIs. Defaults to IRIS_CITATION_ALLOW_FETCH=1; false otherwise. SSRF-guarded regardless.

  • domain_allowliststring[]

    Restrict fetches to hostnames in this list (suffix match allowed). Merged with IRIS_CITATION_DOMAINS env.

  • max_citationsinteger

    Max citations to verify (extras skipped); default 20

  • max_cost_usd_totalnumber

    Cap TOTAL judge cost across all citations in this call; default $1.00

  • modelstringобязательный

    Judge model for per-citation verification. Supported: anthropic = claude-opus-4-7 | claude-sonnet-4-6 | claude-haiku-4-5-20251001; openai = gpt-4o | gpt-4o-mini | o1-mini.

  • outputstringобязательный

    The agent output containing citations to verify

  • per_source_max_bytesinteger

    Per-URL body cap; default 5MB

  • per_source_timeout_msinteger

    Per-URL fetch timeout; default 10_000

  • providerenum

    Auto-detected from model when omitted

  • trace_idstring

    Link verification result to a stored trace (id from log_trace / get_traces); an unknown id is rejected before any fetch or judge call

Похожие MCP-сервера

hugoles/langfuse-mcp

hugoles/langfuse-mcp

Сервер MCP, открывающий Langfuse API для ИИ-ассистентов. Позволяет запрашивать трассировки, оценки, промпты и метрики, не покидая чат. Подходит для отладки ошибок LLM и мониторинга затрат.

TypeScript1
Acacian/aegis

Acacian/aegis

Agent-Aegis — единый слой управления (governance) для AI-агентов: блокирует prompt-инъекции, маскирует PII, применяет политики и ведет аудит. Работает с 12 фреймворками, включая MCP. Установка `pip install agent-aegis` и одна строка кода включают защиту.

Python15
ksterx/srunx

ksterx/srunx

MCP сервер srunx открывает AI-агентам прямой доступ к SLURM через CLI, веб-дашборд или Python API — отправка задач, мониторинг очереди, запуск workflows и GPU-статус. Работает локально и через SSH, поддерживает контейнеры.

Python17
TANTIOPE/datadog-mcp-server

TANTIOPE/datadog-mcp-server

MCP сервер для AI-ассистентов, открывающий полный доступ к Datadog: поиск логов, фильтрация APM-трейсов, запрос метрик, управление мониторами и дашбордами. Помогает SRE и разработчикам быстро разбирать инциденты, не переключаясь между инструментами.

TypeScript5
alilxxey/openobserve-community-mcp

alilxxey/openobserve-community-mcp

MCP сервер для OpenObserve Community Edition в режиме read-only через stdio и REST API. Выполняет поиск логов, просмотр схем потоков и дашбордов. Интегрируется с Claude и Codex для анализа данных OpenObserve без права записи.

Python16
agntor/mcp

agntor/mcp

MCP сервер для проверки доверия и сертификации AI агентов. Помогает разработчикам проверять подлинность агентов, защищать от инъекций и управлять escrow-платежами.

TypeScript1
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин