mcpbeat Sign in

chartlink MCP Server

by oscarleoo Your server? Claim it
not responding

chartlink is listed as active in the registry but did not answer our last check. 232 installs a week from npm. It exposes 27 tools. Last commit 18 Sep 2026.

Charts and tables for AI agents with live-updating embed links. No account: signup returns a key.

Installs per day peak 189 · avg 7
a month agotoday
Uptime history 7 days of history · worst day 1%
7 days agonow
5.5%
Uptime 24h
5 of 91 checks
27
Tools
read from the server
632 ms
Response time
average over 24h
232
Installs / week
npm and PyPI

What changed 12

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 16 September 2026. No other catalogue keeps this.

19 Sep 6 tools changed the parameters they ask for create_asset, create_brand, list_templates and 3 more
19 Sep 4 tool descriptions were rewritten create_asset, create_edit_link, list_geographies and 1 more
19 Sep a tool appeared signup
16 Sep a tool appeared list_geographies

chartlink does not always answer

Over the last week it answered 9.5% of our checks. We check every 15 minutes, so you hear about the next outage within the hour — not from your users.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 1 min ago.

run in your terminal
claude mcp add chartlink --transport http https://chartlink.app/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "chartlink": {
      "url": "https://chartlink.app/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.chartlink]
url = "https://chartlink.app/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "chartlink": {
      "url": "https://chartlink.app/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "chartlink": {
      "url": "https://chartlink.app/mcp"
    }
  }
}

This one needs environment variables set before it will start: CHARTLINK_API_KEY (chartlink API key (viz_...). POST https://chartlink.app/api/signup returns one, no account needed. Optional for listing tools; required for calling them.). The author declared them in the registry entry; get the values from the project itself.

Available tools 27

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

asset
create_asset
Creates a draft. The response includes a low-res PNG preview INLINE — look at it, then iterate with update_asset. Nothing is public until publish_asset, or until you pass publish: true here (one call instead of two, once the chart is final). A success means the config validated AND rendered. Style comes from the defaults and your brand, if any — only set config fields the story needs. data = {columns: [{id,type,...}], rows: [[...], ...]} (row-major, matching column order). LIMITS: keep each call under ~100 KB of rows (asset cap 2 MB) — for larger datasets create with a few rows and attach set_data_source, or append chunks via replace_asset_data.
delete_asset
Embeds go dark. Restorable via the REST API (POST /api/assets/{id}/restore).
get_asset
Full asset envelope. includePreview=true also returns an inline PNG of the current draft.
list_asset_types
Chart/table types you can create, with links to per-type schemas.
update_asset
configPatch is DEEP-MERGED: objects merge recursively, arrays replace wholesale, null clears a key — send only what changes. To REMOVE keys (drop document.aspect, delete one of texts[]) pass `config` instead: it REPLACES the whole config (get_asset returns the current one to edit). `data` (if given) replaces rows wholesale. Requires expectedVersion from the last envelope; on 409 re-merge onto the returned `current`. Updating does NOT publish by default — pass publish: true to publish in the same call, or call publish_asset separately.
brand
create_brand
A brand styles every asset that references it — and the workspace default brand styles everything created without an explicit brand. Create one, then render any asset with brand: "<slug>" to see it applied. Style only: brands can never inject data or text content.
update_brand
Deep-merges tokens (objects merge, arrays replace, null clears). Drafts restyle immediately; published assets pick the change up on their next publish. Requires expectedVersion from list_brands.
data
fetch_data_source
Runs one fetch on top of the schedule. Returns {ok, rows, published, error}.
set_data_source
The chart refetches this URL (CSV or JSON) hourly/daily/weekly, replaces its rows, and republishes itself if published — refreshes are free, updates are never metered. Columns stay as defined on the asset: CSV headers / JSON object keys match column ids or labels case-insensitively, with spaces, underscores and hyphens interchangeable (births_per_woman matches a column labeled 'Births per woman'). Fetches once immediately and returns that outcome — check fetch.ok and fix fetch.error before moving on. get_asset shows dataSource + dataSourceState when a source is attached. Clear with clear_data_source.
assets
list_assets
Filterable list; rows elide config/data. Use get_asset for full bodies.
billing
get_billing
Hosting is free (unlimited badged charts, live updates included). One credit makes one chart premium forever: 2400px, SVG, your own branding, no badge. Updates are never metered.
brands
list_brands
Style-only token sets applied under your config. Pass a slug as `brand` on create_asset.
checkout
create_checkout_link
Returns a URL that opens straight into Paddle checkout: no login, no account. It can only add credits to THIS workspace, so it is safe to share. Credits arrive seconds after payment (get_billing).
clear
clear_data_source
Stops scheduled fetches; the chart keeps its current data.
duplicate
duplicate_asset
New id, new embed URLs. Useful for rebranding a chart for another audience.
edit
create_edit_link
Returns a URL opening the visual tweak panel for ONE chart (text, colors, spacing, label nudges) with no login. PUBLISH FIRST: the editor saves and republishes a published chart, it cannot publish a draft. Scope: view, tweak, and republish that chart only — never delete, never spend credits, nothing else in the workspace. OFFER THIS whenever the human's request is aesthetic fine-tuning: handing over the wheel beats a nudge-by-nudge back-and-forth. The secret is shown once; links don't expire and can be revoked with revoke_edit_link.
geographies
list_geographies
countries, us-states, us-states-pr (with Puerto Rico), us-counties, us-zip3, us-zips-<st> (one state's ZIP codes), and every country's states/provinces as <alpha-2>-regions (de-regions, ru-regions…). Pass id to get one geography's full region list — codes (ISO 3166-2 like DE-BY), names and aliases — and read it BEFORE naming regions in your data: unknown regions fail loudly. Set chart.geography to the id; chart.bounds crops.
publish
publish_asset
Makes the draft live. Returns urls: paste urls.embedIframe on iframe platforms; on Substack insert urls.png as an image and link it to urls.page. Pinned history: urls.png + '?v=N'.
replace
replace_asset_data
THE core flow for refreshing numbers. publish defaults to auto: a published asset republishes immediately (every embed/PNG updates); a draft stays draft. Set publish=false to stage instead. LIMITS: an asset holds up to 2 MB of data, but keep each tool call under ~100 KB of rows — for larger datasets chunk with mode: "append" (publish: "false" on every chunk but the last), or skip inline entirely with set_data_source (the server fetches a URL, up to the full 2 MB).
revoke
revoke_edit_link
The URL stops working immediately. List links (prefixes + tokenIds) via GET /assets/{id}/edit-links.
signup
signup
Creates a workspace and returns its API key (shown ONCE — keep it). Works on a keyless connection; every other tool needs the key. Then put the key where your client keeps it (plugin api_key setting, the Authorization header, or CHARTLINK_API_KEY for the npx bridge) and reconnect.
spec
get_spec_schema
Returns the JSON Schema for the type's config, the data schema, two worked examples (minimal + rich), and `defaults` — the complete config in force when nothing is set (every font, padding, color), which a brand and then the chart's own config merge over. Read this before your first create_asset of a given type; read a baseline value from defaults instead of guessing it.
submit
submit_feedback
If a capability is missing, a schema fights you, or docs are wrong: record it here so the owner can fix it. One report per distinct issue, with a real description — reports get fixed same-day when they say what you tried, what you expected, and what happened (title-only reports can't be acted on).
templates
list_templates
Templates are named by the NEED they answer (need, asks, tags), each with urls.png (show it to your human) and `columns`: the column ids your data must supply. Pass q with what the person asked for — "map of brazil's states", "ranked bars with flags", "change between two years" — and the list comes back ranked; take the first. Then create_asset with template: <id> and your data — the whole design comes along. Any chart id you were shown works as a template too, not only these.
unpublish
unpublish_asset
Embeds and PNGs return 410 until republished.
upgrade
upgrade_to_premium
Same URLs, instantly rebranded: badge removed, 2400px PNG and SVG unlocked, custom branding applies. Idempotent for already-premium charts.
whoami
whoami
Returns key name + workspace. Call this first — non-destructive auth check. Everything you write is stamped createdBy/updatedBy = key name.

Endpoints

URLTransportStateLatencyChecked
https://chartlink.app/mcp streamable-http answering 30 ms 1 min ago

Alternatives to chartlink

same job, measured the same way
Oleander
by oleander

The all-in-one data stack for agents. Upload files, run SQL, evolve tables, and render charts.

answering
Loopgantt
by loopgantt

Create scheduled Gantt charts with critical path from a plain-language plan — no account or key.

34 installs/wk 4 tools answering
ocular
by xyun1996

Vision tools for coding agents: screenshots, OCR, UI diffs, errors, tables, and charts.

25 installs/wk local only
Binance Market MCP
by mrfentmen

Live crypto prices, tickers, and candlestick charts from Binance public data. No key required.

local only
ShareCut QR & Short Links
by lucarsdeco

Short links you can re-point after printing the QR, with click analytics. Free QR, no key.

39 installs/wk 12 tools answering
Artifact Hub MCP
by mrfentmen

Helm charts and cloud native packages from Artifact Hub. No key required.

local only
Applyra
by applyra

App Store Optimization data for AI agents: keyword ranks, scores, competitors, charts

278 installs/wk local only
RaceHooks
by racehooks

F1 race analytics & live timing for AI assistants — webhooks, results, and race simulations.

32 installs/wk local only

chartlink — questions

Answers built from our own checks of this server.

What can chartlink do?
It exposes 27 tools, read directly from the server on our last check. Among them: clear_data_source, create_asset, create_brand, create_checkout_link, create_edit_link, delete_asset and 21 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is chartlink mostly used for?
Its tools cluster around asset, brand and data. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is chartlink working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 5 of 91 checks got a reply (5.5%), average response time 632 ms. The bar chart above shows every period we have measured.
The registry lists chartlink as active — why does it not respond?
The official MCP registry stores what the author submitted; it does not verify that the server still runs. We check the endpoint ourselves, and this one does not answer. Catalogues that copy the registry without checking will show it as working.
How do I connect chartlink?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does chartlink need an API key?
No. chartlink completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 27 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is chartlink?
It answers our handshake in 632 ms on average, which is faster than 21% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.
How many people use chartlink?
The npm package chartlink-mcp was installed 232 times in the last week. We show installs rather than GitHub stars on purpose: a star is a bookmark, an install is someone actually running it.
Is chartlink open source?
Yes — it is published under the MIT licence, written in JavaScript and 0 stars on GitHub. The source link is on this page, so you can read exactly what it does with your data before you connect it.