odoo-mcp-server

odoo-mcp-server

A security-first MCP server that enables AI assistants to read and optionally write to Odoo 17 over XML-RPC, with model, field, and method allowlists to control access.

Category
Visit Server

README

odoo-mcp-server

A minimal, security-first MCP server that lets AI assistants (Claude Code, Claude Desktop, or any MCP client) read and — optionally, behind explicit allowlists — write to an Odoo 17 instance over XML-RPC.

Built and used in production-adjacent work: MRP cost analysis, simulated purchase→manufacture→sale flows, and inventory cleanup driven entirely through an AI assistant, with the blast radius controlled server-side.

Design goals

  • Tiny, auditable surface: one file (server.py, ~450 lines), stdlib + the official mcp SDK only. No third-party business logic, no telemetry. The only network destination is your ODOO_URL.
  • Read-only by default: write tools are not registered unless ODOO_ENABLE_WRITES=1 is set. There is no delete tool, ever.
  • Allowlists all the way down:
    • models readable → ODOO_ALLOWED_MODELS (supports prefix.* wildcards)
    • models writable → ODOO_WRITE_MODELS (subset of the above)
    • fields writable per model → ODOO_WRITE_FIELDS
    • workflow methods callable → ODOO_ALLOWED_METHODS (exact model:method pairs)
  • Defense in depth: these checks sit on top of the Odoo user's own access rights, which remain the primary boundary. See SECURITY.md for the full model.

Tools

Tool Registered Purpose
odoo_search_read always Search + read records (domain, fields, limit, order)
odoo_read always Read records by id
odoo_search_count always Count records matching a domain
odoo_fields_get always Introspect a model's fields
odoo_create writes enabled Create a record (model + field allowlists enforced)
odoo_write writes enabled Update records (model + field allowlists enforced)
odoo_call_method writes enabled + method list non-empty Run an allowlisted workflow method (confirm a PO, validate a picking, apply an inventory count, …)

Responses are hygienic by default: capped record counts, long/base64 values truncated, Odoo faults sanitized (no server tracebacks).

Installation

Requires Python 3.12+ and an Odoo 16/17 instance reachable over XML-RPC.

git clone https://github.com/rpl9717/odoo-mcp-server.git
cd odoo-mcp-server
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

cp .env.example .env
chmod 600 .env
# edit .env: ODOO_URL, ODOO_DB, ODOO_USER, ODOO_API_KEY, allowlists

In Odoo, create a dedicated user with a restricted access-rights group and an API key (Settings → Users → My profile → Account security). Don't run this with an admin key outside of a supervised test.

Sanity-check the configuration and connection:

.venv/bin/python server.py --check   # auth + permission matrix
.venv/bin/python verify_mcp.py       # end-to-end suite over real stdio

Hooking it up to Claude Code

.mcp.json in your project (no secrets here — credentials live in .env next to server.py):

{
  "mcpServers": {
    "odoo": {
      "command": "/path/to/odoo-mcp-server/.venv/bin/python",
      "args": ["/path/to/odoo-mcp-server/server.py"]
    }
  }
}

One checkout can serve several databases: point ODOO_ENV_FILE at an alternate env file per server entry.

Configuration reference

See .env.example — every variable is documented inline, including the reasoning behind the field-level allowlist entries.

Security

See SECURITY.md: the layered security model, why a custom server instead of the community options, engineering notes (XML-RPC thread safety, None-marshaling quirk, driving TransientModel wizards over RPC), and the verification checklist.

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured