Skip to content
Glance
Docs

View dashboards in Claude and Codex

Connect Glance as a remote MCP server and your team's dashboards become available inside Claude conversations and Codex sessions. On hosts that support MCP Apps (Claude web, desktop, and mobile; VS Code Insiders; Goose), view_dashboard renders the dashboard interactively inline. On tools-only hosts (Claude Code, Codex, and any standard MCP client) the same tools return structured data instead. Every member can read; members whose organization role allows it can also author — create, edit, and remove dashboards — from the same conversation or session.

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

Looking for the publisher API your agents use to create dashboards? Connect your agent.

1

Connect from claude.ai (and Cowork)

  1. Open Customize → Connectors → + → Add custom connector (claude.ai/customize/connectors), paste the URL above, and click Connect.
  2. You'll be sent through Glance sign-in (SSO) and a consent screen listing what the connector may do on your behalf — reading your dashboards, plus Create and edit dashboards, where your workspace role allows it.
  3. Back in a conversation, enable the connector and ask Claude to list or show a dashboard.

On Claude Team and Enterprise plans, an Owner adds the connector under Organization settings; members then enable it for themselves. The Free plan allows one custom connector.

Cowork has no separate connector store — it uses the connectors on your Claude account. Add and authorize Glance once as above, then in Cowork enable it for the session from the + menu in the chat box under Connectors. Cowork's per-connector permission mode (Always allow / Needs approval / Blocked) applies to these tools, so write calls like publish_dashboard may ask for approval before running.

2

Connect from Claude Code

Claude Code
claude mcp add --transport http glance-viewer https://glance.watch/api/viewer/mcp

Claude Code walks you through the same OAuth sign-in on first use. All tools work, authoring included; inline rendering is not available in a terminal, so you get the structured results.

If authoring calls return INSUFFICIENT_SCOPE — typically because the server was added before write support existed — remove and re-add it, then authenticate again:

Re-add for write access
claude mcp remove glance-viewer
claude mcp add --transport http glance-viewer https://glance.watch/api/viewer/mcp

The name is glance-viewer rather than glance so it can sit alongside the publisher server from the agent docs, which claims that name.

3

Connect from Codex

1. Add Glance
codex mcp add glance-viewer --url https://glance.watch/api/viewer/mcp --oauth-resource https://glance.watch/api/viewer/mcp
2. Sign in
codex mcp login glance-viewer --scopes dashboards:read,dashboards:write,offline_access
3. Verify
codex mcp list

The login command opens your browser for Glance sign-in and a consent screen. Approve the access you want, then return to Codex; codex mcp list should show glance-viewer as authenticated. After this first configuration, restart Codex or open a new session so its tool inventory refreshes and the Glance tools become available. ChatGPT desktop shares this Codex MCP configuration, so you can use the same connection there without adding Glance again.

The command above requests authoring access. If you only need to read dashboards, use the least-privilege scope list dashboards:read,offline_access instead; add dashboards:write only when you want Codex to create or edit dashboards on your behalf.

4

Reading

ToolInputPurpose
list_dashboards{ organizationId? }List the dashboards you are allowed to view, with web links when configured. Start here.
view_dashboard{ dashboardId, organizationId? }Return a dashboard's layout and current data — and render it interactively inline on hosts that support MCP Apps.
get_dashboard_data{ dashboardId, organizationId? }Fetch only the current data values and version — the lightweight refresh the embedded view uses to stay current.

Every call acts inside one organization. If you belong to exactly one, omit organizationId. If you belong to several, calls fail with an ORGANIZATION_REQUIRED error listing your organizations — Claude retries with the organizationId you want, so usually you just answer which one you meant. A dashboard you cannot see is indistinguishable from one that does not exist: both return DASHBOARD_NOT_FOUND.

5

Authoring

The same four tools your publishing agents use, driven by you in conversation — ask Claude or Codex to build a dashboard, tweak a layout, push fresh numbers, or delete one. Layouts published from either client go through the same A2UI validation as agent publishes: every layout is checked against the widget catalog, and invalid layouts, unknown node types, or raw HTML are rejected before anything is stored. See the publisher docs for the layout format and catalog.

ToolInputPurpose
publish_dashboard{ layout, dashboardId?, title?, visibility?, slug?, organizationId? }Create a dashboard (omit dashboardId) or replace the layout of one you can view (pass its id). Returns viewer links.
patch_dashboard{ dashboardId, layout, title?, visibility?, slug?, organizationId? }Replace an existing dashboard's layout or title while preserving its live data. Pass slug to move the page's website URL, or slug: null to take it off the site; omit it and the URL is unchanged.
update_data{ dashboardId, values, organizationId? }Merge data-binding values by source key; they stream to anyone watching the dashboard live.
remove_dashboard{ dashboardId, organizationId? }Delete a dashboard you can view.

Review the rendered draft

Start from glance://creative-directions and glance://page-recipes, or call the matching guidance tools. They are suggestions, not constraints: a custom direction is first-class. Run check_layout with that direction, keep a new page private before public launch, then open the authenticated /dashboard/{id}/preview workspace. It renders the trusted page at desktop 1440 and mobile 390 widths for hierarchy, contrast, CTA, proof, overflow, and data-story review. Make one critique and one revision when a material issue appears, then preflight and review again.

Editors may read inherited direction with get_site_brand; only an owner or admin may change it with set_site_brand. Site brand defaults are materialized during publish or patch and explicit page values win. A later brand change does not repaint existing stored or live pages: adopt it with a reviewed republish or patch.

Writes are double-gated. Your token must carry the dashboards:write scope — the consent screen's Create and edit dashboards, where your workspace role allows it line — and your role in the organization must allow authoring — owners, admins and editors. The scope alone grants nothing: it is a ceiling, and the role check is the real authorization. Denials tell you which gate failed: INSUFFICIENT_SCOPE means the token lacks the scope — remove and re-add the connector so it registers a fresh OAuth client (connections authorized before write support shipped stay read-only until re-added; re-authenticating alone cannot add the scope) — while WRITE_NOT_ALLOWED means your organization role cannot author; ask an owner or admin.

Sharing is a separate, narrower gate than authoring. The visibility argument decides who can see a dashboard — making one public mints a link anyone holding it can open — so only owners and admins may set it. An editor's authoring authority stops short of it: a call carrying visibility from a role that may author but not share is refused with SHARING_NOT_ALLOWED and nothing is written — retry the same call without it and the layout and data go through as normal, then ask an owner or admin to publish the share link.

A dashboard carrying a slug plus layout.presentation: "page" is a page on your organization's website, served at /<slug> (and home is the site root). Which authority a slug needs depends on the page's current stored visibility, not on what you are asking for in the same call: slugging a private page — including one you are creating, which is born private — serves nobody yet and is ordinary authoring, so an editor may do it. Changing the slug of a page that is already public re-points a live website URL that anyone may hold, so it is site routing and needs an owner or admin; an editor gets SHARING_NOT_ALLOWED and should retry without slug. Omitting slug always leaves the current URL alone, so a routine re-publish never moves a live page. The sites section of the agent docs covers the slug grammar, link kinds and page nodes.

Site pages are cached, so a publish is not instant: a change takes at least about a minute to reach visitors on the site address. That is a floor, not a deadline — the stored copy is handed out one more time in each region while the new one renders, so seeing the old page even then is normal rather than a failed write. The dashboard view and /p/<token> share links are not cached this way — they render fresh on every request, and update_data streams live to anyone already watching.

A write targeting a dashboard you cannot view returns DASHBOARD_NOT_FOUND before any role check runs, so tool errors never reveal dashboards you cannot see.

Authorized writes can still be refused on capacity: PLAN_LIMIT_EXCEEDED means the organization is at its plan's dashboard limit. It applies only to creating a new dashboard — updating, patching or re-publishing one that already exists is never blocked — so either delete a dashboard you no longer need or upgrade the plan.

Other hosts

Clients connecting to the same URL must support OAuth 2.1 with resource indicators (RFC 8707) — Claude and Codex do. Clients without resource indicators will complete sign-in but then fail with 401 errors at the endpoint. The interactive inline view depends on the host supporting MCP Apps; hosts without it still get the full structured tool results. ChatGPT's app support is partial: it can render the view, but tool calls from inside the rendered view don't work, so refresh-from-the-view is unavailable there.

Limitations

Honest limitations

The rendered view is a snapshot with refresh — it auto-refreshes about every 30 seconds and has a manual refresh button — not the live SSE stream the web viewer has.

External images in dashboards may be blocked by the host's iframe Content Security Policy.

If a host shows a text summary instead of the interactive dashboard, that host hasn't enabled MCP Apps rendering for custom connectors yet.

Dashboard data returned by these tools becomes part of the conversation context — treat it like anything else you paste into a chat.

Need dashboards to view first? Point your agent at the publisher API.

Connect your agent