Security-first MCP gateway for Odoo 17/18/19 β YAML-driven security, 27 tools
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Security-first, version-agnostic MCP gateway for Odoo 17/18/19. Works with stock and custom modules via YAML configuration. Zero Odoo-side code required.
Add to Claude Desktop config (claude_desktop_config.json):
Restart Claude Desktop. In any conversation:
You're connected. Ask Claude to query, create, or update Odoo records β every call is rate-limited, audit-logged, and runs through two layers of security checks before reaching Odoo.
No Odoo addon required. No Python code to write. Just YAML config for fine-grained access control (optional β secure defaults work out of the box).
dry_run mode on create_record, update_record, delete_record, execute_method β validate without executingget_defaults (preview Odoo defaults), get_onchange (preview field side effects)read_group: create_date:month, date:quarter, etc.has_group('base.group_system') (was trusted from auth response)repr()/tracebackOdooSessionExpiredError (was retrying on every auth error)See CHANGELOG.md for the full list of 21 security fixes.
Existing Odoo MCP servers share common problems: hardcoded model lists that miss custom modules, security as an afterthought, mandatory custom Odoo addons, and single-version targets. This gateway solves all of them:
ir.model, add YAML config and it workspip install + YAML config = done. No custom addon requiredEvery tool and resource call passes through this pipeline:
Hardcoded safety guardrails that cannot be overridden by YAML:
__repr__/__str__, cleared on closehas_group('base.group_system') overrides auth-response is_adminAdd to claude_desktop_config.json:
| Variable | Default | Description |
|---|---|---|
ODOO_URL | http://localhost:8069 | Odoo server URL |
ODOO_DB | (required) | Odoo database name |
MCP_TRANSPORT | stdio | Transport mode (stdio or streamable-http) |
MCP_HOST | 127.0.0.1 | HTTP host (streamable-http mode) |
MCP_PORT | 8080 | HTTP port (streamable-http mode) |
MCP_LOG_LEVEL | INFO | Logging level |
CONFIG_DIR | . | Directory for YAML config files |
SESSION_TIMEOUT_SECONDS | 1800 | Session inactivity timeout |
MAX_CONCURRENT_SESSIONS | 100 | Maximum concurrent sessions |
RATE_LIMIT_GLOBAL | 60 | Requests per minute (global) |
RATE_LIMIT_WRITE | 20 | Write operations per minute |
ir.model.access and ir.rule| Tier | Effect | Example |
|---|---|---|
always_blocked | Nobody can access, including admins | ir.config_parameter, res.users.apikeys |
admin_only | Only admin users | ir.model, ir.model.fields |
admin_write_only | Read OK for all, write needs admin | res.company, res.currency |
These cannot be overridden by YAML configuration:
Blocked models (32): ir.config_parameter, res.users, res.users.apikeys, res.users.log, ir.cron, ir.module.module, ir.model.access, ir.rule, ir.mail_server, ir.ui.view, ir.actions.server, ir.logging, ir.attachment, ir.exports, ir.exports.line, iap.account, auth.totp.wizard, auth.totp.device, payment.token, payment.provider, base.automation, digest.digest, res.config.settings, change.password.wizard, change.password.user, base.module.update, base.module.upgrade, base.module.uninstall, fetchmail.server, bus.bus, mail.mail, mail.template
Read-only models (8): mail.message, mail.followers, mail.activity, discuss.channel, mail.notification, mail.compose.message, mail.alias, discuss.channel.member (reads allowed, writes blocked for everyone)
Blocked write fields (10): password, password_crypt, groups_id, totp_secret, signup_token, signup_type, signup_expiration, api_key, share, active
Blocked methods (29): sudo, with_user, with_company, with_context, with_env, with_prefetch, _auto_init, _sql, _register_hook, _write, _create, _read, _setup_base, _setup_fields, _setup_complete, init, _table_query, _read_group_raw, name_create, load, import_data, export_data, flush_recordset, invalidate_recordset, _search_panel_select_range, _search_panel_select_multi_range, _search_panel_domain_image, _search, _read_progress_bar
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/odoo-mcp-gateway)<a href="https://allmcps.com/mcp/odoo-mcp-gateway"><img src="https://allmcps.com/api/badge/odoo-mcp-gateway?style=directory" alt="Odoo MCP Gateway on AllMCPs" /></a>