Skip to content

Installation

New in v1.6.0

  • Install commands by surface: /plugin install ... inside Claude Code, or claude plugin install ... --scope user in a terminal. A /plugin command typed in PowerShell fails. See As a Claude plugin.
  • Two copies of odoo-tools: the signs, and the copies check and the options check that leave one current copy. See Two copies of odoo-tools.
  • odoo_version names the copy that answers (plugin block). See Verify.
  • Windows: without the python3 command, claude mcp list reports the server as Failed to connect with Connection closed. The PowerShell command that fixes it is in Requirements.
  • The not_started status and a local session: the status not_started with the reason user_config_unsupported is the Cowork and Claude chat case, and no update changes it. Use a local session of the Code tab or Claude Code on your computer; Claude Code needs no administrator rights. See As a Claude plugin.
  • Docker: the sandbox of Odoo 14.0 to 19.0 comes with an API key for the plugin (see Local deployment), and the container mode image is ghcr.io/transgenia/odoo-mcp-tools:1.6.0.

New in v1.5.1

  • New session-start hook, hooks/session_start.py, in place of hooks/check_options.py: it reads no plugin option and no credential. When the last 14 days record neither a successful connection to Odoo nor a server start with every connection setting, it says where the Odoo tools run. See Verify.
  • Local diagnostics: the server writes metadata to ${CLAUDE_PLUGIN_DATA}/diagnostics (ODOO_DIAG_DIR), and /odoo-tools:odoo-doctor turns it into a support report. See Support.
  • Credentials: the server no longer reads ODOO_HTTP_BEARER; it reads only the API key or password that the plugin options pass to it.
  • Docker: the container mode of /odoo-tools:deploy-local marks the plugin's data folder so that the hook stays silent, and its image is ghcr.io/transgenia/odoo-mcp-tools:1.5.1.

New in v1.5.0

Secure permissions by default. To keep the 1.4 behavior, set the Permission profile option to full.

  • Two new options, both with defaults: Permission profile (standard; also readonly, builder or full) and Permission policy file (empty, or the absolute path to a JSON file with per-model rules). See Permission policy.
  • Read-only mode now hides the write tools (calling one still explains why it is refused).
  • Audit log: the server writes one line per tool call to the plugin's data folder (${CLAUDE_PLUGIN_DATA}/audit), and keeps it 90 days.
  • Offline check of a policy file with --check-policy.
  • Docker: the environment file can set the policy and the audit folder; the header-based multi-tenant path was removed.
  • The container mode image is ghcr.io/transgenia/odoo-mcp-tools:1.5.0.

New in v1.4.1

A documentation and diagnostics release: the MCP server's behavior does not change.

  • One-step install: /plugin install odoo-tools --marketplace Transgenia/MCP-Odoo-Tools-CE-EE-and-online (Claude Code 2.1.275 or later). On older versions the usual two commands still work.
  • Where the tools run: the Odoo tools run in Claude Code; Cowork and Claude chat load the skills and commands without the tools. See Where it works.
  • Missing-options notice at session start: a second SessionStart hook tells you which required options (URL, database, login) have no saved value. It never reads the API key or password. See Security.
  • Configuration without a dialog: claude plugin configure (Claude Code 2.1.285 or later) for remote or headless machines.
  • Windows: the session-start hooks need Git Bash (see Requirements).
  • The container mode image is ghcr.io/transgenia/odoo-mcp-tools:1.4.1.

New in v1.4.0

  • 28 tools: six new ones for Odoo Online, useful on any Odoo 10-19 (odoo_online_profile, odoo_api_catalog, odoo_access_check, odoo_record_documents, odoo_import_preview, odoo_import). See the Tools reference.
  • JSON-2 transport: on Odoo saas~18.4 / 19.0+ with an API key, auto mode uses Odoo's new JSON-2 API, because Odoo 22 and Odoo Online saas~21.1 remove /xmlrpc and /jsonrpc. New json2 value for Transport preference. See Compatibility.
  • odoo_read_group uses formatted_read_group from saas~18.4 on and keeps its classic output.
  • Odoo Community 10.0 to 19.0 sandbox (was 16.0 to 19.0). See Local deployment.
  • Fixed: odoo_version no longer reports success with a wrong API key or password; an HTTP 429 no longer switches transport.

New in v1.3.0

  • Guided route: /odoo-tools:odoo-setup-mcp walks you through setup, verification, training, daily use and deployment. See Quickstart.
  • Local infrastructure: /odoo-tools:deploy-local starts an Odoo 16-19 sandbox on Docker, or the MCP server as a container (ghcr.io/transgenia/odoo-mcp-tools) for machines without Python. See Local deployment.
  • Releases and packages: every version is published as a GitHub Release (plugin zip + sdist/wheel) and as a GHCR image.
  • Support: connection errors say how to fix them and whom to contact. Nothing to reconfigure when you update.

Changes in v1.2.0

Starting with version 1.2.0, the MCP server no longer uses uv (nor uv run --frozen). The plugin launches it with python3 directly from the bundled source, with no third-party runtime dependencies (Python standard library only): nothing is installed or downloaded at start, and server/uv.lock was removed. You do not need to reconfigure anything: the plugin options you already entered are kept; you just need python3 3.9 or newer on the PATH instead of uv (see Requirements below). Also:

  • Timeout: the ODOO_TIMEOUT default goes from 30 to 120 s (Odoo's default limit_time_real), and it is now the Request timeout plugin option. XML-RPC honors it too: before, an unresponsive Odoo could block an XML-RPC call indefinitely.
  • All 9 skills and commands now load. Before, a skills/SKILL.md at the root of skills/ hid 5 of the 6 skills, so /odoo-tools:odoo-setup-mcp did not exist.
  • Fixed a deadlock in odoo_version on Community instances.
  • Tool arguments are validated against each tool's schema: if they do not match, the call is refused with Input validation error: ... before reaching Odoo.
  • In auto mode, a write is never replayed over XML-RPC after a timeout or an HTTP 5xx: the error says the call "may or may not have been applied". See Troubleshooting.

Changes in v1.1.0 / migration

Starting with version 1.1.0, the plugin is configured through plugin options (userConfig) and no longer reads ODOO_* environment variables from your shell. If on v1.0.0 you exported ODOO_* in ~/.bashrc, ~/.zshrc or with setx, enter those values once in /plugin → odoo-tools → Configure options (you can then remove them from your shell profile). The standalone server (Docker, python -m odoo_mcp) still reads the ODOO_* variables.

Install it once, from Transgenia's marketplace, in one of these two ways.

Inside Claude Code (typed in a session):

/plugin install odoo-tools --marketplace Transgenia/MCP-Odoo-Tools-CE-EE-and-online
/odoo-tools:odoo-setup-mcp

In a terminal (PowerShell, Terminal or bash), for every folder:

claude plugin install odoo-tools --marketplace Transgenia/MCP-Odoo-Tools-CE-EE-and-online --scope user

then start Claude Code and type /odoo-tools:odoo-setup-mcp. A /plugin command goes inside Claude Code, never in the terminal: typed in PowerShell, it fails with a "not recognized" error. A claude plugin command goes in the terminal, never in the chat. On Windows, if claude is not recognized right after you install Claude Code, open a new PowerShell window (see Requirements).

The first form adds the marketplace and installs the plugin in one step (Claude Code 2.1.275 or later). On an older Claude Code, which has no --marketplace flag, add the marketplace first, inside Claude Code:

/plugin marketplace add Transgenia/MCP-Odoo-Tools-CE-EE-and-online
/plugin install odoo-tools

Claude Code needs no administrator rights: its native installer puts it in your home folder (~/.local/bin/claude on macOS and Linux), and on Windows Anthropic's guide says you do not need to run it as Administrator. On a Team or Enterprise plan your organization decides which plugins you get and whether the Code tab of Claude Desktop offers local sessions.

The Claude plugin directory publishes a version only after Anthropic reviews it, so it can offer an older odoo-tools than Transgenia's marketplace (for example 1.4.0, before the permission policy of 1.5.0), and checking for updates in the Claude apps finds no newer version until then. In Cowork and Claude chat no version runs the Odoo tools, so an update does not change that there. Install one copy only: the guided route checks it (see Two copies of odoo-tools).

Claude Code prompts for the connection details when the plugin is enabled. To change them later: /plugin → odoo-tools → Configure options, or /plugin configure <id> in a session (VS Code: the gear icon on the plugin's row). The options dialog does not say which copy of the plugin it edits.

The plugin options exist only in Claude Code

Cowork does not prompt for plugin options and ignores this plugin's MCP server, because its connection options have no default, and Claude chat ignores a plugin's local MCP server. So the Odoo tools are not available in either (the skills and commands still load). Claude Desktop names that case for this plugin's server with the status not_started and the reason user_config_unsupported; no update of the plugin changes it. A cloud session of Claude Code is a separate case: it has the plugin synced but not its options, which stay on the computer where you entered them, so use a local session. On claude.ai on the web, the plugin's three-dot menu offers actions such as remove, edit with Claude or duplicate, and no place for the connection options. See Where it works and Troubleshooting.

Without the interactive dialog (claude plugin configure)

In scripts, or on remote or headless machines (Claude Code 2.1.285 or later):

  • claude plugin configure <id> --json lists the options without a saved value. On a working setup that list still holds the credential you do not use (API key or password) and the options that have defaults; only odoo_url, odoo_db, odoo_login and one credential must be set.
  • claude plugin configure <id> --values-stdin saves values read from stdin as a JSON object of single-line strings. Restart Claude Code afterwards.

<id> is the full name@marketplace id that claude plugin list shows (for example odoo-tools@synced for a plugin synced from your Claude account). Pipe the JSON from a protected file or your secret manager; never type the key in the command line or in the chat.

The plugin's mcpServers entry launches the server with:

python3 ${CLAUDE_PLUGIN_ROOT}/server/run_stdio.py

run_stdio.py puts the bundled source in server/src first on sys.path (so no other odoo_mcp package installed on your machine can shadow it) and starts the stdio MCP server. The server uses only the Python standard library (the MCP protocol and the JSON-2, JSON-RPC and XML-RPC transports are implemented on it), so it installs and downloads nothing at start: the code that runs is exactly the readable code shipped in the plugin folder. No PyPI publication, no uv and no virtualenv are needed.

Plugin options

Option Required Notes
Odoo URL yes scheme + host, e.g. https://my-company.odoo.com (no trailing path)
Odoo database yes database name
Odoo login yes login (usually an email) of the Odoo user; prefer a least-privilege user
Odoo API key yes* Odoo ≥ 14: Preferences → Account Security → New API Key. Odoo 19+ needs it for JSON-2, the only API left in Odoo 22. sensitive option
Odoo password (Odoo < 14 only) yes* Odoo 10-13 only (no API keys). sensitive option
Transport preference no auto (default) / json2 / jsonrpc / xmlrpc. auto uses JSON-2 on Odoo saas~18.4 / 19.0+ with an API key, and JSON-RPC then XML-RPC otherwise
Request timeout no number, maximum seconds per Odoo call (default: 120, Odoo's default limit_time_real; min 5, max 3600); maps to ODOO_TIMEOUT
Read-only mode no boolean (default: off); the write, delete, import and Studio tools are not listed, and calling one is refused before anything reaches Odoo (maps to ODOO_READONLY)
Permission profile no standard (default), readonly, builder or full: what the Odoo tools may do on top of the Odoo user's own access rights. full keeps the 1.4 behavior. See Permission policy (maps to ODOO_POLICY)
Permission policy file no empty (default), or the absolute path to a JSON file with per-model rules on top of the profile, e.g. ~/.config/odoo-tools/policy.json. Keep it outside your projects. Read once when the server starts (maps to ODOO_POLICY_FILE)

* fill one of the two: API key (Odoo ≥ 14) or password (Odoo < 14).

The plugin's mcpServers entry also sets ODOO_AUDIT_DIR to ${CLAUDE_PLUGIN_DATA}/audit and ODOO_AUDIT_RETENTION_DAYS to 90: the server writes one audit line per tool call, with names and counts, never values or secrets (see Audit trail). Since v1.5.1 it also sets ODOO_DIAG_DIR to ${CLAUDE_PLUGIN_DATA}/diagnostics: the server's local diagnostics, metadata only (see Local storage).

The default profile is standard

Under standard, odoo_unlink, odoo_add_field and odoo_add_automation are not listed, and, among other things, outbound email (except internal notes) and changes to users, rights, modules and settings are refused. If your workflow needs everything the Odoo user may do, choose full; for fields, views and automations on a sandbox, builder. A profile change needs a reconnect of the server (/mcp).

The sensitive options (API key and password) are entered masked and stored in the operating system's secure credential store, never in settings.json or your shell profile. You do not need to (and should not) export ODOO_* in ~/.bashrc, ~/.zshrc or with setx for the plugin.

Two copies of odoo-tools

Claude Code can run two copies with the same name at once, for example one from the Claude plugin directory in a project folder and one from Transgenia's marketplace for your user. Then the options you save can go to one copy while the tools of the other answer. The signs:

  • Configure options shows no Permission profile (a copy older than 1.5.0);
  • odoo_version answers without a policy block;
  • the plugin's Errors tab says Plugin option "odoo_url" isn't set for a copy you never configured. That message comes from Claude Code: the copy it names (shown in claude plugin list) has no saved options.

Since v1.6.0, odoo_version names the copy that answers (plugin.copy, see Verify), and the guided route stops on a copy older than 1.5.0, before any write.

The copies check and the options check

Inside Claude Code, the guided route (/odoo-tools:odoo-setup-mcp) and /odoo-tools:odoo-doctor run the copies check and, for the copy it keeps, the options check. These are the shell commands, which Claude runs for you in Claude Code:

claude plugin list --json | python3 "${CLAUDE_PLUGIN_ROOT}/server/run_stdio.py" --check-copies
claude plugin configure <id> --json | python3 "${CLAUDE_PLUGIN_ROOT}/server/run_stdio.py" --check-options

${CLAUDE_PLUGIN_ROOT} is the plugin folder, and <id> the copy to keep, such as odoo-tools@transgenia-odoo-tools. Each check reads on stdin the JSON that a Claude Code command prints: it runs no program, contacts nothing and never prints a sensitive value, whatever the input holds. Both read UTF-8, also from a Windows pipe. It exits 0 when there is nothing to fix, 1 when there is something, and 2 when the input is not that JSON; --json prints the report as JSON. The options check needs Claude Code 2.1.285 or later. If claude is not found, its full path is "$HOME/.local/bin/claude".

This is the copies check with an old copy from the directory in a project folder and a current one from Transgenia's marketplace:

odoo-tools copies Claude Code knows in this folder:
  active       odoo-tools@anthropic-plugin-directory 1.4.0 (project, ~/projects/odoo)
  active       odoo-tools@transgenia-odoo-tools 1.6.0 (user)
  not loaded   odoo-tools@synced unknown (synced from claude.ai): a copy on this computer has the same name and takes precedence
To fix:
  - 2 copies are active at once, so Claude Code may use the tools of one and the options of another. Keep one: odoo-tools@transgenia-odoo-tools 1.6.0 (user).
  - odoo-tools@anthropic-plugin-directory 1.4.0 (project, ~/projects/odoo) is older than 1.5.0: it has no permission policy, profile or audit log.
In a terminal (PowerShell, Terminal or bash), not inside Claude Code:
  cd ~/projects/odoo
  claude plugin uninstall odoo-tools@anthropic-plugin-directory --scope project
Then restart Claude Code, or run /reload-plugins inside it.
Result: 2 to fix

How to read it:

  • Each copy comes with its state, id, version and scope: active (loaded in this folder), not loaded (a claude.ai copy behind a local copy of the same name, which takes precedence), other folder (an installation of another folder, with the note installed for that folder only) or disabled. One plugin id installed in two scopes is one copy, and a project or local installation counts only in its own folder: its project folder, or a folder inside it.
  • To fix says what to correct: two copies active at once, or a copy older than 1.5.0, with no permission policy, profile or audit log. It names the copy to keep and prefers, in this order, one with the permission policy, the one from Transgenia's marketplace, the newest, and the one in your user scope.
  • In a terminal gives the exact commands that remove the others: a cd to the project folder, quoted when bash or PowerShell needs it (a Windows path is written with /), then claude plugin uninstall <id> --scope <scope> (for a copy in your user scope, only --scope user, with no cd). If the folder name contains ", $, `, !, [ or ] (wildcards for PowerShell's cd), or if it is a network path (with \), a comment line, # first change to this folder by hand: ..., comes instead of the cd: change to that folder yourself. Run them in PowerShell, Terminal or bash, never as /plugin commands, then restart Claude Code or run /reload-plugins inside it.
  • A copy managed on claude.ai cannot be removed from the terminal: the Note: line says to remove it there (Customize, Plugins). When every active copy is older than 1.5.0, it also gives the commands that leave a current copy. For an old copy from Transgenia's marketplace they are claude plugin marketplace update transgenia-odoo-tools, then claude plugin update odoo-tools@transgenia-odoo-tools --scope <scope>, with a cd to the project folder first for a project or local copy. Uninstalling and installing again can reuse an outdated local copy of the marketplace and put the same old version back. The update commands always work. For a copy from another marketplace, the commands that remove it, then the one that installs the copy from Transgenia's marketplace. When no copy is active, it gives the command that installs one. Before an install, when Transgenia's marketplace is already known, it updates it first.
  • Result: ok, or how many things there are to fix.

The options check lists the Odoo URL, the database, the login, which credential is set (API key, password or none, never its value), Read-only mode and, on a copy with the permission policy, the profile and the policy file. Of the URL it shows only the scheme, host and port: it never repeats user info, a path, a query or a fragment, which can hold a password or a copied portal link's token. When the URL holds an @, or when it cannot read a host, it says the URL is set and shows no part of it: a password with # or ? would move where the URL is split. Under To fix it flags a copy without the Permission profile option (older than 1.5.0: run the copies check), the required options that are missing, a missing credential, a URL with any @ (refused as holding a user name or password) and a URL that is not scheme and host only. Under Note: it warns about an API key and a password set at once (the API key is used), the trailing / of the URL (ignored), plain http to another computer and a request timeout under 30 s. You enter the missing options in the dialog that you open inside Claude Code with /plugin configure <id>, never in the chat.

Removing a copy from the terminal

Without Claude, in a terminal and from the project folder, claude plugin list shows every copy with its version and scope; keep one odoo-tools@... and remove the others there:

claude plugin list
claude plugin uninstall odoo-tools@anthropic-plugin-directory --scope project

Use the id and the scope that claude plugin list shows (--scope user for a copy installed for your user), then restart Claude Code. The directory's copy is odoo-tools@anthropic-plugin-directory; there is no odoo-tools@claude-plugins-official.

If the copy you keep is an old copy from Transgenia's marketplace (older than 1.5.0), do not uninstall it to install it again: the install can reuse an outdated local copy of the marketplace and put the same old version back. The update commands always work: update the marketplace, then the copy, with the scope that claude plugin list shows (for a project or local copy, from the project folder):

claude plugin marketplace update transgenia-odoo-tools
claude plugin update odoo-tools@transgenia-odoo-tools --scope user

Run the MCP server directly (standalone)

# from a checkout, with python3 3.9+ (nothing to install)
python3 server/run_stdio.py

# or installed as a package (a virtualenv is recommended); provides the odoo-mcp command
pip install ./server && odoo-mcp

Requirements

  • MCP server: python3 3.9 or newer on the PATH. Nothing else: zero third-party runtime dependencies. Check it with python3 --version.
    • macOS: python3 ships with Apple's Command Line Tools (xcode-select --install). If your Mac asks for an administrator to install them and you are not one, your IT team installs them, or ask Transgenia for assisted setup.
    • Linux: distributions ship python3 (if it is missing, install it with your package manager, e.g. sudo apt install python3).
    • Windows: the command must be named python3. The Microsoft Store Python provides python3.exe; the python.org installers only create python.exe/py.exe: install the Microsoft Store Python or put a python3.exe on the PATH (a copy of or hard link to python.exe in the same folder; the PowerShell command is below). A PowerShell or doskey alias is not enough, because Claude Code starts the command directly. Without python3, claude mcp list reports the plugin's server as Failed to connect with Connection closed, and nothing names Python. See Troubleshooting.
    • Windows, session-start hooks: they are shell commands, so they need Git for Windows (Git Bash). Without it Claude Code runs them in PowerShell, where they fail with a SessionStart hook error. If Git Bash is installed but Claude Code does not find it, set CLAUDE_CODE_GIT_BASH_PATH. The MCP server is not affected.
    • Windows, after installing Claude Code, Git or Python: open a new PowerShell window and restart Claude Code; a window opened before the install does not see the new PATH (claude is not recognized, or where.exe git finds nothing). Claude Code's native installer puts claude.exe in %USERPROFILE%\.local\bin.
  • Fallback CLI (optional): Node.js 18+.

Windows: a python3.exe next to python.exe

The hard link, in PowerShell:

$python = (Get-Command python -ErrorAction Stop).Source
New-Item -ItemType HardLink -Path (Join-Path (Split-Path $python) "python3.exe") -Target $python

It needs write access to the Python folder: for an installation under C:\Program Files, run PowerShell as administrator. If Get-Command python finds nothing, or a file under WindowsApps, Python is not on PATH: run the python.org installer again and select "Add python.exe to PATH", or install the Microsoft Store Python. CI checks this fix on Windows (windows-launch.yml).

Optional extras

pip install -e "./server[cache]"    # schema cache with TTL (cachetools)
pip install -e "./server[metrics]"  # Prometheus metrics at /metrics
pip install -e "./server[otel]"     # OpenTelemetry traces (OTLP)

The extras never block startup: if they are not installed, those capabilities simply stay inactive (graceful degradation; the schema cache then uses a standard-library implementation). The plugin installs no extras.

Standalone configuration (environment variables)

Applies only when you run the server outside the plugin (Docker, python -m odoo_mcp, python3 server/run_stdio.py from a checkout). Inside the plugin, these values are filled from the plugin options.

Variable Required Notes
ODOO_URL yes https://host (no trailing path)
ODOO_DB yes database name
ODOO_LOGIN yes login email
ODOO_API_KEY yes* Odoo ≥ 14; created in Account Security. The only credential JSON-2 accepts
ODOO_PASSWORD yes* use it in Odoo < 14 (no API keys)
ODOO_TRANSPORT_PREF no auto (default) / json2 / jsonrpc / xmlrpc (see Compatibility)
ODOO_READONLY no 1 lists and runs only the read tools (option Read-only mode)
ODOO_POLICY no permission profile: readonly, standard (default), builder or full (option Permission profile, see Permission policy)
ODOO_POLICY_FILE no absolute path to an optional policy file (option Permission policy file)
ODOO_AUDIT_DIR no audit folder; stderr (the default outside the plugin) or off
ODOO_AUDIT_RETENTION_DAYS no days an audit file is kept (default 90; 0 keeps them)
ODOO_DIAG_DIR no folder of the local diagnostics (server.jsonl, metadata only); unset or off writes nothing. The plugin passes ${CLAUDE_PLUGIN_DATA}/diagnostics
ODOO_TIMEOUT, ODOO_CACHE_TTL no integers (seconds); ODOO_TIMEOUT (120 by default) applies to JSON-RPC and, since v1.2.0, to XML-RPC too
ODOO_METRICS, ODOO_OTEL_ENDPOINT no optional observability

* you must set one of ODOO_API_KEY or ODOO_PASSWORD.

The MCP server does not persist credentials to disk; its audit lines only hold names, counts and timings, and its local diagnostics only metadata. Transgenia does not receive your credentials or your data; tool results do go back to your MCP client and your model provider, as with any tool. See Privacy.

Check a policy file before you configure it (offline, nothing is sent to Odoo):

python3 server/run_stdio.py --check-policy ~/.config/odoo-tools/policy.json --explain res.users:write

See --check-policy.

The support report also runs offline: python3 server/run_stdio.py --diagnose reads the local diagnostics (ODOO_DIAG_DIR) and the audit (ODOO_AUDIT_DIR), or the folders you pass with --diag-dir and --audit-dir, and never contacts Odoo. See Support.

Fallback CLI (optional)

/odoo-tools:odoo-setup-cli

Requires Node.js 18+. It installs the CLI in ~/.claude/tools/odoo-cli and creates a local .env there, readable only by your user, with placeholders: you paste the secret (API key or password) yourself in your own editor; Claude never asks for it in the chat. See the Fallback CLI page for the command details.

Docker (optional)

The repository's docker/ directory builds an image that runs the same stdio server. Attach with docker run -i --rm --env-file ./odoo.env odoo-mcp-tools, where odoo.env is a file you create with the ODOO_* variables (chmod 600, kept out of version control). That file can also set the permission policy and the audit folder; mount the policy file read-only and the audit folder writable by the container's user (mcp):

# in odoo.env
# ODOO_POLICY=standard
# ODOO_POLICY_FILE=/policy/policy.json
# ODOO_AUDIT_DIR=/audit

docker run -i --rm --env-file ./odoo.env \
  -v ~/.config/odoo-tools/policy.json:/policy/policy.json:ro \
  -v ~/.odoo-tools/audit:/audit ghcr.io/transgenia/odoo-mcp-tools:1.6.0

Without an audit folder, the audit lines go to docker logs. Since v1.5.0 the server never takes an Odoo URL or secret from a client request: the header-based multi-tenant path (X-Odoo-Url/Db/Login + Bearer) was removed, and ODOO_MULTITENANT is still parsed but reserved, with no effect. Since v1.5.1 the server reads no other credential: ODOO_HTTP_BEARER, which it read but never used, is no longer read. Without ODOO_DIAG_DIR, the container writes no local diagnostics. A remote HTTP mode, where the server keeps the Odoo credential and clients authenticate to it, is on the roadmap and needs its own design.

Verify

Call the odoo_version tool (or run /odoo-tools:odoo-doctor). A successful response reporting version, edition, deployment and transport confirms the end-to-end installation (since v1.4.0, odoo_version signs in first, so a wrong credential no longer passes as a working connection). See Connection and discovery.

If at session start you see a notice that begins with odoo-tools: In Cowork and Claude chat this plugin's Odoo tools do not run, the local diagnostics record, in the last 14 days, neither a successful connection to Odoo nor a server start with every connection setting. In Claude Code, enter the options in Configure options and restart; in Cowork or Claude chat, open a local session of the Code tab of Claude Desktop. See Troubleshooting.

Since v1.5.0, the odoo_version response includes a policy block with the active profile, the digest and the hidden tools. If at session start the plugin tells you that the policy locked the tools at the last server start (the permission policy locked the Odoo tools), ask Claude to call odoo_version for the reason, fix the option or the file and reconnect the server with /mcp. See Troubleshooting.

Since v1.6.0 the response also carries a plugin block: the odoo-tools version that answered and, in Claude Code, its installed copy (plugin@marketplace, for example odoo-tools@transgenia-odoo-tools), also when the policy is locked. A response without a policy block comes from a copy older than 1.5.0: the guided route and /odoo-tools:odoo-doctor stop there. See Two copies of odoo-tools.