Skip to main content
Glama
SalimaTerbah

Odoo MCP Server

by SalimaTerbah
README.md
# Odoo MCP Server

An **MCP (Model Context Protocol) server** that exposes an **Odoo 19 ERP** as a set of standard tools — so **any** MCP-compatible AI agent (Claude Desktop, an IDE, a custom agent) can query and act on the ERP without writing a single line of custom integration.

MCP is the open standard adopted in 2026 by Anthropic, OpenAI, Google and Microsoft — often described as *"the USB-C of AI"*. It turns the M×N integration problem into M+N: one server per data source, usable by every client.

## Exposed tools

| Tool | What it does |
|------|--------------|
| `contar_leads` | Counts CRM leads, optionally filtered by AI temperature |
| `listar_leads` | Lists leads with company and expected revenue |
| `crear_lead` | Creates a new lead in the CRM |
| `buscar_semantico` | Semantic search over lead notes (RAG with pgvector) |

## Architecture MCP client ──JSON-RPC/stdio──> Odoo MCP Server ──XML-RPC──> Odoo 19
(any agent) (this repo) + pgvector


The server runs as a **separate process** from Odoo and talks to it through Odoo's official external API (XML-RPC) — the same interface any third-party system would use. This keeps a clean client/server separation, as the protocol intends.

`buscar_semantico` reuses the RAG layer implemented in the companion module
[odoo_ai_agent](https://github.com/SalimaTerbah/odoo_ai_agent) (local embeddings + pgvector).

## Tech stack

- **Python 3.12**, `fastmcp`
- **Transport:** stdio (JSON-RPC)
- **Odoo 19** external API (XML-RPC)
- **PostgreSQL + pgvector** for the semantic layer

## Setup

```bash
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```

Create a `.env` file (never committed):

ODOO_URL=http://localhost:8069
ODOO_DB=your_database
ODOO_USER=your_odoo_user
ODOO_PASSWORD=your_odoo_password


## Usage

Run the test client to list and call the published tools:

```bash
python3 test_client.py
```

Or register the server with any MCP client by pointing it to `server.py`.

## Security notes

- Credentials are loaded from environment variables / `.env`, never hardcoded.
- The server only exposes explicitly declared tools — no arbitrary ORM access.

## Author

**Salima Terbah** — Multiplatform App Developer (DAM), specializing in applied AI for Odoo.

## License

LGPL-3