Two tools. Infinite possibilities. Full Odoo API access.
An advanced MCP (Model Context Protocol) server implementation for Odoo ERP systems, enabling AI assistants to interact with Odoo data and functionality using STDIO, SSE, StreamingHttp.
Connect AI assistants to Odoo with just two universal tools:
- execute_method- Call any Odoo method on any model
- batch_execute- Execute multiple operations atomically
No complexity. No limitations. Full Odoo API access.
Everything you need, just ask AI: automate, query, manage, customize, develop new modules, integrate with external systems, enhance your Odoo instance through AI.
Option 1: Traditional pip install
# From source
git clone https://github.com/AlanOgic/mcp-odoo-adv.git
cd mcp-odoo-adv
# Virtual Environment
python3 -m venv .venv
source .venv/bin/activate
# Installation
pip install -e .Option 2: Using uvx (No Installation)
# From source directory
uvx --from . odoo-mcp
Option 3: Using Docker
# build STDIO
docker build -t alanogic/mcp-odoo-adv:latest -f Dockerfile .
# build SSE
docker build -t alanogic/mcp-odoo-adv-sse:latest -f Dockerfile.sse .
# build HTTP
docker build -t alanogic/mcp-odoo-adv-http:latest -f Dockerfile.http .
# Run STDIO
docker run --env-file .env alanogic/mcp-odoo-adv:latest
# Run SSE
docker run --env-file .env alanogic/mcp-odoo-adv-sse:latest
# Run HTTP
docker run --env-file .env alanogic/mcp-odoo-adv-http:latestCreate a .env file (minimum):
cp .env.example .env
vim .envODOO_URL=https://your-odoo-instance.com
ODOO_DB=your-database-name
ODOO_USERNAME=your-username
ODOO_PASSWORD=your-password-or-api-keyOptional: Custom Configuration Directory
Organize multiple Odoo configurations by setting a custom directory:
# Create custom config directory
export ODOO_CONFIG_DIR=~/mcp-odoo-env
mkdir -p $ODOO_CONFIG_DIR
# Copy and configure
cp .env.example $ODOO_CONFIG_DIR/.env
vim $ODOO_CONFIG_DIR/.env
# Run server (automatically uses custom directory)
python run_server.pyThis is useful for:
- Managing multiple Odoo instances (dev, staging, production)
- Organizing configs outside project directory
- Docker/Compose deployments with volume mounts
# STDIO (Claude Desktop)
python run_server.py
# SSE (Web browsers)
python run_server_sse.py
# HTTP (API integrations)
python run_server_http.pyOption 1: Using local installation
Add to claude_desktop_config.json:
{
  "mcpServers": {
    "odoo": {
      "command": "python",
      "args": ["-m", "odoo_mcp"],
      "env": {
        "ODOO_URL": "https://your-instance.odoo.com",
        "ODOO_DB": "your-database",
        "ODOO_USERNAME": "your-username",
        "ODOO_PASSWORD": "your-password"
      }
    }
  }
}Option 2: Using uvx (Recommended - No Installation)
First, create your credentials in ~/.config/odoo/.env:
mkdir -p ~/.config/odoo
cat > ~/.config/odoo/.env << 'EOF'
ODOO_URL=https://your-instance.odoo.com
ODOO_DB=your-database
ODOO_USERNAME=your-username
ODOO_PASSWORD=your-password
EOFThen add to claude_desktop_config.json:
{
  "mcpServers": {
    "odoo": {
      "command": "uvx",
      "args": ["--from", "odoo-mcp", "odoo-mcp"]
    }
  }
}Benefits:
- No installation required - uvx downloads and runs automatically
- Credentials stored securely in .envfile (not in config)
- Always uses the latest published version
- Works from anywhere on your system
Option 3: Using Docker
{
  "mcpServers": {
    "odoo": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "ODOO_URL=https://your-instance.odoo.com",
        "-e", "ODOO_DB=your-database",
        "-e", "ODOO_USERNAME=your-username",
        "-e", "ODOO_PASSWORD=your-password",
        "alanogic/mcp-odoo-adv:latest"
      ]
    }
  }
}Or with .env file:
{
  "mcpServers": {
    "odoo": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--env-file", "/absolute/path/to/.env", "alanogic/mcp-odoo-adv:latest"]
    }
  }
}Execute ANY Odoo method on ANY model. Full API access. No limitations.
execute_method(
    model="<model_name>",
    method="<method_name>",
    args_json='[...]',      # Positional arguments
    kwargs_json='{...}'     # Keyword arguments
)Examples:
# Search customers
execute_method(
    model="res.partner",
    method="search_read",
    args_json='[[["customer_rank", ">", 0]]]',
    kwargs_json='{"fields": ["name", "email"], "limit": 20}'
)
# Create sales order
execute_method(
    model="sale.order",
    method="create",
    args_json='[{"partner_id": 8, "order_line": [[0, 0, {"product_id": 5, "product_uom_qty": 1}]]}]'
)
# Confirm order
execute_method(
    model="sale.order",
    method="action_confirm",
    args_json='[[5]]'
)Execute multiple operations atomically. All succeed or all rollback.
batch_execute(
    operations=[
        {
            "model": "res.partner",
            "method": "create",
            "args_json": '[{"name": "New Customer"}]'
        },
        {
            "model": "sale.order",
            "method": "create",
            "args_json": '[{"partner_id": 8}]'
        }
    ],
    atomic=True  # All succeed or all fail
)Before using the tools, check these resources:
- odoo://model/{model}/schema- Field definitions, relationships, required fields
- odoo://model/{model}/access- Your permissions (read/write/create/delete)
- odoo://methods/{model}- Available methods for a model
- odoo://workflows- Business workflows (Sales, CRM, Inventory, etc.)
- odoo://server/info- Odoo version and installed modules
π COOKBOOK.md - 40+ practical examples:
- Searching & filtering
- Creating records
- Updating & deleting
- Working with relationships
- Business workflows
- Batch operations
- Advanced patterns
Start here! The cookbook shows you how to accomplish anything with just 2 tools.
User-selectable templates in Claude's menu:
- search-customers- Find customers with filters
- create-sales-order- Create sales orders step-by-step
- odoo-exploration- Discover your Odoo instance capabilities
execute_method(
    model="hr.employee",
    method="search_read",
    args_json='[[["name", "ilike", "john"]]]',
    kwargs_json='{"fields": ["name", "job_id", "department_id"], "limit": 10}'
)execute_method(
    model="hr.leave",
    method="search_read",
    args_json='[[
        ["employee_id", "=", 1],
        ["date_from", ">=", "2025-01-01"],
        ["state", "=", "validate"]
    ]]',
    kwargs_json='{"fields": ["employee_id", "date_from", "date_to", "holiday_status_id"]}'
)batch_execute(
    operations=[
        {
            "model": "res.partner",
            "method": "create",
            "args_json": '[{"name": "Acme Corp", "email": "[email protected]"}]'
        },
        {
            "model": "sale.order",
            "method": "create",
            "args_json": '[{"partner_id": 123, "order_line": [[0, 0, {"product_id": 5}]]}]'
        }
    ],
    atomic=True
)1. Universal Access
- Full Odoo API at your fingertips
- No artificial limitations
- Do anything Odoo can do
2. Simple & Predictable
- Learn 2 tools, use everywhere
- Clear mental model
- Easy to debug and maintain
3. Reliable
- Odoo provides excellent native error messages
- Direct API access means fewer points of failure
- Stable, production-ready implementation
4. Flexible
- Works with several Odoo version (14+)
- Supports all Odoo models and methods
- Extensible through Odoo's native capabilities
- Claude Desktop Ready: Seamless integration with Claude Code
- Two Universal Tools: Access the entire Odoo API with execute_methodandbatch_execute
- Smart Limits: Automatic protection against oversized queries (configurable)
- MCP 2025 Compliant: Latest Model Context Protocol specification
- STDIO: Direct integration with Claude Desktop
- SSE: Server-Sent Events for web browsers (port 8009)
- HTTP: Streamable HTTP for API integrations (port 8008)
- Docker: Pre-built containers for all transports
- Odoo 14+: Works with all modern Odoo versions
- JSON-2 API: Support for Odoo 19+ Bearer token authentication
- Flexible Auth: Environment variables or config files
- Enhanced Logging: Timestamped logs in ./logs/
- Proxy Support: HTTP proxy configuration
- SSL Control: Configurable SSL verification
- Python 3.10-3.13: Tested on all current Python versions
For better security with Odoo 19+:
export ODOO_API_VERSION=json-2
export ODOO_API_KEY=your_api_key_hereBenefits:
- Bearer token authentication (more secure)
- Better performance
- Future-proof (JSON-RPC deprecated in Odoo 20)
# STDIO transport (Claude Desktop)
docker run -i --rm --env-file .env alanogic/mcp-odoo-adv:latest
# SSE transport (Web browsers)
docker run -p 8009:8009 --env-file .env alanogic/mcp-odoo-adv:sse
# HTTP transport (API integrations)
docker run -p 8008:8008 --env-file .env alanogic/mcp-odoo-adv:httpCommon search operators:
| Operator | Description | Example | 
|---|---|---|
| = | Equal | ["country_id", "=", 75] | 
| != | Not equal | ["active", "!=", false] | 
| >,>=,<,<= | Comparison | ["amount_total", ">=", 1000] | 
| like,ilike | Pattern match | ["name", "ilike", "acme"] | 
| in,not in | In list | ["state", "in", ["draft", "sent"]] | 
New to Odoo MCP Server? Start here:
- USER_GUIDE.md - Complete setup guide with 5-minute quick-start
- COOKBOOK.md - 45+ practical examples for common tasks
- DOCKER.md - Docker deployment guide (containers, compose, production)
- TRANSPORTS.md - Connection options (STDIO, SSE, HTTP)
- CLAUDE.md - Technical reference and architecture
- CHANGELOG.md - Version history and updates
Contributions welcome! Please:
- Fork the repository
- Create feature branch (git checkout -b feature/amazing)
- Commit changes (git commit -m 'Add amazing feature')
- Push to branch (git push origin feature/amazing)
- Open Pull Request
Development philosophy:
- Simplicity first
- Universal tools over specialized ones
- Documentation over complexity
- Reliability through directness
GNU General Public License v3.0 or later (GPL-3.0-or-later) - See LICENSE file
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- Original project by LΓͺ Anh TuαΊ₯n
- Built with FastMCP
- Follows Model Context Protocol specification
Ready to get started?
- Quick Setup: Follow the USER_GUIDE.md 5-minute quick-start
- Learn by Example: Browse COOKBOOK.md for 45+ recipes
- Explore Your Odoo: Use the odoo-explorationprompt in Claude
- Build & Automate: Create custom workflows with execute_method
Need help?
- π Check the USER_GUIDE.md troubleshooting section
- π¬ Open an issue on GitHub
- π Star the repo if you find it useful!
Connect AI to Odoo. Build the future. π