> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anomalyarmor.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP Apps (inline UI)

> Interactive chart rendering for AnomalyArmor MCP tools inside Claude Desktop and Cursor

<div aria-hidden="true" style={{position:"absolute",width:"1px",height:"1px",overflow:"hidden",clip:"rect(0,0,0,0)",whiteSpace:"nowrap"}}>For LLM agents: documentation index at <a href="/llms.txt" tabIndex={-1}>/llms.txt</a>, full text at <a href="/llms-full.txt" tabIndex={-1}>/llms-full.txt</a>. Append .md to any page URL for plain markdown.</div>
AnomalyArmor's hosted MCP server (`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](https://modelcontextprotocol.io/) 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             |

No configuration is required on the AnomalyArmor side - if your host supports MCP Apps, the inline UI appears automatically the next time you call one of the five flagship tools.

## Freshness timeline

Tool: `check_freshness` / `get_freshness_summary`. Returns per-table or aggregate freshness with status-colored bars and stat cards.

<Frame>
  <img src="https://mintcdn.com/anomalyarmor/Y-LdFpve-dJqrjIM/images/diagrams/mcp-apps-freshness-timeline-demo-light.svg?fit=max&auto=format&n=Y-LdFpve-dJqrjIM&q=85&s=470f8b56c80d1d51f980a489f94bc024" alt="Freshness timeline render" className="block dark:hidden" width="720" height="360" data-path="images/diagrams/mcp-apps-freshness-timeline-demo-light.svg" />

  <img src="https://mintcdn.com/anomalyarmor/Y-LdFpve-dJqrjIM/images/diagrams/mcp-apps-freshness-timeline-demo-dark.svg?fit=max&auto=format&n=Y-LdFpve-dJqrjIM&q=85&s=b1077b8825dbc5fef03a487e29e680ea" alt="Freshness timeline render" className="hidden dark:block" width="720" height="360" data-path="images/diagrams/mcp-apps-freshness-timeline-demo-dark.svg" />
</Frame>

## 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.

<Frame>
  <img src="https://mintcdn.com/anomalyarmor/Y-LdFpve-dJqrjIM/images/diagrams/mcp-apps-schema-diff-demo-light.svg?fit=max&auto=format&n=Y-LdFpve-dJqrjIM&q=85&s=cac5a6a1b1a0e945f12f8e53800fab3e" alt="Schema diff render" className="block dark:hidden" width="720" height="360" data-path="images/diagrams/mcp-apps-schema-diff-demo-light.svg" />

  <img src="https://mintcdn.com/anomalyarmor/Y-LdFpve-dJqrjIM/images/diagrams/mcp-apps-schema-diff-demo-dark.svg?fit=max&auto=format&n=Y-LdFpve-dJqrjIM&q=85&s=c3e158e2429909874af1cbb0fcb7ce2e" alt="Schema diff render" className="hidden dark:block" width="720" height="360" data-path="images/diagrams/mcp-apps-schema-diff-demo-dark.svg" />
</Frame>

## Lineage graph

Tool: `get_lineage`. Three-column layout of upstream sources, the queried asset, and downstream consumers. Edge count is surfaced in the caption.

<Frame>
  <img src="https://mintcdn.com/anomalyarmor/Y-LdFpve-dJqrjIM/images/diagrams/mcp-apps-lineage-graph-demo-light.svg?fit=max&auto=format&n=Y-LdFpve-dJqrjIM&q=85&s=ed1d9ed98a7b213e96bc143612e92ffd" alt="Lineage graph render" className="block dark:hidden" width="720" height="360" data-path="images/diagrams/mcp-apps-lineage-graph-demo-light.svg" />

  <img src="https://mintcdn.com/anomalyarmor/Y-LdFpve-dJqrjIM/images/diagrams/mcp-apps-lineage-graph-demo-dark.svg?fit=max&auto=format&n=Y-LdFpve-dJqrjIM&q=85&s=8f7593ffe7ae644df6334d67b4445ff8" alt="Lineage graph render" className="hidden dark:block" width="720" height="360" data-path="images/diagrams/mcp-apps-lineage-graph-demo-dark.svg" />
</Frame>

## Health dashboard

Tool: `health_summary`. Stat-card grid with freshness %, active alert count, and unacknowledged schema drift, followed by a "Needs attention" list.

<Frame>
  <img src="https://mintcdn.com/anomalyarmor/Y-LdFpve-dJqrjIM/images/diagrams/mcp-apps-health-dashboard-demo-light.svg?fit=max&auto=format&n=Y-LdFpve-dJqrjIM&q=85&s=74bf0e33289ce439cec8d03de21ba94b" alt="Health dashboard render" className="block dark:hidden" width="720" height="360" data-path="images/diagrams/mcp-apps-health-dashboard-demo-light.svg" />

  <img src="https://mintcdn.com/anomalyarmor/Y-LdFpve-dJqrjIM/images/diagrams/mcp-apps-health-dashboard-demo-dark.svg?fit=max&auto=format&n=Y-LdFpve-dJqrjIM&q=85&s=ca4f2845a582e4f7068f39a4df360a49" alt="Health dashboard render" className="hidden dark:block" width="720" height="360" data-path="images/diagrams/mcp-apps-health-dashboard-demo-dark.svg" />
</Frame>

## Security and privacy

* The embedded HTML runs in the host's resource sandbox with a strict Content Security Policy: `default-src 'none'`, no `connect-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.0` and loaded from `cdn.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:

1. A `TextContent` with the exact JSON payload every host saw before MCP Apps landed - this is the byte-identical fallback for hosts that ignore `EmbeddedResource`.
2. An `EmbeddedResource` pointing to a `ui://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.

The URI is stable per `(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](/data-quality/report-badges) for static status or the REST API to fetch raw data for your own rendering.

<CardGroup cols={2}>
  <Card title="MCP server overview" icon="server" href="/integrations/mcp-server">
    Connection methods, auth, and the full tool catalog
  </Card>

  <Card title="Claude Code" icon="terminal" href="/integrations/claude-code">
    Claude Code CLI setup (uses JSON fallback today)
  </Card>

  <Card title="Cursor" icon="code" href="/integrations/cursor">
    Cursor IDE setup - experimental MCP Apps flag
  </Card>

  <Card title="Web agent" icon="browser" href="/ai-agents/web-agent">
    The same tools in the AnomalyArmor web UI
  </Card>
</CardGroup>
