About Odoo MCP Server
Odoo MCP Server connects MCP clients to Odoo 18.0 through JSON-RPC and to the Odoo Extract API for OCR. It supports reading and changing model records as well as submitting documents for extraction.
Key features
- 01Inspect available models and fields
- 02Search and read records
- 03Create, update, and delete records
- 04Submit documents for OCR extraction
- 05Retrieve extraction results
Use cases
- 01Review Odoo model structure before querying
- 02Find and update partner records
- 03Create or remove Odoo records
- 04Extract invoice data from documents
MCP support
Exposes Odoo model discovery and record operations, along with document extraction tools, to MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEOdoo MCP Server
High-level, secure access to Odoo 18.0 (JSON-RPC) and Odoo Extract API for OCR document parsing.
🚀 Quick Start with Cline
-
Clone the repo:
git clone https://github.com/onlybets/odoo-mcp-server-unofficial.git cd odoo-mcp-server-unofficial -
Configure credentials:
cp .env.example .env # Edit .env and fill in your Odoo/Extract credentials -
Run with Cline (no self-hosting needed):
- Cline auto-runs the server locally for you.
- Just open the repo in Cline and start using the tools!
🛠️ Tools & JSON Schemas
1. list_models
Returns models visible to the current user.
Input: none
Output:
[
{"model": "res.partner", "name": "Contact"},
{"model": "crm.lead", "name": "Lead"}
]
2. get_fields
Returns fields & metadata for a model.
Input:
{ "model": "res.partner" }
Output:
{
"id": {"string": "ID", "type": "integer", "required": true, "readonly": true},
"name": {"string": "Name", "type": "char", "required": true, "readonly": false}
}
3. search_read
Searches and reads records from a model.
Input:
{
"model": "res.partner",
"domain": [["is_company", "=", true]],
"fields": ["id", "name", "email"],
"limit": 10
}
Output:
[
{"id": 7, "name": "Acme Corp", "email": "[email protected]"}
]
4. create_record
Creates a new record in a model.
Input:
{
"model": "res.partner",
"values": {"name": "New Partner", "email": "[email protected]"}
}
Output:
{ "id": 42 }
5. update_record
Updates one or more records in a model.
Input:
{
"model": "res.partner",
"ids": [42],
"values": {"email": "[email protected]"}
}
Output:
{ "success": true }
6. delete_record
Deletes one or more records in a model.
Input:
{
"model": "res.partner",
"ids": [42]
}
Output:
{ "success": true }
7. extract_parse
Launches a document extraction job.
Input:
{
"document_base64": "<base64-encoded-pdf>",
"doc_type": "invoice",
"version": "18.0"
}
Output:
{ "document_token": "abc123", "status": "processing" }
8. extract_get_result
Fetches the result of a document extraction job.
Input:
{
"doc_type": "invoice",
"version": "18.0",
"document_token": "abc123"
}
Output:
{
"status": "done",
"data": { "invoice_number": "INV-001", "total": 123.45 }
}
🐳 Docker Compose
- Run all services with:
docker-compose up --build - Works out-of-the-box for local dev and testing.
🧪 CI/CD
- GitHub Actions workflow (
.github/workflows/ci.yml) runs:pylint(with odoo plugin if available)pytest(runs smoke tests)
- Matrix for Python 3.11+.
📄 License
MIT License. See LICENSE.
MCP Server — Model Context Protocol
https://modelcontextprotocol.org/
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.