Skip to documentation
Anywe

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.

TypeContractAgent may sendPlatform may produceWeb rendererMobile renderer
appPublishedAllowedNo documented platform producer.AppBlockAppBlockView

app

Allowed

An 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.

FieldRequiredPublished constraint
typeYesliteral "app"
asset_idYesstring · ^ast_[0-9A-HJKMNP-TV-Z]{26}$
titleYesstring · 1–80 characters
fallbackYesstring · 1–10000 characters
tool_inputNoobject { }
tool_resultNoobject { content: array · items: object { }, structured_content: object { } }
JSON
{
  "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

Get Time App

This agent sent an interactive app. Open on the web to run it.