← Claude Code Hub
Nov 5, 2026 · 7 min read ✦ Tip #254

Dashboard from Claude Code: use a claude.ai connector, not a local MCP

A Claude Code dashboard has no numbers typed into its HTML: each figure points to its source, and a live query runs again when the page opens. The catch: your local MCP server never reaches the published version.

A hand-written page carries the 42 inside its HTML and nobody knows where it came from; the Claude Code dashboard marks the 42 with its source, and Sources says where each number comes from

TL;DR Connect the data source in claude.ai (Customize > Connectors) and ask Claude Code to "build a dashboard of … from my X connector". Then open Sources and click a number: you get its query, its rows and when it was last refreshed. Anything that comes from a local MCP server, from gh or from a CSV is published as a file and won't refresh on its own.

When you ask Claude Code for a dashboard (or a metrics page, a KPI tracker, a scorecard) and your account has Claude Dashboards, still in beta, Claude doesn't hand-write an HTML page the way it does for a regular artifact. It starts the artifact from the Dashboard type, whose central rule is that no figure is typed into the page (only a constant you chose, like a goal line). Every figure, chart and table comes from a named source, and when that source is a live query, it runs again when someone opens, refreshes or filters the dashboard.

How Claude ends up on the Dashboard type

Claude Code's Artifact tool first checks which types your account offers. In this session, on v2.1.318, the account offered five (Dashboard, Design, Design System, Docs and Slides), and the tool's first step for a new page starts with these lines:

For a dashboard, metrics page, KPI tracker or scorecard, start from the
Dashboard type: publish with `type_url`:
"https://claude.ai/artifact/GZLZthZ2sQjn7T16skfdeF",
a `title`, no files and `auto_open: "after_first_write"`, then follow the
instructions that result carries.

From there Claude doesn't publish a .html from your folder. It writes the sources (one query or one file each) into the dashboard's store apart from the page, whose HTML holds marks where the numbers go.

A number on the page is an empty slot with data-source and data-field that a script fills from its source; if what it shows doesn't match the data, the type reports it back to Claude. Whatever one query can't work out (combining two connectors, or a query with a file) becomes a named calculation, and anyone who opens the dashboard can read its formula.

Two kinds of source

Live query Attached file
What it is A call to a claude.ai connector: connector, tool and arguments A CSV, TSV or JSON uploaded to the dashboard
When it updates When someone opens, refreshes or filters the dashboard When someone uploads a new version, or a scheduled task does
Whose access By default each reader's own: two people can see different data. If someone shares the connector, everyone sees that person's results Nobody's: anyone who can open the dashboard can read it
When something's missing A reader without that connector gets a notice and an offer to connect it With a window set (staleAfterHours), it shows as stale once that passes

Someone who opens a public link without signing in to claude.ai, or who is outside your organization, sees the page without its live parts. And the second column is the warning worth reading twice: a CSV of customer data attached to a dashboard shared with your whole organization can be read by your whole organization, even by people with no access to the system it came from.

The Claude Code trap: your local MCP server doesn't make it

In the terminal, Claude reads data from plenty of places the published page can't reach. The docs are explicit: the page can only call connectors from your claude.ai account, and the servers in your .mcp.json feed Claude while it builds, not the dashboard afterwards. The same goes for gh, psql or a script in your repo.

When the data comes from there, the Dashboard type doesn't fake a query: it saves the rows as a file and tells Claude to say why it isn't live. To make it a live query, the server has to exist as a connector in claude.ai (/mcp lists it as claude.ai <name>); otherwise a scheduled task can keep the file current.

What Sources shows you

Sources is the dashboard's side panel. One row per source, with its title, and on hover, how long ago it loaded (plus the connector, for a query). Click a marked number and its source opens with that figure:

  • Query: Query (each argument, filters shown as chips with their current value, plus the connector and tool), Transform (when the answer had to be turned into rows) and Result, the rows with the cell you clicked highlighted.
  • Calculation: Formula (its inputs and the function's text) and Result.
  • File: File.

This is how the type stores an attached file. It's the source behind the sample dashboard in the illustration, with 32 invented rows of PRs per repo:

{
  "title": "Sample PR review times",
  "description": "Invented by Claude for a demo: weekly PRs merged and median review hours for four fictional repos, Sep 7 to Oct 26, 2026. No real team or data.",
  "source": { "kind": "file", "name": "pr-review-times.json", "url": "/_blob/59262aba..." },
  "fixed": true,
  "updated": { "at": "2026-11-01T17:30:00Z", "by": "Claude" }
}

The fixed: true tells Sources not to offer connecting it to live data, and the title starts with "Sample" because Claude made the rows up: the type requires it to say so.

Ask for yours

1. Connect the source in claude.ai

Under Customize > Connectors: BigQuery, Snowflake, Databricks, Redshift, ClickHouse or the app where the data lives (Salesforce, GitHub). If it needs a fresh sign-in, Claude asks you for it before it reaches for other data.

2. Ask the question, not the chart

Build a dashboard of how many hours a PR takes to get reviewed in each repo,
week by week since September, from my GitHub connector.

Name the connector and, if you know it, the table. "How do this month's signups by channel compare with last month's?" gets you further than "a signups chart".

3. Read the hand-over

Claude finishes by saying what it assumed, which connector each reader needs, that anyone who can open the dashboard can read an attached file and, if it made up sample rows, which numbers those are. That's where you find out whether anything ended up without a live connection.

4. Check one number in Sources

Click the figure you care about most and read its Query. If it isn't counting what you meant, tell Claude in the same session. From Sources you can also download a source's rows as CSV and, as an editor, change the query, test it and roll back to an earlier version. To pick it up another day, it's in your /artifacts list like any artifact you own, and Enter attaches it.

Hand-written page or dashboard

Regular artifact Dashboard
Where the numbers live Inside the HTML, or fetched by the page's own code In their sources, never typed into the page
When they change When Claude publishes again, or on load if the page calls connectors On open, refresh or filter
How you check them By reading the page's code or asking Claude In Sources, number by number
What it's for Walking through a PR, comparing options, explaining Questions you keep asking of your data

If what you want is to understand a change before you delegate it, that's still an artifact you sculpt by hand.

Official docs: Share session output as artifacts · Get started with Claude Dashboards

Requirements

  • Claude Dashboards is in beta on Pro, Max, Ultra, Team and Enterprise. On Enterprise it's off until an Owner turns it on under Organization settings > Artifacts. It counts toward your usage limit like any other work.
  • A session signed in with /login on the Anthropic API, Claude Code v2.1.281 or later, not in -p mode: with an API key, a gateway, Bedrock, Vertex or Foundry there are no artifacts. The docs also leave them out for organizations with CMEK, HIPAA or Zero Data Retention.
  • On Team and Enterprise, live queries also need the Enable artifact connectors toggle in the organization's settings.
  • Artifact tool output from Claude Code v2.1.318, on November 5, 2026.

Found this useful? See more of wmedia.es in your Google results.

Add wmedia.es as a preferred source on Google
FREE GUIDE

You don't need Opus every time.

Model and effort are two settings, not one. 8 pages with the settings that actually move your bill, a three-question diagnostic for when something fails, and the price ladder.

  • 1. What "better" means capability, time and money
  • 2. Model who you send
  • 3. Effort how much rope you give
  • 4. Diagnostic three questions when something fails
  • 5. The bill where it comes from
Are you a professional Web developer?

It arrives by email · You join the Gravitas newsletter · Unsubscribe anytime

Stop overpaying in Claude Code
FREE GUIDE

You don't need Opus every time.

Are you a professional Web developer? · Unsubscribe anytime
Workshop for teams

Multiply your team's output without sacrificing quality: a 6 to 8 hour AI First workshop, online, on the Claude platform.

See the workshop

Using Opus for everything? See when you don't need it.