Open Source · Infrastructure · Odoo

We Published MCP-Odoo-Tools: an Open-Source (MIT) Plugin to Connect Odoo to AI Agents from Version 10 to 19

You've been hearing for months that "AI can talk to your ERP." What nobody explains is that Odoo renamed dozens of models between version 12 and 19, and that an MCP server that doesn't handle this at runtime will silently mislead the agent. Here is what we built to solve it, why we published it under MIT, and what we intentionally left out.

Short answer. MCP-Odoo-Tools is an open-source (MIT) MCP server that connects Claude, Gemini, Mistral, or any agent implementing the Model Context Protocol to Odoo Community, Enterprise and online (SaaS) from version 10 through 19. It exposes 28 tools to the agent in version 1.4.0 (query invoices, sales orders, inventory, contacts, imports and more) with a compatibility layer that automatically translates model and field names that changed across versions (such as account.invoice → account.move in v13). It ships as a Claude Code plugin, runs on python3 with no external dependencies, and the source code is published on GitHub under the MIT license.
Diagram 1. Map of the article: the renamed-models problem, what the MCP server is, its 28 tools, installation, what stays outside the public layer, why MIT and how to start.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px'}}}%%
mindmap
  root(("MCP-Odoo-Tools, Odoo 10 to 19 with AI agents"))
    The problem
      models renamed across versions
      silent agent failure
    What it is
      Python MCP server
      compatibility layer
      three transports
      optional cache and observability
    28 tools
      read and export
      write and execute
      metadata and import
    Installation
      Claude Code plugin
      python3 with no dependencies
    Outside the public layer
      CFDI and SAT
      VoBo
      S3 backup and vision
    Why MIT
      no vendor lock-in
      ecosystem
    How to start
      diagnostic
      read-only pilot
      governance before writes
Diagram 1. Map of the article. Each branch is a section; the full read takes about eight minutes.

The real problem: Odoo model names change across versions

Odoo is the most widely adopted ERP among SMEs in Latin America, but it comes with a detail that consultants rarely mention before the contract is signed: every major version reorganizes or renames models and fields. The most well-known example is account.invoice, which became account.move in Odoo 13. There are dozens of similar changes between versions 10 and 19.

For a human who knows the history, this is a learning curve. For an AI agent, it is a silent failure point: the agent calls the old model name with confidence, the ERP returns an error that looks like a permissions or network issue, and the agent cannot distinguish a credentials problem from a nomenclature problem.

We could have built an MCP server that assumes Odoo 19 and called it done. But that would exclude thousands of businesses running perfectly functional version 14, 16 or 17 deployments with no reason to migrate just because AI arrived.

Diagram 2. Timeline with three Odoo model renames: product.uom to uom.uom in version 12, account.invoice to account.move in 13 and mail.channel to discuss.channel in 17.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'titleColor': '#FBA225', 'cScale0': '#1a2640', 'cScale1': '#24304d', 'cScale2': '#2e3c5e', 'cScaleLabel0': '#FFFFFF', 'cScaleLabel1': '#FFFFFF', 'cScaleLabel2': '#FFFFFF'}}}%%
timeline
    title Odoo model renames an agent must know about
    Odoo 12 : product.uom becomes uom.uom
    Odoo 13 : account.invoice becomes account.move
            : account.invoice.line becomes account.move.line
    Odoo 17 : mail.channel becomes discuss.channel
Diagram 2. Three renames documented in Odoo release notes. They are examples, not the full list: the plugin's declarative map covers dozens of model and field changes between 10 and 19.
Diagram 3. Sequence comparing an MCP server without a compatibility layer, which returns a generic error when asking for account.invoice on Odoo 16, with MCP-Odoo-Tools, which detects the version and queries account.move.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'actorTextColor': '#FFFFFF', 'actorBkg': '#1a2640', 'actorBorder': '#FBA225', 'signalColor': '#FBA225', 'signalTextColor': '#FFFFFF', 'labelBoxBkgColor': '#101828', 'labelBoxBorderColor': '#FBA225', 'labelTextColor': '#FBA225', 'noteBkgColor': '#101828', 'noteTextColor': '#FBA225', 'noteBorderColor': '#FBA225'}}}%%
sequenceDiagram
    participant A as AI agent
    participant S as MCP server without compatibility
    participant C as MCP-Odoo-Tools
    participant O as Odoo 16
    A->>S: find invoices in account.invoice
    S->>O: search_read account.invoice
    O-->>S: error, model does not exist
    S-->>A: generic error
    Note over A: credentials, network or naming?
The agent cannot tell A->>C: find invoices C->>O: odoo_version O-->>C: 16.0, Community C->>O: search_read account.move O-->>C: records C-->>A: correct invoices
Diagram 3. The same request down two paths. Without a compatibility layer, Odoo's error reaches the agent with no context; with it, version detection resolves the right name before querying.

What MCP-Odoo-Tools is

MCP-Odoo-Tools is a Python server that implements the Model Context Protocol (MCP, published by Anthropic as an open standard) on top of Odoo. The source code is published on GitHub under the MIT license. It is a clean-room implementation (not derived from any AGPL fork) and it ships packaged as a Claude Code plugin.

What distinguishes it from a basic Odoo integration:

Cross-version compatibility layer. A declarative map covers model and field name differences from Odoo 10 through 19. When an agent requests invoice data, the layer determines at runtime whether the connected instance uses account.invoice or account.move, without the agent or the operator needing to know the version in advance.

Automatic version and edition detection. The server identifies the exact Odoo version (CE, EE or online), edition and deployment mode at connection time. That information feeds the compatibility layer and the transport selector.

Three transports, selected automatically. The server picks the transport from the detected version and the credential: JSON-2 (Odoo's new API, available on saas~18.4 and 19.0+) when an API Key is set, and JSON-RPC with XML-RPC fallback elsewhere. JSON-RPC and XML-RPC accept a password or an API Key (API Keys exist since Odoo 14); JSON-2 accepts API Keys only. The preference can be pinned with ODOO_TRANSPORT_PREF.

Optional schema cache. Repeated calls to odoo_fields_get are served from memory (configurable TTL cache), reducing latency in intensive work sessions.

Built-in observability (optional). Each RPC call produces an OpenTelemetry span with odoo.model, odoo.method and odoo.alias attributes. If no OTLP endpoint is configured, the server starts normally without emitting traces: graceful degradation, zero errors.

Diagram 4. Architecture: the AI agent talks to the MCP client, which reaches MCP-Odoo-Tools over stdio; inside, version detection feeds the compatibility layer and the transport selector, which connects to Odoo.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart LR
    A["AI agent
Claude, Gemini, Mistral or another MCP client"] --> M["MCP client
Claude Code or another MCP client"] M -->|stdio| S["MCP-Odoo-Tools
Python server, MIT license"] S --> D["Version, edition and
deployment detection"] D --> K["Compatibility layer
Odoo 10 to 19"] K --> T["Transport selector
JSON-2, JSON-RPC, XML-RPC"] T --> O["Odoo
Community, Enterprise or online"]
Diagram 4. Server architecture. Everything runs on the operator's machine; the only outbound hop is the RPC connection to the Odoo instance.
Diagram 5. Compatibility layer flow: depending on the detected version, the invoice request maps to account.invoice on Odoo 10 to 12 or to account.move on 13 to 19, and the answer reaches the agent without it knowing the version.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart TD
    Q["The agent asks for invoices"] --> V{"Version detected
by odoo_version"} V -->|"10, 11 or 12"| I["account.invoice"] V -->|"13 to 19"| M["account.move"] I --> R["search_read with the right name"] M --> R R --> A["Answer to the agent,
which never knew the version"]
Diagram 5. Runtime resolution. The map is declarative: adding a new rename means editing the table, not the server code.
Diagram 6. Transport decision tree: with an API Key on saas~18.4 or 19.0 and later, JSON-2 is used; elsewhere, JSON-RPC with XML-RPC fallback; a password only works on JSON-RPC and XML-RPC; ODOO_TRANSPORT_PREF pins the preference.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart TD
    S["Connection to Odoo"] --> C{"Credential?"}
    C -->|"API Key
since Odoo 14"| V{"saas~18.4 or 19.0 and later?"} C -->|"Password"| J["JSON-RPC"] V -->|"Yes"| J2["JSON-2
Odoo's new API"] V -->|"No"| J J -->|"on failure"| X["XML-RPC
fallback"] P["ODOO_TRANSPORT_PREF
pins the preference"] -.-> C
Diagram 6. Automatic transport selection. JSON-2 accepts API Keys only; JSON-RPC and XML-RPC accept a password or an API Key.
Diagram 7. Sequence of odoo_fields_get: the first call queries Odoo and stores in the TTL cache, repeated calls are served from memory, and each RPC call emits an OpenTelemetry span when an OTLP endpoint is configured.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'actorTextColor': '#FFFFFF', 'actorBkg': '#1a2640', 'actorBorder': '#FBA225', 'signalColor': '#FBA225', 'signalTextColor': '#FFFFFF', 'labelBoxBkgColor': '#101828', 'labelBoxBorderColor': '#FBA225', 'labelTextColor': '#FBA225', 'noteBkgColor': '#101828', 'noteTextColor': '#FBA225', 'noteBorderColor': '#FBA225'}}}%%
sequenceDiagram
    participant A as Agent
    participant S as MCP-Odoo-Tools
    participant C as TTL cache
    participant O as Odoo
    participant T as Optional OTLP endpoint
    A->>S: odoo_fields_get res.partner
    S->>C: cached?
    alt first call
        C-->>S: no
        S->>O: fields_get
        O-->>S: fields
        S->>C: store with expiry
    else repeated call
        C-->>S: fields from memory
    end
    S-->>A: model fields
    S--)T: span with odoo.model, odoo.method and odoo.alias
    Note over T: with no endpoint configured
no traces are emitted and nothing fails
Diagram 7. Schema cache and observability, both optional. The cache cuts latency in intensive sessions; tracing degrades gracefully when there is nowhere to send it.

Available tools

The server exposes 28 tools (version 1.4.0) organized by operation domain:

CategoryToolWhat it does
Readodoo_search_readSearch and return records with ORM filters
Readodoo_fields_getDescribe a model's fields (with optional cache)
Readodoo_search_countCount records without fetching data
Exportodoo_export_records_jsonExport records via ORM respecting permissions
Exportodoo_export_records_csvSame in CSV format
Writeodoo_create / odoo_writeCreate or update records
Writeodoo_unlinkDelete records
Writeodoo_executeCall any model method
Readodoo_read_groupGroup and aggregate records by field
Metadataodoo_versionReturn the instance version and edition
Metadataodoo_list_modelsList installed models
Odoo Onlineodoo_online_profileSeries, deployment, transport, keys and plan limits in one read
Importodoo_import_preview / odoo_importDry-run and atomic imports with Odoo's own importer

The preview does not save imported rows, but it can consume sequence numbers and fire automated-action webhooks. Test it on an isolated copy before using it in production.

The 28 tools in version 1.4.0 cover connection, read, export, write, Studio-style schema changes and imports. With Read-only mode on, the server refuses every write tool before anything reaches Odoo. The table shows the most commonly used; the full catalog is in the repository README.

Diagram 8. Map of the tools by category: read, export, write, metadata, Odoo Online, import and Studio-style schema changes.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px'}}}%%
mindmap
  root(("28 tools in version 1.4.0"))
    Read
      odoo_search_read
      odoo_fields_get
      odoo_search_count
      odoo_read_group
    Export
      odoo_export_records_json
      odoo_export_records_csv
    Write
      odoo_create and odoo_write
      odoo_unlink
      odoo_execute
    Metadata
      odoo_version
      odoo_list_models
    Odoo Online
      odoo_online_profile
    Import
      odoo_import_preview
      odoo_import
    Studio-style schema
      fields and views without Python
Diagram 8. The most used tools grouped by domain. The full catalog of 28 is in the repository README.
Diagram 9. Import flow: the file goes through odoo_import_preview; on errors it is fixed and retried; otherwise odoo_import runs the atomic import. The preview can consume sequences and fire webhooks, hence the isolated copy.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart LR
    F["CSV file or rows"] --> P["odoo_import_preview
dry run with Odoo's own importer"] P --> R{"Errors?"} R -->|"Yes"| C["Fix the file"] --> P R -->|"No"| I["odoo_import
atomic import"] I --> O["Records in Odoo"] P -.->|"possible side effects"| W["Consumes sequence numbers
Fires automated-action webhooks"] W -.-> S["Test on an isolated copy first"]
Diagram 9. Preview before importing. The dry run saves no rows, but it is not harmless: it can consume sequence numbers and fire automated-action webhooks.
Diagram 10. Read-only gate: with odoo_readonly on, every write tool is refused before reaching Odoo; read tools keep running.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart TD
    T["Tool call"] --> K{"odoo_readonly on?"}
    K -->|"No"| E["Runs against Odoo"]
    K -->|"Yes"| W{"Is it a write?
create, write, unlink,
execute, import"} W -->|"No"| E W -->|"Yes"| R["Refused before
anything reaches Odoo"]
Diagram 10. Read-only mode is the basis of the recommended pilot: the refusal happens in the MCP server, before any RPC call.

Installing as a Claude Code plugin

The plugin installs from the repository marketplace (/plugin marketplace add Transgenia/MCP-Odoo-Tools-CE-EE-and-online and /plugin install odoo-tools). The server starts with python3 (3.9+) from the bundled source, downloading and installing nothing. The odoo-setup-mcp skill walks through the initial configuration: instance URL, credentials and automatic version detection. The Odoo tools run as a local stdio MCP server in Claude Code, which prompts for the configuration values (or set them with /plugin configure). They do not run in Cowork or the Claude chat: Cowork ignores this server because its required options have no default and Cowork doesn't prompt for values, whether the session runs in the cloud or on your computer; the Claude chat ignores a plugin's local MCP server. Both load the plugin's skills and commands, but not this local MCP server. For Cowork and the Claude chat, the practical route is a remote connector: an https URL to an MCP server in your Odoo, with sign-in through Odoo. Verified on October 21, 2026 against Anthropic's official matrix.

The plugin also includes:

Marketplace note: Version 1.4.0 is listed in Claude's plugin directory and also installs from Transgenia's repository; being in the directory does not mean Anthropic certifies or audits it.

Diagram 11. Installation in five steps, from the repository marketplace to automatic version detection, and where it runs: Claude Code runs the MCP server over stdio; Cowork (in the cloud or on your computer) and the Claude chat load skills and commands, but not this local MCP server, and for the Odoo tools their practical route is a remote connector to an MCP server in your Odoo, with sign-in through Odoo.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart TD
    A["/plugin marketplace add
Transgenia/MCP-Odoo-Tools-CE-EE-and-online"] --> B["/plugin install odoo-tools"] B --> C["python3 3.9 or later
nothing downloaded"] C --> D["odoo-setup-mcp skill
instance URL and credentials"] D --> E["Automatic version
and edition detection"] E --> F{"Where does the client run?"} F -->|"Claude Code"| G["Local MCP server
over stdio"] F -->|"Claude chat and Cowork
(in the cloud or on your computer)"| H["Loads skills and commands,
not this local MCP server"] H -.->|"practical route for
the Odoo tools"| R["Remote connector: https URL
to an MCP server in your Odoo,
with sign-in through Odoo"]
Diagram 11. Installation and execution scope. The server is local by design; Cowork and the Claude chat do not load this local MCP server, so for them the practical route is a remote connector.

What is intentionally excluded from the public layer

The public version contains the generic core. What we deliberately left out:

These layers make sense only in the context of a supervised implementation. The public core is genuinely useful on its own: they are not "cut" features to sell upgrades, but capabilities that require an onboarding process with the team.

For more context on the base API Key layer before the plugin, Connect Odoo to Claude with an API Key and Build Views Without Python covers the baseline options and their real limitations.

Diagram 12. Two blocks: the public core under MIT with the 28 tools, compatibility layer, transports, skills, agents and CLI; and the supervised implementation layers with the CFDI and SAT fiscal layer, VoBo middleware, S3 backup and invoice vision.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart LR
    subgraph P["Public core, MIT license"]
        P1["28 tools"]
        P2["Compatibility layer 10 to 19"]
        P3["Three transports"]
        P4["Skills, agents and CLI fallback"]
    end
    subgraph S["Supervised implementation"]
        S1["MX fiscal layer, CFDI and SAT"]
        S2["VoBo middleware"]
        S3["S3 backup"]
        S4["Vision and invoice parsing"]
    end
    P -->|"requires onboarding with the team"| S
Diagram 12. Public and supervised. The core is useful on its own; the layers on the right depend on an onboarding process, not on a commercial lock.

Why open source and why MIT

There is a pragmatic argument: a closed MCP server creates vendor dependency. If the pricing changes, the business model shifts, or the company disappears, the AI agent stops working. With open source (MIT), the company owns the code, can self-host it, and can hire any provider to maintain it. The plugin keeps working even if Transgenia does not exist tomorrow.

There is also an ecosystem argument: the more companies contribute to an Odoo MCP server, the more robust it becomes for everyone. The compatibility layer covers Odoo 10-19 today; the community can extend it to future versions without waiting for any specific vendor to do it.

We chose MIT over AGPL so companies can integrate the plugin into their proprietary stacks without copyleft restrictions. Copyleft has its place; here we prioritized adoption.

Diagram 13. Comparison: a closed MCP server stops working if pricing changes, the business model shifts or the vendor disappears; under MIT the company owns the code, can self-host it, any provider can maintain it and it fits proprietary stacks without copyleft.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart TD
    C["Closed MCP server"] --> C1["Pricing changes"] --> X["The agent stops working"]
    C --> C2["Business model shifts"] --> X
    C --> C3["Vendor disappears"] --> X
    M["MCP-Odoo-Tools, MIT license"] --> M1["The company owns the code"]
    M --> M2["Can self-host it"]
    M --> M3["Any provider can maintain it"]
    M --> M4["Fits proprietary stacks
without copyleft"] M1 & M2 & M3 & M4 --> Y["Keeps working
even if Transgenia is gone tomorrow"]
Diagram 13. The pragmatic license argument. MIT instead of AGPL: adoption was prioritized over copyleft here.

Verified technical quality

The plugin ships with complete CI:

Diagram 14. Five-stage CI pipeline: 27 unit tests, ruff on Python 3.11 and 3.12, TypeScript CLI build, real MCP handshake listing 28 tools and an Odoo Community matrix from 10.0 to 19.0 with ten versions green.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart LR
    A["27 unit tests
compatibility, transport, cache"] --> B["ruff
Python 3.11 and 3.12"] B --> C["TypeScript CLI
builds without errors"] C --> D["Real MCP handshake over stdio
lists all 28 tools"] D --> E["Odoo Community matrix 10.0 to 19.0
ten versions green, 5 Oct 2026"] E --> F(["Version 1.4.0 released"])
Diagram 14. What runs before each release. The live version matrix is the stage that backs the 10 to 19 compatibility promise.

How to get started

If you have Odoo and want to explore AI agent integration, the recommended path has three steps:

  1. Instance diagnostic: version, edition, installed modules and flows that are candidates for AI automation.
  2. Read-only pilot: turn on the plugin's Read-only mode (odoo_readonly option), which makes the server refuse every write, and validate that responses are correct before touching production data.
  3. Governance before writes: human review of every write (VoBo) is not part of the public core; it is a layer of the accompanied implementation, configured with Transgenia's team before enabling writes in production.

If you want to see the stack in real operation before deciding, our sector-specific demo shows agents working on clinic and wholesale distributor data using the same MCP protocol.

→ See the demo →

Diagram 15. Three-step adoption path: instance diagnostic, read-only pilot with odoo_readonly and VoBo governance before enabling production writes; if the pilot gives wrong answers, back to the diagnostic.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart LR
    A["1. Diagnostic
version, edition, modules and flows"] --> B["2. Read-only pilot
odoo_readonly on"] B --> C["3. VoBo governance
human review of every write"] C --> D["Writes in production"] B -.->|"if answers are not correct"| A
Diagram 15. The recommended path. VoBo is not part of the public core: it is configured with Transgenia's team before the first production write.

Frequently asked questions

Is MCP-Odoo-Tools free?

Yes. The public layer is MIT-licensed and has no cost. You can install and configure it yourself from the GitHub repository. The MX fiscal layer (CFDI/SAT), write governance middleware (VoBo) and other advanced components are available in Transgenia's supervised implementation packages.

Which Odoo versions are supported?

Odoo Community, Enterprise and online (SaaS) from version 10 through 19. The compatibility layer automatically resolves differences in model and field names across versions, including renames like account.invoice → account.move in v13 and other changes in later versions.

Does it work only with Claude or with other AI agents?

With any agent that implements the Model Context Protocol (MCP), the open specification published by Anthropic. Claude Code is the reference environment for which the plugin is packaged, but the server exposes a standard interface compatible with other MCP clients.

Does the plugin send my company's data to Transgenia's servers?

No. The MCP server runs on your machine (or on the infrastructure you choose) and communicates directly with your Odoo instance. Transgenia receives, proxies and retains no data from the plugin: not your credentials, not your records, not your prompts. The results Odoo returns do travel to your MCP client and from there to the model provider you use (for example Anthropic for Claude), as with any tool; that leg is governed by your Odoo's and your AI provider's terms, not by Transgenia.

Is it approved by Anthropic as an official plugin?

Not yet. The plugin is open source and distributed from Transgenia's own repository. Version 1.4.0 is listed in Claude's plugin directory and also installs from Transgenia's repository; being in the directory does not mean Anthropic certifies or audits it. Transgenia is a registered partner in Anthropic's Claude Partner Network, which means Anthropic recognizes us as a partner, not that the plugin is certified or audited by them. The distinction matters: the code is open and auditable by anyone.

Diagram 16. Data flow: inside your infrastructure the MCP client talks to MCP-Odoo-Tools over stdio and the server talks to your Odoo over RPC; the client exchanges prompts and results with the model provider; Transgenia stays outside the flow.
View Mermaid diagram
%%{init: {'theme': 'dark', 'themeVariables': {'primaryColor': '#1a2035', 'primaryTextColor': '#FFFFFF', 'primaryBorderColor': '#FBA225', 'lineColor': '#FBA225', 'background': '#0B0D17', 'mainBkg': '#0E1220', 'fontFamily': 'Inter, Arial, sans-serif', 'fontSize': '14px', 'edgeLabelBackground': '#0E1220', 'clusterBkg': '#101828', 'clusterBorder': '#FBA225'}}}%%
flowchart LR
    subgraph T["Your infrastructure"]
        M["MCP client"] <-->|stdio| S["MCP-Odoo-Tools"]
        S <-->|"JSON-2, JSON-RPC or XML-RPC"| O["Your Odoo instance"]
    end
    M <-->|"prompts and results"| P["Model provider
for example Anthropic with Claude"] X["Transgenia
outside the data flow:
receives no credentials, records or prompts"]
Diagram 16. Visual answer to the privacy question. The hop to the model provider exists as with any tool and is governed by its terms, not by Transgenia.

About the author and Transgenia

Efraín Carreón Ortiz is CEO of Centrum Transgenia, a Mexican technology boutique. He holds the official Claude Code badge (Claude Partner Badge) issued by Anthropic, verifiable on Credly.

Transgenia is an OpenAI Select Partner within the OpenAI Partner Network and a registered partner in Anthropic's Claude Partner Network. We operate twelve governed AI agents in our own production environment and accompany verifiable implementations in the healthcare and B2B sectors.

Let's talk: LinkedIn, 15-minute agenda or our contact page.

Keep reading

← Back to Blog
Transgenia, Verified IT agency on Vai.me