loading…
Search for a command to run...
loading…
Odoo MCP server for Claude Code and Claude.ai — turn any self-hosted Odoo instance (15 → 19) into an AI assistant via the Model Context Protocol. 197+ tools, mu
Odoo MCP server for Claude Code and Claude.ai — turn any self-hosted Odoo instance (15 → 19) into an AI assistant via the Model Context Protocol. 197+ tools, multi-tenant, Bulgaria localization (НАП, ДДС, ЕИК) included.
Production-grade Model Context Protocol (MCP) server suite for Odoo ERP
Odoo MCP server for Claude Code and Claude.ai — turn any self-hosted Odoo instance (15 → 19) into an AI assistant via the Model Context Protocol. 197+ tools, multi-tenant, Bulgaria localization (НАП, ДДС, ЕИК) included.
Connect Claude, Claude Code, and any MCP-compatible client to Odoo, GitHub, filesystem, Portainer, Teams, and more — through a unified, authenticated gateway.
License: AGPL-3.0 Odoo MCP Docker Made by BL Consulting
Quick Start · Why this vs alternatives? · Use Cases · Architecture · MCP Servers · Companion Modules · Deployment

▶ Watch the full 4-minute demo: Running Odoo 18 Entirely Through AI — Claude Code + MCP Server
odoo-claude-mcp is a self-hosted MCP server suite that turns any Odoo instance into a first-class citizen in the Claude ecosystem. It exposes Odoo data and operations through the Model Context Protocol, while bundling complementary MCP servers for everything an Odoo developer, consultant, or business user needs — GitHub, OCA modules, Kubernetes/Portainer, Microsoft Teams, and a full Claude Code terminal running in the browser.
Unlike single-purpose MCP wrappers, this stack is built for real production use:
git clone https://github.com/rosenvladimirov/odoo-claude-mcp.git
cd odoo-claude-mcp
# Configure
cp .env.example .env
nano .env # set ODOO_URL, DB, credentials, tokens
# Create the shared Cloudflare tunnel network (one-time per host)
docker network create cloudflare-net
# Start the stack
docker compose up -d
# Verify
docker compose ps
curl http://localhost:8084/health
No Cloudflare tunnel? If you're deploying locally without a Cloudflare sidecar, use the override file instead of creating the external network:
docker compose -f docker-compose.yml -f docker-compose.local.yml up -dThis turns
cloudflare-netinto a regular Docker bridge network created on demand.
Optional services (Portainer / Teams). The default
docker compose up -dstarts only the core stack (Odoo RPC, Filesystem, OCA, EE, GitHub, Qdrant, Ollama, Claude Terminal). To also enable the Portainer MCP or Microsoft Teams MCP, opt in with a Compose profile:docker compose --profile portainer up -d # core + Portainer docker compose --profile teams up -d # core + Teams docker compose --profile full up -d # everythingEach optional service has its own required env vars (see
.env.example). Without them the service container would crash-loop, so they're skipped by default.
First-run troubleshooting. If
docker compose psshowsmcp-odoo-rpcinRestartingstate, it means the values in.env(ODOO_URL,ODOO_DB,ODOO_USERNAME,ODOO_API_KEY/ODOO_PASSWORD) don't point to a reachable Odoo instance. Edit.envto match a real Odoo and re-rundocker compose up -d. The healthcheckcurl http://localhost:8084/healthwill succeed only aftermcp-odoo-rpcisUp.
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/rosenvladimirov/odoo-claude-mcp/2.0/install.sh | bash
Windows (PowerShell as Administrator):
iwr -useb https://raw.githubusercontent.com/rosenvladimirov/odoo-claude-mcp/2.0/install.ps1 | iex
After the stack is running, add it to Claude Code:
claude mcp add odoo-mcp \
--url https://your-domain.com/mcp \
--header "Authorization: Bearer YOUR_TOKEN"
Or use the included .mcp.json:
cp claude-terminal/.mcp.json ~/.config/claude-code/mcp.json
| Capability | Raw XML-RPC | Single-purpose MCP-Odoo wrappers | odoo-claude-mcp |
|---|---|---|---|
| Auth | Per-call password | Single shared token | ✅ Bearer + per-user profiles + OAuth |
| Multi-tenant | ❌ One DB per process | ⚠️ Single connection | ✅ N tenants per stack |
| Tools available | ~6 RPC verbs | 20–40 | ✅ 197+ (92 native + 105 proxied) |
| Memory / context layer | ❌ | ❌ | ✅ Qdrant vector + Ollama embeddings, per-user + shared |
| Skills / orchestration | ❌ | ❌ | ✅ ai.skill records + memory packs |
| Web terminal in browser | ❌ | ❌ | ✅ xterm.js + tmux + Claude Code |
| GitHub / Portainer / Teams / OCA | ❌ | ❌ | ✅ 8 federated MCP servers |
| Bulgaria localization | ❌ | ❌ | ✅ НАП-ready, fiscal positions, VAT |
| Production deployment | DIY | Docker only | ✅ Docker Compose + K3s/Kustomize |
| Audit logging / rate limit | ❌ | ⚠️ | ✅ Per-user logs, Cloudflare AI Gateway |
| License | LGPL (client lib) | Mixed (some MIT, some commercial) | ✅ AGPL-3.0 (open, share-alike) |
The shorter version: most other MCP-Odoo bridges are great for "one developer wants to talk to one Odoo." odoo-claude-mcp is for teams, agencies, and SaaS providers that need multi-user, multi-database, audited deployments with a unified AI surface.
memory_share distributes institutional know-howaccount.moveclaude-terminal for your customersflowchart TD
A["🧑 Claude.ai · Claude Code · Claude Desktop · IDE"]
A -->|HTTPS + Bearer token| B
subgraph GW["odoo-claude-mcp gateway"]
B["Unified MCP Router · server.py<br/>• Proxies to 7 backend MCP servers<br/>• Per-user profiles & connections<br/>• Shared memory store · audit log"]
end
B --> C1["odoo-rpc-mcp<br/>(core, 100+ tools)"]
B --> C2["ee-mcp<br/>(Odoo EE)"]
B --> C3["oca-mcp<br/>(OCA repos)"]
B --> C4["github-mcp"]
B --> C5["portainer-mcp"]
B --> C6["filesystem-mcp"]
B --> C7["teams-mcp"]
B --> C8["claude-terminal<br/>(xterm.js + tmux)"]
C1 --> D1["Odoo 15→19<br/>(N tenants)"]
C1 --> D2["Qdrant<br/>(vector DB)"]
C1 --> D3["Ollama<br/>(local LLMs)"]
classDef gw fill:#e0e7ff,stroke:#4338ca,color:#1e1b4b;
classDef be fill:#f3f4f6,stroke:#6b7280,color:#111827;
classDef st fill:#fef3c7,stroke:#d97706,color:#451a03;
class B gw;
class C1,C2,C3,C4,C5,C6,C7,C8 be;
class D1,D2,D3 st;
odoo-rpc-mcpThe flagship MCP server. 197+ MCP tools (92 native + 105 proxied across Portainer, GitHub, Teams, EE, OCA, filesystem) covering every aspect of Odoo development and operations.
Capabilities:
odoo_search_read, odoo_create, odoo_write, odoo_unlink, odoo_executeodoo_fields_get, odoo_list_models, odoo_module_infoodoo_connect, user_connection_activateodoo_web_login, odoo_web_call, odoo_web_export, odoo_web_reportodoo_attachment_upload, odoo_attachment_download, public_access_downloadodoo_report, public_access_report_pdf, public_access_report_xlsxpublic_access_portal_orders, public_access_portal_invoices, public_access_portal_ticketsodoo_fp_configure, odoo_fp_list, odoo_fp_details — fiscal positions tailored for НАП complianceodoo_list_translatable_fields, odoo_get_field_translations, odoo_translate_field (simple translate=True), odoo_translate_html (html_translate / xml_translate with extract/terms/replace modes). Version-aware (Odoo 16+ native JSONB API, <16 ir.translation fallback). Auto-ZWSP marks identical translations as "kept intentionally" so the website editor stops flagging them as untranslated.odoo_website_list_snippets, odoo_website_list_page_snippets, odoo_website_add_snippet, odoo_website_update_snippet, odoo_website_remove_snippet. Lxml-based HTML parsing with xpath substitutions — covers blog posts, website pages (via arch_db), product descriptions, mega-menus. Supports background image swaps, CTA insertions, position-relative placement (end/begin/after/before/replace).ai_tokenize_record, ai_search_similar, ai_collection_info — Qdrant vector embeddings per Odoo recordmemory_read, memory_write, memory_share, memory_pullee-mcp — Odoo Enterprise ToolsTools specific to Odoo Enterprise workflows:
oca-mcp — OCA Module ManagementDeep integration with the Odoo Community Association ecosystem:
oca-clone-everythingoca-gen-*oca-migrate-branchclaude-terminal — Browser-based Claude CodeA complete xterm.js + tmux + Claude Code setup running in a Docker container:
gateway.js) with session isolationthemes.json — includes Catppuccin, Dracula, Tokyo Night, Gruvbox, etc.)landing.html) for public deploymentsgithub-mcp — GitHub API wrapper (search code, issues, PRs, repos)portainer-mcp — Docker/Kubernetes environment managementteams-mcp — Microsoft Teams messaging integrationfilesystem-mcp — Scoped filesystem operations for AI agentsThe MCP stack is paired with several Odoo modules and a website theme. Together they turn any Odoo instance into a fully MCP-aware, multi-tenant, billing-ready AI workstation — with an optional editorial website skin on top.
l10n_bg_claude_terminal — Odoo ↔ MCP integration (free / LGPL-3)Odoo module that exposes MCP + Claude Terminal configuration as user preferences and company settings. Works on Odoo 16, 18 and 19 (each major series has a dedicated branch).
Repos:
16.0🌍 Non-Bulgarian deployments? Use the international fork rosenvladimirov/odoo-mcp-terminal — same module, redistributed without the BG localization dependencies (no НАП fields, no Bulgarian transliteration mixin). Branches
16.0/18.0/19.0, AGPL-3.0. Recommended for any Odoo instance outside Bulgaria.
What it adds to Odoo:
verify_ssl flag with TOFU cert pinning)odoo_create / odoo_write triggers open
form / list views to update in real time (no full reload)/data/connections.json manuallylist_dbs() (multi-tenant friendly)l10n_bg_ai_billing — SaaS billing module (OPL-1, paid)Odoo module for hosting providers and BL Consulting tier management. Tracks per-user MCP usage, calculates bills, provisions Portainer stacks per tenant, ships licensed memory packs.
Repo:
What it adds:
ai.billing.{bundle, tenant, usage.line, invoice.batch, skill.catalog, memory.pack, memory.deployment, tenant.addon}portainer.client wizard creates a
per-tenant MCP stack with auto-provisioned port, env, and networkpyzipper) of tenant config
bundles for offline demos or DR backupsai.skill records with L1/L2/L3 disclosure tiers/admin/memory/upload endpointDependency on the MCP stack: uses the MCP_ADMIN_TOKEN endpoint
family (/admin/memory/*) added in odoo-rpc-mcp 2.8.0.
odoo-mcp-theme — Custom Odoo website theme (free / AGPL-3)Editorial "paper" theme purpose-built for the MCP Works landing site and any Odoo website that wants a clean, content-first presentation. Used in production at mcpworks.net.
Repo: rosenvladimirov/odoo-mcp-theme · branch 19.0 · current: 19.0.x
What it ships:
#wrapwrap-scoped — no leakage into Odoo backend or
Website Builder editor (avoids the $o-color-palettes-name global
leak that breaks editor UI in older themes)Installable on any Odoo 19 instance. Drop it into your addons path, install via Apps, then assign in Website → Configuration → Themes.
odoo-mcp-theme ← optional: editorial website skin
l10n_bg_claude_terminal ← every user of the MCP terminal
↓
l10n_bg_ai_billing ← hosting providers / resellers / BL-tier ops
l10n_bg_ai_billing depends on l10n_bg_claude_terminal — installing
the billing module auto-pulls the terminal integration.
odoo-mcp-theme is independent and can be used with or without the
MCP stack.
Full Kustomize-based deployment in k3s/:
k3s/
├── base/ # Base manifests
│ ├── namespace.yaml
│ ├── configmaps.yaml
│ ├── secrets.example.yaml
│ ├── pvcs.yaml
│ ├── odoo-rpc-mcp.yaml
│ ├── ee-mcp.yaml
│ ├── oca-mcp.yaml
│ ├── github-mcp.yaml
│ ├── teams-mcp.yaml
│ ├── portainer-mcp.yaml
│ ├── filesystem-mcp.yaml
│ ├── claude-terminal.yaml
│ ├── qdrant.yaml
│ ├── ollama.yaml
│ └── ingress.yaml
└── overlays/
├── direct/ # NodePort + cert-manager-example
└── prod/ # Ingress with TLS for public endpoints
Deploy:
cd k3s/overlays/prod
cp .env.example .env
cp ../../base/secrets.example.yaml secrets.yaml
# edit secrets.yaml with real values
kubectl apply -k .
kubectl -n odoo-claude-mcp get pods
See k3s/README.md for complete deployment guide including cert-manager, Cloudflare tunnels, and horizontal scaling.
For Claude.ai connector access, the recommended production topology is:
Internet → Cloudflare (DNS + WAF) → Nginx reverse proxy → MCP gateway
│
▼
Backend MCP servers
Token-based authentication on the gateway ensures only authorized Claude sessions connect. Cloudflare's Zero Trust or simple tunnel setup both work.
The stack is designed to be registered as a Custom Connector in Claude.ai (Team/Enterprise) or via the API.
Configuration:
https://mcp.yourdomain.com)odoo_connect_cli.py or Qt GUI)https://mcp.yourdomain.com/mcpSecurity features:
/data/users/{username}/)Beyond MCP servers, the repo includes standalone desktop and CLI tools:
tools/odoo_connect_qt.py — PyQt6 desktop GUI for managing Odoo connections, SSH keys, and MCP endpoints. Cross-platform (Linux/Windows/macOS).
tools/odoo_connect.py — GTK4/Adwaita alternative for Linux/GNOME users.
odoo-rpc-mcp/odoo_connect_cli.py — Terminal CLI for CI/CD and scripting.
tools/odoo_module_analyzer.py — Analyzes Odoo module source for:
tools/glb_viewer.py — 3D model inspection tool for the MRP Design Matrix workflows.
Pre-packaged NSIS installer (packaging/windows/) produced automatically via GitHub Actions (.github/workflows/build-windows.yml).
Reporting security issues: please email [email protected] rather than opening a public issue.
This project is maintained by the OCA l10n-bulgaria maintainer. Bulgarian-specific features are first-class:
l10n_bg_* module family support — fiscal positions, VAT reports, payroll, HRSee the Bulgaria-specific OCA modules for the complete ecosystem.
Does it work with Odoo Enterprise?
Yes. Odoo 15→19 (Community + Enterprise) are all supported via XML-RPC + JSON-RPC. EE-specific tools (license check, EE module discovery, dependency analysis) live in the dedicated ee-mcp server. No Odoo SH-specific hooks — works on any self-hosted Odoo (bare metal, Docker, K3s, Odoo SH outbound).
Is this OCA-approved / on the Odoo Apps Store?
The companion modules (l10n_bg_claude_terminal, the broader l10n-bulgaria family) are maintained by the OCA l10n-bulgaria maintainer. The MCP server itself is an independent project (not an Odoo app), AGPL-3.0, distributed via Docker Hub + GitHub. Track 3.x will publish a SaaS billing module on the Odoo Apps Store separately.
BYOK (bring your own Anthropic key) — is it safe?
Yes. Each authenticated user can configure their own Anthropic API key via the Odoo UI (Preferences → Claude Terminal). Keys are stored encrypted in the per-user profile (/data/users/{username}/) and never leak to other tenants. The server never bundles a shared Anthropic key into multi-tenant deployments.
Can one stack serve multiple Odoo databases?
Yes — that's the core design. One MCP server instance proxies to N Odoo connections, each with its own credentials, language, and timezone. odoo_connect / user_connection_activate switch the active database mid-session. Per-user memory namespaces keep context isolated.
Does it require Cloudflare?
No. Cloudflare is the recommended production topology (Tunnel + WAF + AI Gateway), but the stack runs fine behind any reverse proxy (Nginx, Traefik, Caddy) or directly on a LAN/VPN. The docker-compose.local.yml override removes the Cloudflare network requirement for local dev.
What's the difference between this and Rutger Klabbers's odoo-mcp-pro?
Different scope. odoo-mcp-pro is a focused single-user/single-DB Odoo MCP wrapper. odoo-claude-mcp is a multi-tenant gateway with 7+ federated MCP servers (Odoo + GitHub + OCA + Portainer + filesystem + Teams + claude-terminal), per-user authentication, audit logging, and a companion Odoo billing module for SaaS providers. Both projects are open source — pick the one that matches your deployment shape.
Can I run only the parts I need?
Yes. Compose profiles gate optional services: docker compose up -d starts only the core (no Portainer, no Teams). Use --profile portainer / --profile teams / --profile full to add them. K3s overlays are similarly modular.
This project ships on two parallel branches, each targeting a different audience. Most users want Track 2.x; the 3.x track is for integrators building hosted offerings on top of the stack.
branch 2.0)Who: Odoo end-users, accountants, Bulgarian SMEs, developers who work with a single Odoo stack, content teams managing website/blog.
What you get:
odoo_translate_field +
odoo_translate_html + 2 helpers — covers blog.post, product
descriptions, website pages, arch_db) ★ new in 2.10Docker tags: :latest, :stable, :2.x.y (current: 2.10.0)
Documentation: this README
branch 3.0)Who: Odoo implementation partners, OCA community contributors, SaaS MSPs running multiple client instances, integrator agencies.
What's planned (development — not production yet):
odoo_module_install/upgrade/uninstall/ diff, odoo_config_apply, odoo_health_check, odoo_backup_db / restore_dbai.skill records + memory packs + pipeline steps.mcp demo create --industry=... --seed=...).
Tenant + Odoo DB + demo data + skills + memory in < 5 minutes.odoo_module_scaffold / lint / test / install_from_path / explain, odoo_xml_validate.Docker tags: :next, :3.x.y
Documentation: docs/integrator-platform.md
(coming soon — see project memory roadmap_integrator_platform.md
for the full 4-track spec)
Positioning: the 3.x track shifts buyer persona from the final Odoo user to the integrator / partner / agency — giving them the tools to deploy, configure, and demo Odoo + AI workflows for their own clients at scale.
l10n_bg_ai_billing 19.0.1.3.0 shipped (4 tiers, millicents precision, Portainer auto-provisioning)l10n_bg_ai_pipeline + l10n_bg_ai_invoice_glue shipped (98.5% conf EAD OCR, Odoo 18+19, end-to-end tokenize)/provision endpoint LIVE on mcp.odoo-shell.space (Apr 2026)try.mcpworks.net with Stripe checkout for paid trial stacks (in progress, Q2 2026)ai.skill records + memory packs)Contributions welcome! This project follows OCA conventions:
git checkout -b feature/amazing-thing)For large changes, please open an issue first to discuss approach.
This project is licensed under the AGPL-3.0 license. See LICENSE for details.
If this project helps you, please consider starring the repo — it helps others discover the work and motivates further development.
Rosen Vladimirov — Partner, BL Consulting
Odoo Silver Partner · OCA l10n-bulgaria maintainer · 10+ years of Odoo specialization
📧 Email: [email protected] 🐙 GitHub: @rosenvladimirov 🏢 Company: Terraros Комерс ЕООД · Bulgaria
Made with ❤️ and ☕ in Bulgaria 🇧🇬
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"odoo-claude-mcp": {
"command": "npx",
"args": []
}
}
}