Saltar a contenido

Despliegue local (sandbox y contenedor)

Novedades en v1.6.0

  • Una API key para el plugin en Odoo 14.0 a 19.0: sandbox up hace que Odoo cree una API key para el usuario admin y la guarda en el .env como ODOO_API_KEY, sin imprimirla. Va en la opción Odoo API key del plugin, con Odoo password vacía. Ver Conectar el plugin al sandbox.
  • Corregido, un sandbox que nunca arrancaba: alrededor de un sandbox nuevo de cada 64 recibía una contraseña de base de datos que empieza con "-", que la imagen de Odoo 11.0 y posteriores leía como una opción. Las contraseñas generadas ya no empiezan con "-". Solo un sandbox de Odoo 11.0 o posterior que nunca arrancó con una así te pide correr sandbox destroy --yes y luego sandbox up, y no se pierde nada. Uno de la 10.0, o uno que ya funcionó, sigue igual. Ver Solución de problemas.
  • La imagen del modo contenedor es ghcr.io/transgenia/odoo-mcp-tools:1.6.0.

Novedades en v1.5.1

  • La imagen del modo contenedor es ghcr.io/transgenia/odoo-mcp-tools:1.5.1.
  • El modo contenedor crea la marca ${CLAUDE_PLUGIN_DATA}/diagnostics/container-mode, así el hook de inicio de sesión del plugin no avisa mientras usas el servidor en contenedor.

Novedades en v1.5.0

  • La imagen del modo contenedor es ghcr.io/transgenia/odoo-mcp-tools:1.5.0.
  • El archivo odoo.env del modo contenedor puede fijar el perfil de permisos (ODOO_POLICY, standard por defecto), un archivo de política (ODOO_POLICY_FILE) y la carpeta de auditoría (ODOO_AUDIT_DIR). Ver Política de permisos.
  • En el sandbox, el ejercicio de borrado y los cambios estilo Studio necesitan otro perfil que standard: full para borrar, builder para campos, vistas y automatizaciones.

Novedades en v1.4.1

La imagen del modo contenedor es ghcr.io/transgenia/odoo-mcp-tools:1.4.1. El modo contenedor es para Claude Code sin Python.

Novedades en v1.4.0

El sandbox cubre Odoo Community de la 10.0 a la 19.0 (antes 16.0 a 19.0), cada serie con una versión de PostgreSQL compatible.

Nuevo en v1.3.0

/odoo-tools:deploy-local levanta infraestructura local provista por Transgenia. Solo corre cuando tú lo invocas y confirmas: ningún hook ejecuta Docker por su cuenta.

Normalmente llegas aquí desde la ruta guiada /odoo-tools:odoo-setup-mcp (fase 1, «no tengo un Odoo para practicar» o «no puedo instalar Python»). El comando también funciona solo.

Requisitos

  • Docker con Compose v2 (docker compose; el binario antiguo docker-compose no es compatible): Docker Desktop (Windows/macOS) o Docker Engine + el plugin compose (Linux). Ver docs.docker.com/get-docker.
  • Para el sandbox: python3 3.9+ (el mismo que ya pide el plugin) y ~2 GB de disco.

Modo A: sandbox local de Odoo

Solo Odoo Community (CE)

El sandbox es Odoo Community. Transgenia no puede proveer instancias de Odoo Enterprise (se licencia por suscripción con Odoo S.A.) ni de Odoo Online (el SaaS de Odoo S.A. en odoo.com). Para usarlas, conecta tu propia instancia Enterprise o tu base Online. En Online, el plan debe incluir acceso a la API externa: sin él la conexión falla aunque las credenciales sean correctas (ver Solución de problemas).

Levanta PostgreSQL + Odoo Community de la 10.0 a la 19.0 en tu equipo, con una base de datos lista (datos demo opcionales) para practicar sin tocar producción.

Odoo 10.0 a 16.0: solo para pruebas y migraciones

Odoo S.A. mantiene solo las tres últimas versiones (17.0, 18.0 y 19.0); de la 10.0 a la 16.0 ya no reciben parches de seguridad. Las imágenes oficiales hasta la 15.0 son solo amd64: Docker Desktop (Apple Silicon, Windows ARM) las emula, más lento; con Docker Engine en Linux ARM primero hay que registrar la emulación amd64 (binfmt/QEMU, p. ej. docker run --privileged --rm tonistiigi/binfmt --install amd64) o el contenedor falla con "exec format error". Cada serie usa una versión de PostgreSQL compatible:

Odoo PostgreSQL
10.0, 11.0 10
12.0, 13.0 12
14.0, 15.0 13
16.0 a 19.0 16

Cada semana un workflow levanta las diez series y las verifica a través del servidor MCP del plugin, que inicia sesión como se indica abajo: con la API key en 14.0 a 19.0 (por JSON-2 en la 19.0) y con la contraseña en 10.0 a 13.0.

El comando te pregunta, una cosa a la vez: versión de Odoo (18.0 recomendada), datos demo, idioma (p. ej. es_MX) y puerto (8069 por defecto). Después ejecuta:

python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox up --odoo 18.0 --lang es_MX --port 8069

Qué hace, en orden:

  1. Escribe docker-compose.yml, odoo.conf y .env en ~/.odoo-tools/sandbox (carpeta 0700, .env 0600). Las contraseñas (PostgreSQL, master de Odoo y usuario admin) se generan localmente y nunca se imprimen; desde la v1.6.0 ninguna empieza con "-", que la imagen de Odoo 11.0 y posteriores leía como una opción.
  2. Descarga las imágenes de ghcr.io/transgenia/odoo y ghcr.io/transgenia/postgres: copias sin cambios de las imágenes oficiales, actualizadas cada semana por Transgenia. Si ese registro no responde, usa las imágenes oficiales de Docker Hub.
  3. Arranca los contenedores con Odoo publicado solo en 127.0.0.1.
  4. Crea la base de datos (por defecto sandbox) y verifica el login.
  5. En Odoo 14.0 y posteriores, hace que Odoo cree una API key para el usuario admin, con odoo shell en un contenedor de un solo uso del sandbox y el propio res.users.apikeys de Odoo. Comprueba que la key inicia sesión y la guarda en el mismo .env como ODOO_API_KEY, sin imprimirla nunca. Odoo la lista como "odoo-tools sandbox" en Preferencias > Account Security. Las ejecuciones siguientes la reutilizan, o la reemplazan si se borró en Odoo. Odoo 10.0 a 13.0 no tienen API keys y se quedan con la contraseña; lo mismo un sandbox donde la key no se pudo crear: el script dice por qué, y el siguiente sandbox up lo intenta de nuevo.

Al terminar muestra la URL, la base, el login y dónde están la contraseña (ODOO_ADMIN_PASSWORD en ~/.odoo-tools/sandbox/.env) y, en 14.0 y posteriores, la API key (ODOO_API_KEY en el mismo archivo); su campo plugin_credential dice qué credencial va en las opciones del plugin. Abre el archivo tú en tu editor: Claude no lo lee ni copia la contraseña ni la key. Nunca pegues la key ni la contraseña en el chat.

Conectar el plugin al sandbox

/plugin → odoo-tools → Configure options:

Opción Valor
Odoo URL http://localhost:8069 (o el puerto que elegiste)
Odoo database sandbox
Odoo login admin
Odoo API key Odoo 14.0 a 19.0: el valor de ODOO_API_KEY del .env. Vacía en 10.0 a 13.0
Odoo password (Odoo < 14 only) Odoo 10.0 a 13.0: el valor de ODOO_ADMIN_PASSWORD. Vacía en 14.0 a 19.0

Si el resumen dice que el sandbox no tiene API key (api_key empieza con none:), usa la contraseña como en 10.0 a 13.0: en el sandbox funciona también en el campo Odoo password, aunque su título diga Odoo < 14 only. El motivo está en ese mismo resumen, y el siguiente sandbox up vuelve a intentar crear la key.

Reinicia Claude y verifica con odoo_version. Las opciones del plugin son una sola conexión: para volver a producción, captura de nuevo los datos de producción.

En el sandbox puedes usar el Permission profile builder para practicar campos, vistas y automatizaciones, o full para practicar borrados. El ejemplo docs/policy-examples/sandbox-builder.json del plugin (perfil builder) abre además los borrados y los usuarios de prueba. Al volver a producción, regresa el perfil a standard (o readonly). Ver Ejemplos.

Administrar el sandbox

python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox status
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox down           # detener, conserva datos
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox up             # volver a arrancar; en 14.0+ crea la API key si falta
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox logs
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/deploy_local.py" sandbox destroy --yes  # borra base y archivos

También puedes pedirlo en lenguaje natural: /odoo-tools:deploy-local status.

Cambiar de versión de Odoo

Una base creada con Odoo 18 no la abre Odoo 17 (ni al revés). El script lo detecta y se detiene: usa destroy --yes primero, u otra carpeta con --dir.

Modo B: servidor MCP en contenedor

Para equipos con Claude Code sin Python 3.9+. Es el mismo servidor MCP, empaquetado por Transgenia como imagen Docker (amd64 y arm64), conectado a tu Odoo existente:

docker pull ghcr.io/transgenia/odoo-mcp-tools:1.6.0
  1. El comando crea ~/.odoo-tools/mcp/odoo.env (solo tu usuario) con marcadores de posición; tú llenas URL, base, login y API key en tu editor. El archivo trae también, comentadas, las líneas de la política de permisos y de la auditoría:

    # ODOO_READONLY=1            # recomendado para los primeros pasos
    # ODOO_POLICY=standard       # perfil: readonly, standard, builder o full
    # ODOO_POLICY_FILE=/policy/policy.json   # opcional, montado en solo lectura
    # ODOO_AUDIT_DIR=/audit      # sin ella, las líneas de auditoría van a docker logs
    

    El perfil por defecto es standard (sin borrados, sin cambios estilo Studio, sin secretos); full conserva el comportamiento de la 1.4. Con un archivo de política o una carpeta de auditoría, agrega -v <ruta absoluta del archivo de política>:/policy/policy.json:ro y -v <ruta absoluta de una carpeta de auditoría>:/audit antes del nombre de la imagen en el comando del paso 2.

    Después marca la carpeta de datos del plugin como modo contenedor. La marca le dice al hook de inicio de sesión del plugin que el servidor en uso es el del contenedor, así deja de reportar como nunca conectado al servidor propio del plugin, que queda sin usar:

    ( umask 077; mkdir -p "${CLAUDE_PLUGIN_DATA}/diagnostics" && touch "${CLAUDE_PLUGIN_DATA}/diagnostics/container-mode" )
    
  2. Lo registra en Claude Code (te muestra el comando antes):

    claude mcp add odoo-tools-docker --scope user -- docker run -i --rm --env-file "$HOME/.odoo-tools/mcp/odoo.env" ghcr.io/transgenia/odoo-mcp-tools:1.6.0
    
  3. Reinicia Claude y verifica con odoo_version del servidor odoo-tools-docker. Si el servidor propio del plugin también está configurado, las herramientas aparecen dos veces: conserva uno. Para deshacer este modo: claude mcp remove odoo-tools-docker y rm "${CLAUDE_PLUGIN_DATA}/diagnostics/container-mode".

En Windows el archivo es %USERPROFILE%\.odoo-tools\mcp\odoo.env; créalo desde tu editor.

Mientras exista la marca container-mode, el hook de inicio de sesión del plugin no muestra ningún aviso: el servidor en uso es el del contenedor, así que se espera que el servidor propio del plugin quede sin usar.

De sandbox a producción

El sandbox es para aprender y probar. Para llevar Odoo + IA a producción (hospedaje, seguridad, migraciones, integraciones, capacitación de tu equipo), Transgenia ofrece despliegue asistido y soporte por sus canales oficiales: dev@transgenia.org · WhatsApp +52 55 8034 0405. Ver Soporte.