Skip to main content
A POST /api/v2/murph/chat response always carries the assistant’s text answer. On turns where Murph runs a tool that has a canonical interactive surface, the response also carries a structured rendering artifact. MCPUI hosts (the in-product Murph UI, and external hosts such as Claude or ChatGPT) render that artifact instead of reconstructing the surface from the text.
Each artifact field is optional and nullable. A client that does not render MCPUI can ignore every artifact and show the text answer alone — the answer is always self-contained.

How to render an artifact

Every artifact names the MCP App that renders it and the data to hand it:
  1. Load the MCP App at the artifact’s resourceUri.
  2. Pass the artifact’s data object to the app as the tool result’s structuredContent. The app routes on data.endpoint to the named view.
The host decides where to place the surface — the in-product Murph UI renders the discovery widget above the text answer, for example.

discoveryMcpui

Emitted on a successful discover_products tool call. Renders the product discovery surface — a browsable, selectable list of the discovered products grouped by storefront, with per-product brief-relevance reasoning.
{
  "discoveryMcpui": {
    "kind": "discover-products",
    "resourceUri": "ui://agentic-api/api-call/mcp-app.html",
    "view": "discover-products",
    "canonicalSurface": true,
    "discoveryId": "disc_7f3a…",
    "data": {
      "success": true,
      "status": 200,
      "endpoint": "/api/v2/buyer/discovery/discover-products",
      "method": "POST",
      "data": { "discoveryId": "disc_7f3a…", "productGroups": [], "proposals": [] }
    }
  }
}
FieldTypeNotes
kind"discover-products"Identifies the artifact.
resourceUri"ui://agentic-api/api-call/mcp-app.html"The MCP App that renders it.
view"discover-products"The view the app routes to.
canonicalSurfacetrueThe artifact is the canonical surface for this result; do not rebuild it from the text answer.
discoveryIdstringThe discovery session id, when present. Lets the widget re-fetch products (GET /api/v2/buyer/discovery/{discoveryId}/products) so it can self-hydrate even if data was truncated for size.
dataobjectThe discover_products response envelope (success, status, endpoint, method, data). Hand this to the app as structuredContent.
When this artifact is present, Murph’s text answer is a concise orientation (totals, price range, any recommended plans) plus next steps — it deliberately does not re-list every product, because the widget already shows the full, selectable set.

Other rendering artifacts

The chat response uses the same pattern for other canonical surfaces:
FieldEmitted onresourceUriview
creativeMcpuia successful creative-session callui://agentic-api/api-call/mcp-app.htmlcreative-iteration
inventoryMcpuia seller inventory-selector / capabilities callui://agentic-api/inventory-selector/mcp-app.htmlinventory-selector
mcpAppWidgetan open_<widget> directive (e.g. a seller setup or credential form)the named widget’s ui://… resource
Each carries kind, resourceUri, canonicalSurface, and a data payload to hand the app as structuredContent; creativeMcpui additionally carries a refresh directive describing the tool call that reloads the surface, and inventoryMcpui carries the esaId and the initial selector filters.

Conversation scope

Bind a Murph conversation to your account or a single advertiser.

Ask Murph

How Murph works as the in-product assistant.