Skip to main content
Glama

MCP Server for Odoo

by ivnvxd
Mozilla Public License 2.0
38
  • Apple
  • Linux

MCP Server for Odoo

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.

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
  • 📊 Browse multiple records and get formatted summaries
  • 🔢 Count records matching specific criteria
  • 📋 Inspect model fields to understand data structure
  • 🔐 Secure access with API key or username/password authentication
  • 🎯 Smart pagination for large datasets
  • 💬 LLM-optimized output with hierarchical text formatting

Installation

Prerequisites

  • Python 3.10 or higher
  • Access to an Odoo instance (version 17.0+)
  • The Odoo MCP module installed on your Odoo server
  • (optional) An API key generated in Odoo (Settings > Users > API Keys)

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:

curl -LsSf https://astral.sh/uv/install.sh | sh
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

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

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" } } } }

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" } } } }

Add to ~/.cursor/mcp_settings.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" } } } }

Add to your VS Code settings (~/.vscode/mcp_settings.json or workspace settings):

{ "github.copilot.chat.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" } } } }

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

{ "context_servers": { "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" } } } }

Alternative Installation Methods

# 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.

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.

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

*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

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.

# Run with HTTP transport 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.

Transport Configuration
Variable/FlagDescriptionDefault
ODOO_MCP_TRANSPORT / --transportTransport type: stdio, streamable-httpstdio
ODOO_MCP_HOST / --hostHost to bind for HTTP transportslocalhost
ODOO_MCP_PORT / --portPort to bind for HTTP transports8000
{ "mcpServers": { "odoo-remote": { "command": "uvx", "args": ["mcp-server-odoo", "--transport", "streamable-http", "--port", "8080"], "env": { "ODOO_URL": "https://your-odoo-instance.com", "ODOO_API_KEY": "your-api-key-here", "ODOO_DB": "your-database-name" } } } }

Setting up Odoo

  1. Install the MCP module:
    • Download the mcp_server module
    • Install it in your Odoo instance
    • Navigate to Settings > MCP Server
  2. Enable models for MCP access:
    • Go to Settings > MCP Server > Enabled Models
    • Add models you want to access (e.g., res.partner, product.product)
    • Configure permissions (read, write, create, delete) per model
  3. Generate an API key:
    • Go to Settings > Users & Companies > Users
    • Select your user
    • Under the "API Keys" tab, create a new key
    • Copy the key for your MCP configuration

Usage Examples

Once configured, you can ask Claude:

Search & Retrieve:

  • "Show me all customers from Spain"
  • "Find products with stock below 10 units"
  • "List today's sales orders over $1000"
  • "Search for unpaid invoices from last month"
  • "Count how many active employees we have"
  • "Show me the contact information for Microsoft"

Create & Manage:

  • "Create a new customer contact for Acme Corporation"
  • "Add a new product called 'Premium Widget' with price $99.99"
  • "Create a calendar event for tomorrow at 2 PM"
  • "Update the phone number for customer John Doe to +1-555-0123"
  • "Change the status of order SO/2024/001 to confirmed"
  • "Delete the test contact we created earlier"

Available Tools

search_records

Search for records in any Odoo model with filters.

{ "model": "res.partner", "domain": [["is_company", "=", true], ["country_id.code", "=", "ES"]], "fields": ["name", "email", "phone"], "limit": 10 }

Field Selection Options:

  • Omit fields or set to null: Returns smart selection of common fields
  • Specify field list: Returns only those specific fields
  • Use ["__all__"]: Returns all fields (use with caution)

get_record

Retrieve a specific record by ID.

{ "model": "res.partner", "record_id": 42, "fields": ["name", "email", "street", "city"] }

Field Selection Options:

  • Omit fields or set to null: Returns smart selection of common fields with metadata
  • Specify field list: Returns only those specific fields
  • Use ["__all__"]: Returns all fields without metadata

list_models

List all models enabled for MCP access.

{}

create_record

Create a new record in Odoo.

{ "model": "res.partner", "values": { "name": "New Customer", "email": "customer@example.com", "is_company": true } }

update_record

Update an existing record.

{ "model": "res.partner", "record_id": 42, "values": { "phone": "+1234567890", "website": "https://example.com" } }

delete_record

Delete a record from Odoo.

{ "model": "res.partner", "record_id": 42 }

Resources

The server also provides direct access to Odoo data through resource URIs:

  • odoo://res.partner/record/1 - Get partner with ID 1
  • odoo://product.product/search?domain=[["qty_available",">",0]] - Search products in stock
  • odoo://sale.order/browse?ids=1,2,3 - Browse multiple sales orders
  • odoo://res.partner/count?domain=[["customer_rank",">",0]] - Count customers
  • odoo://product.product/fields - List available fields for products

Security

  • Always use HTTPS in production environments
  • Keep your API keys secure and rotate them regularly
  • Configure model access carefully - only enable necessary models
  • The MCP module respects Odoo's built-in access rights and record rules
  • Each API key is linked to a specific user with their permissions

Troubleshooting

If you're getting connection errors:

  1. Verify your Odoo URL is correct and accessible
  2. Check that the MCP module is installed: visit https://your-odoo.com/mcp/health
  3. Ensure your firewall allows connections to Odoo

If authentication fails:

  1. Verify your API key is active in Odoo
  2. Check that the user has appropriate permissions
  3. Try regenerating the API key
  4. For username/password auth, ensure 2FA is not enabled

If you can't access certain models:

  1. Go to Settings > MCP Server > Enabled Models in Odoo
  2. Ensure the model is in the list and has appropriate permissions
  3. Check that your user has access to that model in Odoo's security settings

This error means UV is not installed or not in your PATH:

Solution 1: Install UV (see Installation section above)

Solution 2: macOS PATH Issue Claude Desktop on macOS doesn't inherit your shell's PATH. Try:

  1. Quit Claude Desktop completely (Cmd+Q)
  2. Open Terminal
  3. Launch Claude from Terminal:
    open -a "Claude"

Solution 3: Use Full Path Find UV location and use full path:

which uvx # Example output: /Users/yourname/.local/bin/uvx

Then update your config:

{ "command": "/Users/yourname/.local/bin/uvx", "args": ["mcp-server-odoo"] }

If you see "Access Denied" when listing databases:

  • This is normal - some Odoo instances restrict database listing for security
  • Make sure to specify ODOO_DB in your configuration
  • The server will use your specified database without validation

Example configuration:

{ "env": { "ODOO_URL": "https://your-odoo.com", "ODOO_API_KEY": "your-key", "ODOO_DB": "your-database-name" } }

Note: ODOO_DB is required if database listing is restricted on your server.

This error occurs when Python cannot verify SSL certificates, often on macOS or corporate networks.

Solution: Add SSL certificate path to your environment configuration:

{ "env": { "ODOO_URL": "https://your-odoo.com", "ODOO_API_KEY": "your-key", "SSL_CERT_FILE": "/etc/ssl/cert.pem" } }

This tells Python where to find the system's SSL certificate bundle for HTTPS connections. The path /etc/ssl/cert.pem is the standard location on most systems.

Enable debug logging for more information:

{ "env": { "ODOO_URL": "https://your-odoo.com", "ODOO_API_KEY": "your-key", "ODOO_MCP_LOG_LEVEL": "DEBUG" } }

Development

# Clone the repository git clone https://github.com/ivnvxd/mcp-server-odoo.git cd mcp-server-odoo # Install in development mode pip install -e ".[dev]" # Run tests pytest --cov # Run the server python -m mcp_server_odoo
# Using uvx npx @modelcontextprotocol/inspector uvx mcp-server-odoo # Using local installation npx @modelcontextprotocol/inspector python -m mcp_server_odoo

Testing

Transport Tests

You can test both stdio and streamable-http transports to ensure they're working correctly:

# Run comprehensive transport tests python tests/run_transport_tests.py

This will test:

  • stdio transport: Basic initialization and communication
  • streamable-http transport: HTTP endpoint, session management, and tool calls

Unit Tests

For complete testing including unit and integration tests:

# Run all tests uv run pytest --cov # Run specific test categories uv run pytest tests/test_tools.py -v uv run pytest tests/test_server_foundation.py -v

License

This project is licensed under the Mozilla Public License 2.0 (MPL-2.0) - see the LICENSE file for details.

Contributing

Contributions are very welcome! Please see the CONTRIBUTING guide for details.

Support

Thank you for using this project! If you find it helpful and would like to support my work, kindly consider buying me a coffee. Your support is greatly appreciated!

And do not forget to give the project a star if you like it! :

-
security - not tested
A
license - permissive license
-
quality - not tested

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

An MCP server that enables AI assistants like Claude to interact with Odoo ERP systems through natural language, allowing users to search, create, update, and manage business data in their Odoo instance.

  1. Features
    1. Installation
      1. Prerequisites
      2. Install UV First
      3. Installing via MCP Settings (Recommended)
      4. Alternative Installation Methods
    2. Configuration
      1. Environment Variables
      2. Transport Options
      3. Setting up Odoo
    3. Usage Examples
      1. Available Tools
        1. search_records
        2. get_record
        3. list_models
        4. create_record
        5. update_record
        6. delete_record
      2. Resources
        1. Security
          1. Troubleshooting
            1. Development
              1. Testing
                1. Transport Tests
                2. Unit Tests
              2. License
                1. Contributing
                  1. Support

                    Related MCP Servers

                    • -
                      security
                      A
                      license
                      -
                      quality
                      A simple MCP server for interacting with OpenAI assistants. This server allows other tools (like Claude Desktop) to create and interact with OpenAI assistants through the Model Context Protocol.
                      Last updated -
                      33
                      Python
                      MIT License
                      • Apple
                    • -
                      security
                      A
                      license
                      -
                      quality
                      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.
                      Last updated -
                      182
                      Python
                      MIT License
                    • A
                      security
                      F
                      license
                      A
                      quality
                      A Model Context Protocol (MCP) server that integrates with OmniFocus to enable Claude (or other MCP-compatible AI assistants) to interact with your tasks and projects.
                      Last updated -
                      7
                      422
                      61
                      TypeScript
                    • -
                      security
                      F
                      license
                      -
                      quality
                      A production-ready MCP server ecosystem providing Claude AI with 150+ specialized tools across enhanced memory, data analytics, security, design, and infrastructure domains with PostgreSQL, Redis, Qdrant, and Docker orchestration.
                      Last updated -
                      TypeScript

                    View all related MCP servers

                    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/ivnvxd/mcp-server-odoo'

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