pypi odoo-pulsestdioMITupdated 19d ago
An AI business analyst for your Odoo ERP. Ask one question, get one answer โ numbers, highlights, risks, and a verdict (on-track / at-risk / off-track) โ over the Model Context Protocol. CRUD bridges to Odoo already exist; this is the analytics layer that sits on top.
What can you do with odoo pulse?
odoo-pulse
An AI business analyst for your Odoo ERP. Ask one question, get one answer โ numbers, highlights, risks, and a verdict (on-track / at-risk / off-track) โ over the Model Context Protocol. CRUD bridges to Odoo already exist; this is the analytics layer that sits on top.

The analyst tools
Each tool answers a whole management question in a single call, returning a structured report with a verdict โ not a raw dump you have to interpret.
| Tool | Answers |
|---|---|
business_pulse โญ |
The morning briefing: yesterday's sales, new leads, overdue invoices, late tasks, who's off โ with a company-wide verdict |
pipeline_review |
CRM funnel by stage, stalled deals, weighted revenue, recent win rate |
sales_snapshot |
Revenue this period vs last (ฮ%), top customers/products, stale quotations |
receivables_health |
AR/AP aging buckets, % overdue, top debtors |
inventory_risk |
Shortages (negative forecast) and dead stock |
absence_overview |
Who's off this week, pending approvals, thin-coverage departments |
procurement_watch |
Purchasing: late receipts, stale RFQs, open spend per vendor |
production_health |
Manufacturing: orders behind their planned start, stuck WIP |
project_profitability |
Projects: hours logged vs allocated, cost/revenue/margin, budget burn verdict |
project_budget |
Budget vs actual per project, line by line โ over-plan lines and spend the budget doesn't capture |
team_workload ยท project_status_report ยท standup_digest |
Project delivery: overloaded members, at-risk projects, and a daily stand-up digest |
Every money-reporting tool takes an optional
company= filter and flags
mixed-currency totals instead of silently summing them; verdict cut-offs
(stalled %, overdue %, growth %) are parameters, so you can calibrate them
to your business.
Timezone semantics
All report tools take timezone_offset (default 7). Odoo stores datetime
fields in UTC; the tools shift them by timezone_offset hours before
bucketing by calendar day, and day windows in domains are expressed as UTC
datetime boundaries. Date-only fields (e.g. project.milestone.deadline,
invoice_date_due, project.task.date_deadline) are compared as-is.
Version-dependent fields
find_partner searches mobile only on instances that still have it (removed in Odoo 19), and list_timesheets reports an actionable error when hr_timesheet is not installed.
Under the hood it's the standard Odoo XML-RPC external API โ nothing to install
inside Odoo, works on Odoo Online, Odoo.sh, and on-premise. Requires
Odoo 18+: the generic tools (search_read, read_records, โฆ) still run on
older versions, but the report tools are not guaranteed there.
Try the playground
No Odoo account? Boot a demo Odoo pre-seeded with a story to tell (a stalled deal, a 90-day-overdue invoice, a stock shortage, someone off today):
docker compose -f deploy/playground/compose.yml up -d
First boot pulls ~4 GB of images (Odoo + Postgres) and seeds the demo data โ
allow 5-10 minutes depending on your connection. Then point Claude at it and
ask it to run business_pulse. Full walkthrough:
docs/guides/playground.md.
Install & connect
Add it to Claude Code (no install step โ uvx fetches it):
claude mcp add odoo-pulse \
--env ODOO_URL=https://acme.odoo.com \
--env ODOO_DB=acme \
--env ODOO_USERNAME=you@example.com \
--env ODOO_API_KEY=your-api-key \
--env ODOO_READ_ONLY=true \
-- uvx odoo-pulse
Generate the API key in Odoo under Settings โ Users โ (your user) โ Account Security โ New API Key. Config for Claude Desktop and Cursor, plus pip and Docker alternatives: docs/guides/install.md. If a key may have been exposed, see If an API key may have been exposed.
Or one-click:
Read-only by default, safe writes when you want them
The server is read-only out of the box (ODOO_READ_ONLY=true). Writes require
four independent controls to line up: ODOO_READ_ONLY=false,
ODOO_WRITABLE_MODELS (a comma-separated model allow-list),
ODOO_ALLOW_DELETE=true additionally for deletes, and a per-call confirm=true
โ every write tool returns a dry-run preview without it. System models are never
writable. Details: docs/reference/tools.md#write-operations.
More tools
Beyond the analyst reports, there are ~60 model-aware query tools spanning CRM,
Sales, Inventory, Accounting, HR, Project, Manufacturing, PoS, and Enterprise
apps โ opt in via ODOO_TOOL_GROUPS. Full catalogue and configuration:
docs/reference/tools.md.
Testing
The suite mocks the XML-RPC layer, so no real Odoo or network is needed:
pip install -e ".[dev]"
pytest
For a live check against a real Odoo (read-only), see docs/reference/tools.md#live-smoke-test-against-a-real-odoo.
License
Install
Add odoo pulse to your client. Pick the one you use.
claude mcp add odoo-pulse -- uvx odoo-pulsecodex mcp add odoo-pulse -- uvx odoo-pulseamp mcp add odoo-pulse -- uvx odoo-pulse{
"mcpServers": {
"odoo-pulse": {
"command": "uvx",
"args": [
"odoo-pulse"
]
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"odoo-pulse": {
"command": "uvx",
"args": [
"odoo-pulse"
]
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
code --add-mcp '{"name":"odoo-pulse","command":"uvx","args":["odoo-pulse"]}'Or add the block manually to `.vscode/mcp.json` under `servers`.
{
"mcpServers": {
"odoo-pulse": {
"command": "uvx",
"args": [
"odoo-pulse"
]
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
{
"mcpServers": {
"odoo-pulse": {
"command": "uvx",
"args": [
"odoo-pulse"
]
}
}
}Add to `cline_mcp_settings.json` via the MCP Servers panel.
{
"mcpServers": {
"odoo-pulse": {
"command": "uvx",
"args": [
"odoo-pulse"
]
}
}
}Add to `~/.gemini/settings.json`.
{
"mcpServers": {
"odoo-pulse": {
"type": "local",
"command": "uvx",
"args": [
"odoo-pulse"
],
"tools": [
"*"
]
}
}
}Add to `~/.copilot/mcp-config.json`, or run `/mcp add` inside the CLI.
{
"context_servers": {
"odoo-pulse": {
"command": {
"path": "uvx",
"args": [
"odoo-pulse"
]
}
}
}
}Add to your Zed `settings.json`.
uvx odoo-pulseRun `goose configure`, choose **Add Extension โ Command-line Extension**, and paste this command.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance25/25
- Trust13/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 11 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 12 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint โ no local install
Version history
| Versions | Published |
|---|---|
| 1.9.1Latest | Aug 5, 2026 |
| 1.9.0 | Jul 30, 2026 |
| 1.8.2 | Jul 20, 2026 |
| 1.8.1 | Jul 20, 2026 |
| 1.8.0 | Jul 17, 2026 |
| 1.6.0 | Jul 13, 2026 |
| 1.5.0 | Jul 11, 2026 |
| 1.4.0 | Jul 9, 2026 |
| 1.3.0 | Jul 9, 2026 |
| 1.2.1 | Jul 8, 2026 |
| 1.1.1 | Jul 6, 2026 |
| 1.1.0 | Jul 3, 2026 |
| 1.0.1 | Jul 3, 2026 |