Reporting & Analytics Tools

The MCP Server bundles five families of reporting tools the AI can call to summarise, visualise, and share Odoo data.

Pulse Report — operational health

pulse_report runs an operational health diagnostic across up to eight standard dimensions:

  • Sales — stale draft quotes older than 30 days.

  • Invoicing — overdue unpaid invoices.

  • CRM — stalled opportunities with no activity for 14+ days.

  • Activities — overdue mail.activity records.

  • Email queue — stuck outgoing emails.

  • Approvals — MCP approval requests waiting more than 24h.

  • Inventory — late stock transfers.

  • Projects — overdue tasks.

The result is graded A–F with a dark-themed HTML dashboard plus structured findings.

Category: read. Risk: low.

Pulse Report dashboard with a big "D" grade card, proportional severity bar, and finding cards in red, amber, and green

Dashboards — compose_dashboard

Build a polished Command-themed dashboard (dark slate background, cyan accent, mono numbers, sparklines, trend deltas). The AI passes a recipe with sections:

  • kpi / kpi_row — big number tiles with optional sparklines and percent-change pills.

  • chart — bar, line, or donut chart with smart defaults (date groupby auto-detects line; >8 categories auto-becomes horizontal bar; etc.).

  • table — a paged data table with title and “Showing X of N” badge.

Returns html (an inline artifact for clients that can render HTML) and a schema describing the dashboard’s contents.

Category: advanced. Risk: low.

AI-composed dashboard with three KPI tiles, a bar chart

After rendering, the AI asks the user whether to save the dashboard as a Shared Page. If yes, it calls save_dashboard_as_page.

Charts — generate_chart, update_chart, compose_chart

The Visualisation Studio. See Charts for the full feature page.

  • generate_chart — create a reusable chart definition (mcp.chart.ts) with 9 chart types (bar, line, pie, scatter, gauge, radar, funnel, treemap, sunburst).

  • update_chart — patch an existing chart (change type, filter, recolour).

  • compose_chart — render the chart to HTML + structured data for inline display in Claude Desktop / Claude.ai. For clients that can’t render HTML, the AI summarises the top buckets from data_points.

  • save_chart_as_page — persist the chart as a token-gated public URL.

Category: write / read. Risk: low.

Odoo reports — generate_report, list_reports

list_reports

Lists available reports for a given Odoo model. The AI uses this when the user asks “what reports do you have for customer X?”.

generate_report

Renders an Odoo report (PDF or HTML) and returns a download URL. The user clicks the URL to grab the file.

The Enable Report Generation master toggle in Server Settings can disable this family globally if you do not want the AI to produce printable reports.

Category: read / advanced. Risk: low / medium.

Knowledge tools — knowledge_search, knowledge_read, knowledge_ask

The Knowledge Layer surface — see Knowledge Search Modes for the full feature page.

Briefly:

  • knowledge_search — hybrid full-text + vector search over every ir.attachment in Odoo. Returns ranked snippets.

  • knowledge_read — read the full text of one chunk or every chunk of a document.

  • knowledge_ask — one-shot question answering: searches, formats the top chunks as LLM-ready context with citation numbers, and asks the AI to answer using only that context.

All three respect ir.attachment ACLs — users only see chunks from files they’re allowed to read.

Category: read. Risk: low.

Event tools — subscribe_events, unsubscribe_events

Let the AI subscribe to record changes (create / write / unlink) on any model so it can react when something interesting happens — either back into the running AI session or, more usefully, persistently via an HTTPS webhook that keeps firing long after the chat is closed. See Event Subscriptions for the full feature page and Webhook Delivery for the delivery payload format and signing.

  • subscribe_events — register a new subscription. Required: model. Optional: event_type (create / write / unlink / all, default all), domain (Odoo domain scoping which records trigger), fields (for write events — fire only when one of these fields changes), webhook_url (HTTPS endpoint that persists beyond the AI session), webhook_payload_template (custom JSON body shape for destinations like Slack / Teams that expect a specific structure), and enrich_fields (dotted field paths to pull from the fired record and expose as template variables).

  • unsubscribe_events — deactivate an existing subscription. Pass the subscription_id returned by subscribe_events.

Category: event. Risk: low.

Session tools — get_session, update_session_context

Each AI conversation gets its own MCP Session with a small JSON context blob the AI can use as short-term memory — recent models, last queries, user-defined bookmarks, the currently “active” record, anything conversation-scoped. These two tools read and write that blob so the next turn can resume from where the previous left off without re-asking the user. See Sessions for how sessions are stored, listed, deactivated, and cleaned up.

  • get_session — return the current session’s context blob. The AI calls this when it needs to remember what was in focus last (e.g. “continue with the active customer”).

  • update_session_context — patch the context blob with new fields (add a bookmark, change the active record, store a step in a multi-turn workflow).

Category: read. Risk: low.