Back to MCP Servers

Server Odoo

Connect AI assistants to Odoo ERP systems for business data access, record management, and workflow automation.

other-tools-and-integrationsautomationai
By ivnvxd
327154Updated todayPythonMPL-2.0

Installation

npx -y mcp-server-odoo

Configuration

{
  "mcpServers": {
    "mcp-server-odoo": {
      "command": "npx",
      "args": ["-y", "mcp-server-odoo"]
    }
  }
}

How to use

  1. Run the installation command above (if needed)
  2. Open your Claude Code settings file (~/.claude/settings.json)
  3. Add the configuration to the mcpServers section
  4. Restart Claude Code to apply changes

MCP Server for Odoo

CI codecov Ruff Checked with ty Python 3.10+ License: MPL 2.0

An MCP server that enables AI assistants like Claude to interact with Odoo ERP systems. Access business data, search records, create new entries, update existing data, and manage your Odoo instance through natural language.

Works with any Odoo instance! Use YOLO mode for quick testing and demos with any standard Odoo installation. For enterprise security, access controls, and production use, install the Odoo MCP module.

Features

  • 🔍 Search and retrieve any Odoo record (customers, products, invoices, etc.)
  • Create new records with field validation and permission checks
  • ✏️ Update existing data with smart field handling
  • 🗑️ Delete records respecting model-level permissions
  • 🔢 Count records matching specific criteria
  • 📋 Inspect model fields to understand data structure
  • 📊 Server-side aggregation — group, sum, and count without pulling raw rows
  • Workflow actions — invoke any public Odoo method (post invoice, confirm SO, etc.) via an opt-in escape hatch
  • 🔐 Secure access with API key or username/password authentication
  • 🎯 Smart pagination for large datasets
  • 🧠 Smart field selection — automatically picks the most relevant fields per model
  • 💬 LLM-optimized output with hierarchical text formatting
  • 🌍 Multi-language support — get responses in your preferred language
  • 🚀 YOLO Mode for quick access with any Odoo instance (no module required)

Installation

Prerequisites

  • Python 3.10 or higher
  • Access to an Odoo instance:
    • Standard mode (production): Version 16.0+ with the Odoo MCP module installed
    • YOLO mode (testing/demos): Any Odoo version with XML-RPC enabled (no module required)

Install UV First

The MCP server runs on your local computer (where Claude Desktop is installed), not on your Odoo server. You need to install UV on your local machine:

<details> <summary>macOS/Linux</summary>
curl -LsSf https://astral.sh/uv/install.sh | sh
</details> <details> <summary>Windows</summary>
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
</details>

After installation, restart your terminal to ensure UV is in your PATH.

Installing via MCP Settings (Recommended)

Add this configuration to your MCP settings:

{
  "mcpServers": {
    "odoo": {
      "command": "uvx",
      "args": ["mcp-server-odoo"],
      "env": {
        "ODOO_URL": "https://your-odoo-instance.com",
        "ODOO_API_KEY": "your-api-key-here"
      }
    }
  }
}
<details> <summary>Claude Desktop</summary>

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "odoo": {
      "command": "uvx",
      "args": ["mcp-server-odoo"],
      "env": {
        "ODOO_URL": "https://your-odoo-instance.com",
        "ODOO_API_KEY": "your-api-key-here",
        "ODOO_DB": "your-database-name"
      }
    }
  }
}
</details> <details> <summary>Claude Code</summary>

Add to .mcp.json in your project root:

{
  "mcpServers": {
    "odoo": {
      "command": "uvx",
      "args": ["mcp-server-odoo"],
      "env": {
        "ODOO_URL": "https://your-odoo-instance.com",
        "ODOO_API_KEY": "your-api-key-here",
        "ODOO_DB": "your-database-name"
      }
    }
  }
}

Or use the CLI:

claude mcp add odoo \
  --env ODOO_URL=https://your-odoo-instance.com \
  --env ODOO_API_KEY=your-api-key-here \
  --env ODOO_DB=your-database-name \
  -- uvx mcp-server-odoo
</details> <details> <summary>Cursor</summary>

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "odoo": {
      "command": "uvx",
      "args": ["mcp-server-odoo"],
      "env": {
        "ODOO_URL": "https://your-odoo-instance.com",
        "ODOO_API_KEY": "your-api-key-here",
        "ODOO_DB": "your-database-name"
      }
    }
  }
}
</details> <details> <summary>VS Code (with GitHub Copilot)</summary>

Add to .vscode/mcp.json in your workspace:

{
  "servers": {
    "odoo": {
      "type": "stdio",
      "command": "uvx",
      "args": ["mcp-server-odoo"],
      "env": {
        "ODOO_URL": "https://your-odoo-instance.com",
        "ODOO_API_KEY": "your-api-key-here",
        "ODOO_DB": "your-database-name"
      }
    }
  }
}

Note: VS Code uses "servers" as the root key, not "mcpServers".

</details> <details> <summary>Windsurf</summary>

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "odoo": {
      "command": "uvx",
      "args": ["mcp-server-odoo"],
      "env": {
        "ODOO_URL": "https://your-odoo-instance.com",
        "ODOO_API_KEY": "your-api-key-here",
        "ODOO_DB": "your-database-name"
      }
    }
  }
}
</details> <details> <summary>Zed</summary>

Add to ~/.config/zed/settings.json:

{
  "context_servers": {
    "odoo": {
      "command": {
        "path": "uvx",
        "args": ["mcp-server-odoo"],
        "env": {
          "ODOO_URL": "https://your-odoo-instance.com",
          "ODOO_API_KEY": "your-api-key-here",
          "ODOO_DB": "your-database-name"
        }
      }
    }
  }
}
</details>

Alternative Installation Methods

<details> <summary>Using Docker</summary>

Run with Docker — no Python installation required:

{
  "mcpServers": {
    "odoo": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "ODOO_URL=http://host.docker.internal:8069",
        "-e", "ODOO_API_KEY=your-api-key-here",
        "ivnvxd/mcp-server-odoo"
      ]
    }
  }
}

Note: Use host.docker.internal instead of localhost to connect to Odoo running on the host machine.

For HTTP transport:

docker run --rm -p 8000:8000 \
  -e ODOO_URL=http://host.docker.internal:8069 \
  -e ODOO_API_KEY=your-api-key-here \
  ivnvxd/mcp-server-odoo --transport streamable-http --host 0.0.0.0

⚠️ Security: the HTTP transport has no built-in authentication — anyone who can reach the port gets Odoo access through the server's credentials. Publish the port only on trusted networks, or front it with an authenticating reverse proxy. See Transport Options.

The image is also available on GHCR: ghcr.io/ivnvxd/mcp-server-odoo

</details> <details> <summary>Using pip</summary>
# Install globally
pip install mcp-server-odoo

# Or use pipx for isolated environment
pipx install mcp-server-odoo

Then use mcp-server-odoo as the command in your MCP configuration.

</details> <details> <summary>From source</summary>
git clone https://github.com/ivnvxd/mcp-server-odoo.git
cd mcp-server-odoo
pip install -e .

Then use the full path to the package in your MCP configuration.

</details>

Configuration

Environment Variables

The server requires the following environment variables:

VariableRequiredDescriptionExample
ODOO_URLYesYour Odoo instance URLhttps://mycompany.odoo.com
ODOO_API_KEYYes*API key for authentication0ef5b399e9ee9c11b053dfb6eeba8de473c29fcd
ODOO_USERYes*Username (if not using API key)admin
ODOO_PASSWORDYes*Password (if not using API key)admin
ODOO_DBNoDatabase name (auto-detected if not set)mycompany
ODOO_LOCALENoLanguage/locale for Odoo responseses_ES, fr_FR, de_DE
ODOO_YOLONoYOLO mode - bypasses MCP security (⚠️ DEV ONLY)off, read, true
ODOO_MCP_ENABLE_METHOD_CALLSNoEnable the call_model_method tool — requires ODOO_YOLO=true (⚠️ Dangerous, see call_model_method)false, true

*Either ODOO_API_KEY or both ODOO_USER and ODOO_PASSWORD are required.

Notes:

  • If database listing is restricted on your server, you must specify ODOO_DB
  • API key authentication is recommended for better security
  • The server also loads environment variables from a .env file in the working directory

Advanced Configuration

VariableDefaultDescription
ODOO_MCP_DEFAULT_LIMIT10Default number of records returned per search
ODOO_MCP_MAX_LIMIT100Maximum allowed record limit per request
ODOO_MCP_MAX_SMART_FIELDS15Maximum fields returned by smart field selection
ODOO_MCP_LOG_LEVELINFOLog level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
ODOO_MCP_LOG_JSONfalseEnable structured JSON log output
ODOO_MCP_LOG_FILEPath for rotating log file (10 MB, 5 backups)
ODOO_MCP_TRANSPORTstdioTransport type (stdio, streamable-http)
ODOO_MCP_HOSTlocalhostHost to bind for HTTP transport
ODOO_MCP_PORT8000Port to bind for HTTP transport
ODOO_MCP_ALLOWED_HOSTSComma-separated Host headers to accept for HTTP transport (DNS-rebinding protection). Set when running streamable-http behind a reverse proxy that forwards an external host, e.g. odoo.example.com,localhost. Unset leaves the default (no host validation).
ODOO_MCP_SESSION_IDLE_TIMEOUTSeconds of inactivity before a streamable-http session is closed and its server-side state freed, e.g. 600. Unset means sessions never expire.

Transport Options

The server supports multiple transport protocols for different use cases:

1. stdio (Default)

Standard input/output transport - used by desktop AI applications like Claude Desktop.

# Default transport - no additional configuration needed
uvx mcp-server-odoo

2. streamable-http

Standard HTTP transport for REST API-style access and remote connectivity.

⚠️ Security: this transport has no built-in client authentication. Any client that can reach the port can use every tool and resource with the Odoo credentials the server holds — including writes in YOLO full-access mode. Keep the default localhost bind unless the network is trusted, and front the server with an authenticating reverse proxy (e.g. nginx with basic auth or OAuth) for remote access. The server logs a warning when binding a non-loopback host.

# Run with HTTP transport (localhost only — safe default)
uvx mcp-server-odoo --transport streamable-http --port 8000

# Binding 0.0.0.0 exposes the server to the network — see the security note above
uvx mcp-server-odoo --transport streamable-http --host 0.0.0.0 --port 8000

# Or use environment variables
export ODOO_MCP_TRANSPORT=streamable-http
export ODOO_MCP_HOST=0.0.0.0
export ODOO_MCP_PORT=8000
uvx mcp-server-odoo

The HTTP endpoint will be available at: http://localhost:8000/mcp/

Note: SSE (Server-Sent Events) transport has been deprecated in MCP protocol version 2025-03-26. Use streamable-http transport instead for HTTP-based communication. Requires MCP library v1.9.4 or higher for proper session management.

<details> <summary>Running streamable-http transport for remote access</su

View source on GitHub