MCP Apps & Operator Cards
Interactive UI cards rendered inside AI clients — browse, summary, approval, report, and dashboard cards
MCP Apps — Operator Cards
MCP Apps is the UI layer of the Odoo AI MCP Server. When certain tools return structured data, the response includes an _meta block containing operator card data that AI clients can render as interactive UI components.
This allows users to browse records, preview reports, and handle approvals directly inside their AI chat interface — without switching to the Odoo browser tab for routine operations.
How Cards Are Triggered
Cards are included in the tool response when either:
- The tool argument
show_ui: trueis set (for query/browse cards), or - The operation requires human interaction by design (approvals, reports)
The card data is embedded in the tool result’s _meta key alongside the standard content array.
Card Types
Query / Browse Card
Triggered by: odoo_query, odoo_search_read with show_ui: true
Displays a paginated, sortable table of the returned records inside the AI client. Each row is clickable and can launch a Record Summary Card.
{
"name": "odoo_query",
"arguments": {
"action": "search_read",
"model": "sale.order",
"domain": [["state", "=", "sale"]],
"fields": ["name", "partner_id", "amount_total"],
"show_ui": true
}
}Record Summary Card
Triggered by: odoo_get_record_summary (always rendered if the client supports it)
Displays a compact card for a single record with key field values, relational field previews, and a direct link to the record in Odoo.
{
"name": "odoo_get_record_summary",
"arguments": {
"model": "sale.order",
"record_id": 42,
"show_ui": true
}
}Approval Card
Triggered by: odoo_unlink, odoo_apps (auto — no extra argument needed)
Displayed whenever a destructive operation is queued for approval. The card includes:
- Operation description (model, record IDs, reason)
- Approve and Reject buttons
- Link to the full approval record in Odoo
This card is the primary way users review and act on AI-requested deletions without leaving their chat client.
Report Card
Triggered by: odoo_report with action: render
Displays a card with:
- Report name and format (PDF/HTML)
- Download button for the rendered file
- Preview button (for HTML reports)
- Record and report metadata
{
"name": "odoo_report",
"arguments": {
"action": "render",
"report_id": 3,
"res_ids": [42],
"output_format": "pdf",
"show_ui": true
}
}Dashboard Card
Triggered by: odoo_dashboard (auto)
Displays a card with:
- Dashboard name
- Open in Odoo link (to Dashboards → MCP)
- Last updated timestamp
_meta Response Structure
The _meta block is embedded in the MCP tool result alongside the content array:
{
"content": [
{
"type": "text",
"text": "{\"success\": true, \"records\": [...]}"
}
],
"_meta": {
"card_type": "browse",
"model": "sale.order",
"records": [...],
"total": 124,
"fields": ["name", "partner_id", "amount_total"],
"odoo_url": "https://your-odoo.com/odoo/sales"
},
"isError": false
}[!NOTE] The
_metablock is a hint to the AI client — not all clients render it visually. Claude.ai and compatible clients with MCP Apps support will display the interactive card; other clients will fall back to the plain text incontent[0].text.
Card Feature Matrix
| Card Type | show_ui Required | Auto-triggered | Interactive Buttons |
|---|---|---|---|
| Browse / Query | Yes | No | Paginate, sort, open record |
| Record Summary | Optional | Yes (if client supports) | Open in Odoo |
| Approval | No | Yes (always) | Approve, Reject |
| Report | Optional | Yes | Download, Preview |
| Dashboard | No | Yes | Open in Odoo |