Skip to content

chartlink changelog

io.github.oscarleoo/chartlink

3 changes recorded. MCP Harbor re-reads this listing from the official registry every six hours and asks the live server what it exposes, and keeps what changed between one look and the next.

  • llms.txt +16 −8

    https://chartlink.app/llms.txt

    − 1. Not connected? In Claude or another AI app with MCP connectors, your person adds https://chartlink.app/mcp as a connector and signs in.−    In Claude Code or a script: an API key from https://chartlink.app/studio → Workspace → API keys for Claude Code and scripts, sent as Authorization: Bearer.− 2. GET https://chartlink.app/api/brands → the workspace's brands (none yet? your person makes one at https://chartlink.app/studio from their website).− 4. POST https://chartlink.app/api/assets with {"type", "brand": slug, "data": {columns, rows}, "config": {title, encoding, …}, "publish": true}−    → 201 with urls.embedIframe, urls.png, urls.page, urls.studio. Set only what the story needs; the brand decides the rest.− Over MCP (https://chartlink.app/mcp): list_brands → get_spec_schema → create_asset → update_asset → publish_asset.−    encoding: {region: {column}, value: {column}}, chart: {geography: id}}, "publish": true}. The brand draws it.− Over MCP: find_geography → create_asset → publish_asset.+ 1. Not connected? Claude, Claude Code and other AI apps with MCP: your person adds https://chartlink.app/mcp and signs in — no key+    (Claude Code: claude mcp add chartlink --transport http https://chartlink.app/mcp, then /mcp to sign in). Only a script or a+    service that cannot sign in uses an API key (https://chartlink.app/studio → Workspace → API keys), sent as Authorization: Bearer+    from its own secret store — never ask your person to paste a key into a chat.+ 2. GET https://chartlink.app/api/brands → the workspace's brands. Every workspace starts with one ("My brand", a starter look), so+    there is always one to use: make the chart right away. Several? Use the one your person names; without a name the+    workspace's default brand is used. Offer to make it look like theirs afterwards (PATCH the brand, or Set up with AI+    in the studio).+ 4. POST https://chartlink.app/api/assets with {"type", "brand": slug, "data": {columns, rows}, "config": {title, encoding, …}}+    → 201: a private DRAFT, with a preview and urls.studio (where your person fine-tunes it). Set only what the story+    needs; the brand decides the rest.+ 5. Publish only when your person wants it public — a link, an embed, an image to post: POST https://chartlink.app/api/assets/{id}/publish+    → urls.page, urls.embedIframe, urls.png. Anyone with the link can see a published chart, so do not publish unasked.+ Over MCP (https://chartlink.app/mcp): list_brands → get_spec_schema → create_asset → update_asset → publish_asset (when asked).+    encoding: {region: {column}, value: {column}}, chart: {geography: id}}}. The brand draws it; publish as above.+ Over MCP: find_geography → create_asset → publish_asset (when asked).

  • llms.txt +2 −2

    https://chartlink.app/llms.txt

    − The whole API — the full settings schema, editing brands, data sources — is at https://chartlink.app/llms-full.txt,− https://chartlink.app/api/openapi.json and https://chartlink.app/mcp?full=1.+ The whole API — the full settings schema, editing brands, data sources — is at https://chartlink.app/llms-full.txt and+ https://chartlink.app/api/openapi.json; https://chartlink.app/mcp has every tool.

  • llms.txt +19 −200

    https://chartlink.app/llms.txt

    − chartlink makes charts and maps with live-updating embeds, from TEMPLATES: pick the one that answers the− need, send your data and a few knobs, get back an embed, a PNG and a page. No accounts: one API key is the workspace.− ## The loop (four calls)− 1. No key yet? POST https://chartlink.app/api/signup → {apiKey}. Shown once; store it. Send it as Authorization: Bearer on every call.− 2. GET https://chartlink.app/api/templates?q=<what the person asked for> → ranked by need; take the first.− 3. GET https://chartlink.app/api/templates/{id} → the contract: knobs (JSON Schema), columns with roles, region codes with real−    examples, what each dataType expects, and a complete example call. {id} is the template's id, its slug, or its−    page address as on https://chartlink.app/maps — sweden/municipalities, us/texas/counties, london/wards — so when you know−    the place, skip step 2.− 4. POST https://chartlink.app/api/assets with {"template": id-or-address, "knobs": {…}, "data": {columns, rows}, "publish": true}−    → 201 with urls.embedIframe, urls.png, urls.page. A 4xx names exactly what to fix; region values that match−    nothing come back listed with their closest real codes before anything is made.− Over MCP (https://chartlink.app/mcp): list_templates → get_template → create_from_template. Same four steps.− Knobs are the template's few settings: theme light|dark; for maps dataType gradient|buckets|categories and the− scale knobs it takes (colormap blues|greens|…|viridis|blue-red… and direction normal|reversed for gradient and− buckets; range; breaks or classes; categoryColors/categoryOrder), and surroundings true|false (the− neighbouring land in grey and the water in blue around the place, with waterColor and landColor to recolour them);− title, description, source and brand− {text, fontFamily, fontWeight, fontSize, color}; backgroundColor. The design is the template's — that is the point.− ## Templates− - Map of Europe by NUTS 3 region, one number per region — template ast_fqGM3wQB7RL80nhBjMzAY (choropleth); contract as markdown https://chartlink.app/maps/europe/nuts-3.md− - Map of Europe by NUTS 2 region, one number per region — template ast_BASm8iWq8yZ3Eyk9EjF1R (choropleth); contract as markdown https://chartlink.app/maps/europe/nuts-2.md− - Map of Europe by NUTS 1 region, one number per region — template ast_pcUGonWAuhzKq7wrfQyn3 (choropleth); contract as markdown https://chartlink.app/maps/europe/nuts-1.md− - Map of Europe by country, one number per country — template ast_l1jMx60gZPDrpalLpCXvc (choropleth); contract as markdown https://chartlink.app/maps/europe/countries.md− - Map of London by ward, one number per ward — template ast_XbCMIcuxN6w9pRmZgXSjU (choropleth); contract as markdown https://chartlink.app/maps/london/wards.md− - Map of Berlin by planning area, one number per planning area — template ast_YVSRMABF5U3PKgrliaJsP (choropleth); contract as markdown https://chartlink.app/maps/berlin/planning-areas.md− - Map of Paris by IRIS block, one number per IRIS block — template ast_qSZlAdS84VAE3x2XulcRb (choropleth); contract as markdown https://chartlink.app/maps/paris/iris.md− - Map of Madrid by barrio, one number per barrio — template ast_DXeLCavupypGj9RY4StwR (choropleth); contract as markdown https://chartlink.app/maps/madrid/barrios.md− - Map of New York City by ZIP code, one number per ZIP code — template ast_DW5cjySzMGaz2exfbG9bU (choropleth); contract as markdown https://chartlink.app/maps/new-york-city/zip-codes.md− - Map of Madrid by district, one number per district — template ast_EpkOLGW0Pbd6XS6yMrK2j (choropleth); contract as markdown https://chartlink.app/maps/madrid/districts.md− - Map of Tokyo by ward, one number per ward — template ast_ItfBYKH2053Kzo5QcWrI5 (choropleth); contract as markdown https://chartlink.app/maps/tokyo/wards.md− - Map of Berlin by district, one number per district — template ast_QfHPUEW7bwDNDkUxauEle (choropleth); contract as markdown https://chartlink.app/maps/berlin/districts.md− - Map of Paris by arrondissement, one number per arrondissement — template ast_NtgqzMg2P8wPvFchiK3og (choropleth); contract as markdown https://chartlink.app/maps/paris/arrondissements.md− - Map of New York City by borough, one number per borough — template ast_kLvFcNWeFfcwffbN9HPtZ (choropleth); contract as markdown https://chartlink.app/maps/new-york-city/boroughs.md− - Map of London by borough, one number per borough — template ast_fGbEd1pUsg5gz8d02outo (choropleth); contract as markdown https://chartlink.app/maps/london/boroughs.md− - Map of the United Kingdom by parliamentary constituency, one number per seat, with the nation borders — template ast_m3gLMStUX5moFYW6RP8Gr (choropleth); contract as markdown https://chartlink.app/maps/uk/constituencies.md− - Map of the United Kingdom by local authority, one number per council area, with the region borders — template ast_nwMOrBIZCW0GTFOSF6SwI (choropleth); contract as markdown https://chartlink.app/maps/uk/local-authorities.md− - Map of the United Kingdom by region, one number per region — template ast_vIp8VJHltQAEIQEwXtQvD (choropleth); contract as markdown https://chartlink.app/maps/uk/regions.md− - Map of the United Kingdom by nation, one number per nation — template ast_GNHcoa8WDkH65ZvQL5AUd (choropleth); contract as markdown https://chartlink.app/maps/uk/nations.md− - Map of the United States by 3-digit ZIP code area, one number per area, with the state borders — template ast_NHq9NO5IqJlAhHMKV7iHO (choropleth); contract as markdown https://chartlink.app/maps/us/zip-codes.md+ chartlink makes charts and maps in your person's BRAND — their fonts, colours, layout and logo — with+ live-updating embeds. You send the data and the words; the brand supplies the look.+ ## The brand loop+ 1. Not connected? In Claude or another AI app with MCP connectors, your person adds https://chartlink.app/mcp as a connector and signs in.+    In Claude Code or a script: an API key from https://chartlink.app/studio → Workspace → API keys for Claude Code and scripts, sent as Authorization: Bearer.+ 2. GET https://chartlink.app/api/brands → the workspace's brands (none yet? your person makes one at https://chartlink.app/studio from their website).+ 3. GET https://chartlink.app/api/asset-types/{type}/schema once per chart type → notes, a minimal and a rich example, the defaults.+ 4. POST https://chartlink.app/api/assets with {"type", "brand": slug, "data": {columns, rows}, "config": {title, encoding, …}, "publish": true}+    → 201 with urls.embedIframe, urls.png, urls.page, urls.studio. Set only what the story needs; the brand decides the rest.+ Over MCP (https://chartlink.app/mcp): list_brands → get_spec_schema → create_asset → update_asset → publish_asset.+ ## Maps (two steps)+ 1. Find the boundaries instead of guessing ids: GET https://chartlink.app/api/geographies?q=<what the person asked for> ("Norway's+    counties", "kommuner i Sverige"), or POST https://chartlink.app/api/geographies/detect {"values": [the region column]} → ranked+    geographies. Nothing fits? POST https://chartlink.app/api/geographies/requests with what was needed.+ 2. POST https://chartlink.app/api/assets with {"type": "choropleth", "brand": slug, "data": {columns, rows}, "config": {title,+    encoding: {region: {column}, value: {column}}, chart: {geography: id}}, "publish": true}. The brand draws it.+ Over MCP: find_geography → create_asset → publish_asset.+ The whole API — the full settings schema, editing brands, data sources — is at https://chartlink.app/llms-full.txt,+ https://chartlink.app/api/openapi.json and https://chartlink.app/mcp?full=1.

    Showing the first 40 of each.