Tools Overview
Complete reference for all 16 MCP tools exposed by Odoo AI MCP Server
MCP Tools Overview
The server exposes 16 curated MCP tools via tools/list and tools/call on POST /mcp. All tool calls share the same authorize → execute → audit pipeline.
Tool Dispatch Pipeline
Rendering diagram…
All Tools
| Tool | Category | Executor | Policy ORM Method | Description |
|---|---|---|---|---|
odoo_status | Meta | _execute_status | none | User identity, companies, model policies, available tools |
odoo_discover | Data | _execute_discover | fields_get / none | Inspect models, fields, methods, actions, reports |
odoo_query | Data | _execute_query | mapped by action | Unified read: search_read, count, read, read_group, name_search |
odoo_search_read | Data | _execute_search_read | search_read | Search and read records with domain + fields |
odoo_search_count | Data | _execute_search_count | search_count | Count records matching a domain |
odoo_get_record_summary | Data | _execute_get_record_summary | read | Compact single-record summary with M2O/O2M formatting |
odoo_create | Data | _execute_create | create | Create a new record |
odoo_write | Data | _execute_write | write | Update, archive, or unarchive records |
odoo_unlink | Data | _execute_unlink | unlink | Delete records — always requires approval |
odoo_execute_kw | Data | _execute_execute_kw | args.method | Call any mapped public ORM method |
odoo_communication | Communication | _execute_communication | mapped by sub_action | Chatter notes, messages, activities, subscriptions |
odoo_email | Communication | _execute_email | mail.mail / mail.template | Send email, render templates, list templates |
odoo_action | Workflow | _execute_action | method name | Execute workflow button methods |
odoo_files | Workflow | _execute_files | parent model read/write | List, download, upload, delete ir.attachment |
odoo_transfer | Workflow | _execute_transfer | export_data / load | Export/import records via Odoo’s native engine |
odoo_report | Workflow | _execute_report | report model read | List and render QWeb PDF/HTML reports |
Response Shape
Every tools/call response uses this structure regardless of success or failure (HTTP 200 is always returned; errors use isError: true):
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"success\": true, \"model\": \"sale.order\", \"records\": [...]}"
}
],
"isError": false
}
}[!NOTE] Permission denials return HTTP 200 with
isError: truein the MCP content — not a JSON-RPC error object. Only pre-execution validation errors (bad JSON, unknown method) return JSON-RPC error objects.
JSON-RPC Error Codes
These codes appear in the JSON-RPC error object for pre-execution failures:
| Code | HTTP Status | Meaning |
|---|---|---|
-32700 | 400 | Invalid JSON in request body |
-32000 | 503 | Gateway inactive (ai_integration.enabled = False) |
-32001 | 401 | Unauthorized — no valid token or session |
-32002 | 429 | Rate limit exceeded |
-32601 | 404 | Unknown JSON-RPC method or tool name |
-32602 | 400 | Invalid params (missing required argument) |
-32603 | 500 | Unhandled server exception |
Optional Parameters (All Tools)
| Parameter | Location | Description |
|---|---|---|
user_prompt | arguments or params._meta | Original user message text — stored in audit log |
_meta.clientInfo.name | params._meta | AI client name — logged in audit trail |
The client name is also read from the X-Client-Name HTTP header or User-Agent as fallbacks.