Odoo MCP Server (OdooConsole)

by oconsole

Not rated
GitHub

About

Connect any AI agent to Odoo ERP. Hosted remote endpoint with OAuth 2.0 at mcp.odooconsole.com/mcp, or self-host from the repo. Read/write ERP data with gated writes; one endpoint serves every instance, tenancy decided by the token.

Details

Author
oconsole
Categories
Database, Other, AI

Setup

Install Odoo MCP Server (OdooConsole) in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/oconsole/odoo-mcp-server

Follow the installation instructions in the repository README, then restart your MCP client.

Connect any AI agent to Odoo ERP. Hosted remote endpoint with OAuth 2.0 at mcp.odooconsole.com/mcp, or self-host from the repo. Read/write ERP data with gated writes; one endpoint serves every instance, tenancy decided by the token.

AnMCP (Model Context Protocol)server that connects AI agents to Odoo ERP instances. Works with Claude Code, Cursor, Windsurf, and any MCP-compatible client.

SupportsOdoo 17-18(JSON-RPC) andOdoo 19+(JSON-2 API) — auto-detects the best protocol.

# Run directly (uv handles dependencies automatically) ODOO_URL=https://my.odoo.com ODOO_DB=mydb ODOO_USER=admin ODOO_PASSWORD=secret \ uv run odoo_mcp_server.py

No virtualenv orpip installneeded — the script hasinline metadatathatuvresolves automatically.

{ "mcpServers": { "odoo": { "type": "stdio", "command": "uv", "args": ["run", "--python", "3.11", "--script", "/path/to/odoo_mcp_server.py"], "env": { "ODOO_URL": "https://your-instance.odoo.com", "ODOO_DB": "your-database", "ODOO_USER": "admin", "ODOO_PASSWORD": "your-password" } } } }
{ "mcpServers": { "odoo": { "type": "stdio", "command": "uv", "args": ["run", "--python", "3.11", "--script", "/path/to/odoo_mcp_server.py"], "env": { "ODOO_URL": "https://your-instance.odoo.com", "ODOO_DB": "your-database", "ODOO_USER": "admin", "ODOO_API_KEY": "your-api-key" } } } }

Add to~/.cursor/mcp.jsonor equivalent:

{ "mcpServers": { "odoo": { "command": "uv", "args": ["run", "--python", "3.11", "--script", "/path/to/odoo_mcp_server.py"], "env": { "ODOO_URL": "https://your-instance.odoo.com", "ODOO_DB": "your-database", "ODOO_USER": "admin", "ODOO_PASSWORD": "your-password" } } } }

SetODOO_READONLY=trueto disablecreate,update,delete, andexecutetools. Useful for safe browsing of production instances:

{ "mcpServers": { "odoo": { "type": "stdio", "command": "uv", "args": ["run", "--python", "3.11", "--script", "/path/to/odoo_mcp_server.py"], "env": { "ODOO_URL": "https://production.odoo.com", "ODOO_DB": "prod", "ODOO_USER": "readonly-user", "ODOO_PASSWORD": "secret", "ODOO_READONLY": "true" } } } }

- "List all sale orders from this month"
- "Show me the fields on res.partner"
- "Create a new contact named Acme Corp"
- "Run a health check on the Odoo instance"
- "Export all products to a spreadsheet"
- "Confirm sale order 42"

- "What's the default sort order for sale.order?"
- "Change the default invoice policy on products to 'delivery'"
- "Show me the form view for res.partner"
- "What window actions exist for account.move? Change the default sort to date desc"
- "List all custom fields on res.partner"
- "What fields are required on sale.order?"

Model Customization Tools — Detailed Reference

Returns everything about a model in one call, eliminating the need for multiple exploratory queries.

odoo_model_info(model="sale.order")

- default_order— the model's_orderattribute (e.g."date_order desc, id desc")
- rec_name— the field used for display name in dropdowns
- field_count— total number of fields
- fields_by_type— field count grouped by type (many2one: 12, char: 8, ...)
- custom_fields— user-created fields (x_ prefix or state=manual)
- relational_fields— all Many2one, One2many, Many2many with their targets
- required_fields— fields that must be filled
- views— base views (form, tree, search) with IDs and priorities
- actions— window actions with their domain, context, and view modes
- defaults— current ir.default values set for this model's fields

Manages field defaults via ir.default with proper JSON encoding. The most common source of agent errors when done manually.

# Set global default odoo_set_default(model="product.template", field_name="invoice_policy", value="delivery") # Set user-specific default odoo_set_default(model="sale.order", field_name="warehouse_id", value=2, user_id=5) # Remove a default odoo_set_default(model="product.template", field_name="invoice_policy", value=null)

- Finds the field_id in ir.model.fields (validates the field exists)
- JSON-encodes the value automatically
- Creates or updates the ir.default record
- Returns before/after values for confirmation

Returns the fully rendered view XML after all inheritance is applied — what the user actually sees, not the raw fragments stored in ir.ui.view.

odoo_get_view(model="sale.order", view_type="form") odoo_get_view(model="res.partner", view_type="tree") odoo_get_view(model="account.move", view_type="search")

- arch— the complete merged XML
- view_id— the base view ID
- fields_in_view— list of field names present in the view

Changes how a model appears in the UI by modifying its window action (ir.actions.act_window).

# List actions for a model (read-only) odoo_modify_action(model="sale.order") # Change default sort order odoo_modify_action(action_id=42, order="date_order desc") # Change default filter and page size odoo_modify_action(action_id=42, domain="[['state','=','sale']]", limit=200) # Add default grouping via context odoo_modify_action(action_id=42, context="{'group_by': 'partner_id'}")

The tool returns before/after values so you can verify what changed.

AI Agent (Claude, Cursor, etc.) ↕ MCP Protocol (stdio) Odoo MCP Server ↕ JSON-RPC / JSON-2 API Odoo Instance

The server authenticates once at startup and maintains a persistent connection. All tools use the same authenticated session.

- Python 3.11+
- uv(recommended) orpip install fastmcp httpx

Interact with Airtable's API to manage bases, tables, and records.

Access and manage Airtable bases, tables, and records using the Airtable Web API.

A read-only MCP server for querying live SAP ByDesign data. Requires a separate CData JDBC Driver for SAP ByDesign.

A read-only MCP server for querying live SAP Hybris C4C data, powered by the CData JDBC Driver.

A read-only MCP server by CData for querying live Zoho Creator data using a JDBC driver.

A read-only MCP server by CData that enables LLMs to query live data from Epicor Kinetic.

A read-only MCP server by CData that enables LLMs to query live data from Exact Online.

Generect MCP connects your live lead database directly to AI models like OpenAI or Claude without exports or delays. It streams enriched, up-to-date contact data (titles, firmographics, signals) straight into prompts so LLMs can personalize, score, and recommend leads automatically in real time.

Access comprehensive company data including financial records, ownership structures, and contact information. Search for businesses using domains, registration numbers, or LinkedIn profiles to streamline due diligence and lead generation. Retrieve historical financial performance and complex corporate group structures to support informed business analysis.

An MCP server for accessing and managing data on the kintone low-code platform.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.