Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ODOO_URL | No | Odoo server URL | http://localhost:8069 |
| ODOO_API_KEY | Yes | API Key for Odoo authentication | |
| ODOO_DATABASE | Yes | The name of the Odoo database to connect to | |
| READONLY_MODE | No | Enable read-only mode to prevent write operations (true/false) | false |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_models | List all available Odoo models. Args: name_filter: Optional filter for model name (e.g., 'sale' to find sale-related models) Returns: JSON string with model names and descriptions |
| get_fields | Get field information for an Odoo model using ORM fields_get(). Args: model: Model name (e.g., 'res.partner') field_filter: Optional filter for field name (e.g., 'name' to find name-related fields) fields: Specific field names to retrieve (None = all fields) attributes: Field attributes to return (None = default attributes including type, string, help, required, readonly, store, selection, comodel_name, inverse_name, domain) Returns: JSON array of field definitions. Each field includes: - name: Field name - type: Field type (char, integer, many2one, selection, etc.) - string: Human-readable label - required: Whether field is required - readonly: Whether field is readonly - selection: List of [value, label] pairs (for selection fields) - comodel_name: Related model name (for relational fields) |
| execute_method | Execute any method on an Odoo model. Args: model: Model name (e.g., 'res.partner') method: Method name to execute args: Positional arguments for the method kwargs: Keyword arguments for the method Returns: JSON string with the method result Note: In READONLY_MODE, write methods (create, write, unlink, copy) are blocked. |
| search_records | Search for records in an Odoo model. Args: model: Model name (e.g., 'res.partner') domain: Odoo search domain (list of conditions). Examples: - Simple: [["name", "=", "John"]] - Multiple (AND): [["is_company", "=", True], ["active", "=", True]] - OR condition: ["|", ["name", "ilike", "test"], ["email", "ilike", "test"]] - any (Odoo 19+): [["order_line", "any", [["product_uom_qty", ">", 5]]]] - Operators: =, !=, >, >=, <, <=, like, ilike, in, not in, child_of, any fields: Fields to return (None = auto-exclude dangerous fields like binary/image/html) limit: Maximum number of records offset: Number of records to skip order: Sort order (e.g., 'name asc', 'create_date desc') Returns: JSON with records, total count, limit, and offset. Each record includes a '_url' field for direct browser access. |
| count_records | Count records in an Odoo model matching the domain. Args: model: Model name (e.g., 'res.partner') domain: Odoo search domain (list of conditions). Examples: - Simple: [["active", "=", True]] - Multiple (AND): [["is_company", "=", True], ["country_id", "=", 1]] - OR condition: ["|", ["type", "=", "contact"], ["type", "=", "invoice"]] - any (Odoo 19+): [["order_line", "any", [["product_uom_qty", ">", 5]]]] - Operators: =, !=, >, >=, <, <=, like, ilike, in, not in, child_of, any Returns: JSON string with the count |
| read_records | Read specific records by their IDs. Args: model: Model name (e.g., 'res.partner') ids: List of record IDs to read fields: Fields to return (None = auto-exclude dangerous fields like binary/image/html) Returns: JSON string with the records. Each record includes a '_url' field for direct browser access to that record. |
| create_record | Create new record(s) in an Odoo model. Args: model: Model name (e.g., 'res.partner') values: Dictionary of field values, or list of dicts for batch creation Returns: JSON string containing: - Single creation: {"id": int, "success": bool, "url": str} - Batch creation: {"ids": list[int], "count": int, "success": bool, "urls": list[str]} Note: In READONLY_MODE, this tool is hidden from LLM via tags. |
| update_record | Update existing records in an Odoo model. Args: model: Model name (e.g., 'res.partner') ids: List of record IDs to update values: Dictionary of field values to update Returns: JSON string with: - success: Boolean indicating operation result - updated_ids: List of record IDs - urls: List of browser URLs (only if success=True) - error: Error message (only if success=False) Note: In READONLY_MODE, this tool is hidden from LLM via tags. |
| delete_record | Delete records from an Odoo model. IRREVERSIBLE operation. IMPORTANT: You MUST first call with confirm=False to show the user what will be deleted. Only set confirm=True AFTER the user explicitly approves the deletion. NEVER set confirm=True on the first call. Args: model: Model name (e.g., 'res.partner') ids: List of record IDs to delete confirm: Safety flag. Always call with False first, then True only after user approval. Returns: JSON string with success status or pending confirmation |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| list_models_resource | List all available Odoo models. |
| get_current_user | Get current logged-in user information. |
| get_current_company | Get current user's company information. |