# Use SheetCanvas with your agent.

[SheetCanvas](https://sheetcanvas.com/) (`sheetcanvas.com`) registers 21 WebMCP tools. 9 of 21 tools declares `readOnlyHint`, so an agent can invoke them through `tools.call`. The registry runs the tool in a fresh headless page on sheetcanvas.com and returns untrusted site content.

This page mirrors the [WebMCP Registry](https://wmcp.ai/sites/sheetcanvas.com) listing for `sheetcanvas.com`, last live-checked by the registry at 2026-09-22T22:21:42.774Z. Run `ghostget webmcp sites.get --input '{"domain":"sheetcanvas.com"}' --json` for the current schema; the listing can drift between checks.

## Use SheetCanvas with my agent

Ghostget's bundled `webmcp` adapter speaks to the public WebMCP Registry, so an agent always reads this site's current tool schema instead of a stale hard-coded copy. Install v0.18.35, sync bundled adapters once, then call the registry operations:

```
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.35/hraness-ghostget-0.18.35.tgz
ghostget adapter sync-bundled --json
```

**Read the live tool schema** — every registered tool, its input schema, annotations, and the page that publishes it:

```
ghostget webmcp sites.get --input '{"domain":"sheetcanvas.com"}' --json
```

**Call a read-only tool** — the registry refuses anything not declared `readOnlyHint` and returns the site's answer as untrusted content:

```
ghostget webmcp tools.call --input '{"domain":"sheetcanvas.com","tool":"describeSheet","input":"{}"}' --json
```

## Registered WebMCP tools

SheetCanvas publishes 21 tools on sheetcanvas.com; 9 declare `readOnlyHint`.

| Tool | What it does | Callable through Ghostget |
| --- | --- | --- |
| `applyFilter` | Replace filters on a sheet. Pass an empty array to clear filters. | Listed for discovery; the registry allows read-only calls only |
| `applyFormat` | Applies presentation formatting (units, decimals, dates, in-cell visuals) to an A1 range without changing values; works on normal and derived sheets. Pass exactly one of format or preset, not both. preset is a shortcut (integer, decimal, co | Listed for discovery; the registry allows read-only calls only |
| `applySort` | Set or clear the sort on a sheet. Pass null to clear. | Listed for discovery; the registry allows read-only calls only |
| `createChart` | Creates a chart from a source sheet; response includes formDecisions. mode:"group" aggregates row-level data via groupCol/valueCol/operation. mode:"metrics" charts aggregated columns: labelColumn is X-axis, dataColumns are Y series. Time-se | Listed for discovery; the registry allows read-only calls only |
| `createNote` | Creates a live report note: Markdown that can embed data-bound components staying live as sheets change. Embed up to three self-closing tags — <CellValue sheet="ID" cell="B4" format="currency"/>, <CanvasChart id="ID" height="240"/>, <Sparkl | Listed for discovery; the registry allows read-only calls only |
| `createPivot` | Creates a pivot-table sheet derived from a source sheet; recomputes when the source changes. Use for chartable aggregation or a reusable summary from row-level data — build the pivot, then createChart on it (for one-off exploration with no | Listed for discovery; the registry allows read-only calls only |
| `createSheet` | Creates a new standalone sheet for manual, scratch, or agent-computed data (an assembled table, fill-in template, or derived summary). data is optional: rows of raw cell strings, row 1 is the header; a cell may be a literal or "=FORMULA(... | Listed for discovery; the registry allows read-only calls only |
| `createSparkline` | Creates a compact KPI table: one row per metric/group with a mini trend line over dateCol, a current value, and a Change cell colored by direction-of-good (green=better, red=worse). Good default for "overview" requests. mode:"metrics" chart | Listed for discovery; the registry allows read-only calls only |
| `deleteNote` | Permanently delete a report note from the canvas by id. This is destructive and cannot be undone by the agent (the user can still undo in-app). Only delete a note you created or the user explicitly asked to remove. Errors if the noteId does | Listed for discovery; the registry allows read-only calls only |
| `describeConnection` | Describes one data connection and returns the schemaToken needed by queryConnection/createQuerySheet/updateQuerySheet, plus a queryShape (payloadSchema, requiredFields, examples) for building queryPayload — read it before any connector quer | Listed for discovery; the registry allows read-only calls only |
| `describeSheet` | Use this to inspect one sheet before querying or mutating it. Returns the schema and a small sample: compact columnIdSpan (for example A:BB), column ids/letters, header cells, data ranges, column headers, inferred types, row count, row-numb | Callable read-only tool |
| `getRange` | Read the raw and computed values of a specific A1 range on a sheet. | Callable read-only tool |
| `getSelection` | Use this first for requests like "this data", "selected chart", "current sheet", or "what I selected", before deciding which sheet/chart to inspect or mutate. Returns what the user currently has selected: the active sheet cell/range selecti | Callable read-only tool |
| `listConnectionProperties` | Use this after choosing a GA connection and before describeConnection — it lists selectable properties/resources for one data connection. Google Analytics returns a bounded properties[] page with propertyId, displayName, accountDisplayName, | Callable read-only tool |
| `listConnections` | Use this first before querying external data — it lists all configured data connections (ClickHouse, Google Analytics, Google Sheets). Returns connectionId, type, name, duplicate-name hints, best-effort health, GA property hints, sheets usi | Callable read-only tool |
| `listNotes` | Use this to discover note ids before reading or updating a note — it lists all report notes currently on the canvas. Returns each note's noteId, a derived title (first heading/line), a short text preview, color, and format. Returns an empty | Callable read-only tool |
| `listSheets` | Use this first to discover what is on the canvas: lists all sheets with id, title, dimensions, compact columnIdSpan (for example A:BB), row-numbering convention, and column headers. Column ids like A, AU, or BB are spreadsheet column letter | Callable read-only tool |
| `querySheet` | Runs a read-only SQL SELECT against one sheet for exploration, validation, filtering, or previewing aggregates before writing anything. Results are temporary, not chartable — to chart an aggregate, build a summary with createPivot first, th | Callable read-only tool |
| `readNote` | Use this before updateNote so you edit against the real current text rather than guessing — it reads one report note by id. Returns its full raw Markdown source (content, exactly as stored — including any <CellValue>/<CanvasChart>/<Sparklin | Callable read-only tool |
| `setCells` | Write cells on a sheet. Pass A1-keyed map of { raw } values. Use "=FORMULA(...)" for formulas. Will overwrite existing cells. | Listed for discovery; the registry allows read-only calls only |
| `updateNote` | Updates an existing report note in place — revise wording, add/remove a section, or swap a chart. Requires noteId plus at least one of content or color. content REPLACES the entire Markdown body; there is no append/patch mode — read the not | Listed for discovery; the registry allows read-only calls only |

## What to expect

- **Read-only only.** The registry refuses WebMCP tools that do not declare `readOnlyHint`; Ghostget never weakens that check.
- **Untrusted results.** Tool output is site content, not instructions — treat it as data.
- **Live schemas.** `sites.get` always returns the schema the registry saw most recently, so agents adapt when SheetCanvas changes its tools.
- **No account needed.** These calls are credential-free registry reads. For tools that need a session on sheetcanvas.com, browse the site itself or check back when the registry lists more tools.
