MCP Server for Odoo
A Model Context Protocol (MCP) server that enables AI assistants to interact with Odoo ERP systems. This server provides tools for searching, creating, updating, and managing Odoo records through a standardized interface.
Custom MCP Server Development
We develop MCP Servers for customers, if you need MCP server for your own system similar to Odoo MCP server, please contact us (https://www.flowhunt.io/contact/).Here is the description how we develop MCP Servers for our customers: https://www.flowhunt.io/services/mcp-server-development/
Demo
๐บ Watch the demo on YouTube
Features
- ๐ Search Records: Query any Odoo model with complex domain filters
- โ Create Records: Add new records to any Odoo model
- โ๏ธ Update Records: Modify existing records
- ๐๏ธ Delete Records: Remove records from the system
- ๐ Read Records: Fetch detailed information about specific records
- ๐ Execute Methods: Call custom methods on Odoo models
- ๐ List Models: Discover available models in your Odoo instance
- ๐ง Model Introspection: Get field definitions for any model
Installation
Via pip (recommended)
pip install odoo-mcp-server
From source
git clone https://github.com/vzeman/odoo-mcp-server.git
cd odoo-mcp-server
pip install -e .
Configuration
Environment Variables
Create a .env
file in your project directory or set these environment variables:
ODOO_URL=https://your-instance.odoo.com
ODOO_DB=your-database-name
[email protected]
ODOO_API_KEY=your-api-key-here
Getting Odoo Credentials
API Key:
- Log into your Odoo instance
- Go to Settings โ Users & Companies โ Users
- Select your user
- Under "API Keys" or "Security" tab, create a new API key
- Copy the key immediately (it won't be shown again)
Database Name:
- Usually visible in the URL when logged in
- Or check Settings โ Activate Developer Mode โ Database Info
Username:
- Your login email address
Usage with Claude Desktop
Add this configuration to your Claude Desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"odoo": {
"command": "python",
"args": ["-m", "mcp_server_odoo"],
"env": {
"ODOO_URL": "https://your-instance.odoo.com",
"ODOO_DB": "your-database",
"ODOO_USERNAME": "[email protected]",
"ODOO_API_KEY": "your-api-key"
}
}
}
}
Available Tools
search_records
Search for records in any Odoo model.
Parameters:
model
(required): The Odoo model name (e.g., 'res.partner', 'sale.order')domain
: Odoo domain filter (default: [])fields
: List of fields to returnlimit
: Maximum number of recordsoffset
: Number of records to skiporder
: Sort order (e.g., 'name asc, id desc')
Example prompts:
- "Find all customers in California"
- "Show me sales orders from last month"
- "List products with stock quantity below 10"
get_record
Get detailed information about specific records.
Parameters:
model
(required): The Odoo model nameids
(required): List of record IDsfields
: List of fields to return (optional)
Example prompts:
- "Show me details of customer with ID 42"
- "Get information about sales order SO0123"
create_record
Create new records in Odoo.
Parameters:
model
(required): The Odoo model namevalues
(required): Dictionary of field values
Example prompts:
- "Create a new customer named 'Acme Corp' with email [email protected]"
- "Add a new product called 'Widget Pro' with price $99.99"
update_record
Update existing records.
Parameters:
model
(required): The Odoo model nameids
(required): List of record IDs to updatevalues
(required): Dictionary of field values to update
Example prompts:
- "Update customer 42's phone number to +1-555-0123"
- "Change the status of sales order SO0123 to confirmed"
delete_record
Delete records from Odoo (use with caution).
Parameters:
model
(required): The Odoo model nameids
(required): List of record IDs to delete
Example prompts:
- "Delete the test customer record with ID 999"
- "Remove cancelled sales orders older than 2 years"
execute_method
Execute custom methods on Odoo models.
Parameters:
model
(required): The Odoo model namemethod
(required): Method name to executeids
: List of record IDs (if method requires)args
: Additional positional argumentskwargs
: Additional keyword arguments
Example prompts:
- "Confirm sales order SO0123"
- "Send invoice INV/2024/0001 by email"
list_models
Discover available models in your Odoo instance.
Parameters:
transient
: Include transient (wizard) models (default: false)
Example prompts:
- "What models are available in Odoo?"
- "Show me all installed models"
get_model_fields
Get field definitions for a model.
Parameters:
model
(required): The Odoo model namefields
: Specific fields to get info for (optional)
Example prompts:
- "What fields are available on the customer model?"
- "Show me the structure of sales orders"
Common Use Cases
Customer Management
"Find all customers who haven't made a purchase in 6 months"
"Create a new contact for Acme Corp named John Doe"
"Update the credit limit for customer 'BigCo Industries'"
Sales Operations
"Show me all draft quotations"
"Create a sales order for customer Acme Corp with 10 units of Product A"
"Convert quotation SO0123 to a confirmed order"
Inventory Management
"List all products with stock below reorder point"
"Update the quantity on hand for SKU-12345"
"Find all pending stock moves"
Financial Operations
"Show me all unpaid invoices"
"Create a vendor bill for Office Supplies Inc"
"List payments received today"
Model Reference
Common Odoo models you can interact with:
res.partner
- Customers, suppliers, and contactssale.order
- Sales orders and quotationsaccount.move
- Invoices and billsproduct.product
- Product variantsproduct.template
- Product templatesstock.move
- Stock movementspurchase.order
- Purchase ordersproject.project
- Projectsproject.task
- Project taskshr.employee
- Employeesres.users
- System usersres.company
- Companies
Security Considerations
- Store credentials securely using environment variables
- Use API keys instead of passwords when possible
- Grant minimum necessary permissions to the API user
- Regularly rotate API keys
- Monitor API usage through Odoo's logs
Troubleshooting
Authentication Failed
- Verify your API key is active in Odoo
- Check if the username is correct (usually your email)
- Ensure the database name matches exactly
Connection Refused
- Verify the Odoo URL (should not include
/web
) - Check if your IP is whitelisted (if applicable)
- Ensure XML-RPC is enabled on your Odoo instance
Model Not Found
- The model might require additional modules to be installed
- Use
list_models
to see available models - Check if you have permissions for that model
Development
Running Tests
pip install -e ".[dev]"
pytest
Type Checking
mypy mcp_server_odoo
Linting
ruff check .
ruff format .
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
For issues and feature requests, please use the GitHub issue tracker.