odoo-safe-mcp
Provides a deterministic security firewall between AI agents and Odoo ERP (v14 to v19+), using Odoo's JSON-RPC/XML-RPC API for safe reads and guarded/approval-gated writes. Enforces traffic-light policies: GREEN read methods execute instantly; YELLOW draft creations are audited; RED destructive methods (unlink, action_post, action_confirm, button_validate, write on account.move) pause for human approval; BLACKLIST mutations on sensitive models are blocked.
Sends interactive Approve/Reject buttons to Slack for RED critical Odoo operations, enabling human-in-the-loop authorization before destructive or accounting-sensitive mutations are executed.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@odoo-safe-mcpShow me all unpaid customer invoices from last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π‘οΈ Odoo Safe MCP β The AI Firewall for Odoo ERP
Connect AI Agents (Claude Desktop, Cursor, n8n, LangChain) to Odoo ERP (v14 to v19+) without risking accounting disasters, accidental record deletions (unlink), or unauthorized invoice validations (action_post).
β οΈ Why you should NEVER connect a raw MCP server to Odoo
Odoo's native permissions were designed for humans, not LLMs. If you give an AI agent an API key for a standard sales or accounting user so it can read data or draft quotes, that same key can execute unlink (delete records) or action_post (legally post invoices to tax authorities).
One LLM hallucination can corrupt your account.move ledger or wipe out res.partner records. Odoo Safe MCP acts as a deterministic firewall between your AI agent and Odoo's JSON-RPC/XML-RPC API.
Related MCP server: Odoo MCP Server
π¦ How the Security Traffic Light Works
Risk Level | Odoo Methods | Action Taken | Tier |
π’ GREEN (Safe Read) |
| Instant execution via local JSON-RPC. | Free (Open Source) |
π‘ YELLOW (Guarded Drafts) |
| Enforces | Pro Guard |
π΄ RED (Critical / Destructive) |
| Pauses execution. Sends an interactive Approve / Reject button to Slack or MS Teams. | Pro Guard |
β BLACKLIST (Zero-Day Protection) | Mutations on | Blocked unconditionally (even with Pro). Prevents privilege escalation. | Hard Block |
π Quickstart (2 Minutes)
1. Install via pip or run directly with uvx
pip install "odoo-safe-mcp==2.0.0"2. Add to your Claude Desktop or Cursor configuration
Edit your claude_desktop_config.json (or .cursor/mcp.json):
{
"mcpServers": {
"odoo-erp": {
"command": "uvx",
"args": ["odoo-safe-mcp@2.0.0"],
"env": {
"ODOO_URL": "https://your-company.odoo.com",
"ODOO_DB": "your-database-name",
"ODOO_USERNAME": "ai-bot@your-company.com",
"ODOO_API_KEY": "your_odoo_user_api_key",
"ODOO_DRY_RUN": "false",
"ODOO_SAFE_GUARD_KEY": "optional_pro_license_key_for_write_access"
}
}
}
}β οΈ Production Best Practice (Version Pinning): Always pin the exact version in
uvx(odoo-safe-mcp@2.0.0). Running unpinneduvx odoo-safe-mcpdownloads upstream changes on every launch, which could lead to breaking changes or unexpected behavior in automated production pipelines.Note: Without
ODOO_SAFE_GUARD_KEY, the server runs in Strict Read-Only Mode (π’ Green Level). Set"ODOO_DRY_RUN": "true"to test and simulateYELLOWandREDpolicies locally with zero risk to your database.
π Unlock Guarded Write Access, AI Defender & Slack Approvals (Pro & Partner Tiers)
Need your agents to create draft quotes, prepare vendor bills, audit payloads with Llama 3 8B AI Defender, or request atomic human approval on Slack before posting invoices?
Plan | Price | Databases | Key Features |
Community | β¬0 / forever | 1 Local DB | Strict Read-Only Mode (π’ Green), Zero-Risk Dry-Run Simulation ( |
Pro Guard | β¬49 / month | Up to 5 DBs | Guarded Drafts (π‘ Yellow), Slack Interactive Approvals (π΄ Red), D1 Audit Log, Llama 3 8B AI Defender Included |
Partner Agency | β¬149 / month | Up to 25 DBs | Multi-tenant Agency Isolation, Custom Slack Signing Secret, MS Teams Alerts, Llama 3 AI Defender |
Get your License Key at odoosafemcp.stream/#pricing.
Connect your Slack webhook in 1 click via the Cloudflare D1 Activation Portal.
Add
ODOO_SAFE_GUARD_KEYto your environment variables.
π License & Terms of Service
Distributed under the MIT License β Free forever for read-only local execution and Dry-Run simulation.
Limitation of Liability, GDPR Privacy & Trademark Disclaimer
IMPORTANT NOTICE:
odoo-safe-mcpand its associated Enterprise Guard backend are provided on an "AS IS" and "AS AVAILABLE" basis without warranties of any kind, either express or implied, including but not limited to implied warranties of merchantability, fitness for a particular purpose, and non-infringement.
Auxiliary Control Layer & Human-in-the-Loop Responsibility: This software operates strictly as an auxiliary deterministic filter and does not replace native database security, accounting audits, or operational vigilance. The human supervisor who clicks "Approve" in Slack or Microsoft Teams is the sole legal and accounting authorizer of the resulting ERP mutation.
Customer Responsibilities: The user and customer retain sole and exclusive responsibility for configuring least-privilege permissions on the Odoo user account linked to
ODOO_API_KEY, monitoring AI agent behavior, and maintaining independent, verified daily database backups.Liability Cap: To the maximum extent permitted by applicable law, the cumulative aggregate liability of the authors, contributors, and operators for any direct, indirect, incidental, special, or consequential damages (including data loss, accounting discrepancy, lost revenue, or business interruption) shall be strictly capped at the total fee actually paid by the customer for the software during the one (1) month immediately preceding the event giving rise to liability (maximum β¬49 for Pro Guard, β¬149 for Partner Agency, or β¬0 for Community Tier).
GDPR / RGPD Zero-Data-Retention Architecture: Read-only (
GREEN) queries execute locally on the user's machine and never transit through the Enterprise Guard cloud. Paused (RED) payloads are encrypted in transit and at rest usingAES-GCM-256and are purged immediately (PURGED_AFTER_RESOLUTION) upon approval, rejection, or 24-hour TTL expiration. Audit logs store only cryptographicSHA-256payload hashes and technical metadata.Trademark & Non-Affiliation Disclaimer: This project is an independent software product and is not affiliated with, sponsored by, or endorsed by Odoo S.A.
Odoois a registered trademark of Odoo S.A.Slackis a registered trademark of Slack Technologies, LLC.Microsoft Teamsis a registered trademark of Microsoft Corporation.
Available Tools
1 toolodoo_execute_kwB
Safely execute an Odoo ORM method (execute_kw) via deterministic firewall rules.
Args: model: Odoo technical model name (e.g. 'sale.order', 'res.partner', 'account.move'). method: ORM method name (e.g. 'search_read', 'read', 'create', 'unlink', 'action_post'). args: Positional arguments (e.g. search domains, list of record IDs, or record dictionaries). kwargs: Keyword arguments (e.g. {'fields': ['name', 'amount_total'], 'limit': 10}).
Returns: JSON string or formatted message with query results or human approval status.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | ||
| model | Yes | ||
| kwargs | No | ||
| method | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and partially meets it by disclosing a firewall/policy layer and that responses can include 'human approval status' β meaningful for a tool that may mutate data. However it never states which methods are permitted or denied, what happens on rejection, permission requirements, or reversibility of create/unlink.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line summary followed by clean Args/Returns sections. Every line carries information and there is no filler, though the Args examples are slightly repetitive in form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and parameters are well covered. What remains thin is the behavioral envelope β allowed/blocked methods, approval triggers, and error behavior β which for a generic executor exposed to destructive verbs like 'unlink' leaves the agent guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all four parameters are documented with concrete examples (model names like 'sale.order', methods like 'search_read'/'unlink', positional search domains/IDs, and kwargs like {'fields': [...], 'limit': 10}). This adds real invocation guidance beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: executing an Odoo ORM method (execute_kw) through a firewall layer. It is immediately clear this is a generic ORM gateway rather than a fixed operation. No sibling tools exist to differentiate against, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus other approaches, nor which methods are safe or which trigger human approval. 'Safely execute ... via deterministic firewall rules' hints at guardrails but never states when the tool applies or what conditions block it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v2.0.0- First observed
odoo_execute_kw
TDQS
Scored across 1 tool
Only one tool is exposed, so there is no risk of confusing it with another tool. Its purposeβgeneric Odoo ORM executionβis broad but unambiguous within the set.
Single snake_case name odoo_execute_kw with a server-related prefix; no competing conventions to create inconsistency. The name is clear, though generic.
A single catch-all execute_kw tool is thinner than ideal for a broad Odoo domain; it works as a proxy but lacks granular operations. The count is borderline rather than clearly appropriate.
execute_kw can technically perform CRUD and actions, but the surface lacks discovery/introspection tools (e.g., list models, describe fields) needed for practical agent use. This is a notable gap.
Maintenance
Related MCP Connectors
- odooOAuthcom.odooconsole
Odoo ERP for AI agents: hosted OAuth endpoint, gated writes, one endpoint for every instance.
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
Connect AI to Odoo ERP 14-20: search, create, update and manage records in natural language.
Supervised API-write gateway for AI agents with policy, human approval and execution receipts.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with Odoo ERP systems through natural language to search records, create entries, update data, and manage business operations. Supports secure authentication and configurable access controls for production environments.Mozilla Public 2.0
- AlicenseNot gradedqualityCmaintenanceBridges AI agents to Odoo ERP via MCP, enabling CRUD operations, model introspection, and report generation with secure API key and connection management through a web admin UI.4MIT
- AlicenseAqualityAmaintenanceEnables AI agents to interact with Odoo ERP as the authenticated user, with tools for discovery, planning, and mutations bounded by user permissions.3627 npm2Apache 2.0
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to interact with Odoo ERP via the external API. It supports listing models, describing schemas, searching, aggregating, creating, updating, deleting records, and invoking business methods, with a configurable permission matrix for safety.-