Reported issues for mcp-server
Pod holds 18 of 19 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.
Back to mcp-server.
Most discussed
Add CSV/JSON export to dashboard
The web dashboard shows traces and evaluations but doesn't support exporting data.
Goal: Add export buttons to the trace list and evaluation list pages.
Acceptance criteria:
- Export button on trace list page (CSV and JSON options)
- Export button on evaluation list page (CSV and JSON options)
- Exports respect current filters (agent name, date range, etc.)
- Dashboard API endpoints: GET /api/v1/traces/export?format=csv and similar
Resources:
- Dashboard source: dashboard/src/
- [
Read the thread · 2026-03-16 · open · 2 comments
Add copy-to-clipboard for trace IDs in dashboard
When viewing traces in the dashboard, clicking a trace ID should copy it to the clipboard for easy sharing.
Acceptance criteria:
- Click trace ID → copies to clipboard
- Brief visual feedback (tooltip or flash)
- Works in both the trace list and trace detail views
Good starting point: dashboard/src/pages/Traces.tsx
Read the thread · 2026-03-20 · closed · 1 comment
Add OpenTelemetry trace export support
Iris currently stores traces in SQLite. Many teams already have observability stacks (Datadog, Grafana, New Relic) that ingest OpenTelemetry spans.
Goal: Add an optional OTel exporter that converts Iris traces to OTel spans and sends them to any OTLP-compatible endpoint.
Acceptance criteria:
- New CLI flag
--otel-endpointto configure the OTLP endpoint - Traces logged via
log_traceare also exported as OTel spans - Spans include GenAI semantic conventions (model, token counts, cost
Read the thread · 2026-03-16 · closed · 1 comment
Dashboard UI polish from first-run walkthroughs
- A moment whose only noteworthy event is failed safety rules shows a yellow PARTIAL verdict chip next to the red SAFETY VIOLATION banner. When
moment.significance.kind === 'safety-violation', render the chip in danger color / "SAFETY FAIL"; deeper fix incomputeVerdict(src/eval/decision-moment.ts). - Welcome banner hardcodes
~/.iris/preferences.jsoneven whenIRIS_HOMEpoints elsewhere; the first-run tour reappears across demo/real dashboards (separate preference files) — persist t
Read the thread · 2026-08-12 · open · 0 comments
Input validation: nested objects and dashboard routes still strip unknown keys
Follow-ups to the strict top-level tool schemas (fix/uat-args):
- Nested objects still strip silently.
custom_rules: [{name: 'a', wieght: 5}]parses fine withwieghtdiscarded — a misspelled rule weight silently changes scoring. Same family as the fixed defect, one level down. Decide: recursive strictness (with care for the free-form record fields —metadata, spanattributes, ruleconfig— whose arbitrary keys are legitimate) or document the boundary. - **All 14 dashboard-route
Read the thread · 2026-08-12 · open · 0 comments
passed semantics: persistence and cross-tool consistency gaps after the critical-rule veto
Follow-ups to the hard-fail semantics change (fix/uat-crit), found during its test-completion:
critical_failuresis never persisted.eval_resultshas no column for it andinsertEvalResult(src/storage/sqlite-adapter.ts:263) doesn't write it. The MCP response carries it (computed in-process), but anything reading the eval back — dashboard drill-through, trace summaries, MCP resources — seespassed: falsewith no stated cause. Worse: the veto suggestion line is only appended when
Read the thread · 2026-08-12 · open · 0 comments
PII patterns are label-anchored more than the pattern list implies
Three of the 19 patterns only fire with specific labels: ISO-format DOB (Date of birth: 1987-03-15) is MISSED while DOB: 03/15/1987 is caught; unlabeled passport numbers in prose are missed; an unlabeled 12-word BIP39 seed phrase is missed while My seed phrase is: … is caught. Fix passport to its documented modern format, add an ISO alternative to the DOB date part, and qualify the README pattern list to note label-anchoring.
_Found during install-only acceptance testing of the v0.5.0
Read the thread · 2026-08-12 · open · 0 comments
Dashboard/API correctness batch
/api/v1/healthtrace_countcontradicts/api/v1/traces(0 vs 253 in demo mode): health uses a windowed summary. Make it an all-timeCOUNT(*)or rename totraces_last_hour(src/dashboard/routes/health.ts:21).- Rule preview endpoint silently ignores sample text:
deploy_rule's description says to usePOST /api/v1/rules/custom/previewfor "dry-run validation against sample output", but the endpooint only replays stored traces;sampleOutput/output/sample/textkeys
Read the thread · 2026-08-12 · open · 0 comments
Most recent
Data retention and permissions for stored eval/trace text
PII the tool just flagged is stored verbatim in plaintext and served to any local process; deleting iris.db leaves the text in iris.db-wal.
- Document in the README that
iris.dbstores raw output text verbatim, including anythingno_piiflags. eval_resultsis missing from the retention sweep — extenddeleteTracesOlderThan(src/storage/sqlite-adapter.ts:622) or adddeleteEvalResultsOlderThancalled alongsidesrc/index.ts:250; add a--purgeflag.- Create
IRIS_HOMEwith
Read the thread · 2026-08-12 · open · 0 comments
--self-test passes while the configured IRIS_HOME is unusable
--self-test prints "✓ PASS - this install works" with exit 0 while pointed at an IRIS_HOME the server cannot write; the real server then dies on startup with a raw EPERM stack trace. The self-test isolates into a temp home (good) but never probes the CONFIGURED home. Fix: in src/self-test.ts, before the temp-home isolation, mkdirSync(irisHome(), {recursive:true}) + a write/unlink probe against the configured home, failing the run with a named path on error. Also wrap the two mkdirSync
Read the thread · 2026-08-12 · open · 0 comments
evaluate_output parameter semantics: relevance demands input, docs say expected; placeholder suppression is invisible
- The tool description states
expectedis REQUIRED foreval_type="relevance"and is "used as the comparison target" — but passingoutput+expectedyieldsinsufficient_data: truewith BOTH relevance rules skipped demandingcontext.input. The parameter the description names does not enable the rules; the undeclared one does. Either make the rules insrc/eval/rules/relevance.tsfall back tocontext.expectedwheninputis absent (smaller behavioral surprise), or correct both desc
Read the thread · 2026-08-12 · open · 0 comments
Dashboard: install-path disclosure on two endpoints, external font CDN, and a firefox e2e flake
Three smaller items from a full-codebase review.
1. Absolute install path returned by two endpoints
src/audit-log-reader.ts:113 (path: filePath) and src/dashboard/routes/preferences.ts:44,51 (path: store.path) return e.g. "path":"C:\Users\<user>\.iris\preferences.json", disclosing the install path and OS username. Same CWE-209 class PR #286 closed for 404s, still present by design here.
Exposure is much reduced now that #323 binds the dashboard to loopback, but there's no reason
Read the thread · 2026-08-10 · closed · 0 comments
MCP tool descriptions promise behaviour the code doesn't implement
Four cases where an agent reading the tool description gets a wrong answer. These matter more than ordinary doc drift: the description IS the interface an LLM programs against.
1. get_traces limit is unclamped on the MCP path
src/tools/get-traces.ts:13 — the Zod schema has no .max(), and queryTraces (sqlite-adapter.ts:177) doesn't clamp. The description promises "max 1000 — values >1000 return 400". Verified: limit: 1000000 is accepted; limit: -1 becomes SQLite's no-limit an
Read the thread · 2026-08-10 · closed · 0 comments
CI: lighthouse job flaking (~3 false-fails on 2026-06-09)
The lighthouse workflow failed then passed (on rerun or on an adjacent identical diff) three times on 2026-06-09:
- PR #190 (workflow-pin-only diff — cannot affect dashboard perf): failed in 1m42s → passed on rerun (failed run)
- PR #187 (react-router bump): failed → passed on rerun (rerun)
- PR #165 (react-dom patch bump): failed; merged o
Read the thread · 2026-06-09 · closed · 0 comments
Upgrade root TypeScript to v6 when @typescript-eslint supports it
Context
PR #57 was closed because @typescript-eslint/eslint-plugin@8.57.1 declares peer dep typescript@">=4.8.4 <6.0.0" — explicitly excludes TypeScript 6. npm ci fails with ERESOLVE in CI.
Dashboard (#55) and website (#56) were upgraded to TS 6 successfully — they use separate lint toolchains that don't depend on @typescript-eslint.
Unblock condition
@typescript-eslintreleases a version declaringtypescript@>=6in peer deps (likely v9.x)
Current state
- Root: TypeS
Read the thread · 2026-03-23 · open · 0 comments
Add dark/light theme toggle to dashboard
The web dashboard currently uses a fixed dark theme. Add a theme toggle button that switches between dark and light modes.
Acceptance criteria:
- Toggle button in dashboard header
- Persist preference to localStorage
- CSS variables for both themes
- No flash of wrong theme on page load
Good starting point: dashboard/src/App.tsx for the toggle, CSS variables in dashboard/index.html
Read the thread · 2026-03-20 · closed · 0 comments
Add full-text search to trace queries
Currently traces can only be filtered by agent_name, framework, and date range. Teams need to search trace content.
Goal: Add text search capability to get_traces and the dashboard.
Acceptance criteria:
- New search parameter on get_traces MCP tool
- Searches across: agent input, agent output, metadata values
- SQLite FTS5 for performant full-text search
- Dashboard search box on trace list page
- Search highlights in results
Resources:
- Storage adapter: src/storage/
- [Architect
Read the thread · 2026-03-16 · open · 0 comments
Create Python SDK for HTTP transport
Iris supports HTTP transport but there's no Python SDK. Python is the primary language for AI/ML development.
Goal: Create a lightweight Python package (iris-eval) that wraps the HTTP API.
Acceptance criteria:
- pip install iris-eval
- IrisClient class with methods: log_trace(), evaluate_output(), get_traces()
- Authentication via API key
- Type hints for all parameters
- Async support (httpx)
- Published to PyPI
Resources:
- HTTP transport examples: examples/http-transport/client
Read the thread · 2026-03-16 · open · 0 comments
The remaining reports are on the project's issue tracker.