Repository navigation
Conversation
`make up ENTERPRISE=<dir>` adds a directory of Odoo Enterprise modules to the image as a named build context and installs ai_mcp, Odoo 20's MCP server. The new mcp seed step adds a fixed admin key with the MCP scope and enables dynamic client registration, so Claude Code can connect without a pre-registered client. Without ENTERPRISE the image stays Community and the step skips. Not tested against Enterprise yet: the MCP scope and the registration setting are detected by name, and tests/k8s/test_mcp.py only runs with ai_mcp. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
| fi | ||
| @args=$$(scripts/build-args.sh $(VERSION)) && \ | ||
| if [ -n "$(ENTERPRISE)" ]; then \ | ||
| args="$$args --build-context enterprise=$(ENTERPRISE) --build-arg NOODLE_ENTERPRISE_MODULES=$(ENTERPRISE_MODULES)"; \ |
There was a problem hiding this comment.
Spaces break Enterprise builds
A valid checkout such as ENTERPRISE="/home/user/Enterprise modules" passes the directory check, but docker build $$args splits the path into separate arguments. Docker receives enterprise=/home/user/Enterprise plus modules, so the build fails.
Pass the build context as a separately quoted argument. Also preserve the path when writing .k8s/enterprise; $(abspath $(ENTERPRISE)) treats spaces as separators too.
Summary
Odoo 20's MCP server (
ai_mcp,/mcp) is Enterprise only, and noodle builds Community. This adds an opt-in Enterprise build and documents how to connect Claude Code.make up ENTERPRISE=<dir of Enterprise modules>passes the directory todocker buildas the named build contextenterprise(copied to/mnt/enterprise-addons, never into the repo) and installsai_mcpon top ofODOO_MODULES. It's remembered in.k8s/enterpriselikeVERSION. Without it the image is Community as before.mcpseed step: a fixed admin MCP keyodoo-supersecr3tmcpkeyfordevelop1and dynamic client registration turned on. It skips whenai_mcpisn't installed.ai_mcpis installed, the banner prints the connect commands:claude mcp add --transport http odoo http://odoo.localhost/mcp claude mcp add --transport http odoo http://odoo.localhost/mcp \ --header "Authorization: Bearer odoo-supersecr3tmcpkeyfordevelop1"--client-idor--callback-port.tests/k8s/test_mcp.pychecks the OAuth metadata, MCP tools with the MCP key, and that therpckey is rejected. It's skipped unlessai_mcpis installed.docs/odoo-setup.md, plus README and AGENTS.md.Not tested against Enterprise
We have no Enterprise access, so this follows Odoo's published description of
ai_mcp.seed_mcp.pydetects the MCP key scope (a scope containingmcp) and the dynamic client registration setting (a settings field named likedynamic_client_registration/dcr), and logs a warning when it finds none. Fix both on the first Enterprise run.Test plan
pre-commit run --all-files,make validate/mnt/enterprise-addonsandai_mcpis added toODOO_MODULES(only once, even thoughcommon.shis sourced twice)make reset && make up VERSION=20(Community): starts, themcpstep skips, andmake seed STEPS=apikeys,mcptwice changes nothing the second timemake test-k8s: 21 passed, 3 skipped (the MCP tests)seed_mcp.pyand runtest_mcp.py🤖 Generated with Claude Code