Instalación¶
Novedades en v1.6.0
- Comandos de instalación por superficie:
/plugin install ...dentro de Claude Code, oclaude plugin install ... --scope useren una terminal. Un comando/pluginescrito en PowerShell falla. Ver Como plugin de Claude. - Dos copias de odoo-tools: las señales, y las revisiones de copias y de opciones que dejan una sola copia actual. Ver Dos copias de odoo-tools.
odoo_versionnombra la copia que responde (bloqueplugin). Ver Verificar.- Windows: sin el comando
python3,claude mcp listreporta el servidor comoFailed to connectconConnection closed. El comando de PowerShell que lo corrige está en Requisitos. - El estado
not_startedy una sesión local: el estadonot_startedcon el motivouser_config_unsupportedes el caso de Cowork y Claude chat, y ninguna actualización lo cambia. Usa una sesión local de la pestaña Code o Claude Code en tu equipo; Claude Code no necesita permisos de administrador. Ver Como plugin de Claude. - Docker: el sandbox de Odoo 14.0 a 19.0 trae una API key para el
plugin (ver Despliegue local), y la imagen del modo
contenedor es
ghcr.io/transgenia/odoo-mcp-tools:1.6.0.
Novedades en v1.5.1
- Nuevo hook de inicio de sesión,
hooks/session_start.py, en lugar dehooks/check_options.py: no lee ninguna opción del plugin ni credencial. Cuando los últimos 14 días no registran una conexión exitosa a Odoo ni un arranque del servidor con todos los datos de conexión, dice dónde corren las herramientas de Odoo. Ver Verificar. - Diagnóstico local: el servidor escribe metadatos en
${CLAUDE_PLUGIN_DATA}/diagnostics(ODOO_DIAG_DIR), y/odoo-tools:odoo-doctorlos convierte en un reporte de soporte. Ver Soporte. - Credenciales: el servidor ya no lee
ODOO_HTTP_BEARER; solo lee la API key o la contraseña que le pasan las opciones del plugin. - Docker: el modo contenedor de
/odoo-tools:deploy-localmarca la carpeta de datos del plugin para que el hook no avise, y su imagen esghcr.io/transgenia/odoo-mcp-tools:1.5.1.
Novedades en v1.5.0
Permisos seguros por defecto. Para conservar el comportamiento de la 1.4,
pon la opción Permission profile en full.
- Dos opciones nuevas, ambas con valor por defecto: Permission
profile (
standard; tambiénreadonly,builderofull) y Permission policy file (vacía, o la ruta absoluta a un archivo JSON con reglas por modelo). Ver Política de permisos. - Read-only mode ahora oculta las herramientas de escritura (llamar a una sigue explicando por qué se rechaza).
- Registro de auditoría: el servidor escribe una línea por llamada a
herramienta en la carpeta de datos del plugin (
${CLAUDE_PLUGIN_DATA}/audit), y la conserva 90 días. - Revisión sin conexión de un archivo de política con
--check-policy. - Docker: el archivo de entorno puede fijar la política y la carpeta de auditoría; se quitó el camino multi-tenant por cabeceras.
- La imagen del modo contenedor es
ghcr.io/transgenia/odoo-mcp-tools:1.5.0.
Novedades en v1.4.1
Versión de documentación y diagnóstico: el comportamiento del servidor MCP no cambia.
- Instalación en un paso:
/plugin install odoo-tools --marketplace Transgenia/MCP-Odoo-Tools-CE-EE-and-online(Claude Code 2.1.275 o posterior). En versiones anteriores siguen valiendo los dos comandos de siempre. - Dónde corren las herramientas: las herramientas de Odoo corren en Claude Code; Cowork y Claude chat cargan las skills y los comandos sin las herramientas. Ver Dónde funciona.
- Aviso de opciones faltantes al iniciar sesión: un segundo hook
SessionStartte dice qué opciones obligatorias (URL, base de datos, login) no tienen valor guardado. Nunca lee la API key ni la contraseña. Ver Seguridad. - Configuración sin diálogo:
claude plugin configure(Claude Code 2.1.285 o posterior) para equipos remotos o sin interfaz. - Windows: los hooks de inicio de sesión necesitan Git Bash (ver Requisitos).
- La imagen del modo contenedor es
ghcr.io/transgenia/odoo-mcp-tools:1.4.1.
Novedades en v1.4.0
- 28 herramientas: seis nuevas para Odoo Online, útiles en cualquier Odoo
10-19 (
odoo_online_profile,odoo_api_catalog,odoo_access_check,odoo_record_documents,odoo_import_preview,odoo_import). Ver Referencia de herramientas. - Transporte JSON-2: en Odoo saas~18.4 / 19.0+ con una API key, el modo
autousa la nueva API JSON-2 de Odoo, porque Odoo 22 y Odoo Online saas~21.1 retiran/xmlrpcy/jsonrpc. Nueva opciónjson2en Transport preference. Ver Compatibilidad. odoo_read_groupusaformatted_read_groupdesde saas~18.4 y conserva su salida clásica.- Sandbox de Odoo Community 10.0 a 19.0 (antes 16.0 a 19.0). Ver Despliegue local.
- Corregido:
odoo_versionya no reporta éxito con una API key o contraseña equivocada; un HTTP 429 ya no cambia de transporte.
Novedades en v1.3.0
- Ruta guiada:
/odoo-tools:odoo-setup-mcpte acompaña por configuración, verificación, entrenamiento, uso diario y despliegue. Ver Inicio rápido. - Infraestructura local:
/odoo-tools:deploy-locallevanta un sandbox de Odoo 16-19 en Docker, o el servidor MCP como contenedor (ghcr.io/transgenia/odoo-mcp-tools) para equipos sin Python. Ver Despliegue local. - Releases y paquetes: cada versión se publica como Release en GitHub (zip del plugin + sdist/wheel) y como imagen en GHCR.
- Soporte: los errores de conexión indican cómo repararla y a quién acudir. No tienes que reconfigurar nada al actualizar.
Cambios en v1.2.0
Desde la versión 1.2.0, el servidor MCP ya no usa uv (ni
uv run --frozen). El plugin lo lanza con python3 directamente desde el
código incluido, sin dependencias de terceros en tiempo de ejecución
(solo la biblioteca estándar de Python): al arrancar no instala ni descarga
nada, y server/uv.lock se eliminó. No tienes que volver a configurar
nada: las opciones del plugin que ya capturaste se conservan; solo
necesitas python3 3.9 o superior en el PATH en lugar de uv (ver
Requisitos más abajo). Además:
- Tiempo de espera:
ODOO_TIMEOUTpasa de 30 a 120 s por defecto (ellimit_time_realpor defecto de Odoo) y ahora es la opción del plugin Request timeout. XML-RPC también lo respeta: antes, un Odoo que no respondía podía bloquear una llamada XML-RPC indefinidamente. - Cargan las 9 skills y comandos. Antes, un
skills/SKILL.mden la raíz deskills/ocultaba 5 de las 6 skills, así que/odoo-tools:odoo-setup-mcpno existía. - Corregido un bloqueo (deadlock) de
odoo_versionen instancias Community. - Los argumentos de cada herramienta se validan contra su esquema: si no
coinciden, la llamada se rechaza con
Input validation error: ...antes de llegar a Odoo. - En modo
auto, una escritura nunca se repite por XML-RPC tras agotarse el tiempo de espera o un HTTP 5xx: el error indica que la llamada "may or may not have been applied" (puede o no haberse aplicado). Ver Solución de problemas.
Cambios en v1.1.0 / migración
Desde la versión 1.1.0, el plugin se configura con opciones del
plugin (userConfig) y ya no lee variables de entorno ODOO_* de tu
shell. Si en la v1.0.0 exportaste ODOO_* en ~/.bashrc, ~/.zshrc o con
setx, captura esos valores una vez en /plugin → odoo-tools →
Configure options (y luego puedes quitarlos de tu perfil de shell). El
servidor standalone (Docker, python -m odoo_mcp) sigue leyendo las
variables ODOO_*.
Como plugin de Claude (recomendado)¶
Instálalo una vez, desde el marketplace de Transgenia, de una de estas dos formas.
Dentro de Claude Code (escrito en una sesión):
/plugin install odoo-tools --marketplace Transgenia/MCP-Odoo-Tools-CE-EE-and-online
/odoo-tools:odoo-setup-mcp
En una terminal (PowerShell, Terminal o bash), para todas tus carpetas:
claude plugin install odoo-tools --marketplace Transgenia/MCP-Odoo-Tools-CE-EE-and-online --scope user
y luego abre Claude Code y escribe /odoo-tools:odoo-setup-mcp. Un comando
/plugin va dentro de Claude Code, nunca en la terminal: escrito en PowerShell,
falla con un error de comando no reconocido (not recognized). Un comando
claude plugin va en la terminal, nunca en el chat. En Windows, si claude no
se reconoce justo después de instalar Claude Code, abre una ventana nueva de
PowerShell (ver Requisitos).
La primera forma agrega el marketplace e instala el plugin en un solo paso
(Claude Code 2.1.275 o posterior). En un Claude Code anterior, que no tiene la
opción --marketplace, agrega primero el marketplace, dentro de Claude Code:
Claude Code no necesita permisos de administrador: su instalador nativo lo deja
en tu carpeta personal (~/.local/bin/claude en macOS y Linux), y en Windows la
guía de Anthropic dice que no hace falta correrlo como administrador. En un plan
Team o Enterprise, tu organización decide qué plugins recibes y si la pestaña
Code de Claude Desktop ofrece sesiones locales.
El directorio de plugins de Claude publica una versión solo después de que Anthropic la revisa, así que puede ofrecer un odoo-tools más antiguo que el marketplace de Transgenia (por ejemplo la 1.4.0, anterior a la política de permisos de la 1.5.0), y buscar actualizaciones en las apps de Claude no encuentra una versión más nueva hasta entonces. En Cowork y Claude chat ninguna versión corre las herramientas de Odoo, así que una actualización no cambia eso ahí. Instala una sola copia: la ruta guiada lo revisa (ver Dos copias de odoo-tools).
Claude Code te pide los datos de conexión al habilitar el plugin. Para
cambiarlos después: /plugin → odoo-tools → Configure options, o
/plugin configure <id> dentro de una sesión (en VS Code, el engrane en la fila
del plugin). El diálogo de opciones no dice qué copia del plugin edita.
Las opciones del plugin existen solo en Claude Code
Cowork no pide opciones de plugin e ignora el servidor MCP de este plugin,
porque sus opciones de conexión no tienen valor por defecto, y Claude chat
ignora el servidor MCP local de un plugin. Por eso las herramientas de Odoo
no están disponibles en ninguno de los dos (las skills y los comandos sí
cargan). Claude Desktop nombra ese caso, para el servidor de este plugin,
con el estado not_started y el motivo user_config_unsupported; ninguna
actualización del plugin lo cambia. Una sesión en la nube de Claude Code es
otro caso: tiene el plugin sincronizado, pero no sus opciones, que se quedan
en el equipo donde las capturaste, así que usa una sesión local. En
claude.ai en la web, el menú de tres puntos del plugin ofrece
acciones como quitarlo, editarlo con Claude o duplicarlo, y ningún lugar
para las opciones de conexión. Ver Dónde funciona
y Solución de problemas.
Sin diálogo interactivo (claude plugin configure)¶
En scripts o en equipos remotos o sin interfaz (Claude Code 2.1.285 o posterior):
claude plugin configure <id> --jsonlista las opciones sin valor guardado. En una configuración que funciona siguen en esa lista la credencial que no usas (API key o contraseña) y las opciones que tienen valor por defecto; soloodoo_url,odoo_db,odoo_loginy una credencial deben tener valor.claude plugin configure <id> --values-stdinguarda valores leídos de la entrada estándar como un objeto JSON de cadenas de una sola línea. Reinicia Claude Code después.
<id> es el identificador completo nombre@marketplace que muestra
claude plugin list (por ejemplo odoo-tools@synced para un plugin
sincronizado desde tu cuenta de Claude). Pasa el JSON desde un archivo
protegido o tu gestor de secretos; nunca escribas la key en la línea de comandos
ni en el chat.
La entrada mcpServers del plugin lanza el servidor con:
run_stdio.py pone primero en sys.path el código incluido en server/src
(así ningún otro paquete odoo_mcp instalado en tu equipo puede sustituirlo) y
arranca el servidor MCP por stdio. El servidor usa solo la biblioteca
estándar de Python (el protocolo MCP y los transportes JSON-2, JSON-RPC y XML-RPC
están implementados sobre ella), así que no instala ni descarga nada al arrancar:
el código que corre es exactamente el código legible que viene en la carpeta
del plugin. No se necesita publicación en PyPI, ni uv, ni un entorno virtual.
Opciones del plugin¶
| Opción | Requerida | Notas |
|---|---|---|
| Odoo URL | sí | esquema + host, p. ej. https://mi-empresa.odoo.com (sin ruta final) |
| Odoo database | sí | nombre de la base de datos |
| Odoo login | sí | login (normalmente un correo) del usuario de Odoo; de preferencia de mínimo privilegio |
| Odoo API key | sí* | Odoo ≥ 14: Preferencias → Account Security → New API Key. Odoo 19+ la necesita para JSON-2, la única API que queda en Odoo 22. Opción sensitive |
| Odoo password (Odoo < 14 only) | sí* | solo Odoo 10-13 (sin API keys). Opción sensitive |
| Transport preference | no | auto (default) / json2 / jsonrpc / xmlrpc. auto usa JSON-2 en Odoo saas~18.4 / 19.0+ cuando hay API key, y JSON-RPC y luego XML-RPC en los demás casos |
| Request timeout | no | número, segundos máximos por llamada a Odoo (default: 120, el limit_time_real por defecto de Odoo; mín. 5, máx. 3600); equivale a ODOO_TIMEOUT |
| Read-only mode | no | booleano (default: apagado); las herramientas de escritura, borrado, importación y Studio no se listan, y llamar a una se rechaza antes de que nada llegue a Odoo (equivale a ODOO_READONLY) |
| Permission profile | no | standard (default), readonly, builder o full: qué pueden hacer las herramientas de Odoo encima de los derechos del usuario de Odoo. full conserva el comportamiento de la 1.4. Ver Política de permisos (equivale a ODOO_POLICY) |
| Permission policy file | no | vacía (default), o la ruta absoluta a un archivo JSON con reglas por modelo encima del perfil, p. ej. ~/.config/odoo-tools/policy.json. Mantenlo fuera de tus proyectos. Se lee una vez al arrancar el servidor (equivale a ODOO_POLICY_FILE) |
* llena una de las dos: API key (Odoo ≥ 14) o contraseña (Odoo < 14).
La entrada mcpServers del plugin fija además ODOO_AUDIT_DIR en
${CLAUDE_PLUGIN_DATA}/audit y ODOO_AUDIT_RETENTION_DAYS en 90: el servidor
escribe una línea de auditoría por llamada a herramienta, con nombres y conteos,
nunca valores ni secretos (ver
Registro de auditoría). Desde la v1.5.1 fija
también ODOO_DIAG_DIR en ${CLAUDE_PLUGIN_DATA}/diagnostics: el diagnóstico
local del servidor, solo metadatos (ver
Almacenamiento local).
El perfil por defecto es standard
Con standard no se listan odoo_unlink, odoo_add_field ni
odoo_add_automation, y se rechazan, entre otras cosas, los correos de
salida (salvo notas internas) y los cambios a usuarios, permisos, módulos y
ajustes. Si tu flujo necesita todo lo que permite el usuario de Odoo, elige
full; para campos, vistas y automatizaciones en un sandbox, builder.
Un cambio de perfil necesita reconectar el servidor (/mcp).
Las opciones sensitive (API key y contraseña) se capturan enmascaradas y se
guardan en el almacén seguro de credenciales del sistema operativo, nunca en
settings.json ni en tu perfil de shell. No hace falta (ni se recomienda)
exportar ODOO_* en ~/.bashrc, ~/.zshrc o con setx para el plugin.
Dos copias de odoo-tools¶
Claude Code puede correr a la vez dos copias con el mismo nombre, por ejemplo una del directorio de plugins de Claude en una carpeta de proyecto y otra del marketplace de Transgenia para tu usuario. Entonces las opciones que guardas pueden ir a una copia mientras responden las herramientas de la otra. Las señales:
- Configure options no muestra Permission profile (una copia anterior a la 1.5.0);
odoo_versionresponde sin un bloquepolicy;- la pestaña Errors del plugin dice
Plugin option "odoo_url" isn't setpara una copia que nunca configuraste. Ese mensaje es de Claude Code: la copia que nombra (la muestraclaude plugin list) no tiene opciones guardadas.
Desde la v1.6.0, odoo_version nombra la copia que responde (plugin.copy, ver
Verificar), y la ruta guiada se detiene ante una copia anterior a
la 1.5.0, antes de cualquier escritura.
La revisión de copias y la revisión de opciones¶
Dentro de Claude Code, la ruta guiada (/odoo-tools:odoo-setup-mcp) y
/odoo-tools:odoo-doctor corren la revisión de copias y, para la copia que
conserva, la revisión de opciones. Son estos comandos de shell, que Claude
corre por ti en Claude Code:
claude plugin list --json | python3 "${CLAUDE_PLUGIN_ROOT}/server/run_stdio.py" --check-copies
claude plugin configure <id> --json | python3 "${CLAUDE_PLUGIN_ROOT}/server/run_stdio.py" --check-options
${CLAUDE_PLUGIN_ROOT} es la carpeta del plugin, y <id> la copia que conservar,
como odoo-tools@transgenia-odoo-tools. Cada revisión lee en su entrada estándar
el JSON que imprime un comando de Claude Code: no corre ningún programa, no
contacta nada y nunca imprime un valor sensible, contenga lo que contenga la
entrada. Las dos leen UTF-8, también desde una tubería de Windows. Sale con 0 si
no hay nada que corregir, con 1 si hay algo y con 2 si la entrada no es ese JSON;
--json imprime el reporte como JSON. La revisión de
opciones necesita Claude Code 2.1.285 o posterior. Si claude no se encuentra,
su ruta completa es "$HOME/.local/bin/claude".
Así se ve la revisión de copias con una copia antigua del directorio en una carpeta de proyecto y una actual del marketplace de Transgenia:
odoo-tools copies Claude Code knows in this folder:
active odoo-tools@anthropic-plugin-directory 1.4.0 (project, ~/projects/odoo)
active odoo-tools@transgenia-odoo-tools 1.6.0 (user)
not loaded odoo-tools@synced unknown (synced from claude.ai): a copy on this computer has the same name and takes precedence
To fix:
- 2 copies are active at once, so Claude Code may use the tools of one and the options of another. Keep one: odoo-tools@transgenia-odoo-tools 1.6.0 (user).
- odoo-tools@anthropic-plugin-directory 1.4.0 (project, ~/projects/odoo) is older than 1.5.0: it has no permission policy, profile or audit log.
In a terminal (PowerShell, Terminal or bash), not inside Claude Code:
cd ~/projects/odoo
claude plugin uninstall odoo-tools@anthropic-plugin-directory --scope project
Then restart Claude Code, or run /reload-plugins inside it.
Result: 2 to fix
Cómo leerla:
- Cada copia lleva su estado, su id, su versión y su alcance:
active(cargada en esta carpeta),not loaded(una copia de claude.ai detrás de una copia local con el mismo nombre, que tiene prioridad),other folder(una instalación de otra carpeta, con la notainstalled for that folder only) odisabled. Un mismo id instalado en dos alcances es una sola copia, y una instalación de proyecto o local cuenta solo en su propia carpeta: su carpeta de proyecto o una carpeta dentro de ella. To fixdice qué corregir: dos copias activas a la vez, o una copia anterior a la 1.5.0, sin política de permisos, perfil ni registro de auditoría. Nombra la copia que conservar y prefiere, en este orden, una con la política de permisos, la del marketplace de Transgenia, la más nueva y la de tu usuario.In a terminalda los comandos exactos que quitan las demás: uncda la carpeta del proyecto, entre comillas cuando bash o PowerShell lo necesitan (una ruta de Windows se escribe con/), y luegoclaude plugin uninstall <id> --scope <alcance>(para una copia de tu usuario, solo--scope user, sincd). Si el nombre de la carpeta contiene",$,`,!,[o](comodines para elcdde PowerShell), o si es una ruta de red (con\), en lugar delcdva una línea de comentario,# first change to this folder by hand: ...: cambia tú a esa carpeta. Córrelos en PowerShell, Terminal o bash, nunca como comandos/plugin, y reinicia Claude Code o corre/reload-pluginsdentro de él.- Una copia que se administra en claude.ai no se quita desde la terminal: la
línea
Note:dice que la quites ahí (Customize, Plugins). Si todas las copias activas son anteriores a la 1.5.0, da además los comandos que dejan una copia actual. Para una copia antigua del marketplace de Transgenia sonclaude plugin marketplace update transgenia-odoo-toolsy luegoclaude plugin update odoo-tools@transgenia-odoo-tools --scope <alcance>, con uncda la carpeta del proyecto antes si es de proyecto o local. Desinstalarla e instalarla otra vez puede reutilizar una copia local desactualizada del marketplace y volver a dejar la misma versión antigua. Los comandos de actualización sirven siempre. Para una copia de otro marketplace, los comandos que la quitan y luego el que instala la del marketplace de Transgenia. Si no hay ninguna activa, da el comando que la instala. Antes de una instalación, si el marketplace de Transgenia ya es conocido, lo actualiza primero. Result: ok, o cuántas cosas hay que corregir.
La revisión de opciones lista la URL de Odoo, la base de datos, el login, qué
credencial está puesta (API key, password o none, nunca su valor),
Read-only mode y, en una copia con la política de permisos, el perfil y el
archivo de política. De la URL solo muestra el esquema, el host y el puerto:
nunca repite el usuario, la contraseña, una ruta, una consulta ni un fragmento,
que pueden llevar una contraseña o el token de un enlace de portal copiado. Si
la URL lleva una @, o si no puede leer un host, dice que la URL está puesta y
no muestra ninguna parte de ella: una contraseña con # o ? cambiaría dónde
se corta la URL. En To fix
señala una copia sin la opción Permission profile (anterior a la 1.5.0: corre
la revisión de copias), las opciones obligatorias que faltan, la falta de
credencial, una URL con cualquier @ (la rechaza como usuario o contraseña) y
una URL que no es solo esquema y host. En Note: avisa de una API key y una
contraseña puestas a la vez (se usa la API key), de la / final de la URL (se
ignora), de http sin cifrar hacia otro equipo y de un tiempo de espera menor a
30 s. Las opciones que faltan se capturan en el diálogo que abres dentro de
Claude Code con /plugin configure <id>, nunca en el chat.
Quitar una copia desde la terminal¶
Sin Claude, en una terminal y desde la carpeta del proyecto, claude plugin list
muestra cada copia con su versión y su alcance; conserva un odoo-tools@... y
quita los demás ahí:
Usa el id y el alcance que muestra claude plugin list (--scope user para una
copia instalada para tu usuario) y reinicia Claude Code. La copia del directorio
es odoo-tools@anthropic-plugin-directory; no existe
odoo-tools@claude-plugins-official.
Si la copia que conservas es una copia antigua del marketplace de Transgenia
(anterior a la 1.5.0), no la desinstales para instalarla otra vez: la instalación
puede reutilizar una copia local desactualizada del marketplace y volver a
dejar la misma versión antigua. Los comandos de actualización sirven siempre: actualiza el marketplace y luego la
copia, con el alcance que
muestra claude plugin list (para una copia de proyecto o local, desde la
carpeta del proyecto):
claude plugin marketplace update transgenia-odoo-tools
claude plugin update odoo-tools@transgenia-odoo-tools --scope user
Ejecutar el servidor MCP directamente (standalone)¶
# desde un checkout, con python3 3.9+ (sin instalar nada)
python3 server/run_stdio.py
# o instalado como paquete (se recomienda un entorno virtual); expone el comando odoo-mcp
pip install ./server && odoo-mcp
Requisitos¶
- Servidor MCP:
python33.9 o superior en elPATH. Nada más: cero dependencias de terceros en tiempo de ejecución. Compruébalo conpython3 --version.- macOS:
python3viene con las Command Line Tools de Apple (xcode-select --install). Si tu Mac pide un administrador para instalarlas y no lo eres, tu equipo de TI las instala, o pide a Transgenia una configuración asistida. - Linux: las distribuciones incluyen
python3(si falta, instálalo con tu gestor de paquetes, p. ej.sudo apt install python3). - Windows: el comando debe llamarse
python3. El Python de Microsoft Store incluyepython3.exe; los instaladores de python.org solo creanpython.exe/py.exe: instala el Python de Microsoft Store o pon unpython3.exeen elPATH(una copia o enlace duro depython.exeen la misma carpeta; el comando de PowerShell está abajo). Un alias de PowerShell odoskeyno basta, porque Claude Code lanza el comando directamente. Sinpython3,claude mcp listreporta el servidor del plugin comoFailed to connectconConnection closed, y nada menciona a Python. Ver Solución de problemas. - Windows, hooks de inicio de sesión: son comandos de shell, así que
necesitan Git for Windows (Git Bash). Sin él, Claude Code los corre en
PowerShell, donde fallan con un error de hook
SessionStart. Si Git Bash está instalado pero Claude Code no lo encuentra, defineCLAUDE_CODE_GIT_BASH_PATH. El servidor MCP no se ve afectado. - Windows, después de instalar Claude Code, Git o Python: abre una
ventana nueva de PowerShell y reinicia Claude Code; una ventana abierta
antes de la instalación no ve el
PATHnuevo (claudeno se reconoce, owhere.exe gitno encuentra nada). El instalador nativo de Claude Code dejaclaude.exeen%USERPROFILE%\.local\bin.
- macOS:
- CLI de respaldo (opcional): Node.js 18+.
Windows: un python3.exe junto a python.exe
El enlace duro, en PowerShell:
$python = (Get-Command python -ErrorAction Stop).Source
New-Item -ItemType HardLink -Path (Join-Path (Split-Path $python) "python3.exe") -Target $python
Necesita permiso de escritura en la carpeta de Python: para una instalación
en C:\Program Files, abre PowerShell como administrador. Si
Get-Command python no encuentra nada, o encuentra un archivo dentro de
WindowsApps, Python no está en el PATH: vuelve a correr el instalador de
python.org y marca "Add python.exe to PATH", o instala el Python de
Microsoft Store. La CI comprueba esta solución en Windows
(windows-launch.yml).
Extras opcionales¶
pip install -e "./server[cache]" # caché de esquema con TTL (cachetools)
pip install -e "./server[metrics]" # métricas Prometheus en /metrics
pip install -e "./server[otel]" # trazas OpenTelemetry (OTLP)
Los extras nunca bloquean el arranque: si no están instalados, esas capacidades simplemente quedan inactivas (degradación elegante; la caché de esquema usa entonces una implementación de la biblioteca estándar). El plugin no instala ningún extra.
Configuración standalone (variables de entorno)¶
Solo aplica cuando corres el servidor fuera del plugin (Docker,
python -m odoo_mcp, python3 server/run_stdio.py desde un checkout). Dentro
del plugin, estos valores se llenan desde las opciones del plugin.
| Variable | Requerida | Notas |
|---|---|---|
ODOO_URL |
sí | https://host (sin ruta final) |
ODOO_DB |
sí | nombre de la base de datos |
ODOO_LOGIN |
sí | correo de acceso |
ODOO_API_KEY |
sí* | Odoo ≥ 14; se crea en Account Security. Es la única credencial que acepta JSON-2 |
ODOO_PASSWORD |
sí* | úsala en Odoo < 14 (sin API keys) |
ODOO_TRANSPORT_PREF |
no | auto (default) / json2 / jsonrpc / xmlrpc (ver Compatibilidad) |
ODOO_READONLY |
no | 1 lista y corre solo las herramientas de lectura (opción Read-only mode) |
ODOO_POLICY |
no | perfil de permisos: readonly, standard (default), builder o full (opción Permission profile, ver Política de permisos) |
ODOO_POLICY_FILE |
no | ruta absoluta a un archivo de política opcional (opción Permission policy file) |
ODOO_AUDIT_DIR |
no | carpeta de auditoría; stderr (el default fuera del plugin) u off |
ODOO_AUDIT_RETENTION_DAYS |
no | días que se conserva un archivo de auditoría (default 90; 0 los conserva) |
ODOO_DIAG_DIR |
no | carpeta del diagnóstico local (server.jsonl, solo metadatos); sin valor u off no escribe nada. El plugin pasa ${CLAUDE_PLUGIN_DATA}/diagnostics |
ODOO_TIMEOUT, ODOO_CACHE_TTL |
no | enteros (segundos); ODOO_TIMEOUT (120 por defecto) aplica a JSON-RPC y, desde v1.2.0, también a XML-RPC |
ODOO_METRICS, ODOO_OTEL_ENDPOINT |
no | observabilidad opcional |
* debes definir una de ODOO_API_KEY o ODOO_PASSWORD.
El servidor MCP no persiste credenciales en disco; sus líneas de auditoría solo guardan nombres, conteos y tiempos, y su diagnóstico local solo metadatos. Transgenia no recibe tus credenciales ni tus datos; los resultados de las herramientas sí regresan a tu cliente MCP y a tu proveedor de modelo, como con cualquier herramienta. Ver Privacidad.
Revisa un archivo de política antes de configurarlo (sin conexión, no se envía nada a Odoo):
python3 server/run_stdio.py --check-policy ~/.config/odoo-tools/policy.json --explain res.users:write
Ver --check-policy.
El reporte de soporte también se genera sin conexión:
python3 server/run_stdio.py --diagnose lee el diagnóstico local
(ODOO_DIAG_DIR) y la auditoría (ODOO_AUDIT_DIR), o las carpetas que le pases
con --diag-dir y --audit-dir, y nunca contacta a Odoo. Ver
Soporte.
CLI de respaldo (opcional)¶
Requiere Node.js 18+. Instala la CLI en ~/.claude/tools/odoo-cli y crea ahí
un .env local, legible solo por tu usuario, con marcadores de posición: tú
pegas el secreto (API key o contraseña) en tu propio editor; Claude nunca te lo
pide en el chat.
Ver la página CLI de respaldo para el detalle de comandos.
Docker (opcional)¶
El directorio docker/
del repositorio construye una imagen que corre el mismo servidor stdio. Conéctate
con docker run -i --rm --env-file ./odoo.env odoo-mcp-tools, donde odoo.env
es un archivo que creas tú con las variables ODOO_* (permisos 600, fuera del
control de versiones). Ese archivo puede fijar también la política de permisos y
la carpeta de auditoría; monta el archivo de política en solo lectura y la
carpeta de auditoría con escritura para el usuario del contenedor (mcp):
# en odoo.env
# ODOO_POLICY=standard
# ODOO_POLICY_FILE=/policy/policy.json
# ODOO_AUDIT_DIR=/audit
docker run -i --rm --env-file ./odoo.env \
-v ~/.config/odoo-tools/policy.json:/policy/policy.json:ro \
-v ~/.odoo-tools/audit:/audit ghcr.io/transgenia/odoo-mcp-tools:1.6.0
Sin carpeta de auditoría, las líneas van a docker logs. Desde la v1.5.0 el
servidor nunca toma una URL ni un secreto de Odoo de una petición del cliente: se
quitó el camino multi-tenant por cabeceras (X-Odoo-Url/Db/Login + Bearer), y
ODOO_MULTITENANT se lee pero queda reservada, sin efecto. Desde la v1.5.1 el
servidor no lee ninguna otra credencial: ODOO_HTTP_BEARER, que leía pero nunca
usaba, ya no se lee. Sin ODOO_DIAG_DIR, el contenedor no escribe diagnóstico
local. Un modo HTTP remoto, donde el servidor guarde la credencial de Odoo y los
clientes se autentiquen ante él, está en la hoja de ruta y necesita su propio
diseño.
Verificar¶
Llama a la herramienta odoo_version (o corre /odoo-tools:odoo-doctor). Una
respuesta exitosa que reporte versión, edición, despliegue y transporte confirma
la instalación de extremo a extremo (desde la v1.4.0, odoo_version inicia
sesión primero, así que una credencial equivocada ya no pasa como conexión
correcta). Ver Conexión y descubrimiento.
Si al iniciar sesión ves un aviso que empieza con
odoo-tools: In Cowork and Claude chat this plugin's Odoo tools do not run, el
diagnóstico local no registra en los últimos 14 días una conexión exitosa a Odoo
ni un arranque del servidor con todos los datos de conexión. En Claude Code,
captura las opciones en Configure options y reinicia; en Cowork o Claude
chat, abre una sesión local de la pestaña Code de Claude Desktop. Ver
Solución de problemas.
Desde la v1.5.0, la respuesta de odoo_version incluye un bloque policy con el
perfil activo, el digest y las herramientas ocultas. Si al iniciar sesión el
plugin te avisa que la política bloqueó las herramientas en el último arranque
del servidor (the permission policy locked the Odoo tools), pide a Claude que
llame a odoo_version para ver el motivo, corrige la opción o el archivo y
reconecta el servidor con /mcp. Ver
Solución de problemas.
Desde la v1.6.0 la respuesta trae también un bloque plugin: la versión de
odoo-tools que respondió y, en Claude Code, su copia instalada
(plugin@marketplace, por ejemplo odoo-tools@transgenia-odoo-tools), también
con la política bloqueada. Una respuesta sin bloque policy viene de una copia
anterior a la 1.5.0: la ruta guiada y /odoo-tools:odoo-doctor se detienen ahí.
Ver Dos copias de odoo-tools.