Saltar a contenido

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 /plugin va en un bloque text (se escribe dentro de Claude Code) y nunca en un bloque de terminal, y claude plugin va en la terminal. Una prueba lo revisa (server/tests/test_install_surfaces.py).
  • CLAUDE.md vive en .claude/CLAUDE.md, así claude plugin validate --strict pasa sin advertencias.

Novedades en v1.5.1

  • Reglas de producto: lee docs/product-rules.md antes 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.md antes 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 con python3 y 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 a py39), y run_stdio.py debe poder leerse en intérpretes más antiguos para mostrar su error de versión. El extra dev incluye el SDK oficial mcp (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.py hace fallar la CI si un archivo del repositorio, rastreado o no, declara una licencia que MIT no puede absorber (por ejemplo un license OPL-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 a tests/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 decorador registry y enruta los nombres de modelo/campo por compat antes del ORM. Desde la v1.5.0 debe pasar access= (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 fila GOLDEN a tests/test_policy_mapping.py; las pruebas de mapeo y cobertura explican lo que falta cuando fallan. Una herramienta de escritura declara también destructive=. Después refresca las tablas de docs/policy.md con python3 scripts/policy_docs.py --write (la CI las revisa). Ver Mapeo de herramientas.

CLI (TypeScript)

cd cli && npm install && npm run build

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.md cuando 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.