Skip to content

MCP Server

oa-mcp [host] exposes the same read-only data as an MCP server, for an agent to work an investigation alongside a human on oa [host] — both looking at the same target. Every tool call is pinned to host (local if omitted); a host/ssh_port argument on a tool call must match the pin or is rejected.

oa-mcp-multi instead leaves the target per-call, capped by --host-filter (an odoo dbfilter-style regex; unset means unrestricted) and --host-file (which ~/.ssh/config-style file reads aliases from).

Both default to the stdio transport (spawned by the MCP client); add --transport streamable-http --bind-host ... --bind-port ... to run as a network server instead.

Sensitive data

db_query's params output is masked by default, unlike the TUI's: a tool call has no human at the screen, and the plaintext would land in the agent's context. Unmasking is launch-time only, via --include-sensitive-information on the oa-mcp/oa-mcp-multi command line — never a per-call tool argument, so no tool call can turn it on itself. mail_audit (outbound mail config) follows the same rule for smtp_user/smtp_pass.

--enable-plugins=odooly

The one non-read-only exception: list_odooly_envs, instance_odooly_env, and odooly_run_script match a database against ~/odooly.ini and run the packaged scripts (create_test_job, restore_app_icons, send_test_mail), the same actions the TUI's odooly plugin offers a human through the Toolbox — now callable by the agent directly. Odooly logs in and can write to the matched database, so following the same launch-time-only pattern as --include-sensitive-information, --enable-plugins (comma-separated, or repeat the flag) can only be set on the command line when the server starts — no tool call can enable it from within a session, and all three tools raise if odooly wasn't named there. It needs the odooly extra installed too. Unlike the TUI, the flag stays: exposing write actions to an agent is worth deciding explicitly, and installing a package is not that decision.

odooly_run_script/instance_odooly_env always resolve locally against this machine's own ~/odooly.ini, regardless of host/ssh_port used to pin the server — odooly reaches instances over the network, not over ssh.

send_test_mail sends one real email through mail.mail to check outbound mail actually reaches an inbox; it requires a to recipient, validated before the script is even invoked.

See Keybindings & Tabs — Odooly for what each script does.