Connecting via MCP
The Model Context Protocol gives any LLM tool a typed handshake to your data layer. The Instadash MCP server is hosted at mcp.instadash.io — paste that URL into your client and authorize with GitHub or magic link. No API key paste required.
Hosted (recommended)
For Claude.ai, Cursor, Windsurf and any client that supports remote MCP, add this URL:
https://mcp.instadash.io
The client walks you through a one-time OAuth handshake; your grids show up in the tool list within 30 seconds.
Local (stdio)
For clients that only support stdio, the instadash-mcp npm package proxies stdio to the hosted server.
{
"mcpServers": {
"instadash": {
"command": "npx",
"args": ["-y", "instadash-mcp"],
"env": { "INSTADASH_KEY": "sk_live_…" }
}
}
}Hosts we test against
| Host | Status |
|---|---|
| Claude Desktop | ✓ supported |
| Claude.ai | ✓ supported |
| Cursor | ✓ supported |
| Windsurf | ✓ supported |
| Zed | beta |
| Continue.dev | beta |
| VS Code Copilot | planned |
Tools your agent gets
The canonical, always-up-to-date manifest lives at /.well-known/mcp.json. The current surface, grouped by capability:
Write
instadash_push(name, rows, title?, description?, tags?,
editable?, visibility?, ttl_days?, actions?)
// Create/update a grid. Returns { url, embed_url, version }.
instadash_copy(source, name?)
// Fork a public grid (or one of your own) into your account.
// New grid starts at v1, defaults to private, records copied_from.
instadash_update(grid, title?, description?, tags?,
visibility?, editable?)
// Change metadata without re-pushing rows. null clears string fields.
instadash_write_cell(grid, edits)
// Targeted cell write. Tagged source=agent so HITL pollers
// can distinguish agent-originated edits from human edits.
Read
instadash_list(q?)
// Grids in your workspace. q = case-insensitive substring on slug.
instadash_get_schema(grid)
// Column names, inferred types, sample row.
instadash_read(grid, offset?, limit?, filter?, sort?, q?, version?)
// Paginated rows. Server-side filter (col=value), sort (col:asc),
// full-text q, and version selector for historical reads.
instadash_list_versions(grid)
// Version history with timestamps and row counts.
instadash_stats(grid)
// Current rows, version count, retained storage bytes,
// title/visibility/editable, timestamps.
instadash_usage()
// Account-level: grids used/max, storage, per-push caps,
// rate limit, feature flags.
HITL & lifecycle
instadash_edits(grid, since?, source?)
// Flat list of cell edits — what did the human approve/change?
// source = 'human' | 'agent'. since = ISO 8601 timestamp.
instadash_rollback(grid, version)
// Restore a previous version as the new latest. History preserved.
instadash_delete(grid)
// Permanently delete a grid you own. Removes rows, history,
// mesh listing, and edit overlay.
Export & discovery
instadash_export(grid)
// CSV download URL. Streams the full grid with RFC 4180 escaping.
instadash_embed_snippet(grid, width?, height?, theme?, compact?)
// Ready-to-paste iframe snippet for embedding the grid.
instamesh_search(q, k?)
// Semantic + keyword search across all public grids.
The HITL loop in three calls
The whole reason an agent needs a grid: hand off to a human, read back the decisions.
1. instadash_push(name, rows, editable: true,
actions: [{ column: 'approved', type: 'checkbox' }])
→ { url, embed_url, version }
2. (human opens the URL, ticks approved on the real rows)
3. instadash_edits(grid, source: 'human', since: lastChecked)
→ [{ row, col, value, source, timestamp }, …]
Two MCP calls bracket the human review. No clarifying chat. No re-prompting. Just structured approvals.