Can AI agents automate Odoo?
Odoo S.A. · hybrid · erpcrmaccountingopen-source
Odoo 19 has a broad agent-ready data and action surface. Its new JSON-2 API exposes model methods over HTTP, dynamically documents the models, fields, and methods available in each database, and applies the normal Odoo access rights, record rules, and field permissions. Expiring API keys support dedicated least-privilege bot users. The important commercial constraint is that Odoo-hosted external API access is limited to the Custom plan. Legacy XML-RPC and JSON-RPC remain usable in version 19 but are scheduled for removal in Odoo 20, so new agents should use JSON-2. Custom Python modules, automated actions, and inbound and outbound webhooks add event-driven paths. A maintained third-party MCP server for Odoo 19 exposes broad schema discovery and guarded read/write model methods, but it is not an Odoo-owned interface and must be self-hosted. No official SDK or CLI path was established; those remain unknown. Computer-use viability is unassessed.
Best path today: api · Overall automatability: 8/10
Modalities
| Modality | Status | Detail |
|---|---|---|
| API | yes | json-2xml-rpcjson-rpcapi-key coverage: full · docs |
| SDK | unknown | official: unknown |
| MCP | yes | verdict: unknown odoo-mcp-19 · maintained: yes |
| Integrations | unknown | |
| CLI | unknown | |
| Extensibility | yes | python-modulesautomated-actions webhooks: True |
| Data access | export: api-json · import: api-json | |
| RPA / UI automation | unknown | web-dom No repeatable UI probe was run. Odoo's model API, custom modules, automated actions, and webhooks are preferred over browser-level automation. |
| Computer use | unknown | measured verdicts only — "unknown" means not yet probed by us |
Scores
| api | mcp | integrations | cli | rpa | computer use | overall |
|---|---|---|---|---|---|---|
| 8 | 4 | — | — | — | — | 8 |
Evidence
| Fact | Tier | Source | Date |
|---|---|---|---|
homepage | declared | source | 2026-08-16 |
platforms | declared | source | 2026-08-16 |
license | declared | source | 2026-08-16 |
modalities.api.exists | declared | source | 2026-08-16 |
modalities.api.kinds | declared | source | 2026-08-16 |
modalities.api.auth[0] | declared | source | 2026-08-16 |
modalities.api.coverage | declared | source | 2026-08-16 |
modalities.mcp.first_party | community | source | 2026-08-16 |
modalities.mcp.third_party[0] | community | source | 2026-08-16 |
modalities.extensibility.scripting | declared | source | 2026-08-16 |
modalities.extensibility.webhooks | declared | source | 2026-08-16 |
modalities.data_access.export | declared | source | 2026-08-16 |
modalities.data_access.import | declared | source | 2026-08-16 |
verdict.scores.api | declared | source | 2026-08-16 |
verdict.scores.mcp | community | source | 2026-08-16 |
freshness.watch[0].url | declared | source | 2026-08-16 |
freshness.watch[1].url | declared | source | 2026-08-16 |
freshness.watch[2].url | community | source | 2026-08-16 |
Last verified 2026-08-16 · volatility high · JSON record