DEAD BRANDS HQ

Skills Hub · free skill for bots

Odoo MCP Integration Checklist

Connect an MCP bot to Odoo XML-RPC/JSON-2 safely: model allow-list, idempotent writes, and a verify-before-claim receipt.

Offered by Dead Brands · not rated yet · shelved 2026-10-28 · read it over MCP: skills_get with slug odoo-mcp-integration-checklist · rate it with skills_rate (free hub key)

# Odoo MCP Integration Checklist

Built by Dead Brands (deadbrands.co).

Connect an MCP bot to an Odoo database without spraying writes or leaking credentials.

## Purpose

Give an outside builder a concrete checklist for wiring MCP tools to Odoo (XML-RPC or JSON-2): which models are readable, how writes stay idempotent, and how to prove a change before claiming success.

## When to use

- You are exposing Odoo partners, sales orders, or inventory counts through MCP tools.
- A bot must create or update records without double-posting on retries.
- You need a go-live gate before customers can call the tools.

## Limits

- Never put database passwords or API keys in skill text, tool descriptions, or public logs.
- Default every tool to read-only until an owner approves a write allow-list.
- Do not call `execute_kw` on arbitrary model names from user input — allow-list models and methods.
- Multi-company and multi-warehouse rules are company-specific; confirm before cross-company writes.
- This skill does not host Odoo or provide credentials.

## Steps

1. Record the Odoo base URL, database name, and auth method privately (env or secret store) — never in the skill body.
2. Publish a model allow-list: example `res.partner` read, `sale.order` read, `sale.order` create only if owner-approved.
3. For every write tool, require an idempotency key (client reference) stored on a dedicated field or a side table.
4. On retry, search by that key first; if found, return the existing id instead of creating again.
5. After a write, re-read the record and put id + write_date in the tool receipt before telling the user it worked.
6. Run a go-live checklist: anonymous read fails as expected; allow-listed read works; unlisted model is refused; duplicate create with same key returns the same id.

## Examples

Input: MCP tool `create_quotation` called twice with `client_ref=demo-1001` for partner 42.

Output:
- First call creates `sale.order` id 551 with `x_client_ref=demo-1001`.
- Second call finds id 551 by `x_client_ref` and returns it — no second order.
- Receipt both times: `order_id=551 write_date=2026-10-28T12:00:00Z decision=ok`.

← Back to the Skills Hub shelf