Skip to main content
Glama

MCP Odoo - Model Context Protocol para Odoo

MCP server que permite interacturar con Odoo desde cualquier IDE compatible con MCP (OpenCode, Cursor, Claude Desktop, etc.)

Características

  • 🔐 Login con credenciales propias - Cada usuario usa sus credenciales de Odoo

  • Gestión de tareas - Lista tus tareas, filtra por proyecto y estado

  • Contexto de tickets - Reúne descripción, chatter, evidencia, ramas, etapas y horas

  • Timesheets seguros - Valida tarea, proyecto, duplicados y propiedad de líneas

  • Ramas GitLab - Verifica referencias y divergencia antes de crear un MR

  • 🔄 Genérico - Funciona con cualquier instancia de Odoo 17+

Related MCP server: odoo-mcp-server

Instalación

git clone https://github.com/Igabr13l/mcp-odoo.git
cd mcp-odoo
npm install
npm run build

El servidor se compila en dist/src. Para desarrollo:

npm run typecheck
npm test
npm start

Configuración por IDE

OpenCode

Agregar en opencode.json de tu workspace:

{
  "mcp": {
    "odoo": {
      "type": "local",
      "command": ["node", "/ruta/absoluta/a/mcp-odoo/dist/src/index.js"],
      "enabled": true
    }
  }
}

Cursor / Claude Desktop

Agregar en cursor.json o claude_desktop_config.json:

{
  "mcpServers": {
    "odoo": {
      "command": "node",
      "args": ["/ruta/absoluta/a/mcp-odoo/dist/src/index.js"]
    }
  }
}

VS Code (con extension MCP)

En settings.json:

{
  "mcpServers": {
    "odoo": {
      "command": "node",
      "args": ["C:\\ruta\\a\\mcp-odoo\\dist\\src\\index.js"]
    }
  }
}

Windsurf

En ~/.windsurf/config.json o en el archivo de configuración del proyecto:

{
  "mcp": {
    "odoo": {
      "type": "local",
      "command": ["node", "/ruta/a/mcp-odoo/dist/src/index.js"]
    }
  }
}

Uso

1. Login (obligatorio)

Primero, iniciá sesión con tus credenciales de Odoo:

odoo_login({
  url: "https://odoo.tuempresa.com",
  db: "nombre_db",
  login: "tu@email.com",
  password: "tu_password"
})

2. Herramientas disponibles

Herramienta

Descripción

odoo_whoami

Muestra el usuario actual conectado

odoo_get_projects

Lista todos los proyectos activos

odoo_get_my_projects

Lista los proyectos donde tenés tickets asignados

odoo_get_my_tasks

Lista tus tareas (opcional: project_id, state)

odoo_get_tickets

Lista tickets con filtros (mine, project_id, state, search, limit), prioridad y etiquetas

odoo_get_task_detail

Detalle de una tarea con asignados, etiquetas, prioridad, descripcion y metricas

odoo_get_ticket_messages

Lee mensajes y notas internas del chatter; oculta secretos por defecto

odoo_get_ticket_attachments

Lista adjuntos, imágenes y videos con sus metadatos

odoo_get_ticket_images

Devuelve imágenes adjuntas como contenido visual MCP

odoo_get_ticket_video_frames

Extrae fotogramas representativos de videos adjuntos

odoo_get_ticket_context

Devuelve contexto agregado del ticket en una llamada

odoo_get_project_stages

Lista IDs y nombres exactos de todas las etapas del proyecto

odoo_add_ticket_note

Previsualiza o publica una nota interna redactada con confirmación

odoo_get_my_board

Tablero personal agrupado por etapas reales de Odoo

odoo_get_gitlab_status

Verifica ramas y referencias de MR directamente en GitLab

odoo_update_task

Edita asignados, descripción y estado/etapa de una tarea

odoo_get_task_gitlab_branches

Ramas GitLab vinculadas a una tarea

odoo_create_timesheet

Carga horas en una tarea

odoo_get_my_timesheets

Lista tus horas cargadas con filtros por fecha/proyecto/tarea

3. Ejemplos de uso

Ver mis tareas en progreso

odoo_get_my_tasks({ state: "in_progress" })

Ver tareas de un proyecto específico

odoo_get_my_tasks({ project_id: 7, state: "in_progress" })

Ver mis proyectos (donde tengo tickets)

odoo_get_my_projects({})

Ver tickets con filtros

odoo_get_tickets({ mine: true, state: "to_do", search: "whatsapp", limit: 50 })

Ver detalle de una tarea con ramas GitLab

odoo_get_task_detail({ task_id: 9646 })

Leer mensajes, notas y adjuntos

odoo_get_ticket_messages({ task_id: 9646, include_system: false })
odoo_get_ticket_attachments({ task_id: 9646 })
odoo_get_ticket_images({ task_id: 9646, limit: 5 })
odoo_get_ticket_video_frames({ task_id: 9646, frames: 4 })

Los videos se listan con nombre, tipo MIME, tamaño y URL cuando Odoo guarda una. MCP no define contenido de video nativo, por lo que el servidor no carga el binario del video en el contexto. API keys, tokens y passwords se enmascaran por defecto en descripciones y mensajes.

La extracción de fotogramas requiere ffmpeg y ffprobe instalados localmente.

Ver tablero y estado GitLab

odoo_get_my_board({ project_id: 7 })
odoo_get_gitlab_status({ task_id: 11244 })

La creación de una fila GitLab, una rama o un merge request requiere confirm: true. Las operaciones son idempotentes cuando Odoo ya tiene el recurso registrado. Antes de crear un MR, el MCP obtiene la divergencia real y compara los árboles resultantes; rechaza ramas sin commits propios o cuyo árbol es idéntico al merge base. El MCP no fusiona MRs.

Editar una tarea (asignados, descripción y estado)

odoo_update_task({
  task_id: 9646,
  assignee_user_ids: [16],
  description: "Actualizar validaciones de WhatsApp",
  state: "in_progress"
})

También podés usar stage_id o stage_name en vez de state.

Ver ramas GitLab de una tarea

odoo_get_task_gitlab_branches({ task_id: 9646 })

Cargar horas

odoo_create_timesheet({
  task_id: 9646,
  project_id: 7,
  date: "2026-03-01",
  hours: 2,
  description: "Implementación de feature X"
})

Las altas y modificaciones de timesheets se serializan dentro de cada proceso MCP para que la verificación de duplicados y la escritura formen una única sección crítica. Esto no coordina procesos MCP distintos ni otros clientes de Odoo: la idempotencia entre procesos y a nivel servidor sigue siendo responsabilidad de Odoo.

Ver horas cargadas un día específico

odoo_get_my_timesheets({ date: "2026-02-27" })

Ver horas cargadas en un rango de fechas

odoo_get_my_timesheets({ date_from: "2026-02-01", date_to: "2026-02-28" })

Ver horas de un proyecto específico

odoo_get_my_timesheets({ project_id: 7, date_from: "2026-02-01", date_to: "2026-02-28" })

Configuración de Variables de Entorno

Podés configurar valores por defecto:

export ODOO_URL="https://odoo.tuempresa.com"
export ODOO_DB="nombre_db"

Pero seguís necesitando hacer login con tu usuario y password.

La sesión es única por proceso y se reutiliza durante toda la ejecución. El MCP no reautentica periódicamente: Odoo valida las credenciales en cada operación execute_kw. Si varias herramientas arrancan al mismo tiempo sin un uid persistido, comparten un único intento de autenticación.

El timeout HTTP por defecto es de 15 segundos. Puede configurarse entre 1 y 120 segundos con ODOO_REQUEST_TIMEOUT_MS.

Las lecturas con errores transitorios de red o timeout se reintentan una sola vez. Las escrituras nunca se reintentan automáticamente: si el transporte falla, el resultado se marca como incierto y requiere verificar Odoo antes de repetir. El backoff de lectura se configura con ODOO_RETRY_BACKOFF_MS.

La sesión persistida se guarda con permisos 0600 y contiene las credenciales necesarias para JSON-RPC. Puede cambiarse su ubicación con ODOO_SESSION_FILE.

La verificación remota de GitLab permite gitlab.solunika.com por defecto. Para otras instalaciones, configurá una lista separada por comas en ODOO_GITLAB_ALLOWED_HOSTS.

Si ODOO_GITLAB_TOKEN está configurado, odoo_get_gitlab_status consulta la API v4 de GitLab con PRIVATE-TOKEN para informar estado, conflictos, pipelines y aprobaciones del merge request. Las redirecciones no se siguen para evitar enviar el token a otro origen, y el token nunca se incluye en la respuesta. El timeout de estas consultas es de 15 segundos y puede configurarse entre 1 y 120 segundos mediante ODOO_GITLAB_API_TIMEOUT_MS.

La inspección Git informa divergencia, merge base, hashes de árbol y si el árbol de la rama difiere del merge base. Una rama solo se considera activa si tiene commits propios y un árbol resultante diferente. Cada comando usa un timeout de 15 segundos, configurable mediante ODOO_GIT_TIMEOUT_MS.

Licencia

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables conversational interaction with Odoo to manage timesheets, expenses, contacts, and invoices through an MCP-compatible assistant. It provides comprehensive tools for searching records, managing HR tasks, and tracking project costs via the Odoo API.
    38
    3
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Full-featured MCP connector for Odoo ERP via XML-RPC, enabling natural language interaction with CRM, sales, inventory, and other Odoo modules.
    -