Available now · Version 1.1 · Odoo 19

Let AI act in your Odoo. And prove what it did.

The enterprise MCP server for Odoo: every AI action verified, governed, audited.

An AI can write to the wrong record and report success. Nothing errors. Nobody notices. The Execution Layer ends that: every action is read back from the database and proven before it says done, and your rules run on the server, not in a prompt.

An installed MCP server for Odoo 19. Any client connects: Claude, ChatGPT, Cursor. Self-hosted and Odoo.sh, Community and Enterprise. Installs read-only; writes stay off until you allow them. New in 1.1: governed messaging, Discuss to WhatsApp.

The Execution Layer dashboard in Odoo 19: tiles for actions, verified writes, refusals, failures, pending approvals and alerts, above a live feed of what AI did today and a refusals-by-code panel.
Real product · demo data
Execution Layer for Odoo: AI writes with approvals and proof 0:57

Real Execution Layer screens and real MCP responses on a demo database (Odoo 19). One client reference is blurred. Transcript and details

See it in under a minute

An AI asks. A person approves. The database proves it.

Real screens and real MCP responses on a demo database: the approval, the verified receipt, the record history, a message that waits for a person, and a user switched off at once.

Read the transcript
  1. Execution Layer for Odoo: An AI is asking permission.
  2. Execution Layer: Nothing has happened yet. Request: update_records res.partner 12 customers payment term: 30 Days.
  3. A person approves, in Odoo: Bound to the exact change.
  4. Read back from the database: Verified. Request: update_records (identical arguments).
  5. The Action Receipt: Executed · Persisted · Verified · Recorded.
  6. Evidence · record history: Every change, before and after.
  7. It can message too: Nothing sends until a person confirms. Request: send_message #Sales updates "Reminder: launch checklist review at 3pm today.".
  8. Sent, and marked as AI: The words confirmed are the words sent.
  9. Every user as themselves: Switch one person off.
  10. The same key, seconds later: Refused at once. Request: count_records (Ana's existing key).
  11. AI that proves what it did. The enterprise MCP server for Odoo 19. nanti.ai/execution-layer Available now for Odoo 19 · USD 499 one-time · Odoo 20 support in progress · real product, demo data.
Execution Layer for Odoo: AI writes with approvals and proof 0:57 · sound on
Real Execution Layer screens and real MCP responses on a demo database (Odoo 19). One client reference is blurred.

The failure nobody sees

It did the wrong thing. And reported success?

The dangerous failure isn’t the error. It’s the write that goes wrong quietly: technically valid, confidently reported, found weeks later. Reviewing the plan can’t catch it. It happens during execution.

  • the wrong record
    ChatGPT on a standard Odoo MCP

    Put Riverside Foods on 45-day payment terms.

    update_record res.partner 1 record updated

    Done. Riverside Foods is now on 45-day payment terms.

    What the database says

    It landed on res.partner/1042, Riverside Cafe. Similar name, different customer. Valid, so nothing flagged it. It surfaces weeks later, in an invoice dispute.

    With the Execution Layer

    AMBIGUOUS_TARGET Two partners match “Riverside”. The write is refused, with both candidates, until a person picks one. Then it executes, reads back, verifies, and receipts.

  • the partial read
    Claude on a standard Odoo MCP

    How many invoices are overdue right now?

    search_records account.move 14 rows

    You have 14 overdue invoices, totalling $18,290.

    What the database says

    23 are overdue. The tool returned a page of 14 and never said so, so the model answered from a partial list. It surfaces at month close, as a number that won’t reconcile.

    With the Execution Layer

    truncated: true The read comes back flagged: truncated, 14 of 23. The agent pages through the rest and answers from all 23, or says it couldn’t.

Illustrative sessions on sample data. Any model on any standard MCP can fail this way, because nothing in that pipeline checks what actually happened. The “with” outcome is shipped behaviour: built, running, and shown screen by screen below.

The first question to ask before you let AI touch your ERP: how do I know it did what it claims? A standard MCP can’t answer that. Answering it is the whole product.

What this is

Not another MCP. An execution layer.

Every MCP product on the market answers “can the AI reach Odoo?”. This one answers the question enterprises actually ask: did it do the right thing, with permission, and can you prove it afterwards? AI on a business system is three different jobs, and reach is only the first.

  • Standard MCP transport

    Moves requests and records between the AI and Odoo. Necessary, nothing more. It can’t say what a field means, or prove what a write did.

  • Context Layer meaning

    The verified meaning before the action: which records count, which fields mislead, whether the intent is safe. The one add-on, live on Odoo 19.

  • Execution Layer proof

    Validates, executes, reads back, verifies, and receipts every action. Your rules enforced on the server. This page. Available now: one module, $499 once.

  • 1validated pipeline, no fast path
  • 20MCP tools: 13 read · 7 write, messaging included
  • $499once, everything included
  • C + EOdoo 19 Community and Enterprise

A standard MCP moves data. The Execution Layer proves what happened.

With its sibling, the Context Layer for Odoo, the pair closes the loop around every AI action: meaning before the action, proof after it. What follows is not a mockup reel. It is the real module, screen by screen.

Screen 01 · Evidence

See everything, at a glance.

The dashboard answers "what did AI do in my Odoo today": actions, writes with their verified count, refusals, failures, pending approvals, alerts. Every tile opens the filtered list behind it, and the live feed carries a receipt id on every verified write.

Screen 02 · Verified writes

Every write returns a receipt.

Executed, Persisted, Verified, Recorded: a write is run atomically, committed, read back from the database, compared field by field against the intent, and stored as an immutable Action Receipt, with the exact JSON the AI client got back. A success message is a claim. This is proof.

Screen 03 · Structured refusals

When it refuses, it says why.

Every refusal is one of 42 structured codes the AI can act on, plus a plain-language "Why" panel a person can read, plus a pointer to the exact screen where you would change the rule. Never a silent failure, never prose a model can argue with.

Screen 04 · Approvals

Risky actions wait for a person.

Seven risk classes ship, five on for everyone: deleting anything, mass updates, validating invoices or bills, confirming orders, outbound mail, plus two that gate AI messaging per user. A matching call stops and lands here, bound to the exact payload. Approving releases exactly that action; anything different is refused as stale.

Screen 05 · Permissions

Permission only ever narrows.

Each user connects as themselves, over OAuth. What their AI may touch is their own Odoo rights, narrowed by a role bundle, narrowed again by the connection. This cockpit shows who may do what, and a per-user off switch cuts existing tokens the moment you flip it.

Screen 06 · Governance

Your rules run on the server.

Risk classes, required fields, and preconditions read back as plain sentences and are enforced where a prompt cannot reach. A dry-run simulator proves a rule does what you meant, as any user, before you trust it with production.

Screen 07 · Record history

Ask any record what AI did to it.

Field-level before and after for every AI touch, in order, hash-chained and guarded by a database trigger. "What happened to this customer" is one search, not an afternoon of grepping logs, and AI clients can read the same history through an audited tool.

Screen 08 · Setup

Read-only until you say otherwise.

It installs unable to write and already recording. The built-in Setup guide takes about 15 minutes: pick a starting bundle, connect an AI client with a copy-paste snippet, run a first governed read. Writes stay off until an administrator turns them on.

Install and first run, in the docs →

Every screen above is the real module, captured on a live Odoo 19 Enterprise instance with a seeded, fictional demo company. Counts are demo traffic, not customer data, and the demo company name is redacted from the window chrome. The complete walkthrough, all screens included, lives in the docs.

New in 1.1 · Messaging

Your AI can message people now.

Discuss channels, direct messages, record chatter, and WhatsApp, driven through Odoo’s own WhatsApp integration and your own Meta business account. AI that reaches people is the scariest capability in this category, which is exactly why it ships the safest way we know: by default, nothing sends until a person reads the exact words and says yes.

As of September 2026, this is the only Odoo MCP server we know of that can send messages at all, let alone under server-side permissions, previews, and approvals. Know a counterexample? hello@nanti.ai.

Every internal message carries the mark: 🤖 AI message · which client · sent as which user. Colleagues always see a machine wrote it, and under whose account.

Per user, per channel. Off · Confirm each message (the default) · Approval in Odoo · Unrestricted, set separately for Discuss and WhatsApp.
Every send, on the record. Destination, reach, preview, and the human gate each message passed: confirmed, approved, or unrestricted.
  • Nothing sends silently

    The default level is Confirm each message: the AI’s send comes back unsent, with the exact preview and a one-time token bound to those exact words. Change one word and the token dies.

  • The words are provable

    The message a person confirmed is provably the message that went out: the receipt re-reads the stored message after commit and fails closed on any mismatch.

  • Approvers read the real body

    At the approval level, sends queue through the same payload-bound approvals as destructive writes, and the approver reads the actual message, not a hash of it.

  • Recipients are bounded

    The AI posts only into conversations its user belongs to, direct-messages internal users only, and never guesses an ambiguous name: it refuses, with the candidates.

  • WhatsApp, the careful way

    Off by default. Meta-approved templates first; free-form replies only inside an open 24-hour window, behind their own switch; bulk sends need approval no matter whose level.

  • No side door

    The generic write tools refuse the message models entirely. Hourly rate caps apply per user, every send lands in the message log and the audit, and an alert can fire on each one.

Honest limits: the messaging tools send; they do not read message contents (conversation lists are metadata only). WhatsApp bodies carry no AI mark to the customer: attribution lives in Odoo, the message log, and the audit. And if you enable WhatsApp, message content reaches Meta through Odoo’s own WhatsApp integration and your own Meta business account, the same channel a person would use; the Execution Layer itself never talks to Meta.

Messaging, screen by screen, in the docs →

For the MCP shortlist

Yes, it’s an Odoo MCP server.

Any MCP client connects: Claude, ChatGPT, Cursor, your own stack. But “speaks MCP” is the floor. What separates one Odoo MCP server from another starts after the protocol: whose identity the AI acts under, what needs approval, and what you can prove afterwards.

What is MCP? The open standard that connects AI clients to business systems: one protocol, any client, any system. It’s genuinely good, and we implement it fully: 20 tools, OAuth 2.1 sign-in, copy-paste setup for Claude Code, Claude Desktop, ChatGPT, Cursor, and any generic client. But a standard MCP server only answers “can the AI reach Odoo?”. The Execution Layer also answers “did it do the right thing, with permission, and can you prove it?”. Everything MCP promises, everything enterprises require. On why reaching Odoo is the easy half, there is a founder note: connecting Odoo to AI is the easy half.

MCP alone
With the Execution Layer
Any AI client connects over MCP
the protocol’s job
same, through one validated pipeline
Each user under their own Odoo identity
not part of the protocol
OAuth, by construction
Destructive actions need approval
not part of the protocol
prepare → approve → execute
A write is proven, not just reported
a success response is trust
read back from the database
What happened is auditable later
whatever your logs kept
Action Receipt, before and after
The AI can message people, governed
not part of the protocol
Discuss · chatter · WhatsApp, gated
Failures and truncation are explicit
prose, if anything
structured codes and flags

MCP standardizes the transport. Everything in the right column is what we build on top of it, and it’s our honest answer to “which Odoo MCP server is safe to trust”: the one that can prove what happened. On Odoo Online, where custom modules can’t be installed, Odoo’s own native MCP server is the option.

How a write flows

Every action comes back as evidence.

One validated pipeline for every tool call. No fast path around it. A write isn’t “sent”: it’s executed, committed, read back, verified, and receipted. Re-reading the committed row, the check this is built around, is the rarest one in the category: we counted, in the Odoo AI write-verification census. Walk one through the chain.

Validated, then executed atomically

Checked against your preconditions and the user’s own permissions, then run inside an atomic transaction. Batches are all-or-nothing, and an idempotency key rides along, so a timeout and retry executes once, not twice.

Action Receipt · the chain
actionwrite · res.partner/1042 · payment terms intent“set 45-day terms on Riverside Foods” keyidem_9f2c41 · retries execute once
  • executed atomic transaction, preconditions passed
  • persisted committed to the database
  • verified read back from the DB = declared intent
  • recorded before “30 days” → after “45 days” · rcpt_84h2

A schematic, so you can walk the chain. The real receipt screen is in the tour above.

Reads are covered too: every bounded read carries a truncation flag, so a partial list can’t pose as a complete one. And every failure is a machine-readable code an agent can act on, never prose to misread.

Structured failure codes include AMBIGUOUS_TARGETAPPROVAL_REQUIREDPRECONDITION_FAILEDVERIFICATION_FAILEDIDEMPOTENCY_CONFLICT

Watch it hold

Real sessions. Real responses.

Claude pushed to do risky things, an instruction planted in a customer note, seven refusals, one receipt read field by field, an auditor's view, and a real sign-in. All recorded on a demo database.

Every video, with transcripts

Dependability

Built to be trusted. Shipped to be tested.

Trust is earned in the boring places: what happens when Odoo changes, what happens when things fail, and whether you can read what you’re running.

  • Compatibility, in writing

    Supported Odoo versions are stated plainly: Odoo 19, Community and Enterprise, self-hosted and Odoo.sh. Updates within your Odoo major are included with the module, and when a new major arrives, existing customers upgrade at half price.

  • Drift, detected

    Every toolset carries its version and a schema hash, so a changed Odoo or a changed toolset is detected at the handshake, not discovered in production.

  • A failure suite that ships

    The product is gated on 70+ adversarial failure scenarios, the exact failures it exists to catch: partial writes, retried duplicates, batch rollbacks, ambiguous targets, truncated reads, audit tampering, OAuth abuse, injection stored in record text. They run green on Odoo 19 Community and Enterprise on every release, and the suite ships with the product: point it at your own staging database and read your own report. It prints passed, failed, and not run with the reason, because a not-run line is not a pass.

  • Code you can read

    The modules are source-available inside your own installation. You can read what you’re trusting with your ERP.

Security posture

What we give you instead of a once-a-year report.

We have not commissioned a third-party penetration test, and we will not claim one. We think that report would tell you less than what we give you instead.

  • The enterprise modules are source-available in your own installation. You read what you run.
  • The threat model is published with the control and the test case for every attack path.
  • The same cases we gate our releases on ship with the product, so you run the adversarial failure suite against your own staging database and read your own result: on your data, on your Odoo version, on every release, rather than once a year. The report is three parts, passed, failed, and not run with the reason, because a not-run line is not a pass.

Found something? Vulnerability reports go to hello@nanti.ai. We acknowledge within two business days, and fixes ship as point releases.

The price of proof

One module. $499. Once.

One module, one price, everything in it. USD 499, one-time, per Odoo major version: the MCP server, verified writes with Action Receipts, governance, approvals, governed messaging from Discuss to WhatsApp, the immutable audit, and the semantic registry. Updates within the major and standard support included. No tiers, no seats, no metering, no annual lock-in.

Execution Layer for Odoo

USD 499 one-time · per Odoo major version

  • The governed MCP server: per-user OAuth 2.1 identity, scoped API keys, 20 tools, fail-closed by construction
  • Verified writes: atomic execution, database read-back, field-by-field verification, idempotency keys, stored Action Receipts
  • Governance: role bundles, per-model and per-field policy, required-for-AI fields, preconditions, export controls
  • Approvals: risk classes, payload-bound requests, separate approvers, expiry
  • Messaging: Discuss, record chatter, and WhatsApp through Odoo’s own integration, confirm-by-default with payload-bound previews, per-user levels, and a message log of every send
  • Evidence: the immutable hash-chained audit, before and after snapshots, per-record history, alert rules, the evidence dashboard
  • Meaning: the semantic registry, deterministic disambiguation, and the built-in Context Layer client, ready to activate

Updates within the Odoo major and standard support included. When a new Odoo major arrives, existing customers upgrade at half price.

Two ways to buy, same module, same price: write to us and we hand you the module and the invoice, or buy on the Odoo Apps Store. It installs like any Odoo addon; setup takes about 15 minutes.

Context Layer for Odoo · the one add-on

The one add-on: verified business meaning, served to your AI before it acts. A cloud subscription activated inside the module with a key; only your schema and business terms ever leave the server, never records.

  • Up to 20 internal users $490 / year
  • Up to 100 internal users $990 / year
  • Up to 300 internal users $1,990 / year

Lapse-safe: if the subscription ends, the Execution Layer keeps working and cached meaning keeps serving. Nothing is crippled.

The subscription is this add-on only. The Execution Layer itself is $499, once.

Free for the first 7 days: the full trial starts itself on first activation, no card

The terms, plainly

  • USD 499 buys the whole module, once, for the Odoo major you run. Updates within that major and standard support are included; when you move to a new Odoo major, existing customers upgrade at half price.
  • Buy it whichever way suits you: direct from nanti.ai (write to hello@nanti.ai and we hand you the module and the invoice) or on the Odoo Apps Store. Same module, same price. It installs like any Odoo addon, and setup takes about 15 minutes.
  • It installs read-only and is already recording: AI cannot write anything until an administrator turns writes on.
  • Everything runs inside your own Odoo, self-hosted or Odoo.sh, Community or Enterprise. Your records never leave your server, and the module never phones home. (Enable WhatsApp and message content goes to Meta through Odoo’s own WhatsApp integration and your own Meta business account, the same channel a person would use; the Execution Layer itself never talks to Meta.)
  • The Context Layer add-on is optional, annual, per production database, and lapse-safe: if it ends, the module keeps working unchanged.

The full legal terms for this product, written to be read: Execution Layer terms.

Straight, as always

What you get. What we don’t claim.

Version 1.1, one complete release, available now. The screens above are the proof for the left column. The right column is the honesty that makes the left believable.

What you get today
  • One module with everything in it, running now on Odoo 19 Community and Enterprise, self-hosted and Odoo.sh: verified writes, governance, approvals, evidence, meaning
  • Installs read-only and already recording: AI cannot write anything until an administrator turns writes on
  • 20 MCP tools, 42 structured error codes, four access levels, six shipped role bundles, seven shipped risk classes, per-user messaging levels, and a per-user off switch that cuts live tokens instantly
  • An immutable, hash-chained audit with before and after values on every write, per-record history, export trails, and alert rules that notify people over email, webhook, or an Odoo activity
  • Governed messaging, new in 1.1: Discuss, record chatter, and WhatsApp through Odoo’s own integration, confirm-by-default with payload-bound previews, per-user levels, and a message log of every send
  • Proven by 70+ adversarial failure scenarios, green on both editions every release; the suite ships with the product, so you run it on your own staging and read your own report
  • Nothing to pip install: it runs on standard Odoo, the official Docker image, and Odoo.sh, and its endpoints live under /nanti/ so it coexists with any other MCP module
What we do not claim
  • No third-party penetration test, and no claim of one. What we offer instead is verifiable rather than attested: the source you run is the source you can read, the threat model is published, and the failure suite is in your hands
  • We verify persistence and permissions, never the AI’s judgment. An authorized but wrong-headed action still executes, and the receipt proves exactly what it did; the rules you write are what stop it
  • No Odoo Online: custom server modules cannot be installed there, and Odoo’s own native MCP server covers that tier
  • The messaging tools send; they do not read message contents. WhatsApp bodies carry no AI mark to the customer: attribution lives in Odoo, the message log, and the audit
  • The Context Layer add-on is optional and lapse-safe: if the subscription ends, the module keeps working and cached meaning keeps serving. Nothing is crippled to sell an upgrade

Plain answers

Asked, answered.

What is the Execution Layer for Odoo?

It is an enterprise execution control layer between AI and Odoo, available now for Odoo 19. Every AI action runs through one validated pipeline: the request is checked against your rules and the user’s own permissions, executed atomically, read back from the database, verified against the intent, and recorded with before and after evidence. The result of every write is an Action Receipt: Executed, Persisted, Verified, Recorded. It can message too: Discuss, record chatter, and WhatsApp, with nothing sent until a person confirms or approves the exact words. It ships as one installable module at USD 499 one-time, everything included, and it installs read-only: AI cannot write anything until an administrator turns writes on.

Is the Execution Layer for Odoo an MCP server?

Yes, a complete one. The Execution Layer speaks MCP, the open standard we implement fully, so any MCP client connects to it: Claude, ChatGPT, Cursor, or your own agent stack. It is an installed MCP server inside your own Odoo 19, self-hosted or Odoo.sh, exposing 20 tools: 13 reads and 7 writes, from record CRUD and atomic batches to governed messaging and the record-history evidence tool. The difference from a standard MCP server is everything enforced around every call: per-user identity, approvals, verification against the database, and an immutable audit. MCP is the transport; the product is the proof.

How is it different from a standard MCP server?

A standard MCP moves data: it gives an AI reach into Odoo. The Execution Layer proves what happened. It wraps every action in validation, atomic execution, database read-back, verification, and an immutable audit record, and it enforces your approval rules and preconditions on the server, where a prompt cannot reach. A standard MCP answers "can the AI touch Odoo". The Execution Layer answers "did it do what it claims, and was it allowed to".

What should we look for in a safe, auditable MCP server for Odoo?

Five things, whichever product you choose. Each user acting under their own Odoo identity, never a shared key. Server-side approvals for destructive actions. Writes verified by reading the database back, not assumed from a success response. An immutable audit with before and after values. And structured, machine-readable failures, including explicit truncation flags on reads. The Execution Layer for Odoo is exactly that list, available now on Odoo 19 Community and Enterprise. On Odoo Online, where custom modules cannot be installed, Odoo’s own native MCP server is the option.

Which MCP server is best for Odoo?

It depends on what you need, honestly. On Odoo Online, Odoo’s own native MCP server is the natural start. For personal and developer use, the free community gateways are excellent. For business use, judge every candidate on the criteria that matter once an AI can write to your ERP: verification by database read-back, idempotency on retries, atomic batches, approval workflows, an immutable before-and-after audit, and alerting. We keep an honest, dated comparison of the field at nanti.ai/odoo-mcp-servers, including where our own Execution Layer fits.

What is a verified write, and what is an Action Receipt?

A verified write is a write that is executed inside an atomic transaction, then read back from the database and compared field by field against the declared intent before success is ever reported. The Action Receipt is the record of that chain, Executed, Persisted, Verified, Recorded, carrying the before and after values. If any step fails, the AI receives one of 42 structured, machine-readable error codes, never a success message and never prose.

Can the AI delete or mass-update records without approval?

Not unless a person lets it. Seven risk classes ship: five enabled for everyone by default (deleting anything, mass updates of ten or more records, validating invoices or bills, confirming orders, sending outbound mail), plus two that catch AI messaging, Discuss and WhatsApp, for users you put on the approval level; bulk WhatsApp sends need approval no matter whose level. A matching call stops with APPROVAL_REQUIRED and lands in the Approvals queue, bound to the exact payload. A person approves or denies it; after approval, only the identical retry executes, and anything different is refused as stale. The approver can be a different person than the one who asked.

Is there an audit trail with before and after values?

Yes. Every action lands in an immutable, hash-chained audit record with before and after snapshots, so you can open any record and see everything AI ever did to it, in order; AI clients can read the same history through the get_record_history tool, and that read is itself audited. Exports get their own trail, and alert rules can notify people over email, a webhook, or an Odoo activity when something worth attention happens: a log that finds you, not a log nobody opens.

What stops a retried request from creating duplicates?

Idempotency keys. Every write can carry a key scoped to the database, the user, and the tool, so a timeout followed by a retry replays the original receipt and executes once, not twice; a different payload under the same key is refused as IDEMPOTENCY_CONFLICT. Batches are all-or-nothing by default: either the whole batch persists or none of it does.

Does each user keep their own permissions?

Yes, and the AI can never exceed them. Each user connects under their own Odoo identity through OAuth 2.1, so a shared service account is impossible by construction. The effective permission is the intersection of the user’s own Odoo rights, their role bundle, the connection’s level, and the token scope: every layer only narrows. An administrator can also switch any single user to No access, which instantly refuses that user’s existing tokens and any new sign-in.

Does our data leave our server?

No. The Execution Layer is an installed Odoo 19 module that runs on your own server, self-hosted or on Odoo.sh, and it never phones home. Where the optional Context Layer add-on is activated, only your Odoo version and edition, installed module names, model and field names, and business terms leave the server, never records, and every outbound call is itself recorded in Evidence. One honest nuance: if you enable WhatsApp messaging, the message content and recipient number go to Meta through Odoo’s own WhatsApp integration and your own Meta business account, exactly as when a person sends one; the Execution Layer itself never talks to Meta.

Does it work on Odoo Online?

No. It is an installed module for self-hosted Odoo and Odoo.sh, Community and Enterprise, on Odoo 19. Odoo Online does not allow installing custom server modules, and Odoo Online users have Odoo’s own native MCP server instead.

Which AI clients work with it?

Any MCP client. The Setup guide ships copy-paste connection steps for Claude Code, Claude Desktop, ChatGPT, Cursor, and any generic MCP client. The layer sits between the AI and Odoo, so the model and the client stay your choice, and the validated pipeline is the same for every one of them. There is no fast path around it.

Can the AI send messages from Odoo? Even WhatsApp?

Yes, new in version 1.1. The Execution Layer gives AI clients governed messaging: Discuss channels, group chats and direct messages to internal users, notes and comments on any record’s chatter, and WhatsApp, driven through Odoo’s own Enterprise WhatsApp integration and your own Meta business account. WhatsApp is off by default and template-first: only Meta-approved templates send, free-form replies are a separate switch that works only inside an open 24-hour customer window, and bulk sends need approval no matter who asks. As of September 2026, this is the only Odoo MCP server we know of that can send messages at all, let alone under server-side permissions, previews, and approvals.

What stops AI messaging from going wrong?

Layers, all on the server. By default every user is on Confirm each message: the AI’s send comes back unsent, with the exact preview and a one-time token bound to those exact words, so the message a person confirms is provably the message that goes out; change one word and the token dies. Stricter users route through the approval queue, where the approver reads the actual message body before releasing it. Recipients are bounded: the AI can post only into conversations its user belongs to, direct-message internal users only, and never guess an ambiguous name. Hourly rate caps apply per user, every internal message carries a visible AI mark naming the client and the acting user, and every send lands in the message log with the human gate it passed. The messaging tools never read message contents, and the generic write tools refuse the message models entirely, so there is no side door.

What does the Execution Layer for Odoo cost?

USD 499, one-time, per Odoo major version, with everything included: the MCP server, verified writes and Action Receipts, governance, approvals, the immutable audit, and the semantic registry. No tiers, no seats, no metering. Updates within the Odoo major and standard support are included, and existing customers move to the next Odoo major at half price. The one add-on is the Context Layer for Odoo, verified business meaning as a subscription: USD 490 a year up to 20 internal users, 990 up to 100, 1,990 up to 300, per production database, with a 7-day full trial that starts itself on first activation.

What happens if we stop paying for the Context Layer add-on?

The Execution Layer keeps working, unchanged. The Context Layer is advisory meaning on top: if the subscription lapses, the connection honestly shows degraded or not connected, cached meaning entries keep serving, and nothing in the module is crippled. The pipeline never waits on the Context Layer, and the one-time module purchase is yours regardless.

How is it tested? Can we check it ourselves?

Both. The product is gated on 70+ adversarial failure scenarios, the exact failures it exists to catch: partial writes, retried duplicates, batch rollbacks, ambiguous targets, truncated reads, audit tampering, OAuth abuse, and prompt injection stored in record text. They run green on Odoo 19 Community and Enterprise on every release, and the suite ships with the product so you can run it against your own staging database and read your own report. We have not commissioned a third-party penetration test and we do not claim one; what we offer instead is verifiable rather than attested: the source you run is the source you can read, the threat model is published, and the failure suite is in your hands.

Is it available now, and how do we get it?

Yes, two ways. Version 1.1 is complete and available now, direct from nanti.ai (write to hello@nanti.ai and we hand you the module and the invoice) or on the Odoo Apps Store; it is the same module at the same price either way. You install it like any Odoo addon, open the Execution Layer app, and follow the built-in Setup guide; setup takes about 15 minutes. It installs read-only and is already recording, and writes stay off until an administrator turns them on. We recommend installing on a staging database first, like any module that will touch production.

Available now

Know what your AI did.

One module, $499 once, everything included. Install it read-only on a staging database, run the failure suite, read your own report, and turn on writes when the evidence convinces you. That is how we would buy it too.