Odoo MCP Studio - AI React App, Module & EChart Builder
by Codemarchant https://codemarchant.com$ 352.97
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 10980 |
| Technical Name |
odoo_remote_mcp |
| License | OPL-1 |
| Website | https://codemarchant.com |
| Versions | 16.0 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Lines of code | 10980 |
| Technical Name |
odoo_remote_mcp |
| License | OPL-1 |
| Website | https://codemarchant.com |
| Versions | 16.0 17.0 18.0 19.0 |
Odoo MCP Studio
AI React App, Module & EChart Builder — Powered by Remote MCP
Connect AI agents like Claude, Gemini, and ChatGPT to your Odoo instance. Build full-stack web applications, custom data modules, interactive dashboards, and automate workflows — all through natural conversation.
Four Powerful Pillars
Remote MCP Server
17 built-in tools with OAuth 2.1 security, granular access control, and comprehensive audit logging. No local installation required.
AI Web App Builder
AI generates complete multi-page React applications with routing, API endpoints, user storage, and public sharing — directly inside Odoo.
AI Module Builder
AI creates custom Odoo data modules with models, fields, views, and security rules — packaged as ZIP and installed via base_import_module.
EChart Dashboard Builder
Describe what you want to visualize and AI builds interactive Apache ECharts dashboards with live Odoo data — from bar charts to 3D globes.
modelcontextprotocol.io/docs/develop/connect-remote-servers
github.com/Codemarchant/odoo_mcp_app_library
Play Demo Games:
codemarchant.com/game-vault
AI Builds a Complete Game in Under 60 Seconds
Watch Claude create a fully playable Snake game — from prompt to playing in under a minute
Challenge mode: AI creates a full-featured Snake game with one prompt — under 60 seconds from start to playing
Claude AI Chat Bot — Ready to Import
A full-featured AI assistant built entirely as an MCP Studio web application — import, configure two API keys, done
Claude Chat Bot: Multi-model support, web search, sandboxed code execution (generate Word, PowerPoint, Excel, PDFs and more), file uploads with OCR, MCP tool integration, prompt caching, and context compaction — all running from Odoo
100 Users. One API Key. Your Odoo Data.
Want to give your entire team access to Claude without managing individual accounts? Import this pre-built webapp, set your Anthropic API key, and optionally add an MCP API key to let Claude interact with your Odoo data — search records, create orders, analyze reports.
Best suited for trusted internal teams. Use Anthropic Workspaces for per-team rate limiting and separate MCP API keys for tool access control. Vibecode your own AI agent directly in Odoo.
Download:
github.com/Codemarchant/odoo_mcp_app_library/tree/main/claude_chat_bot
— Import the CSV, configure API keys in MCP Server → API Keys, and open the app.
Install as App
PWA for mobile & desktop
MCP Tools
Claude talks to your Odoo
Smart Caching
Faster responses, lower cost
How It Works
Install Module
Install from Odoo Apps
Add MCP Users
From user access rights, assign MCP Admin to yourself, MCP User to others
Configure Access
Navigate to MCP Server menu, set tool allowlists and model restrictions
Connect AI Client
Add your Odoo /mcp URL in your AI client
See It in Action
Watch how AI agents interact with Odoo through the MCP Server
Quick Start: Connect Your AI Agent
Works with any remote OAuth MCP-compatible AI agent. Replace the example URL with your Odoo instance URL + /mcp
Claude Code CLI
Add MCP server:
claude mcp add odoo --transport http https://your-odoo.com/mcp
Within Claude CLI, use /mcp command and authenticate
Claude Desktop / Claude.ai
Settings → Connectors → Add Custom Connector
https://your-odoo.com/mcp
Browser opens for OAuth → Authorize → Ready
Gemini CLI
Edit ~/.gemini/settings.json:
{
"mcpServers": {
"odoo": {
"url": "https://your-odoo.com/mcp"
}
}
}
Within Gemini CLI, use /mcp command and authenticate
ChatGPT (Developer Mode)*
Settings → Apps → Advanced → Enable Developer Mode → Create App
https://your-odoo.com/mcp
platform.openai.com/docs/guides/developer-mode
Optional: Install ripgrep for faster code search
# Ubuntu/Debian
sudo apt install ripgrep
# macOS
brew install ripgrep
Testing without HTTPS (ngrok)
# Expose local Odoo (port 8069) via HTTPS tunnel
ngrok http 8069
Set ngrok URL as web.base.url in System Parameters. Also set web.base.url.freeze to True so Odoo doesn't overwrite it.
Feature Documentation
Explore each feature in detail
Seamless AI Integration
Once connected, AI agents naturally interact with your Odoo data through conversation. Ask questions, create records, run reports, and automate workflows — all through natural language.
"Find all open sales orders for customer X"
"Create 10 new dummy test contacts with this theme for a demo"
"Show me how sale order discounts are calculated in our pricing module using code search tool"
"What products are low on stock?"
"Confirm SO/00042, send a message to the customer, and reassign to salesperson Jane"
"Identify our top 10 customers by revenue and their most purchased products"
Claude using MCP tools to batch create contacts in Odoo
Configuration Dashboard
The main configuration page serves as your command center. Access all settings, monitor connections, and manage security from a dedicated app menu.
- Global enable/disable switch for the MCP server
- Smart buttons for quick navigation to clients, tokens, and execution logs
- MCP endpoint URL display
- Configurable access token and refresh token timeouts
- Execution logging with adjustable retention periods
- Automatic cleanup via scheduled actions
Main configuration page: Server settings, smart navigation buttons, and OAuth configuration
Tool Settings
Configure code execution limits, search result caps, and toggle detailed execution logging. Post module ZIP to chatter on install for audit trails, and expose EChart data in tool responses for AI-driven iteration.
Tool Settings: Execution limits and logging options
Connection Settings
Self-documenting module with connection details and access token management.
Connection Settings: Token expiry and session configuration
Per-Tool Access Control
Precisely control which users can execute each tool, from safe read-only operations to powerful code execution.
Read Tools
Auto-enabled for all MCP users
Write Tools
Require explicit allowlist membership
Execute Tools
Restricted to trusted power users
Tool allowlists: Read tools (auto-enabled) and Write/Execute tools with user selection
Model & Field Restrictions
Create fine-grained restrictions at the model and field level. Protect sensitive business data
by blocking AI access to specific models or fields. Applies to:
list_models, get_model_schema, search_read,
read_record, read_group, create_record, update_record,
delete_record, and execute_method.
Does not restrict execute_orm, create_echart, manage_webapp,
or manage_module which execute arbitrary code.
Model Restrictions
- Create restriction groups for different user types
- Block specific CRUD operations per model
- Apply globally or to specific users
- Mass-add models via wizard
Field Restrictions
- Hide sensitive fields from AI responses
- Protect passwords, API keys, personal data
- Per-field CRUD control
- Works alongside Odoo's native ACLs
Model Access tab: Create and manage model restriction groups with user assignments
Model Group form: Configure restricted models with blocked CRUD operations
Model Group form: Configure restricted fields per toolset
Enterprise-Grade Security
OAuth 2.1 + PKCE
Proof Key for Code Exchange prevents authorization code interception.
Token Rotation
Refresh tokens rotated on each use, limiting stolen token windows.
Audience Binding
RFC 8707 resource indicators bind tokens to your MCP server URL.
Scope-Based Access
OAuth scopes (read, write, execute) plus offline_access for refresh tokens.
Model-Level Restrictions
Block AI access to sensitive models like accounting or HR.
Field-Level Restrictions
Hide passwords, API keys, or personal data from AI agents.
When connecting an AI client (see Quick Connect above), the user is presented with an OAuth consent screen to link their Odoo account. If logged out, they are redirected to the login page first. Once authorized, the connection is set up securely through dynamic client registration. Only users explicitly granted the MCP User permission group will be able to authorize a connection.
OAuth consent screen: Clear permission display with authorize/deny actions
Complete Audit Trail
Every tool invocation is captured with full parameter/result logging, timing metrics, and user attribution.
User & Client
Parameters
Results
Timing
Execution log: Full audit trail with tool name, parameters, results, timing, and IP address
Reusable Prompt Templates
Create standardized prompts that appear as selectable commands in AI clients.
Define argument placeholders with {{variable}} syntax and control visibility across your organization.
Template Features
- Argument placeholders with defaults
- Required and optional parameters
- Rich text prompt content
Sharing Options
- Private: Only you can see it
- Shared: Specific users
- Public: All MCP users
Prompt template form: Define prompts with arguments, descriptions, and visibility settings
Templates in Claude: Prompts appear as selectable commands with argument inputs
API Keys
Store third-party API keys securely in Odoo for use by web application endpoint handlers.
Keys are restricted to MCP administrators and should never be exposed to end users —
endpoint code can read them server-side via env['mcp.api.key'].
Use this for Anthropic API keys, webhook secrets, or any credentials your webapps need.
API Keys list view: Securely stored keys accessible only to MCP Administrators, used by webapp endpoint handlers
17 Powerful Tools
Everything AI agents need to interact with Odoo
Read Tools (Auto-enabled)
- list_models — Discover models with regex filtering
- get_model_schema — Get field definitions with filters
- search_read — Search records with domain filters
- read_record — Read single record by ID
- read_group — Aggregate records with GROUP BY
Binary fields automatically returned as embedded resources
Write Tools (Allowlist Required)
- create_record — Create one or more records
- update_record — Bulk update with same or different values
- delete_record — Delete records by ID
- execute_method — Call model methods (action_confirm, etc.)
Protected by user allowlists and model restrictions
Code Tools (Allowlist Required)
- code_search — Search addon source with ripgrep
- code_read — Read source files with pagination
Ripgrep integration for blazing fast searches
Advanced Tools (Restricted)
- execute_orm — Execute Python code in safe_eval sandbox (ORM, requests, regex, crypto, etc.)
- create_echart — Create persistent ECharts dashboards
- search_webapp_code — Search within webapp code fields
- manage_webapp — Create and manage React web applications
- search_module_code — Search within module file contents
- manage_module — Create and install custom Odoo data modules
Full ORM access — only for trusted users
Safe Eval Sandbox
All server-side Python code — execute_orm, webapp data code, API endpoint handlers, and EChart data code —
runs inside Odoo's safe_eval sandbox. This is the same secure execution environment that Odoo uses internally
for automated actions, server actions, and computed fields. Import statements are blocked at the bytecode level,
but we provide additional whitelisted utilities on top of Odoo's defaults — including HTTP requests,
cryptographic signing, regex, and more.
Odoo Core
env— Odoo Environment (access any model viaenv['model.name'])user/uid— Current user record and IDref(xmlid)— XML ID lookupCommand— One2many/Many2many operationsUserError/ValidationError— Exception classeslogger— Server-side logging
Date / Time
datetime— Full module (datetime.datetime.now(),datetime.date.today())date— Shortcut fordatetime.datetimedelta/relativedelta— Date arithmeticdateutil— Date parsing and timezone utilitiestimezone— Pytz timezone operationstime— Time module (strftime, strptime, sleep)
HTTP & Integration
requests— HTTP library (requests.get(),.post(),.put(),.delete(),.patch())json— JSON serialization (json.dumps(),json.loads())base64— Binary encoding (b64encode,b64decode,urlsafe_b64encode)html— HTML escaping (html.escape(),html.unescape())
requests enables calling external APIs, webhooks, and services directly from endpoint code
Security & Crypto
hashlib— Hashing (hashlib.sha256(),.md5(),.sha512())hmac— HMAC signing for webhook signature verificationre— Regular expressions (re.match(),.search(),.findall(),.sub())
Verify webhook signatures from services like Stripe, GitHub, n8n, etc.
Math & Collections
math— Math functions (math.ceil(),.floor(),.sqrt(),.pi)float_round/float_compare/float_is_zero— Odoo precision utilitiesdefaultdict/Counter— Collection utilitiesitertools— Iteration (itertools.chain(),.groupby(),.product())
Blocked (Security)
importstatements — Blocked at bytecode levelos/subprocess/shutil— No filesystem or process accesssocket— No raw network accessexec/eval/compile— No dynamic code execution__dunder__attributes — No metaclass or introspection access
Modules are whitelisted via Odoo's wrap_module — only safe attributes are exposed
Technical Details
MCP Protocol
Implements MCP 2025-11-25 with Streamable HTTP transport
OAuth Discovery
RFC 8414 authorization server and RFC 9728 protected resource metadata
Resource Templates
MCP resource templates for attachments and binary fields
Ripgrep Integration
Optional ripgrep for 10x faster code searches (Python fallback included)
Multi-Database Support
For environments with multiple databases on a single Odoo URL, use path-based routing.
Configuration Required
Add to odoo.conf:
server_wide_modules = web,base,odoo_remote_mcp
Connection URL Format
Include database name in path:
https://your-odoo.com/<database>/mcp
AI-Powered Web Application Builder
Describe what you want — AI builds complete, multi-page React web applications directly inside Odoo. From games to business dashboards, portals to internal tools. Full-stack applications with routing, API endpoints, persistent user storage, and granular access control — all generated through natural conversation. Organize apps with tags, track view counts, and create custom URL slugs for memorable, shareable links.
React 19 + Router 6
Multi-page SPAs with client-side routing
API Endpoints
Custom Python-powered REST APIs
Share Anywhere
Public, portal, or internal user access
Web Application Form View
Every AI-generated web application is stored as a fully editable Odoo record. Inspect and modify pages, endpoints, shared components, global state, CDN dependencies, and sharing settings — all from the familiar Odoo form view.
Sales HQ portal — walkthrough of the webapp form view showing pages, endpoints, components, and settings
What You Can Build
Games, business apps, portals, dashboards — anything you can describe
Games & Interactive Apps
AI can build complete games with scoring, statistics tracking, and persistent high scores. The Snake game below was generated in a single prompt — complete with game statistics and graph visualizations.
Snake game: Full gameplay with statistics dashboard showing score history and performance graphs
Business Applications & Portals
Build complete business applications with multi-page navigation, live Odoo data, customer filtering, order management, and full CRUD operations through custom API endpoints.
Sales Dashboard: Multi-page navigation, sales statistics, customer browsing, order filtering, and creating a new sale order with dynamic product lines
AI Chatbots & Agents
Build AI-powered chat interfaces and internal assistants for your team.
Proxy requests to any LLM API from endpoint handlers, connect back to Odoo via MCP tools,
and create domain-specific AI agents with prompt caching, context compaction, and tool access control.
See the Claude Chat Bot showcase above for a ready-to-import example, download:
github.com/Codemarchant/odoo_mcp_app_library/tree/main/claude_chat_bot.
Zero Build Step Architecture
Web applications require no build step, no compilation, and no bundling.
React 19 and React Router 6 are loaded via ESM from CDN, JSX is compiled in the browser by Babel Standalone,
and Tailwind CSS is included via CDN. This means AI-generated apps run immediately — no
npm install, no webpack, no CI/CD pipeline.
The entire application is stored as plain text fields in Odoo, making it fully portable,
exportable, and editable without any development tooling.
Configuration & Management
Full control over your web applications through Odoo's familiar interface. Export applications for deployment across instances, and open them directly from the form view.
Snake Game form view: Basic settings with Export and Open App buttons
Export & Deployment
Export
Generates a standard Odoo-formatted CSV file containing all app data — pages, component files, endpoints, settings, and external IDs. CSV format supports unlimited code size (unlike XLSX which has cell limits).
Staging → Production: Export on staging, then import the CSV on production. External IDs allow Odoo to match and update existing records on subsequent imports — no need to delete and recreate.
Backup & Restore: Export regularly to save working versions. If something breaks, reimport the CSV to restore your application.
Note: Exports include app structure only (pages, component files, endpoints, settings) — User Storage data is excluded, so production user data is never overwritten on reimport. If pages, component files, or endpoints were removed on staging, reimporting will not delete them on production — they remain as orphans and need manual cleanup. Do not delete the webapp record to avoid this, as that would destroy all User Storage data.
Custom API Endpoints
Each web application can define custom REST API endpoints with Python handlers. Support for GET, POST, PUT, and DELETE methods with dynamic route parameters — enabling full CRUD operations and complex business logic directly from the frontend.
Server-Side Python (safe_eval sandbox)
All server-side Python code — webapp data code, page data code, and endpoint handler code —
runs inside Odoo's safe_eval sandbox. This is the same secure execution environment that Odoo uses
internally for automated actions, server actions, and computed fields. Import statements are blocked at the
bytecode level, but we provide additional whitelisted utilities on top of Odoo's defaults — including
requests for calling external APIs and webhooks, hashlib/hmac for signature verification,
re for pattern matching, and itertools/math for data processing —
alongside full Odoo ORM access via env.
Endpoint handlers also receive auto-injected context variables:
query_params (URL query string), body (parsed JSON for POST/PUT),
and route_params (dynamic path segments).
See the Safe Eval Sandbox section in the MCP tab for the full list of available utilities.
Sales Dashboard API endpoints: Confirm orders, cancel orders, and more — each powered by server-side Python with full Odoo ORM access
Sharing & Public Access
Control who can access your web applications. Share with specific users, user groups, portal users, or make applications fully public. Public applications can be linked directly from your website for anyone to access without an Odoo login.
Ping Pong game sharing: "Shared with Groups" set to Public, making the app accessible to anyone with the link — add the URL to your website for public access
Embed Web Apps on Any Website
Embed any web application on your website, portal, or intranet using a simple iframe. A ready-to-use embed code with one-click copy is available in the Sharing tab of every web application.
One-Click Embed Code
Every web application includes a computed embed code in the Sharing tab. Simply copy the iframe snippet and paste it into your website HTML.
<iframe
src="https://your-odoo.com/mcp/webapp/my-app"
width="100%"
height="700"
style="border: none;"
loading="lazy">
</iframe>
Slug URLs — Use clean URLs like /mcp/webapp/my-app instead of numeric IDs
Public Access — Add the "Public" group in Sharing tab for external websites (no login required)
Progressive Web App (PWA)
Install web applications as native-like apps on any device — fullscreen, with a home screen icon and no browser bar. Ideal for warehouse tablets, kiosks, point-of-sale stations, or any scenario where a dedicated app experience is needed.
Enable PWA
Toggle PWA Enabled in the Configuration group of any web application. Choose between Standalone (no browser bar) or Fullscreen display mode, and set theme and background colors for the splash screen.
PWA settings in the webapp Configuration group: display mode, theme color, and background color
Install from Browser
When PWA is enabled, desktop browsers show an install icon in the address bar. Click it to install the web application as a standalone app.
Chrome showing the install icon and confirmation dialog for a PWA-enabled webapp
Installed App Experience
After installation, the app runs in its own window without browser chrome — just like a native application. On mobile devices, the app gets a home screen icon and launches fullscreen.
Sales Dashboard running as an installed PWA — no browser bar, standalone window
Mobile & Tablet Installation
Android: Open in Chrome → tap the install banner or menu → "Add to Home Screen".
iOS: Open in Safari → tap Share → "Add to Home Screen".
The app will appear on the home screen with the webapp's thumbnail as its icon.
Key Capabilities
- Multi-page routing — React Router 6 with dynamic URL parameters
- Global state management — Shared state across all pages
- Persistent user storage — 5MB per user with offline fallback via localStorage
- Shared components — Reusable JSX functions across all pages
- Component files — Split large pages into named code files (engine, sprites, utilities)
- Tailwind CSS — Built-in styling framework (optional)
- CDN dependencies — Import any npm library via ESM
- Server-side data — Python data fetching with full ORM access
- HTTP requests — Call external APIs, webhooks, and services from endpoint code via
requests - User context — Built-in user info (name, role, company) for personalization
- Binary assets — Upload images, audio, and sprites; reference with
asset('filename')in components - Export / Import — CSV export with external IDs for backup and cross-instance deployment
- Progressive Web App — Install as a native-like app with home screen icon and no browser bar
- Visitor permissions — All code executes with the end-user's access rights
Troubleshooting AI-Generated Apps
AI can occasionally make mistakes. If your app shows a blank page or error:
- Open browser developer tools (F12 → Console) to check for JavaScript errors
- Copy error messages and share them with your AI agent to diagnose and fix issues
- Use Export regularly to save working versions — restore anytime via Odoo import
AI-Powered Module Builder
Let AI create custom Odoo data modules through natural conversation. Define new models, fields, views, menus, security rules, and server actions — all packaged as installable ZIP modules using Odoo's native base_import_module framework. Modules persist across restarts and appear in the standard Apps menu.
Data-Only Modules
XML, CSV data files — no Python code execution
Auto ZIP Packaging
One-click package and install workflow
Full Lifecycle
Create, update, reinstall, and uninstall
odoo.com/documentation/17.0/developer/tutorials/importable_modules.html
No Server Restart. No Deployment Step. No Manual Upload.
AI creates, packages, and installs modules all in one step — entirely through conversation.
There is no server restart, no deployment pipeline, and no manual ZIP upload. The AI agent calls
manage_module to create the module files, automatically packages them into a ZIP,
and installs via Odoo's base_import_module — your new models, fields, views, and menus
are live immediately. Updates work the same way: AI modifies the files, repackages, and reinstalls
in a single operation.
How It Works
Describe Your Module
"Create a module that adds a delivery reference field to sale orders and partners"
AI Creates Files
Manifest, XML data files, CSV security rules — all generated via manage_module
Package & Install
Auto-packaged as ZIP and installed via base_import_module — no server restart
Live in Odoo
Module appears in Apps menu, fields and views active immediately
Module Form View
Every AI-created module is stored as a fully editable Odoo record. View all files, track state (Draft / Packaged / Installed), and manage the full lifecycle from a familiar Odoo form view. The chatter tracks all packaging and installation activity.
Customer Delivery Reference module: Files tab with manifest, data files, views, and security — chatter showing package and install history
File Editor
Each module file is editable with a code widget. AI generates the XML data files that define new models, fields, views, and security rules — all reviewable and editable before installation.
data/models.xml: Adding a Customer Delivery Reference field to sale orders and a Require Delivery Reference boolean to partners
Download & Backup
After packaging, download the module ZIP file for backup or manual deployment to other instances.
Download tab: Packaged ZIP file ready for download or manual import
Native Odoo Integration
Installed modules appear directly in Odoo's standard Apps menu as imported modules. This uses Odoo's built-in base_import_module framework — no custom installation mechanism.
Apps menu: AI-created module installed and visible alongside standard Odoo modules via the Import Module feature
Access Control
The manage_module tool is controlled via the same per-tool allowlist system as all other MCP tools. Only users explicitly added to the allowlist can create and install modules.
Tool allowlist: manage_module marked as High Risk — creates importable data modules with models, fields, views, and security rules
What Can Modules Contain?
- New models — Define custom models via
ir.modelXML records - New fields — Add fields to existing or new models via
ir.model.fields - Views — Form, list, search, and kanban views
- Menus & actions — Window actions and menu items
- Security rules — Access control lists via CSV and record rules
- Server actions — Automated actions and scheduled tasks
- Data records — Pre-populated reference data
- Static files — Icons, descriptions, and assets
Export & Deployment
Export
Click Export on the module record to generate a CSV posted to the chatter. This CSV contains all module files and metadata with external IDs — ready for import on another instance.
First Deployment (Staging → Production)
- On staging: develop, test, and install the module via AI
- Click Export → a CSV is posted to the chatter
- On production: go to MCP → Modules, use Odoo's Import records (list view → gear icon) to import the CSV
- Open the newly created module record and click Install / Upgrade
Subsequent Updates
- On staging: make changes and re-test
- Click Export to generate a fresh CSV
- On production: delete the existing MCP module record (this only removes the file container — the installed Odoo module is unaffected)
- Import the new CSV to recreate the module record with updated files
- Click Install / Upgrade to apply changes
Why delete first? Reimporting over an existing record may leave orphan files if any were removed on staging. Deleting and reimporting ensures the file list exactly matches the source.
Review & Control
Review Before Installing
By default, AI automatically installs after creating files. If you prefer to
review first, ask the AI to use skip_install=true —
this saves the files without triggering installation. Review in the Files tab,
then click Install / Upgrade when ready.
Uninstall & Reinstall
The AI can use uninstall_first=true to cleanly drop all module tables and
data before reinstalling. This permanently deletes all user data
in the module's custom models — only during initial development.
Once real data exists, use force=true to overwrite noupdate records
without dropping tables, or remove leftover fields manually via
Settings → Technical → Fields/Models.
Troubleshooting AI-Generated Modules
AI can occasionally produce errors in generated XML, CSV, or field definitions. Errors may surface during installation or later when opening views, menus, or server actions:
- Paste the full error message (traceback or validation error) back to your AI agent — it can usually diagnose and fix the issue in one step
- Post-install errors (e.g. a view or action fails to load) are common — copy the error dialog or server log and share it with the AI
- Review Odoo base code for patterns: Ask the AI to search existing Odoo modules for similar models, views, or security rules before generating new ones — this dramatically reduces errors
- Use skip_install=true to review generated files before installing, and Export regularly to save working versions
- Installation timeout: Module installation can take several minutes, especially for modules with many models and fields. The MCP tool call may time out before receiving a response — but the install is still running server-side and will usually complete successfully. If this happens, check the module state in Odoo (or ask the AI to search
ir.module.module) before retrying — duplicate installs while one is in progress can cause database locks
Best practice: Instruct the AI to study the target Odoo version's base addons for naming conventions, field types, and view structures before building your module. This produces cleaner, more compatible results.
Important Notes
- Data-only modules: These are data modules (XML/CSV), not Python code modules. They cannot contain Python model classes, but can define models, fields, views, and security rules through Odoo's data file mechanism.
- Computed fields and server actions use
safe_eval— same risk level asexecute_orm. - Schema changes persist: Installed modules affect the database schema and persist across server restarts. Use the uninstall feature to cleanly remove modules.
- Install duration: Module installation involves packaging files, importing via
base_import_module, and setting up models/fields — this can take several minutes for larger modules and may exceed the MCP client's default tool-call timeout. The install still completes server-side; verify module state before retrying.
Interactive ECharts Dashboards
Describe what you want to visualize — AI builds it for you
Vibe Coding for Dashboards
Simply describe what you want to see in natural language and AI generates the complete dashboard — data queries, chart configurations, and styling included. No coding required.
Powered by Apache ECharts, one of the most powerful and flexible charting libraries. Build everything from simple bar charts to complex multi-axis dashboards with drill-down capabilities.
echarts.apache.org/en/option.html
echarts.apache.org/examples/en/index.html
A Blank Canvas for AI
Unlike rigid dashboard builders, ECharts provides a blank canvas where AI has complete creative freedom. Any chart type, any layout, any data combination.
No Configuration Lock-in
Dashboards are stored as pure Python data code and JSON chart options — no proprietary formats. Easily inspect, modify, or migrate your visualizations.
How It Works
Describe Your Dashboard
"Show me monthly sales by product category for the past 6 months with a bar chart and trend line"
AI Generates Everything
Data queries, chart options, styling — all created using the create_echart tool
Share Instantly
Get a shareable link immediately, or share with specific users and groups
Claude using MCP tools to generate an interactive sales dashboard
Browse and manage all your dashboards from the kanban view
Featured: 3D Globe Command Center
Turn your Odoo data into a stunning global visualization
github.com/Codemarchant/odoo_mcp_app_library/tree/main/echart_global_sales_command_center
Try This Prompt
Use the built-in "3D Globe Command Center" prompt template, or paste this into your AI client:
Create a 3D globe dashboard titled "Global Sales Command Center" using echarts-gl.
Use this globe texture URL: https://raw.githubusercontent.com/mrdoob/three.js/master/examples/textures/planets/earth_atmos_2048.jpg
Data from Odoo:
- Customers grouped by country
- Sale orders from the last 30 days grouped by partner country
- Revenue per country
- Summary stats: countries, customers, revenue, orders
Layout:
- Compact header bar with title and small inline stat badges, globe visible without scrolling
- Revenue filter slider as a floating panel on the left side
Globe features:
- Scatter points sized by customer count, colored by revenue level
- 3D bar columns on the top 5 revenue countries
- Animated arcs from order countries to HQ
- Slow auto-rotation with atmosphere glow
- Clickable countries showing a detail panel, closes on click
Professional dark theme.
3D Globe: Real-time sales data with glowing points, 3D bars, and animated arcs
codemarchant.com/mcp/echart/public/1/UqbJ37CaC39UlJJ0RC6xWHbgwctDI956-yqcNeNpQh0
Dashboard Configuration
Data Code tab: Python code for data retrieval using safe_eval
Sharing tab: Generate public links or share with specific users and groups
The resulting interactive dashboard with multiple chart types
Embed Dashboards on Any Website
Embed any EChart dashboard on your website, portfolio, or intranet using a simple iframe. A ready-to-use embed code with one-click copy is available in the Sharing tab of every dashboard.
One-Click Embed Code
Every dashboard includes a computed embed code in the Sharing tab. Simply copy the iframe snippet and paste it into your website HTML.
<iframe
src="https://your-odoo.com/mcp/echart/public/1/token?embed=1"
width="100%"
height="700"
style="border: none;"
loading="lazy">
</iframe>
embed=1 — Automatically hides the header bar for a clean, seamless look
Public Link — Enable for external websites (no login required)
Full Data Isolation Support
With "Expose EChart Data in Tool Response" disabled, AI agents only generate dashboard code — all execution happens on your Odoo server. The AI never sees the actual data in your charts.
Best Practices
- Build on staging first: Test dashboards before sharing widely
- Validate before production: Verify data accuracy and performance
- Use descriptive names: Help others understand each dashboard
- Review data code: Data code uses safe_eval with full ORM access
Troubleshooting AI-Generated Dashboards
AI can occasionally make mistakes. If your dashboard shows a blank page or error:
- Open browser developer tools (F12 → Console) to check for JavaScript errors
- Copy error messages and share them with your AI agent to diagnose and fix issues
- Use Export regularly to save working versions — restore anytime via Odoo import
Advanced: Extensions & Custom JavaScript
ECharts Extensions
- echarts-gl — 3D charts, globes, WebGL
- echarts-wordcloud — Word clouds
- echarts-liquidfill — Liquid gauges
- echarts-stat — Statistical transforms
Pre-Init JavaScript
echarts.registerMap()echarts.registerTheme()echarts.registerTransform()
Post-Init JavaScript
chart.on('click', ...)- Drill-down navigation
- Export/download buttons
Export & Deployment
Export
Generates a standard Odoo-formatted CSV file containing all dashboard data — data code, chart options, settings, and external IDs. CSV format supports unlimited code size (unlike XLSX which has cell limits).
Staging → Production: Export on staging, then import the CSV on production. External IDs allow Odoo to match and update the existing record on subsequent imports — reimporting cleanly overwrites all fields.
Backup & Restore: Export regularly to save working versions. If something breaks, reimport the CSV to restore your dashboard.
Frequently Asked Questions
Why hasn't my tool list updated after changing the allowlist?
MCP clients cache the tool list at connection time. After changing tool allowlists, adding/removing prompt templates,
or modifying any MCP configuration, you must disconnect and reconnect your AI client for changes to take effect.
In Claude Code CLI, use /mcp to manage connections. In Claude Desktop/Claude.ai, remove and re-add the connector.
How do I create custom prompt templates?
Navigate to MCP Server → Prompt Templates and create a new template.
Use {{variable}} syntax for arguments and set visibility to Private, Shared, or Public.
Templates appear as selectable commands in connected AI clients.
Remember to disconnect and reconnect your AI client after creating new templates for them to appear.
Why can't my user access MCP tools?
Users need the "MCP User" group assigned in their access rights (Settings → Users → Access Rights). Additionally, write and execute tools require explicit allowlist membership in the MCP configuration. Read tools are auto-enabled for all MCP users.
How do I share a web application publicly?
In the webapp's Sharing tab, add the "Public" group to "Shared with Groups". The app URL can then be accessed without login. You can add a link to the app directly on your website for public accessibility. Portal users can be granted access the same way by adding the "Portal" group.
Why can't other users see the EChart or WebApp I created?
By default, ECharts and WebApps are only visible to the user who created them. To share with other users in your organization, go to the Sharing tab on the record and add users or groups to "Shared with Users" or "Shared with Groups". For example, add "Role / User" to share with all internal employees, or "Role / Portal" to share with portal users. You can also share with specific users individually.
Is my data safe when AI generates dashboards and web apps?
Yes. All code execution happens on your Odoo server, not on the AI provider's infrastructure. For EChart dashboards, disable "Expose EChart Data in Tool Response" in configuration so AI agents only generate code without ever seeing the actual data. Webapp data code and endpoint handlers also run server-side with the viewer's permissions — never exposing data to the AI agent.
Can I export and deploy my web apps and dashboards across instances?
Yes. Both web applications and EChart dashboards have an Export button that generates a CSV with external IDs. Import the CSV on any Odoo instance — first import creates the records, subsequent imports match on external IDs and update in place. This enables a clean staging → production workflow.
What AI clients are supported?
Any client supporting Remote MCP with OAuth 2.1 is compatible. This includes Claude (Desktop, CLI, claude.ai), Gemini CLI, ChatGPT (Developer Mode), Cursor, Windsurf, and more. The module implements standard MCP 2025-11-25 specification with Streamable HTTP transport.
How do I test without HTTPS?
Use ngrok to create an HTTPS tunnel to your local Odoo instance:
ngrok http 8069. Then set the ngrok URL as web.base.url in System Parameters
and set web.base.url.freeze to True so Odoo doesn't overwrite it.
Use the ngrok URL as your MCP server address.
Does it work with multiple databases?
Yes. Add odoo_remote_mcp to server_wide_modules in your odoo.conf,
then use the URL format https://your-odoo.com/<database>/mcp to connect
AI agents to specific databases.
How do I enable faster code search?
Install ripgrep on your server for significantly faster code searches.
On Ubuntu/Debian: sudo apt install ripgrep.
On macOS: brew install ripgrep.
The module automatically detects and uses ripgrep when available, with a Python fallback.
Does the module builder require a server restart or deployment step?
No. The entire workflow — creating files, packaging the ZIP, and installing the module —
happens live through AI conversation with no server restart, no deployment pipeline,
and no manual file upload. AI calls the manage_module tool which automatically packages
and installs via Odoo's base_import_module. Your new models, fields, views, and menus
are active immediately. Updates work the same way: AI modifies files, repackages, and reinstalls
in a single operation.
Are AI-created modules locked to this app? Can I convert them to standard Odoo modules?
No lock-in. Modules created by the AI are standard Odoo importable modules —
they use the same base_import_module framework that Odoo itself provides.
The generated ZIP files contain a standard __manifest__.py and data files (XML, CSV)
that follow Odoo's conventions.
You can download the ZIP from the Download tab and use it independently — import it on any Odoo instance via Apps → Import Module, without needing this app installed. If you outgrow the data-module approach, a developer can convert the ZIP into a full Python-based Odoo addon by adding model classes and business logic. The AI-generated data files (views, security rules, menus) remain valid and reusable as-is.
My AI-generated app shows a blank page or error — what should I do?
AI can occasionally make mistakes when generating code. If your web application or dashboard doesn't display correctly:
- Open browser developer tools (F12 or right-click → Inspect → Console tab) to check for JavaScript errors
- Copy the error message and share it with your AI agent — it can usually diagnose and fix the issue
- Describe what you see (blank page, partial render, specific error) to help the AI understand the problem
Support & Documentation
Documentation
Built-in docs at /mcp/docs
Email Support
support@codemarchant.com
Website
codemarchant.com
Start Building with AI Today
Install Odoo MCP Studio and let AI build your next web app, data module, dashboard, or automation.
MCP Server for Odoo
Enable AI agents like Claude, Gemini, and ChatGPT to interact with your Odoo instance via the Model Context Protocol (MCP).
Setup
- Install the module
- Add users to the MCP User group
- Configure tool allowlists in MCP Server → Configuration
- Connect your AI client (see Quick Connect below)
Quick Connect
Replace https://your-odoo.com with your Odoo instance URL.
Claude Code CLI:
claude mcp add odoo --transport http https://your-odoo.com/mcp within claude cli use /mcp command and authenticate.
Claude Desktop / Claude.ai
Settings → Connectors → Add Custom Connector → Enter URL:
https://your-odoo.com/mcp
Browser opens for OAuth → Authorize → Ready
Guide: https://modelcontextprotocol.io/docs/develop/connect-remote-servers#connecting-to-a-remote-mcp-server
Gemini CLI
Edit ~/.gemini/settings.json:
{
"mcpServers": {
"odoo": {
"url": "https://your-odoo.com/mcp"
}
}
}
within gemini cli, use /mcp command and authenticate
ChatGPT (Developer Mode)
In chatgpt settings → Apps menu → Advanced settings → Enable Developer Mode → Create app and add MCP server URL:
https://your-odoo.com/mcp
Browser opens for OAuth → Authorize → Ready
Guide: https://platform.openai.com/docs/guides/developer-mode
Requirements
- HTTPS required for production
- ripgrep (optional) - Faster code search
Install ripgrep
# Ubuntu/Debian sudo apt install ripgrep # macOS brew install ripgrep # Windows choco install ripgrep
Testing without HTTPS (ngrok)
For local development without HTTPS:
# Expose local Odoo via HTTPS tunnel ngrok http 8069 # Use generated URL, set as web base url in system parameters: https://xxx.ngrok-free.app/mcp
Endpoints
- /mcp - MCP protocol endpoint
- /mcp/docs - Built-in documentation
- /.well-known/oauth-protected-resource - OAuth resource metadata
- /.well-known/oauth-authorization-server - OAuth server metadata
Multi-Database Support
For environments with multiple databases served from a single Odoo URL, the module supports path-based database routing.
Requirements
Add the module to server_wide_modules in your odoo.conf:
server_wide_modules = web,base,odoo_remote_mcp
Connection URLs
Use the database name in the URL path when connecting:
https://your-odoo.com/<database>/mcp
Examples
Claude Code CLI:
claude mcp add production --transport http https://your-odoo.com/production_db/mcp claude mcp add staging --transport http https://your-odoo.com/staging_db/mcp
Gemini CLI (~/.gemini/settings.json):
{
"mcpServers": {
"odoo_production": {
"url": "https://your-odoo.com/production_db/mcp"
},
"odoo_staging": {
"url": "https://your-odoo.com/staging_db/mcp"
}
}
}
Path-based Endpoints
All endpoints support the database path prefix:
- /<database>/mcp - MCP protocol endpoint
- /<database>/mcp/docs - Built-in documentation
- /<database>/oauth/authorize - OAuth authorization
- /<database>/oauth/token - Token endpoint
- /.well-known/oauth-protected-resource/<database>/mcp - Resource metadata
Changelog
- 16.0.4.7.0 — 2026-03-03 (read_group Tool)
- New read_group tool for data aggregations using GROUP BY with SUM, AVG, COUNT, MIN, MAX, etc.
- Uses Odoo's read_group() API — respects all access rights and record rules
- Supports date/datetime granularity grouping (day, week, month, quarter, year)
- Auto-enabled for all MCP users with read scope (no allowlist required)
- Tool count increased from 16 to 17
- 16.0.4.6.0 — 2026-02-28 (Safe Eval Utilities & API Keys)
- Pre-imported Python utilities in safe_eval sandbox: requests, re, hashlib, hmac, base64, math, itertools, html
- All modules wrapped via Odoo's wrap_module with whitelisted attributes for security
- Enables server-side HTTP calls from webapp endpoints (call external APIs, webhooks, n8n, etc.)
- Enables webhook signature verification via hashlib/hmac directly in endpoint handlers
- Updated tool descriptions for execute_orm, manage_webapp, and create_echart to document new pre-imports
- API Key model (mcp.api.key) documented in manage_webapp tool description for third-party key storage
- API Key form view: updated usage guide with Claude Chat Bot quick-start link and clearer instructions
- Updated documentation (index.html): Claude Chat Bot showcase, API Keys section, AI Chatbots link to GitHub app library
- 16.0.4.5.0 — 2026-02-26 (Context Variables)
- Auto-injected record IDs (mcp_chart_id, mcp_webapp_id, mcp_page_id, mcp_endpoint_id) in all code execution contexts — eliminates hardcoded IDs
- Validation mock contexts pass safe defaults during pre-create code validation
- Documentation improvements for configuration dashboard and tool settings
- 16.0.4.4.0 — 2026-02-16 (Bare Slug Routes & SEO)
Clean URLs & Social Sharing
- Bare slug routes: webapps with a slug are now accessible at /<slug> (e.g., /space-invaders)
- Existing /mcp/webapp/<id|slug> routes preserved for backwards compatibility
- API base URL now uses slug instead of numeric ID for portability across environments
- SEO meta tags: canonical URL, Open Graph (title, description, image, site name, type)
- Twitter Card meta tags for rich link previews on Twitter/X
- PWA scope and start URL updated to use bare slug for cleaner installed app experience
- Slug help text updated with route overlap guidance
- 16.0.4.3.0 — 2026-02-13 (Progressive Web App Support)
PWA for Web Applications
- Enable PWA on any webapp for installable, fullscreen, native-like app experience
- Manifest, service worker, and icon routes auto-generated from webapp settings
- Configurable display mode (standalone/fullscreen), theme color, and background color
- Automatic icon generation from webapp thumbnail with solid-color fallback
- Apple iOS meta tags for Add to Home Screen support
- PWA fields included in webapp CSV export/import
- PWA fields exposed in manage_webapp tool schema for AI agent configuration
- 16.0.4.2.0 — 2026-02-13 (Webapp Asset Support)
Binary Assets for Web Applications
- Upload images, audio, sprites, and other binary files as webapp assets
- Two upload methods: URL-based (server fetches with auto MIME detection) or base64-encoded data
- Serve assets via cacheable public endpoint /mcp/webapp/<slug>/asset/<filename>
- asset(filename) helper available in all page components via props and useApp() hook
- Assets tab in webapp form view with usage examples
- Full export/import support — assets included in webapp CSV export with slug-based URLs
- 16.0.4.1.0 — 2026-02-12 (Code Search Tools)
Search Within WebApp & Module Code
- New search_webapp_code tool — search within webapp code fields (components, styles, data code, endpoints) by regex pattern with pagination and context lines
- New search_module_code tool — search within module file contents (XML, Python, CSV, JS, CSS) by regex pattern with file glob filtering, pagination, and context lines
- Both tools enable finding exact code locations before applying surgical content_patches
- Shared _search_text_lines helper extracted to DRY up the line-by-line search logic
- Tool count increased from 14 to 16
- 16.0.4.0.0 — 2026-02-09 (AI Module Builder)
Create Custom Odoo Data Modules with AI
- New manage_module tool for creating and managing custom Odoo data modules
- Create models, fields, views, menus, security rules, and server actions via XML/CSV data files
- Automatic ZIP packaging and one-click installation via base_import_module
- Modules persist across restarts and appear in the standard Apps menu
- Full lifecycle management: create, package, install, update, and uninstall
- Download packaged ZIP files for backup or manual deployment
- Per-user allowlist access control for the manage_module tool
- Module form view with file editor, download tab, and chatter activity tracking
- Tool count increased from 13 to 14
- Major rebrand: "Odoo MCP Studio — AI React App, Module & EChart Builder"
- 16.0.3.2.0 — 2026-02-06 (Code Patches & Embed)
- Code patching for manage_webapp: surgical find/replace edits via *_patches fields (e.g. component_code_patches, shared_components_patches, handler_code_patches) instead of rewriting entire code fields — saves context and reduces errors
- Iframe embed code for web applications: one-click copy snippet in the Sharing tab
- Improved storage documentation in tool description: clarifies mcp.webapp.user.storage model is queryable server-side for cross-user features (leaderboards, aggregations)
- 16.0.3.1.0 — 2026-01-30 (Tags, Gallery and webapp slugs)
- Tags system for categorizing webapps/echarts with management view
- Webapp enhancements: thumbnail, view count, sequence ordering, webapp slug support
- EChart iframe embed option with one-click copy in Sharing tab
- 16.0.3.0.0 — 2026-01-20 (React Web Applications)
Build Full React Apps from Odoo
- New manage_webapp tool for creating and managing React 19 web applications
- Multi-page routing with React Router 6 (HashRouter or MemoryRouter)
- Tailwind CSS enabled by default for utility-first styling
- ESM import maps: add any library from esm.sh (Chart.js, Recharts, etc.)
- Browser-based JSX compilation with Babel — no server build step
- Python data binding: fetch Odoo data with Python, access via React props
- Custom API endpoints: define GET/POST/PUT/DELETE handlers with Python
- Persistent user storage: server-side (5MB) with localStorage cache
- User context in components: id, name, email, roles, company info
- Flexible sharing: public, portal, groups, or specific users
- Version control: export/import webapps as XLSX
- Tool count increased from 12 to 13
- Major rebrand: "Odoo MCP Studio — AI App & EChart Builder"
- 16.0.2.1.0 — 2026-01-12 (Advanced ECharts)
Extensions & Custom JavaScript Support
- ECharts extensions: 4 popular extensions loaded by default (echarts-gl, wordcloud, liquidfill, stat)
- Pre-init JavaScript: code that runs before chart renders (registerMap, registerTheme, registerTransform)
- Post-init JavaScript: code that runs after chart renders (event handlers, drill-down, exports)
- New prompt templates: "3D Globe Command Center" and "Word Cloud Dashboard"
- Advanced tab in EChart form view for extension and JavaScript configuration
- CORS-friendly texture URLs documented for 3D globe visualizations
- 16.0.2.0.0 — 2026-01-08 (Major Release)
ECharts Interactive Dashboards
- New create_echart tool for AI-generated dashboards using Apache ECharts
- Vibe coding for dashboards: describe what you want to visualize, AI builds it
- Blank canvas for AI: no rigid widgets, complete creative freedom
- No configuration lock-in: pure Python data code and JSON chart options
- Full data isolation support: toggle "Expose EChart Data in Tool Response" to keep data on server
- Flexible sharing: public links via secure tokens or internal user/group sharing
- Tool count increased from 11 to 12
- 16.0.1.1.1 — 2026-01-05
- Improved transaction handling: tool execution now uses savepoints to rollback partial changes on failure
- Added full traceback logging to execution logs for easier debugging
- Defensive user_id capture before tool execution
- 16.0.1.1.1
- Fixed "Invalid access mode" error affecting Calendar and other views
- 16.0.1.1.0
- Added support for multi-database environments
- Minor fixes
- 16.0.1.0.0 — 2026-01-03
- Added support for multi-database environments
- Minor fixes
- 16.0.1.0.0 — 2026-01-01
- Initial release
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module