https://github.com/tuanle96/mcp-odoo
MCP Server for Odoo
https://github.com/tuanle96/mcp-odoo
mcp mcp-server mcp-servers odoo odoo-mcp
Last synced: 2 months ago
JSON representation
MCP Server for Odoo
- Host: GitHub
- URL: https://github.com/tuanle96/mcp-odoo
- Owner: tuanle96
- License: mit
- Created: 2025-03-17T14:00:54.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2025-04-02T08:49:26.000Z (3 months ago)
- Last Synced: 2025-04-02T09:36:02.090Z (3 months ago)
- Topics: mcp, mcp-server, mcp-servers, odoo, odoo-mcp
- Language: Python
- Homepage:
- Size: 26.4 KB
- Stars: 46
- Watchers: 8
- Forks: 12
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- mcp-index - Odoo Integration Server - Enable AI assistants to access and interact with Odoo ERP systems by utilizing models, records, and methods through a standardized protocol. Execute custom Odoo methods, retrieve employee and holiday data, and simplify integration with flexible configurations and effective error handling. (Cloud Services)
README
# Odoo MCP Server
An MCP server implementation that integrates with Odoo ERP systems, enabling AI assistants to interact with Odoo data and functionality through the Model Context Protocol.
## Features
* **Comprehensive Odoo Integration**: Full access to Odoo models, records, and methods
* **XML-RPC Communication**: Secure connection to Odoo instances via XML-RPC
* **Flexible Configuration**: Support for config files and environment variables
* **Resource Pattern System**: URI-based access to Odoo data structures
* **Error Handling**: Clear error messages for common Odoo API issues
* **Stateless Operations**: Clean request/response cycle for reliable integration## Tools
* **search_records**
* Search for records in any Odoo model
* Inputs:
* `model` (string): The model name (e.g., 'res.partner')
* `domain` (array): Search domain (e.g., [['is_company', '=', true]])
* `fields` (optional array): Optional fields to fetch
* `limit` (optional number): Maximum number of records to return
* Returns: Matching records with requested fields* **read_record**
* Read details of a specific record
* Inputs:
* `model` (string): The model name (e.g., 'res.partner')
* `id` (number): The record ID
* `fields` (optional array): Optional fields to fetch
* Returns: Record data with requested fields* **create_record**
* Create a new record in Odoo
* Inputs:
* `model` (string): The model name (e.g., 'res.partner')
* `values` (object): Dictionary of field values
* Returns: Dictionary with the new record ID* **update_record**
* Update an existing record
* Inputs:
* `model` (string): The model name (e.g., 'res.partner')
* `id` (number): The record ID
* `values` (object): Dictionary of field values to update
* Returns: Dictionary indicating success* **delete_record**
* Delete a record from Odoo
* Inputs:
* `model` (string): The model name (e.g., 'res.partner')
* `id` (number): The record ID
* Returns: Dictionary indicating success* **execute_method**
* Execute a custom method on an Odoo model
* Inputs:
* `model` (string): The model name (e.g., 'res.partner')
* `method` (string): Method name to execute
* `args` (optional array): Positional arguments
* `kwargs` (optional object): Keyword arguments
* Returns: Dictionary with the method result* **get_model_fields**
* Get field definitions for a model
* Inputs:
* `model` (string): The model name (e.g., 'res.partner')
* Returns: Dictionary with field definitions* **search_employee**
* Search for employees by name.
* Inputs:
* `name` (string): The name (or part of the name) to search for.
* `limit` (optional number): The maximum number of results to return (default 20).
* Returns: List of matching employee names and IDs.* **search_holidays**
* Searches for holidays within a specified date range.
* Inputs:
* `start_date` (string): Start date in YYYY-MM-DD format.
* `end_date` (string): End date in YYYY-MM-DD format.
* `employee_id` (optional number): Optional employee ID to filter holidays.
* Returns: List of holidays found.## Resources
* **odoo://models**
* Lists all available models in the Odoo system
* Returns: JSON array of model information* **odoo://model/{model_name}**
* Get information about a specific model including fields
* Example: `odoo://model/res.partner`
* Returns: JSON object with model metadata and field definitions* **odoo://record/{model_name}/{record_id}**
* Get a specific record by ID
* Example: `odoo://record/res.partner/1`
* Returns: JSON object with record data* **odoo://search/{model_name}/{domain}**
* Search for records that match a domain
* Example: `odoo://search/res.partner/[["is_company","=",true]]`
* Returns: JSON array of matching records (limited to 10 by default)## Configuration
### Odoo Connection Setup
1. Create a configuration file named `odoo_config.json`:
```json
{
"url": "https://your-odoo-instance.com",
"db": "your-database-name",
"username": "your-username",
"password": "your-password-or-api-key"
}
```2. Alternatively, use environment variables:
* `ODOO_URL`: Your Odoo server URL
* `ODOO_DB`: Database name
* `ODOO_USERNAME`: Login username
* `ODOO_PASSWORD`: Password or API key
* `ODOO_TIMEOUT`: Connection timeout in seconds (default: 30)
* `ODOO_VERIFY_SSL`: Whether to verify SSL certificates (default: true)
* `HTTP_PROXY`: Force the ODOO connection to use an HTTP proxy### Usage with Claude Desktop
Add this to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"odoo": {
"command": "python",
"args": [
"-m",
"odoo_mcp"
],
"env": {
"ODOO_URL": "https://your-odoo-instance.com",
"ODOO_DB": "your-database-name",
"ODOO_USERNAME": "your-username",
"ODOO_PASSWORD": "your-password-or-api-key"
}
}
}
}
```### Docker
```json
{
"mcpServers": {
"odoo": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ODOO_URL",
"-e",
"ODOO_DB",
"-e",
"ODOO_USERNAME",
"-e",
"ODOO_PASSWORD",
"mcp/odoo"
],
"env": {
"ODOO_URL": "https://your-odoo-instance.com",
"ODOO_DB": "your-database-name",
"ODOO_USERNAME": "your-username",
"ODOO_PASSWORD": "your-password-or-api-key"
}
}
}
}
```## Installation
### Python Package
```bash
pip install odoo-mcp
```### Running the Server
```bash
# Using the installed package
odoo-mcp# Using the MCP development tools
mcp dev odoo_mcp/server.py# With additional dependencies
mcp dev odoo_mcp/server.py --with pandas --with numpy# Mount local code for development
mcp dev odoo_mcp/server.py --with-editable .
```## Build
Docker build:
```bash
docker build -t mcp/odoo:latest -f Dockerfile .
```## Parameter Formatting Guidelines
When using the MCP tools for Odoo, pay attention to these parameter formatting guidelines:
1. **Domain Parameter**:
* The following domain formats are supported:
* List format: `[["field", "operator", value], ...]`
* Object format: `{"conditions": [{"field": "...", "operator": "...", "value": "..."}]}`
* JSON string of either format
* Examples:
* List format: `[["is_company", "=", true]]`
* Object format: `{"conditions": [{"field": "date_order", "operator": ">=", "value": "2025-03-01"}]}`
* Multiple conditions: `[["date_order", ">=", "2025-03-01"], ["date_order", "<=", "2025-03-31"]]`2. **Fields Parameter**:
* Should be an array of field names: `["name", "email", "phone"]`
* The server will try to parse string inputs as JSON## License
This MCP server is licensed under the MIT License.