| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
Discuss (mail)
|
| Community Apps Dependencies | Show |
| Lines of code | 10271 |
| Technical Name |
muk_mcp_apps |
| License | See License tab |
| Website | http://www.mukit.at |
MuK MCP Apps
Interactive UI Resources for AI Hosts — MCP Apps Extension
MuK IT GmbH - www.mukit.at
Overview
Implements the MCP Apps extension
(modelcontextprotocol/ext-apps, spec 2026-01-26) on top
of MuK MCP Server. Lets Odoo expose interactive HTML
applications as ui:// resources that any Apps-capable
MCP host — Claude, VS Code GitHub Copilot, Goose, Postman,
MCPJam — renders inline in the conversation. Hosts without
Apps support fall back to the regular tool result, so older clients
keep working.
Ships with two ready-to-use apps: a generic Odoo OWL view renderer
(list, kanban, form, pivot, graph) driven by view_action,
and an o_spreadsheet dashboard renderer driven by
dashboard_read. Both run inside the host's sandboxed
iframe, talk back to Odoo through a tunneled web_proxy
tool, and pick up the company's brand color automatically.
Two Apps Out of the Box
| App | Driving Tool | What It Renders |
|---|---|---|
ui://muk_mcp_apps/view |
view_action |
Native Odoo OWL list, kanban, form, pivot, or graph view of any model — arbitrary domain, group-by, measures, chart type, ad-hoc arch. |
ui://muk_mcp_apps/dashboard |
dashboard_read |
Full o_spreadsheet dashboard, single figure isolation, global-filter presets — the same renderer your Odoo backend uses, running inside the host's iframe. |
How It Works
Every ui:// resource ships as a single self-contained
HTML document with the OWL framework, view layer, adapter services,
and host-bridge SDK inlined. Asset URLs in the bundle CSS are
rewritten to data: URIs at serve time so nothing 404s
against the host's sandbox origin. A content hash on the resource
descriptor lets caching hosts skip resources/read when
nothing changed.
Once mounted, the iframe still needs to reach Odoo for record
reads, writes, and chatter. The web_proxy MCP tool
tunnels every in-iframe HTTP request through MCP: any
/web/dataset/call_kw, /mail/*, or
/bus/* call intercepted by the boot script comes out
the other side as a regular Odoo controller call, with the host's
MCP key applied as the auth context. The iframe never sees the
API key — the session is attached server-side.
Built-in Playground
Test every ui:// resource directly inside Odoo
— no external host required. Open
Settings > MCP Server > Playground and switch to
the Resources tab to see the app rendered live.
The built-in App Runner dispatches the resource's
entrypoint tool with form-driven JSON arguments and reloads the
iframe with the resulting structuredContent. Every
JSON-RPC frame flowing through the host bridge is captured in a
side log, with Replay and
Edit & Replay buttons for debugging.
Custom Apps & Security
Ship your own ui:// resources from any Odoo addon.
Drop an index.html under
your_addon/static/src/apps/<app>/, register a
muk_mcp_apps.ui_resource record pointing at it, and
declare which tools should drive it via the
entrypoint_tools field. The server takes care of
inlining assets, applying CSP and permission metadata, computing
content hashes, and surfacing the resource through
resources/list on the next handshake.
Each resource carries a per-app
Content Security Policy
(connect-src, resource-src,
frame-src) and optional permission flags
(camera, microphone, geolocation, clipboard-write) surfaced via
_meta.ui. All tool execution still runs through the
MuK MCP pipeline: Bearer-token auth, scope enforcement, Odoo
record rules, and the audit log.
Want more?
Are you having troubles with your Odoo integration? Or do you feel
your system lacks of essential features?
If your answer is YES
to one of the above questions, feel free to contact us at anytime
with your inquiry.
We are looking forward to discuss your
needs and plan the next steps with you.
Our Services
Odoo
Development
Odoo
Integration
Odoo
Infrastructure
Odoo
Training
Odoo
Support
MuK MCP Apps
Implements the MCP Apps extension (modelcontextprotocol/ext-apps, spec 2026-01-26) on top of the MuK MCP Server. Lets Odoo expose interactive HTML applications as ui:// resources that any Apps-capable MCP host renders inline in the conversation.
Compatible hosts include Claude Desktop and web, VS Code GitHub Copilot, Goose, Postman, and MCPJam. Hosts without Apps support fall back to the plain tool result, so older clients keep working.
Installation
To install this module, you need to:
Download the module and add it to your Odoo addons folder. Afterward, log on to your Odoo server and go to the Apps menu. Trigger the debug mode and update the list by clicking on the "Update Apps List" link. Now install the module by clicking on the install button.
Upgrade
To upgrade this module, you need to:
Download the module and add it to your Odoo addons folder. Restart the server and log on to your Odoo server. Select the Apps menu and upgrade the module by clicking on the upgrade button.
Configuration
The module is server-side only — once installed, the io.modelcontextprotocol/ui capability is advertised on every MCP initialize handshake and the bundled ui:// resources show up in resources/list automatically. No per-host configuration needed beyond what MuK MCP Server already requires (Bearer token + endpoint URL).
Brand Color
The inlined OWL bundle picks up the company's primary color and exposes it to apps as CSS custom properties (--o-primary, --o-primary-hover, --o-primary-soft). Override per-tenant via Settings > General Settings > MCP Server > Primary Color, or leave blank to inherit the company default.
Resource Management
Open Settings > MCP Server > Resources to inspect every registered ui:// resource. Each record carries the source module, app directory, asset-inlining flags, CSP policy, permission flags, and the comma-separated list of entrypoint tools that drive it.
Built-in Apps
The module ships with two ready-to-use ui:// resources.
View App (ui://muk_mcp_apps/view)
Renders any Odoo OWL view (list, kanban, form, pivot, graph) for an arbitrary model with custom domain, group-by, measures, chart type, and ad-hoc arch. Driven by the view_action MCP tool. Useful for giving the AI host a real, interactive Odoo view in-conversation instead of a flat JSON dump.
Dashboard App (ui://muk_mcp_apps/dashboard)
Renders a full o_spreadsheet dashboard with optional single-figure isolation and global-filter presets. Driven by the dashboard_read MCP tool. Same renderer the Odoo backend uses, running inside the host's iframe.
How It Works
When a tool returns a resource_link with structured input, the host fetches the matching ui:// resource. The server returns a single self-contained HTML document with:
- the OWL framework, view layer, and adapter services inlined as a bundle script,
- the host-bridge SDK that brokers JSON-RPC over postMessage,
- a <script> block bootstrapping window.odoo.__session_info__ so the OWL action manager mounts as if it were a real backend,
- a server-computed brand theme exposed as CSS custom properties,
- per-app CSP and permission metadata in _meta.ui per the Apps spec,
- a content hash on the resource descriptor so caching hosts can skip resources/read when nothing changed.
The iframe runs in an isolated sandbox origin. Any backend call it makes (record reads, writes, chatter, RPC) is intercepted by the boot script and routed to the web_proxy MCP tool, which replays it server-side under the authenticated MCP session and returns the response.
Playground
Open Settings > MCP Server > Playground and switch to the Resources tab to inspect every registered ui:// resource. Each entry shows:
- a live iframe rendering the app,
- an App Runner toolbar that dispatches the resource's entrypoint tool with form-driven JSON arguments and reloads the iframe with the resulting structuredContent,
- a side log capturing every JSON-RPC frame flowing through the host bridge, with Replay and Edit & Replay buttons.
No external host required — the playground is the same dispatch path the host would use, so what works here works in Claude.
Custom Apps
Ship your own ui:// resource from any Odoo addon.
Step 1 — declare the dependency in your __manifest__.py:
{ 'name': 'My MCP App', 'depends': ['muk_mcp_apps'], ... }
Step 2 — drop an index.html under your_addon/static/src/apps/<app>/.
Step 3 — register a muk_mcp_apps.ui_resource record:
<record id="ui_resource_my_app" model="muk_mcp_apps.ui_resource"> <field name="uri">ui://your_addon/my_app</field> <field name="name">My App</field> <field name="module">your_addon</field> <field name="app_path">static/src/apps/my_app</field> <field name="inline_assets" eval="True"/> <field name="entrypoint_tools">my_tool</field> </record>
Step 4 — attach the resource to your tool with the decorator's meta argument:
@mcp_tool( name='my_tool', description='...', input_schema={...}, category='read', meta={'ui': {'resourceUri': 'ui://your_addon/my_app'}}, ) def _mcp_my_tool(self, ...): ...
The server takes care of inlining assets, applying CSP and permission metadata, computing the content hash, and surfacing the resource on the next resources/list.
To inline the full OWL bundle (so the app can render real Odoo views), set inline_app_bundle=True on the resource record. Set app_bundle_name to muk_mcp_apps.spreadsheet_bundle if the app needs the o_spreadsheet runtime as well.
Security
- Bundle isolation — every resource runs in a sandbox iframe with sandbox="allow-scripts allow-same-origin". CSP, permissions, and border preferences are declared per-app in _meta.ui.
- Auth never crosses the iframe — the API key stays in the host; web_proxy attaches the session server-side.
- Standard MCP gating applies — Bearer token, scope (Read Only vs Read & Write), Odoo record rules, and the audit log all run on every proxied call.
- Path-prefix allow-list — only assets from modules in the muk_mcp_apps dependency closure are inlined into the bundles, so unrelated module assets (mail, hr, account, …) never reach the iframe.
Credits
Contributors
- Mathias Markl <mathias.markl@mukit.at>
Author & Maintainer
This module is maintained by the MuK IT GmbH.
MuK IT is an Austrian company specialized in customizing and extending Odoo. We develop custom solutions for your individual needs to help you focus on your strength and expertise to grow your business.
If you want to get in touch please contact us via mail (sale@mukit.at) or visit our website (https://mukit.at).
MuK 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 MuK IT GmbH. The above permissions are granted for a single database per purchased license. Furthermore, with a valid license it is permitted to use the software on other databases as long as the usage is limited to a testing or development environment. You may develop modules based on the Software or 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 MuK 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