Un servidor MCP (Model Context Protocol) para integración con la API de Odoo mediante XML-RPC.
- Listado de bases de datos disponibles
- Autenticación automática con Odoo (con caché por base de datos)
- Operaciones CRUD completas (Create, Read, Update, Delete)
- Búsqueda y filtrado con dominios de Odoo
- Obtención de metadatos de campos
- Soporte para HTTP y HTTPS
- Soporte para certificados SSL autofirmados
npm installEl servidor utiliza variables de entorno para la configuración de conexión a Odoo:
ODOO_URL: URL de tu instancia de Odoo (default:http://localhost:8069)ODOO_USERNAME: Usuario de Odoo (default:admin)ODOO_PASSWORD: Contraseña del usuario (default:admin)
Nota: La base de datos NO se configura como variable de entorno. Debe especificarse como parámetro obligatorio en cada llamada a las herramientas MCP.
Edita el archivo de configuración de Claude Desktop:
En MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
En Windows: %APPDATA%\Claude\claude_desktop_config.json
Agrega el servidor MCP:
{
"mcpServers": {
"odoo": {
"command": "node",
"args": ["C:\\tools\\mcp\\index.js"],
"env": {
"ODOO_URL": "https://tu-instancia.odoo.com",
"ODOO_USERNAME": "tu_usuario",
"ODOO_PASSWORD": "tu_contraseña"
}
}
}
}Lista todas las bases de datos disponibles en el servidor de Odoo. Esta herramienta es útil para descubrir qué bases de datos están disponibles antes de realizar operaciones.
Parámetros:
- Ninguno
Ejemplo:
{}Respuesta ejemplo:
[
"odoo",
"AMBIENTE_1",
"AMBIENTE_2",
"produccion"
]Busca registros en un modelo de Odoo y retorna sus IDs.
Parámetros:
database(requerido): Nombre de la base de datos de Odoomodel(requerido): Nombre del modelo de Odoo (ej: "res.partner", "sale.order")domain: Array de filtros [["campo", "operador", "valor"]]limit: Número máximo de registros (default: 100)offset: Número de registros a saltar (default: 0)order: Ordenamiento (ej: "name ASC")
Ejemplo:
{
"database": "mi_base_datos",
"model": "res.partner",
"domain": [["is_company", "=", true]],
"limit": 10
}Busca y lee registros en una sola operación.
Parámetros:
database(requerido): Nombre de la base de datos de Odoomodel(requerido): Nombre del modelodomain: Array de filtrosfields: Array de campos a retornar (vacío retorna todos)limit: Número máximo de registrosoffset: Número de registros a saltarorder: Ordenamiento
Ejemplo:
{
"database": "mi_base_datos",
"model": "res.partner",
"domain": [["email", "!=", false]],
"fields": ["name", "email", "phone"],
"limit": 5
}Lee registros específicos por sus IDs.
Parámetros:
database(requerido): Nombre de la base de datos de Odoomodel(requerido): Nombre del modeloids(requerido): Array de IDs a leerfields: Array de campos a retornar
Ejemplo:
{
"database": "mi_base_datos",
"model": "res.partner",
"ids": [1, 2, 3],
"fields": ["name", "email"]
}Crea un nuevo registro.
Parámetros:
database(requerido): Nombre de la base de datos de Odoomodel(requerido): Nombre del modelovalues(requerido): Objeto con los valores del nuevo registro
Ejemplo:
{
"database": "mi_base_datos",
"model": "res.partner",
"values": {
"name": "Nuevo Cliente",
"email": "cliente@example.com",
"phone": "+1234567890"
}
}Actualiza registros existentes.
Parámetros:
database(requerido): Nombre de la base de datos de Odoomodel(requerido): Nombre del modeloids(requerido): Array de IDs a actualizarvalues(requerido): Objeto con los nuevos valores
Ejemplo:
{
"database": "mi_base_datos",
"model": "res.partner",
"ids": [1],
"values": {
"phone": "+9876543210"
}
}Elimina registros.
Parámetros:
database(requerido): Nombre de la base de datos de Odoomodel(requerido): Nombre del modeloids(requerido): Array de IDs a eliminar
Ejemplo:
{
"database": "mi_base_datos",
"model": "res.partner",
"ids": [1, 2]
}Obtiene las definiciones de campos de un modelo.
Parámetros:
database(requerido): Nombre de la base de datos de Odoomodel(requerido): Nombre del modelofields: Array de nombres de campos específicosattributes: Array de atributos a retornar
Ejemplo:
{
"database": "mi_base_datos",
"model": "res.partner",
"fields": ["name", "email"],
"attributes": ["string", "type", "required"]
}Cuenta los registros que coinciden con un dominio.
Parámetros:
database(requerido): Nombre de la base de datos de Odoomodel(requerido): Nombre del modelodomain: Array de filtros
Ejemplo:
{
"database": "mi_base_datos",
"model": "sale.order",
"domain": [["state", "=", "sale"]]
}Los dominios en Odoo utilizan notación polaca prefija. Ejemplos:
// AND implícito
[["name", "ilike", "John"], ["email", "!=", false]]
// OR explícito
["|", ["name", "=", "John"], ["name", "=", "Jane"]]
// Combinación compleja
["&", ["is_company", "=", true], "|", ["country_id", "=", "US"], ["country_id", "=", "CA"]]=: igual!=: diferente>: mayor que<: menor que>=: mayor o igual<=: menor o iguallike: contiene (sensible a mayúsculas)ilike: contiene (insensible a mayúsculas)in: está en la listanot in: no está en la lista
# Modo desarrollo con recarga automática
npm run dev
# Iniciar normalmente
npm startres.partner: Contactos/Clientessale.order: Órdenes de ventapurchase.order: Órdenes de compraproduct.product: Productosaccount.move: Facturas/Asientos contablesstock.picking: Transferencias de inventariocrm.lead: Oportunidades CRMproject.project: Proyectoshr.employee: Empleados
- Nunca compartas tus credenciales de Odoo
- Usa variables de entorno para configuración sensible
- Considera usar tokens de API si tu versión de Odoo lo soporta
- Limita los permisos del usuario de integración a solo lo necesario
Verifica que:
- La URL de Odoo sea correcta
- El nombre de la base de datos sea exacto
- Las credenciales sean válidas
- El usuario tenga permisos de acceso API
- Verifica que Odoo esté accesible desde tu máquina
- Comprueba firewalls y configuración de red
- Para HTTPS, verifica certificados SSL válidos
MIT