Back to skills
SKILL.md
Managing Odoo
ASecurityManage 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).
- 12 stars
- 0 votes
- 0 copies
- 1 view
- Added September 29, 2026
Works with
Security analysis
100/100Pro scans all 2 files and shows the line behind each finding
npx -y skills add AbdullahMalik17/Digital-FTE --skill managing-odoo --agent claude-codeAre you the author of Managing Odoo?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/abdullahmalik17-managing-odoo)---
name: managing-odoo
description: |
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).
---
# 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
Files in this skill
- SKILL.md
- scripts/verify.py
Attribution
Related skills
View all in ai-agents →Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.