Glance
Docs

Connect your agent

Glance is an HTTP Streamable MCP server. Your agent publishes dashboards over MCP; your team watches them update live. The endpoint requires a Bearer publisher key, scoped to your organization (tenant).

https://glance.watch/api/mcp
1

Get a key

Sign in at /login — this creates your organization. Open /dashboard and click “Generate publisher API key”. The key (pk_...) is shown exactly once — only its hash is stored server-side, so copy it immediately. It is scoped to your organization; every MCP tool call and webhook POST authenticated with it is tenant-scoped end to end.

2

Add the server

Claude Code
claude mcp add --transport http glance https://glance.watch/api/mcp \
  --header "Authorization: Bearer pk_..."
mcp.json (Claude Desktop, Cursor, and other MCP clients)
{
  "mcpServers": {
    "glance": {
      "type": "http",
      "url": "https://glance.watch/api/mcp",
      "headers": {
        "Authorization": "Bearer pk_..."
      }
    }
  }
}
Or push from a cron/routine (no MCP client) — webhook
curl -X POST https://glance.watch/api/webhooks/update \
  -H "Authorization: Bearer pk_..." -H "content-type: application/json" \
  -d '{"dashboardId":"ops","values":{"mrr":51000}}'
3

Tools

ToolInputPurpose
publish_dashboard{ dashboardId?, title?, layout, visibility? }Create or replace a dashboard layout. Omit dashboardId to create a new dashboard; provide it to replace an existing one.
patch_dashboard{ dashboardId, title?, layout, visibility? }Replace an existing dashboard's layout/title while preserving its live data. Same as publish_dashboard, but dashboardId is required.
update_data{ dashboardId, values }Merge new data-binding values into a dashboard. Shallow-merges values into data — no re-layout.
remove_dashboard{ dashboardId }Delete a dashboard. Errors if it does not exist.
list_dashboards{}List all dashboards for the calling tenant.

Public vs. private

Dashboards are private by default — viewable only by signed-in members of the owning organization. Passing visibility: "public" to publish_dashboard (or toggling “Make public” on the dashboard page) mints an unguessable share token and makes the dashboard viewable with no login at /p/<token>. Setting it back to private immediately revokes that link.

4

Layout (A2UI) reference

A layout is a JSON tree of containers wrapping widgets. It's declarative data — never executable code — validated against a fixed catalog before it's stored.

Containers

grid — columns? (1–12), children[]

stack — direction? ("row" | "column"), children[]

slides — source (dedicated data key holding the 0-based active-slide index; advance live with update_data), children[] (≥1)

Widgets

text — value, variant?

kpiCard — title, source, unit?, delta? (string)

lineChart / barChart — title?, source, xKey, series[]

dataTable — title?, source, columns[]

image — url (absolute https:// only), alt?

Any node — container or widget — may also carry note? (1–500 chars): a short plain-text annotation viewers reveal from a small ⓘ badge on hover or keyboard focus. Charts keep their normal data tooltips.

Every widget with a source reads live values from data[source] — push updates with update_data.

Minimal example
// publish_dashboard
{ "dashboardId": "ops", "layout": { "title": "Ops",
  "root": { "type": "grid", "columns": 2, "children": [
    { "type": "kpiCard", "title": "MRR", "source": "mrr", "unit": "USD" },
    { "type": "lineChart", "title": "Trend", "source": "trend", "xKey": "month",
      "series": [{ "key": "mrr", "label": "MRR" }] }
  ] } } }
// then update_data
{ "dashboardId": "ops", "values": { "mrr": 48200,
  "trend": [{ "month": "Jan", "mrr": 41000 }, { "month": "Feb", "mrr": 43500 }] } }

One-step onboarding

Point any skill-aware agent at https://glance.watch/skill.md and it self-installs: gets a key, registers the MCP server, and learns the full tool/node/theme contract.

Ready to publish your first dashboard?

Sign in to get a key