mcp.anomalyarmor.ai/mcp) attaches an inline HTML view to five flagship tools - check_freshness, get_freshness_summary, list_schema_changes, get_lineage, and health_summary. Hosts that implement the draft MCP Apps spec render the view directly in the chat; hosts without MCP Apps support keep seeing the existing JSON response. Nothing breaks either way.
The images below are illustrative static snapshots of what the live renders look like. The actual tool response is interactive and generated by the MCP server at render time.
Supported hosts
| Host | Status | Notes |
|---|---|---|
| Claude Desktop nightly | Full | Requires Developer Mode → MCP Apps feature flag |
| Cursor experimental | Best-effort | Behind an experimental feature flag; rendering fidelity varies |
| Everything else (Claude Code CLI, Cursor stable, web agents, custom clients) | Falls back to JSON | The tools still work; you see the raw JSON payload |
Freshness timeline
Tool:check_freshness / get_freshness_summary. Returns per-table or aggregate freshness with status-colored bars and stat cards.
Schema diff table
Tool:list_schema_changes. Color-codes each row by change type (green = added, red = dropped, yellow = type-changed) with a severity pill and detection timestamp.
Lineage graph
Tool:get_lineage. Three-column layout of upstream sources, the queried asset, and downstream consumers. Edge count is surfaced in the caption.
Health dashboard
Tool:health_summary. Stat-card grid with freshness %, active alert count, and unacknowledged schema drift, followed by a “Needs attention” list.
Security and privacy
- The embedded HTML runs in the host’s resource sandbox with a strict Content Security Policy:
default-src 'none', noconnect-src(so the template cannot make network calls), and no inline secrets. - All data is pre-filtered by the MCP server before it’s injected into the template - Bearer tokens,
aa_live_*API keys, and email addresses cannot reach the render layer. A CI conformance sweep guards against regressions. - Vega-Lite is pinned to
5.17.0and loaded fromcdn.jsdelivr.net. If the CDN is unreachable at render time, hosts show the JSON payload alongside a<noscript>fallback.
How it works
Each flagship tool returns a two-element MCP content-block list:- A
TextContentwith the exact JSON payload every host saw before MCP Apps landed - this is the byte-identical fallback for hosts that ignoreEmbeddedResource. - An
EmbeddedResourcepointing to aui://armor/<template>/<sha256(payload)[:12]>URI whose text is a self-contained HTML document. Hosts that support MCP Apps render this resource inline; hosts that don’t, skip it.
(template, payload) pair, so repeated identical calls from the same conversation are deduped by the host’s resource cache.
Next steps
Common Questions
Which AnomalyArmor MCP tools render inline chart views?
Five today:check_freshness, get_freshness_summary, list_schema_changes, get_lineage, and health_summary. Hosts that speak the MCP Apps spec render these inline; other hosts receive the standard JSON response automatically, so nothing breaks.
Which MCP hosts support the inline UI today?
Claude Desktop has full support. Cursor has it behind an experimental flag. Claude Code CLI renders the JSON fallback today - inline UI arrives when Claude Code ships its MCP Apps integration. Adding the tools now is safe either way.What happens if my host doesn’t support MCP Apps?
The tool returns the same structured JSON it always has. Agents read it normally; you just don’t get the inline chart preview. No error, no fallback configuration needed.Can I embed these interactive views outside of an MCP host?
Not directly - the views are part of the MCP tool response protocol. For standalone embedding (dashboards, wikis), use report badges for static status or the REST API to fetch raw data for your own rendering.MCP server overview
Connection methods, auth, and the full tool catalog
Claude Code
Claude Code CLI setup (uses JSON fallback today)
Cursor
Cursor IDE setup - experimental MCP Apps flag
Web agent
The same tools in the AnomalyArmor web UI
