
Odoo Claude MCP
Self-hosted MCP gateway connecting Claude to Odoo ERP (15→19) — 197+ tools, multi-tenant, Bulgaria l10n.
Add to your client
Copy the config for your MCP client and paste it into its config file.
claude mcp add odoo-mcp --url https://your-domain.com/mcp --header "Authorization: Bearer YOUR_TOKEN"Paste into ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"odoo-claude-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://your-domain.com/mcp",
"--header",
"Authorization: Bearer YOUR_TOKEN"
]
}
}
}Claude Desktop connects to remote servers through the `mcp-remote` proxy (installed on first run via npx). Restart Claude Desktop after saving.
Step-by-step guides: Add to Claude Desktop · Add to Cursor · Add to Windsurf
Before you start
- A reachable self-hosted Odoo instance (15 → 19, Community or Enterprise) with URL, DB, username, and API key/password
- Docker + Docker Compose (or a K3s/Kubernetes cluster with kubectl + Kustomize for production)
- A public HTTPS endpoint / reverse proxy (Nginx, Traefik, Caddy, or Cloudflare Tunnel) to expose the gateway for Claude.ai connector use
- A generated per-user Bearer token for MCP authentication
- Optional: Qdrant (vector store), Ollama (local LLMs), and service-specific env vars for Portainer/Teams
About Odoo Claude MCP
A self-hosted MCP gateway for Odoo ERP. It runs a unified MCP router that proxies to 7+ federated backend MCP servers (Odoo RPC core, Odoo EE, OCA, GitHub, Portainer, filesystem, Teams) plus a browser-based Claude Code terminal, exposing 197+ tools through a single token-authenticated HTTPS endpoint. Designed for multi-tenant, multi-database deployments by Odoo developers, consultants, and SaaS/MSP operators, with per-user memory (Qdrant + Ollama), audit logging, and Bulgaria (НАП) localization. Connect via Claude Code (claude mcp add ... --url .../mcp --header Authorization: Bearer) or as a Claude.ai Custom Connector.
Tools & capabilities (42)
odoo_search_readSearch and read Odoo records (combined search + read) on any model.
odoo_createCreate new Odoo records.
odoo_writeUpdate existing Odoo records.
odoo_unlinkDelete Odoo records.
odoo_executeCall arbitrary Odoo model methods via RPC.
odoo_fields_getIntrospect a model's field definitions.
odoo_list_modelsList available Odoo models.
odoo_module_infoGet information about an installed Odoo module.
odoo_connectConnect to / switch the active Odoo database on the fly.
user_connection_activateActivate a stored per-user Odoo connection for the session.
odoo_web_loginEstablish a web (JSON-RPC) session against Odoo.
odoo_web_callInvoke an Odoo web controller endpoint via the web session.
odoo_web_exportExport data through the Odoo web session.
odoo_web_reportRender a report through the Odoo web session.
odoo_attachment_uploadUpload a file as an ir.attachment to Odoo.
odoo_attachment_downloadDownload an attachment from Odoo.
public_access_downloadDownload a file via public/portal access.
odoo_reportGenerate an Odoo report (e.g. invoice/sale order PDF).
public_access_report_pdfGenerate a report as PDF via public access.
public_access_report_xlsxGenerate a report as XLSX via public access.
public_access_portal_ordersRead portal sale orders via public access.
public_access_portal_invoicesRead portal invoices via public access.
public_access_portal_ticketsRead portal tickets via public access.
odoo_fp_configureConfigure Bulgaria (НАП) fiscal positions.
odoo_fp_listList configured fiscal positions.
odoo_fp_detailsGet details of a fiscal position.
odoo_list_translatable_fieldsList translatable fields on a model (version-aware).
odoo_get_field_translationsRead existing translations for a field.
odoo_translate_fieldTranslate a simple translate=True field.
odoo_translate_htmlTranslate html_translate/xml_translate fields with extract/terms/replace modes.
odoo_website_list_snippetsList available website snippets.
odoo_website_list_page_snippetsList snippets present on a website page/blog post.
odoo_website_add_snippetAdd a snippet to a website page or blog post.
odoo_website_update_snippetUpdate a snippet (e.g. background image swap, CTA insertion).
odoo_website_remove_snippetRemove a snippet from a page.
ai_tokenize_recordGenerate Qdrant vector embeddings for an Odoo record.
ai_search_similarSemantic search for similar records via the vector store.
ai_collection_infoInspect a Qdrant vector collection.
memory_readRead from per-user or shared memory.
memory_writeWrite to per-user or shared memory.
memory_shareShare memory with the team (institutional knowledge).
memory_pullPull shared memory into the user's context.
What this server can do
Odoo Claude MCP provides tools for these capabilities — tap one to see every MCP server that does the same:
When to use it
- Let Claude perform live, real CRUD on an Odoo instance — e.g. edit a sale order with automatic recalculation.
- Manage multiple client Odoo databases from one authenticated Claude session (consultants/agencies).
- Deploy/update Odoo modules, views, and data via RPC without filesystem access.
- Natural-language queries against real Odoo sales/accounting data for business users.
- Semantic search and document-extraction workflows (vision LLMs → account.move) backed by Qdrant + Ollama.
- Run Odoo + AI as a multi-tenant SaaS, with per-tenant isolated MCP endpoints, usage tracking, and audit logs.
Security notes
Self-hosted: you deploy the gateway (Docker Compose or K3s) behind your own HTTPS reverse proxy. Authentication is a per-user Bearer token generated by the stack; the gateway enforces per-user profile isolation, connection-level access control, and per-user audit logging. No credentials in code — all secrets via env vars or Kubernetes secrets. BYOK Anthropic keys are stored encrypted per-user and never shared across tenants. Report security issues privately to vladimirov.rosen@gmail.com.
Odoo Claude MCP FAQ
Does it work with Odoo Enterprise?
Yes. Odoo 15→19 (Community + Enterprise) are supported via XML-RPC + JSON-RPC. EE-specific tools (license check, EE module discovery, dependency analysis) live in the dedicated ee-mcp server. Works on any self-hosted Odoo (bare metal, Docker, K3s).
Can one stack serve multiple Odoo databases?
Yes — that's the core design. One MCP gateway proxies to N Odoo connections, each with its own credentials/language/timezone; odoo_connect / user_connection_activate switch the active database mid-session, and per-user memory namespaces keep context isolated.
Does it require Cloudflare?
No. Cloudflare (Tunnel + WAF + AI Gateway) is the recommended production topology, but the stack runs behind any reverse proxy (Nginx, Traefik, Caddy) or on a LAN/VPN. A docker-compose.local.yml override removes the Cloudflare network requirement for local dev.
How do I connect Claude to it?
Deploy the stack with a public HTTPS endpoint, generate a user Bearer token, then either run `claude mcp add odoo-mcp --url https://your-domain.com/mcp --header "Authorization: Bearer YOUR_TOKEN"` for Claude Code, or add it as a Custom Connector in Claude.ai (URL .../mcp, Auth: Bearer token).
Is BYOK (your own Anthropic key) safe?
Yes. Each authenticated user can configure their own Anthropic API key via the Odoo UI; keys are stored encrypted in the per-user profile and never leak to other tenants. The server never bundles a shared key into multi-tenant deployments.
Alternatives to Odoo Claude MCP
Compare all alternatives →AI-powered task-management system for AI-driven development that drops into Cursor, Windsurf, Claude Code, and more.
Background computer-use MCP server that drives native macOS, Windows, and Linux desktop apps without stealing focus.
Self-hosted MCP server for Jira and Confluence Cloud and Server/Data Center.
Compare Odoo Claude MCP with: