贡献与许可证¶
感谢你帮助改进 MCP-Odoo-Tools。
v1.6.0 新增
- 每条命令放在它的环境中: 在仓库的各份指南中,
/plugin命令放在text代码块中(它在 Claude Code 中输入),绝不放在终端代码块中;claude plugin则在终端中运行。有一项测试会检查这一点(server/tests/test_install_surfaces.py)。 CLAUDE.md位于.claude/CLAUDE.md,因此claude plugin validate --strict可以无警告通过。
v1.5.1 新增
- 产品规则: 在修改会影响插件安装在哪里、它在工具无法运行的环境中说什么、凭据或诊断之前,请先阅读
docs/product-rules.md。 - 本手册: 每个拉取请求都要说明这里有什么变化,或者为什么没有变化。
v1.5.0 新增
- 范围: 一套通用的、声明式的权限策略属于公开核心的一部分。
- 新工具: 每个工具都必须为权限策略声明它触及什么,包括它的内部调用和一行测试(参见下文的 服务器)。
v1.4.1 新增
Clean-room 规则现在还涵盖 Odoo 专有模块(Odoo Proprietary License,OPL-1),以及任何许可证不允许以 MIT 再分发的代码;并且有一项测试会检查仓库中没有任何文件声明 MIT 无法吸收的许可证。
基本规则¶
- 许可证: 贡献按 MIT 许可证接受。
- Clean-room(净室): 不要 从采用 AGPL 许可证的 Odoo MCP 项目复制代码,也不要从专有项目复制代码:Odoo Apps 中采用 Odoo Proprietary License(OPL-1)的模块,或任何许可证不允许以 MIT 再分发的代码。这些项目可以启发思路(通过阅读其公开文档);但绝不能使用它们的代码、测试、prompts 或工具描述。与它们只通过网络进行互操作。只依赖 Odoo 公开的 XML-RPC/JSON-RPC/JSON-2 接口,以及公开的模型/字段名称。
- 产品规则: 在修改会影响插件安装在哪里、它在工具无法运行的环境中说什么、凭据或诊断之前,请先阅读
docs/product-rules.md。插件可以安装在 Anthropic 允许的每一个环境中,并且从不在任何环境中被阻止。 - 范围: 本仓库是公开的通用核心。一套通用的、声明式的权限策略属于公开核心的一部分;审批流程、本地化引擎(CFDI 之类)、备份以及其他客户专属引擎则不属于,它们另有其所。
服务器(Python)¶
cd server
python3 -m venv .venv && . .venv/bin/activate
pip install -e ".[dev,cache]"
ruff check src tests
pytest -q -m "not live"
- 没有运行时依赖(
dependencies = []):插件直接用python3运行源代码,不安装任何东西,因此对第三方包的强制导入会导致插件无法启动。可选能力必须像现有的附加项一样优雅降级。代码必须保持与 Python 3.9 兼容(CI 测试 3.9、3.11、3.12 和 3.13;ruff 的目标为py39),并且run_stdio.py必须能在更旧的解释器上被读取,以便显示其版本错误。dev附加项包含官方mcpSDK(Python ≥ 3.10),仅用于一项互操作性测试;服务器从不导入它。 - 标记为
live的测试(-m live)针对真实的 Odoo 沙箱运行,是可选的。 - 如果仓库中的某个文件(无论是否被跟踪)声明了 MIT 无法吸收的许可证(例如 Odoo 清单中的 OPL-1 或 (L/A)GPL
license、非 Markdown 文件中的 OPL-1 或 AGPL 标题,或含有此类标识符的 SPDX 表达式),tests/test_license_hygiene.py会让 CI 失败。Markdown 文档中的提及仍然允许。 - 你要改动某个版本间的行为?编辑
src/odoo_mcp/compat/deltas.py(数据),并向tests/test_compat_resolve.py添加一行。无法在线上验证的边界,应以 "best-effort" 作注释。 - 新工具?在
src/odoo_mcp/tools/中用registry装饰器注册它,并在调用 ORM 之前先通过compat对模型/字段名称进行路由。自 v1.5.0 起,它必须传入access=(它触及什么,供权限策略使用),用谓词声明它的内部调用(registry.Internal(model, methods, check=..., reason=...),附一个正向测试和一个反向测试),并在tests/test_policy_mapping.py中添加一行GOLDEN;映射测试和覆盖率测试失败时会说明缺少什么。写入工具还要声明destructive=。之后用python3 scripts/policy_docs.py --write刷新docs/policy.md中的表格(CI 会检查它们)。参见 工具映射。
CLI(TypeScript)¶
Pull requests¶
- 保持改动聚焦;为逻辑包含测试。
- 在拉取请求中说明 docs.transgenia.org 上的手册有什么变化,或者为什么没有变化(产品规则 8)。Transgenia 的维护者会在同一个版本中更新西班牙语、英语和中文的手册。
- 当 deltas 映射表发生变化时,更新
docs/compat-matrix.md。 - 记录你验证过的任何新的 Odoo 版本/版本类型。
许可证¶
MIT © Transgenia (Centrum Transgenia SAS)。第三方署名参见
LICENSE
和 NOTICE。
署名¶
- odoo-agent (MIT):来自 Francisco Ramírez。复用了 TypeScript 的
XML-RPC CLI(
cli/)、通用 Odoo 智能体的定义(agents/odoo.md,经改编)、领域知识上下文,以及 SessionStart 钩子模式(经改编)。
Clean-room 声明¶
Python 编写的 MCP 服务器(server/)是一个原创且独立的实现。它 不 复制或改编任何采用 AGPL 许可证的 Odoo MCP 项目(或其分支)的代码,也不复制或改编任何 Odoo 专有模块的代码,包括在 Odoo Apps 中以 Odoo Proprietary License(OPL-1)分发的模块(它们不属于 Odoo 本身)。当它与这样的模块协同工作时,只作为客户端通过网络进行。它仅依赖 Odoo 公开记载的
XML-RPC/JSON-RPC/JSON-2 接口,以及公开的模型/字段命名,而这些不受版权保护。任何行为上的相似都反映了这些公开接口,而非共享代码。
Odoo 商标
"Odoo" 是 Odoo S.A. 的注册商标。本项目是一个独立的、面向社区的工具,与 Odoo S.A. 既无隶属关系,也未获其背书。