Skip to main content
Glama
AlanOgic

Odoo MCP Server Advanced

by AlanOgic

Odoo MCP Server Advanced

Two universal tools. A growing cookbook. Full Odoo API access for AI assistants.

An advanced MCP (Model Context Protocol) server for Odoo ERP β€” STDIO, SSE, and Streamable HTTP transports β€” that gives Claude, Cursor, ChatGPT-via-MCP and other AI hosts direct access to your Odoo data and workflows.

AI assistants: read AGENTS.md for the tool-first quick reference.


🎯 Philosophy: Simplicity & Power

Connect AI assistants to Odoo with two universal tools plus a self-improving knowledge base:

  1. execute_method β€” call any Odoo method on any model

  2. batch_execute β€” execute multiple operations atomically (with @N result references)

  3. add_cookbook_pattern β€” document hard-won recipes after β‰₯4 failed attempts

Plus 11 discovery resources, 3 prompts, and an odoo://cookbook/patterns resource that surfaces past lessons. No specialized tools, no validation layer, no artificial limits β€” full Odoo API.

To rule them all. What You Can Do

Everything you need, just ask AI: automate, query, manage, customize, develop new modules, integrate with external systems, enhance your Odoo instance through AI.


πŸš€ Quick Start

Installation

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:latest

Configuration

Create a .env file (minimum):

cp .env.example .env
vim .env
ODOO_URL=https://your-odoo-instance.com
ODOO_DB=your-database-name
ODOO_USERNAME=your-username
ODOO_PASSWORD=your-password-or-api-key

Optional: 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)
odoo-mcp

This is useful for:

  • Managing multiple Odoo instances (dev, staging, production)

  • Organizing configs outside project directory

  • Docker/Compose deployments with volume mounts

Run Server

After pip install -e ., four console scripts are wired up:

# STDIO (Claude Desktop, Claude Code, Cursor)
odoo-mcp                      # or: python -m odoo_mcp

# SSE (browsers, port 8009)
odoo-mcp-sse

# Streamable HTTP (API integrations, port 8008)
odoo-mcp-http

# HTTP with Bearer auth (production behind a reverse proxy)
odoo-mcp-http-secure

Each runner streams logs to ./logs/mcp_server_<transport>_<timestamp>.log plus stderr.

Claude Desktop Setup

Option 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
EOF

Then 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 .env file (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"]
    }
  }
}

πŸ”§ The Tools

1. execute_method - The Universal Powerhouse

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]]'
)

2. batch_execute - Atomic Transactions

Execute multiple operations atomically. All succeed or all rollback. Use "@N" (1-indexed) inside args_json to reference a previous operation's result.

batch_execute(
    operations=[
        {"model": "res.partner", "method": "create",
         "args_json": '[{"name": "Acme"}]'},
        {"model": "sale.order", "method": "create",
         "args_json": '[{"partner_id": "@1", "order_line": [[0, 0, {"product_id": 5, "product_uom_qty": 1}]]}]'},
        {"model": "sale.order", "method": "action_confirm",
         "args_json": '[[@2]]'}
    ],
    atomic=True
)

3. add_cookbook_pattern - Self-Improving Knowledge Base

After β‰₯4 failed approaches to the same problem, document the working solution so future sessions skip the trial-and-error:

add_cookbook_pattern(
    problem="Search products by attribute value",
    failed_approaches=[
        "Used = on many2many field",
        "Tried dotted notation",
        "Used wrong model",
        "Passed scalar instead of list to in",
    ],
    working_solution='execute_method(model="product.template", method="search_read", args_json=\'[[["product_template_attribute_value_ids", "in", [123]]]]\')',
    why_it_works="Many2many fields require in with a list, not =",
    key_lesson="For m2m: always 'in' with a list, never '=' with scalar"
)

The β‰₯4 threshold is enforced β€” shallow trial-and-error stays out of the cookbook.


πŸ“š Documentation

Discovery resources (read before guessing)

Resource

Returns

odoo://models

All models in this instance

odoo://model/{model}/schema

Full schema β€” fields, types, requireds, relationships

odoo://model/{model}/access

Your CRUD permissions on this model

odoo://methods/{model}

Methods available on this model

odoo://workflows

Business workflows from installed modules

odoo://server/info

Odoo version + installed modules

odoo://cookbook/patterns

Learned Patterns from past sessions (read after first failure)

Plus odoo://record/{model}/{id}, odoo://search/{model}/{domain}, odoo://fields/{model}, odoo://model/{model} for one-off reads.

The Cookbook

πŸ“– COOKBOOK.md β€” 45+ 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.

Prompts

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

Claude Code skills

Eight skills ship in .claude/skills/ and auto-activate on relevant requests when this repo is opened in Claude Code. They wrap the cookbook into focused, trigger-aware guides:

  • odoo-mcp-searching β€” domains, operators, name_search

  • odoo-mcp-efficient-queries β€” pagination, fields, read_group

  • odoo-mcp-crud β€” create/write/unlink, archive vs delete

  • odoo-mcp-relationships β€” m2o/o2m/m2m command tuples

  • odoo-mcp-workflows β€” action_confirm, action_post, button_validate

  • odoo-mcp-batch β€” atomic transactions with @N references

  • odoo-mcp-real-world β€” HR/CRM/inventory cross-model recipes

  • odoo-mcp-learned-patterns β€” cookbook read/write workflow

Other MCP clients (Claude Desktop, Cursor) get the same knowledge portably via COOKBOOK.md and the odoo://cookbook/patterns resource.


πŸŽ“ Learn with examples

Example 1: Find Employees

execute_method(
    model="hr.employee",
    method="search_read",
    args_json='[[["name", "ilike", "john"]]]',
    kwargs_json='{"fields": ["name", "job_id", "department_id"], "limit": 10}'
)

Example 2: Time Off Requests

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"]}'
)

Example 3: Create Customer + Order (Atomic)

batch_execute(
    operations=[
        {
            "model": "res.partner",
            "method": "create",
            "args_json": '[{"name": "Acme Corp", "email": "contact@acme.com"}]'
        },
        {
            "model": "sale.order",
            "method": "create",
            "args_json": '[{"partner_id": 123, "order_line": [[0, 0, {"product_id": 5}]]}]'
        }
    ],
    atomic=True
)

πŸ’‘ Why This Design Works

βœ… Key Benefits

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


πŸ”₯ Features

AI Integration

  • Claude Desktop / Claude Code / Cursor Ready: Works with any MCP host

  • Universal Tools: execute_method + batch_execute reach the entire Odoo API

  • Self-improving cookbook: odoo://cookbook/patterns resource + add_cookbook_pattern tool grow the institutional knowledge automatically

  • Smart Limits: Automatic protection against oversized queries (DEFAULT=100, MAX=1000)

  • MCP 2025-06-18 spec: Built on FastMCP 2.12+

Multiple Connection Options

  • 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

Enterprise Ready

  • Odoo 18 primary target: Works out of the box with Odoo 14-18 via JSON-RPC

  • Odoo 19+ opt-in: JSON-2 Bearer token API available via ODOO_API_VERSION=json-2

  • 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


πŸš€ Advanced Usage

API keys

Odoo 18 (default): use the JSON-RPC path with an API key in the password slot.

export ODOO_API_VERSION=json-rpc   # default, can be omitted
export ODOO_PASSWORD=your_api_key_here

Generate the key in Odoo: Preferences β†’ Account Security β†’ New API Key.

Odoo 19+ (opt-in upgrade): JSON-2 Bearer token API.

export ODOO_API_VERSION=json-2
export ODOO_API_KEY=your_api_key_here

JSON-2 is future-proof β€” JSON-RPC is scheduled for removal in Odoo 20 (fall 2026).

Docker Deployment

# 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:http

Domain Operators

Common 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"]]


πŸ“– Documentation

New to Odoo MCP Server? Start here:

  1. USER_GUIDE.md - Complete setup guide with 5-minute quick-start

  2. COOKBOOK.md - 45+ practical examples for common tasks

  3. DOCKER.md - Docker deployment guide (containers, compose, production)

  4. TRANSPORTS.md - Connection options (STDIO, SSE, HTTP)

  5. CLAUDE.md - Technical reference and architecture

  6. CHANGELOG.md - Version history and updates


🀝 Contributing

Contributions welcome! Please:

  1. Fork the repository

  2. Create feature branch (git checkout -b feature/amazing)

  3. Commit changes (git commit -m 'Add amazing feature')

  4. Push to branch (git push origin feature/amazing)

  5. Open Pull Request

Development philosophy:

  • Simplicity first

  • Universal tools over specialized ones

  • Documentation over complexity

  • Reliability through directness


πŸ“ License

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.


πŸ™ Acknowledgments


🎯 What's Next?

Ready to get started?

  1. Quick Setup: Follow the USER_GUIDE.md 5-minute quick-start

  2. Learn by Example: Browse COOKBOOK.md for 45+ recipes

  3. Explore Your Odoo: Use the odoo-exploration prompt in Claude

  4. 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. πŸš€

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AlanOgic/mcp-odoo-adv'

If you have feedback or need assistance with the MCP directory API, please join our Discord server