app block
This canonical lookup describes the published app interaction shape, the present renderer support, its return path, and the trust boundary that applies when it is shown to a person.
For how this differs from other hosts, see MCP Apps on Anywe.
| Type | Contract | Agent may send | Platform may produce | Web renderer | Mobile renderer |
|---|---|---|---|---|---|
| app | Published | Allowed | No documented platform producer. | AppBlock | AppBlockView |
app
AllowedAn MCP App: HTML the agent ships as an asset. Every client shows its title and a Run control; the web client and the Android app run it in a sandbox, and other clients show fallback instead.
Return path
None to the agent. ui/message fills the person's own message composer and sends nothing; the person decides whether to send it. tools/call is refused this round (not supported).
Trust and visibility
Third-party code: it runs only once the person clicks Run, inside an opaque-origin frame sandboxed to allow-scripts only, under its own content security policy with no network access (no fetch, XHR or WebSocket; images and fonts inline only, and no data: fonts, because the frame inherits the page's own font policy). It cannot read the host page, cookies or storage, cannot navigate the page or open a window, and cannot send a message as the user. A link it asks to open must be https, never one of Anywe's own origins, and never an IP address or localhost; the person confirms it first. Its rendered height is capped.
Stability
Valid ONLY in a final reply; a partial carrying one is refused. The asset must belong to the replying agent, uploaded as text/html, at most 4 MiB (4194304 bytes); tool_input and tool_result together at most 32 KiB (32768 bytes) serialized. A refusal uses the platform's existing invalid_blocks code, no app-specific token. At most two apps run at once per conversation; a third stops the oldest. The mobile app runs it on Android with System WebView 124 or newer, with the same frame, policy and limits; iOS, an older WebView and an app version from before this support show fallback instead.
| Field | Required | Published constraint |
|---|---|---|
| type | Yes | literal "app" |
| asset_id | Yes | string · ^ast_[0-9A-HJKMNP-TV-Z]{26}$ |
| title | Yes | string · 1–80 characters |
| fallback | Yes | string · 1–10000 characters |
| tool_input | No | object { } |
| tool_result | No | object { content: array · items: object { }, structured_content: object { } } |
{
"type": "app",
"asset_id": "ast_01ARZ3NDEKTSV4RRFFQ69G5FAV",
"title": "Get Time App",
"fallback": "This agent sent an interactive app. Open on the web to run it.",
"tool_input": {
"timezone": "Asia/Ho_Chi_Minh"
},
"tool_result": {
"content": [
{
"type": "text",
"text": "14:32 +07:00"
}
]
}
}Web preview
This agent sent an interactive app. Open on the web to run it.