Agent skill

managing-odoo

Manage business accounting via Odoo ERP using XML-RPC API. Use when creating invoices, recording expenses, querying financial data, or managing customers and products. NOT when using QuickBooks or Xero (different systems).

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/managing-odoo

SKILL.md

Odoo Accounting MCP Skill

FastMCP server for Odoo ERP integration via XML-RPC API.

Quick Start

bash
# Start MCP server
python src/mcp_servers/odoo_server.py

# Check connection
python -c "from src.mcp_servers.odoo_server import check_connection; print(check_connection())"

MCP Tools

Tool Description
create_customer_invoice Create customer invoice with line items
record_expense Record vendor bill (expense)
get_financial_summary Revenue, expenses, profit for date range
list_recent_invoices List recent customer invoices
list_recent_bills List recent vendor bills
list_products Search/list products
get_partner_details Get customer/vendor details
check_connection Verify Odoo connectivity

Production Gotchas

Invoice Line Format

Invoice lines require Odoo's special tuple format (0, 0, {...}):

python
# ✓ CORRECT - Tuple format for new lines
invoice_line_values.append((0, 0, {
    'product_id': product_id,
    'name': description,
    'quantity': quantity,
    'price_unit': unit_price
}))

# ✗ WRONG - Plain dictionary
invoice_line_values.append({
    'product_id': product_id,
    ...
})

The (0, 0, {...}) means: "Create new record with these values".

Move Types

Odoo uses move_type to distinguish invoice types:

Type Move Type
Customer Invoice out_invoice
Customer Refund out_refund
Vendor Bill in_invoice
Vendor Refund in_refund

Partner Auto-Creation

When customer/vendor doesn't exist, system auto-creates:

  • Customers: customer_rank: 1
  • Vendors: supplier_rank: 1

Product Auto-Creation

Missing products are auto-created as type: 'service'. For physical products, create manually in Odoo.

Partner ID Returns Tuple

Partner fields return [id, name] tuple, not just ID:

python
# partner_id = [42, "Acme Corp"]
customer_name = invoice['partner_id'][1]  # "Acme Corp"
customer_id = invoice['partner_id'][0]    # 42

Financial Summary Only Counts Posted

Only invoices/bills with state: 'posted' are included in financial summaries. Draft invoices are excluded.

Date Format Required

All dates must be ISO format YYYY-MM-DD:

python
# ✓ CORRECT
create_customer_invoice(..., invoice_date="2026-01-30")

# ✗ WRONG
create_customer_invoice(..., invoice_date="01/30/2026")

Circuit Breaker Pattern

API calls use circuit breaker for resilience. After 3 failures, circuit opens for 30 seconds.

Configuration

Required in .env:

bash
ODOO_URL=http://localhost:8069    # Odoo server URL
ODOO_DB=digital_fte               # Database name
ODOO_USERNAME=admin               # Odoo username
ODOO_PASSWORD=your_password       # Odoo password (KEEP SECRET)

Setup

1. Odoo Installation

See docs/setup/ODOO_SETUP.md for full setup guide.

Quick local setup:

bash
docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres --name db postgres:13
docker run -d -p 8069:8069 --link db:db -e HOST=db -e USER=odoo -e PASSWORD=odoo --name odoo odoo

2. Enable XML-RPC

Odoo 14+ has XML-RPC enabled by default. Verify at: http://localhost:8069/xmlrpc/2/common

3. Create API User

For production, create a dedicated API user with appropriate permissions.

Security Notes

  • All financial operations are audit logged
  • Business domain actions use AuditDomain.BUSINESS
  • No approval workflow by default (add via orchestrator if needed)
  • Keep ODOO_PASSWORD in .env, never commit

Connection Caching

Connection is cached globally to avoid repeated authentication:

python
_odoo_connection = None  # Module-level cache

def get_odoo() -> OdooConnection:
    global _odoo_connection
    if _odoo_connection is None:
        _odoo_connection = OdooConnection(...)
    return _odoo_connection

Verification

Run: python scripts/verify.py

Related Skills

  • generating-ceo-briefing - Uses financial data for reports
  • watching-gmail - Detect invoice requests from emails
  • digital-fte-orchestrator - Process accounting tasks

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results