Contribuir y licencia¶
Gracias por ayudar a mejorar MCP-Odoo-Tools.
Novedades en v1.6.0
- Cada comando en su superficie: en las guías del repositorio, un
comando
/pluginva en un bloquetext(se escribe dentro de Claude Code) y nunca en un bloque de terminal, yclaude pluginva en la terminal. Una prueba lo revisa (server/tests/test_install_surfaces.py). CLAUDE.mdvive en.claude/CLAUDE.md, asíclaude plugin validate --strictpasa sin advertencias.
Novedades en v1.5.1
- Reglas de producto: lee
docs/product-rules.mdantes de un cambio que afecte dónde se instala el plugin, lo que dice en una superficie donde sus herramientas no corren, las credenciales o el diagnóstico. - Este manual: cada pull request dice qué cambia aquí, o por qué nada.
Novedades en v1.5.0
- Alcance: una política de permisos genérica y declarativa forma parte del núcleo público.
- Herramientas nuevas: cada una debe declarar qué toca para la política de permisos, con sus llamadas internas y una fila de prueba (ver Servidor abajo).
Novedades en v1.4.1
La regla clean-room ahora cubre también los módulos propietarios de Odoo (Odoo Proprietary License, OPL-1) y cualquier código cuya licencia no permita redistribuirlo bajo MIT, y una prueba revisa que ningún archivo del repositorio declare una licencia que MIT no pueda absorber.
Reglas base¶
- Licencia: las contribuciones se aceptan bajo licencia MIT.
- Clean-room: no copies código de proyectos MCP de Odoo con licencia AGPL, ni de proyectos propietarios: módulos de Odoo Apps bajo la Odoo Proprietary License (OPL-1), o cualquier código cuya licencia no permita redistribuirlo bajo MIT. Esos proyectos pueden inspirar ideas, leídas en su documentación pública; nunca su código, sus pruebas, sus prompts ni sus descripciones de herramientas. Interopera con ellos solo por la red. Apóyate solo en las interfaces públicas XML-RPC/JSON-RPC/JSON-2 de Odoo y en los nombres públicos de modelos/campos.
- Reglas de producto: lee
docs/product-rules.mdantes de un cambio que afecte dónde se instala el plugin, lo que dice en una superficie donde sus herramientas no pueden correr, las credenciales o el diagnóstico. El plugin se instala en cada superficie que Anthropic permite y nunca se bloquea en ninguna. - Alcance: este repositorio es el núcleo genérico público. Una política de permisos genérica y declarativa forma parte del núcleo público; los flujos de aprobación, los motores de localización (CFDI y similares), los respaldos y otros motores específicos de un cliente no, y viven en otro lugar.
Servidor (Python)¶
cd server
python3 -m venv .venv && . .venv/bin/activate
pip install -e ".[dev,cache]"
ruff check src tests
pytest -q -m "not live"
- Sin dependencias de tiempo de ejecución (
dependencies = []): el plugin corre el código tal cual conpython3y no instala nada, así que una importación obligatoria de un paquete de terceros rompería su arranque. Las capacidades opcionales deben degradar con elegancia, como los extras existentes. El código debe seguir siendo compatible con Python 3.9 (la CI prueba 3.9, 3.11, 3.12 y 3.13; ruff apunta apy39), yrun_stdio.pydebe poder leerse en intérpretes más antiguos para mostrar su error de versión. El extradevincluye el SDK oficialmcp(Python ≥ 3.10) solo para una prueba de interoperabilidad; el servidor nunca lo importa. - Las pruebas marcadas
live(-m live) corren contra un sandbox real de Odoo y son opcionales. tests/test_license_hygiene.pyhace fallar la CI si un archivo del repositorio, rastreado o no, declara una licencia que MIT no puede absorber (por ejemplo unlicenseOPL-1 o (L/A)GPL en un manifiesto de Odoo, el título de la OPL-1 o la AGPL en un archivo que no es Markdown, o una expresión SPDX con un identificador así). Las menciones en documentación Markdown siguen permitidas.- ¿Cambias un comportamiento entre versiones? Edita
src/odoo_mcp/compat/deltas.py(dato) y añade una fila atests/test_compat_resolve.py. Las fronteras que no puedas verificar en vivo se comentan como "best-effort". - ¿Herramienta nueva? Regístrala en
src/odoo_mcp/tools/con el decoradorregistryy enruta los nombres de modelo/campo porcompatantes del ORM. Desde la v1.5.0 debe pasaraccess=(lo que toca, para la política de permisos), declarar sus llamadas internas con predicados (registry.Internal(model, methods, check=..., reason=...), con una prueba positiva y una negativa) y agregar una filaGOLDENatests/test_policy_mapping.py; las pruebas de mapeo y cobertura explican lo que falta cuando fallan. Una herramienta de escritura declara tambiéndestructive=. Después refresca las tablas dedocs/policy.mdconpython3 scripts/policy_docs.py --write(la CI las revisa). Ver Mapeo de herramientas.
CLI (TypeScript)¶
Pull requests¶
- Mantén los cambios enfocados; incluye pruebas para la lógica.
- Di en el pull request qué cambia en el manual de docs.transgenia.org, o por qué nada (regla de producto 8). Los mantenedores de Transgenia actualizan el manual en español, inglés y chino en el mismo release.
- Actualiza
docs/compat-matrix.mdcuando cambie el mapa de deltas. - Anota cualquier versión/edición de Odoo nueva contra la que hayas verificado.
Licencia¶
MIT © Transgenia (Centrum Transgenia SAS). Ver
LICENSE
y NOTICE
para las atribuciones de terceros.
Atribuciones¶
- odoo-agent (MIT), de Francisco Ramírez. Se reutilizan la CLI XML-RPC de
TypeScript (
cli/), la definición del agente Odoo genérico (agents/odoo.md, adaptada), el contexto de conocimiento de dominio y el patrón del hook SessionStart (adaptado).
Declaración clean-room¶
El servidor MCP en Python (server/) es una implementación original e
independiente. No copia ni adapta código de ningún proyecto MCP de Odoo con
licencia AGPL (ni de sus forks), ni de ningún módulo propietario de Odoo, incluidos
los módulos distribuidos bajo la Odoo Proprietary License (OPL-1) en Odoo Apps
(que no forman parte de Odoo). Cuando trabaja con un módulo así, lo hace solo
por la red, como cliente. Se apoya únicamente en las interfaces
XML-RPC/JSON-RPC/JSON-2 públicamente documentadas de Odoo y en la nomenclatura
pública de modelos/campos, que no están sujetas a derechos de autor. Cualquier
similitud de comportamiento refleja esas interfaces públicas, no código
compartido.
Marca Odoo
"Odoo" es una marca registrada de Odoo S.A. Este proyecto es una herramienta independiente y orientada a la comunidad, no afiliada ni respaldada por Odoo S.A.