| Client capability | What opens |
MCP Apps with text/html;profile=mcp-app | An embedded, network-isolated hosted page |
| MCP without that capability | An authenticated Stackyapper portal link |
| Export/import only | A stackyapper.artifact/v1 backup package |
stackyapper.ui/v1 is JSON data, not executable code. The root has exactly two
keys: format and blocks. Supported block types are heading, text,
status, metric, table, control, and work_queue.12345678{ "format": "stackyapper.ui/v1", "blocks": [ { "type": "heading", "text": "Morning service check", "level": 2 }, { "type": "status", "label": "Backup", "value": "Healthy", "tone": "good" }, { "type": "metric", "label": "Open alerts", "value": "2", "detail": "Review before noon" } ] }
12345678910111213141516{ "format": "stackyapper.ui/v1", "blocks": [ { "type": "table", "caption": "Devices approaching replacement", "columns": [ { "key": "device", "label": "Device" }, { "key": "age", "label": "Age" } ], "rows": [ { "device": "Laptop 014", "age": "4 years" } ] } ] }
12345678910111213141516{ "format": "stackyapper.ui/v1", "blocks": [ { "type": "control", "kind": "refresh", "label": "Refresh open tickets", "description": "Runs a bounded read with your current access.", "binding": { "role": "psa", "tool_name": "cw_search_tickets", "arguments": { "query": "status/Open", "limit": 3 } } } ] }
bindings argument declares what the control may use:123[ { "role": "psa", "service": "connectwise", "tool_names": ["cw_search_tickets"] } ]
work_queue when a saved artifact needs to keep the shape of a dispatch
board, alert queue, or task list instead of flattening it into unrelated metric
cards. It is the document's single full-page block: a histogram, local search
and facets, filter chips, compact rows, and one optional governed query
control. Search, facets, chips, histogram selection, sorting, density, and
list copying all run locally over the bounded saved rows. The query control's
fresh result is shown separately; it does not silently rewrite the saved
snapshot.1234567891011121314151617181920212223242526272829303132333435{ "format": "stackyapper.ui/v1", "blocks": [ { "type": "work_queue", "item_label": "tickets", "eyebrow": "Service operations", "title": "Dispatch Console", "status": "80 open", "histogram": { "label": "Open by age", "hint": "Select a bar to filter", "items": [ { "label": "30d+", "value": "23", "tone": "warning", "match": { "key": "age_bucket", "value": "30d+" } } ] }, "filters": [{ "key": "board", "label": "All boards" }], "columns": [ { "key": "ticket", "label": "Ticket" }, { "key": "age", "label": "Age", "kind": "age" }, { "key": "age_bucket", "label": "Age bucket", "hidden": true } ], "rows": [ { "ticket": "#42 Printer offline · Acme", "age": "31d", "age_bucket": "30d+" } ], "footer": ["ConnectWise via Stackyapper"], "control": { "label": "Query latest", "binding": { "role": "psa", "tool_name": "cw_search_tickets", "arguments": { "page": 1, "pageSize": 2 } } } } ] }
bindings argument."23").stackyapper.ui/v1 document: 64 KiB.stackyapper.artifact/v1 is a deterministic, backup-only JSON package. It
contains the title, description, source, and reviewed bindings. Its SHA-256
checksum detects corruption; it is not a signature and does not prove who
created the package. Import validates the checksum and artifact format, removes
all original identifiers, and creates a new private artifact owned by the
importing viewer with "Imported copy" appended to its title.