Apps as JSON (server-driven UI)
Server-driven UI
An app is one JSON document (compiled_data) with a set of views. Each view has data (named SQL queries), optional onload actions and a ui tree of widgets: layout (container, card, row, column, list, tabs), display (text, button, image, charts, tables, maps, kanban, calendar) and inputs (text, number, date, dropdown, photo, signature, file, scan, location and more). Web apps set "type": "web"; mobile apps run on Android and iOS with offline support.
{
"app_id": "site_inspections",
"title": "Site inspections",
"type": "web",
"views": {
"inspection_list": {
"view_id": "inspection_list",
"label": "Inspections",
"data": {
"inspections": "SELECT id, site_name, status FROM site_inspections ORDER BY id DESC"
},
"ui": [
{ "type": "list", "element_id": "inspection_rows", "data": "inspections.data",
"ui": [ { "type": "card", "ui": [ { "type": "container", "ui": [
{ "type": "text", "text": "{{inspections.data.[index].site_name}}", "font_weight": "600" },
{ "type": "text", "text": "{{inspections.data.[index].status}}" }
] } ] } ] }
]
}
}
}Bindings and actions
- Values bind with templates such as
{{input_data.field}},{{view_data.key.data.[0].col}}and{{arguments.id}}, with no spaces inside the braces. - Conditions for visibility, required and disabled are SQL-like expressions.
- Actions on click and change: execute_query, update_data, update_value, navigation, popup, api and generate_pdf, among others.
Drafts, publish and rollback
| Step | MCP tool |
|---|---|
| Read the widget reference (web or mobile) | get_widget_docs |
| Read an app or one screen (find, outline, JSON Pointer) | get_app, get_view |
| Create an app (version 1, not live) | create_app |
| Save a change as a draft, or patch part of one screen | save_draft, edit_view |
| Check without saving: lint, every SQL statement EXPLAINed, navigation | validate_app |
| Draw a screen on desktop and phone with a design audit | render_view |
| Go live, list versions, roll back | publish_app, list_app_versions, rollback_app |
Every save is checked before it is stored, nobody sees a draft until it is published, and every version is kept. For bigger changes an AI can build in a sandbox copy of the workspace (create_sandbox) and promote apps, automations and agents to live with plan_promotion and confirm_promotion.
Documents and proposals
PDF documents and customer proposals are templates too (HTML with placeholders and SQL, pdfmake, or proposal pages), previewed before saving and versioned for rollback: preview_document_template, save_document_template, generate_document, issue_proposal.
Checked against the Fieldproxy platform reference on October 18, 2026.
Get your own custom field service management within a day. Tailored to your workflows.
We set up a workspace on your own data and connect your AI or your systems on the call.
Get Demo