Views

Save a dashboard

view_save · Changes data · Markdown

Keeps a page under a name, like the weekly dashboard, and replaces what it shows on each call.

$0.01 a call

From your agent’s balance. A call that fails costs nothing.

An example

Keep a weekly sales dashboard for me and update it every Monday.

Your agent callsview_save$0.01 a call

The example business is Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon. The reply is the one the tool really gives.

With these arguments
{
  "name": "weekly-sales",
  "title": "Sales this week",
  "subtitle": "Week of October 5",
  "blocks": [
    {
      "type": "metrics",
      "items": [
        {
          "label": "Revenue",
          "value": 14620,
          "format": "currency",
          "currency": "USD",
          "change": 12.4
        },
        {
          "label": "Orders",
          "value": 41
        },
        {
          "label": "Average order",
          "value": 357,
          "format": "currency",
          "currency": "USD"
        }
      ]
    },
    {
      "type": "chart",
      "title": "Orders a day",
      "kind": "bar",
      "labels": [
        "Mon",
        "Tue",
        "Wed",
        "Thu",
        "Fri",
        "Sat",
        "Sun"
      ],
      "series": [
        {
          "name": "Orders",
          "values": [
            4,
            5,
            7,
            6,
            8,
            11,
            0
          ]
        }
      ]
    },
    {
      "type": "bars",
      "title": "Best sellers",
      "items": [
        {
          "label": "Full tune-up",
          "value": 14
        },
        {
          "label": "Tabor gravel bike",
          "value": 5
        },
        {
          "label": "Willamette 8",
          "value": 4
        }
      ]
    }
  ]
}
What comes back
{
  "view": {
    "name": "weekly-sales",
    "title": "Sales this week",
    "subtitle": "Week of October 5",
    "blocks": 3,
    "saved": true,
    "created_at": "2026-10-14T08:00:00+00:00",
    "updated_at": "2026-10-14T08:00:00+00:00"
  },
  "created": true
}

Use it when

The same page is shown again and again with fresh numbers.

What it does

Keep a view under a name, like the company's weekly dashboard, and replace what it shows whenever you like (same blocks as view_show). view_link makes one-time links to its latest version.

What comes back

view: its name, title, how many blocks, and when it was made and changed; created: whether it is new. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
nameRequiredstringThe saved view's name, like weekly-sales. 1 to 80 characters.
titleRequiredstring1 to 200 characters.
subtitlestringA line under the title, like the period it covers. Up to 300 characters.
blocksRequiredarray of objectsblocks is a list, drawn top to bottom. Each block is one of: {"type": "heading", "text"}; {"type": "text", "text"} (blank lines make paragraphs); {"type": "metrics", "items": [{"label", "value", "format", "currency", "change" (percent), "better": "up"|"down", "note", "tone": "good"|"warn"|"bad"}]} (up to 8 numbers in a row); {"type": "chart", "title", "kind": "line"|"bar", "labels": [...], "series": [{"name", "values": [...]}], "format", "currency"} (up to 4 series of up to 400 points); {"type": "bars", "title", "label_header", "value_header", "items": [{"label", "value", "detail", "link", "country" (a two-letter code: shows the flag, and the name when label is left out)}], "format", "currency"} (ranked rows with a bar each, up to 50); {"type": "table", "title", "columns": [{"label", "format", "currency"}], "rows": [[...], ...]} (up to 12 columns and 500 rows); {"type": "list", "title", "items": [{"title", "text", "meta", "link"}]} (up to 100); {"type": "divider"}. format is number, percent (49 means 49%), currency (with currency, like "EUR"), seconds (a length of time), milliseconds or text. bars, table, list and metrics take "width": "half" to sit beside the next half block. 1 to 60 items.
blocks[].typeRequiredstringOne of: heading,text,metrics,chart,bars,table,list,divider.

The call

Over MCP, call view_save on https://api.conecto.chat/mcp/views. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/view_save \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"weekly-sales","title":"Sales this week","subtitle":"Week of October 5","blocks":[{"type":"metrics","items":[{"label":"Revenue","value":14620,"format":"currency","currency":"USD","change":12.4},{"label":"Orders","value":41},{"label":"Average order","value":357,"format":"currency","currency":"USD"}]},{"type":"chart","title":"Orders a day","kind":"bar","labels":["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],"series":[{"name":"Orders","values":[4,5,7,6,8,11,0]}]},{"type":"bars","title":"Best sellers","items":[{"label":"Full tune-up","value":14},{"label":"Tabor gravel bike","value":5},{"label":"Willamette 8","value":4}]}]}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
invalid_input400The name is not lowercase letters, digits and dashes.Use a name like weekly-sales.
invalid_input400A block is not in the form this page lists: an unknown type, a chart with a value count that does not match its labels, a table row with the wrong number of cells, or a page over about 300 KB.Fix the block the message names.
limit_reached409The business keeps 200 saved pages already.Delete one with view_delete.

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md