Python Odoo MCP服务器
     
用于Odoo自动化的HTTP REST API,具有加密的API密钥、多对映体范围隔离和连接池。专为n8n、webhooks和自定义集成而构建。
存储库: https://github.com/christopher-igweze/python-odoo-mcp
特性
✅ 多用户 -不同的用户,不同的Odoo实例,相同的服务器
✅ 基于范围的访问控制 -每个模型的细粒度R/W/D权限
✅ 加密的API密钥 -用于安全密钥存储的Fernet加密
✅ 连接池 -使用TTL缓存经过身份验证的会话
✅ n8n就绪 -用于自动化工作流的插入式HTTP集成
✅ 完成CRUD -搜索、读取、创建、写入、删除任何Odoo模型
✅ 错误处理 -清除权限、身份验证和连接错误
✅ 异步支持 -完全异步/等待以实现高并发
快速开始
地方发展
# Clone and install
git clone https://github.com/christopher-igweze/python-odoo-mcp.git
cd python-odoo-mcp
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# Run server
python -m src.server
# Server starts on http://localhost:3000码头工人
# Build and run
docker-compose up --build
# Server starts on http://localhost:3000与n8n一起使用
1.生成API密钥
首先,将您的Odoo凭据发布到 /auth/generate 获取加密的API密钥:
curl -X POST http://localhost:3000/auth/generate \
-H "Content-Type: application/json" \
-d '{
"url": "https://company.odoo.com",
"database": "company_db",
"username": "api_user",
"password": "secret123",
"scope": "res.partner:RWD,sale.order:RW,product.product:R,*:R"
}'
# Response:
# {
# "api_key": "gAAAAABl...",
# "expires": null,
# "user": "api_user"
# }在n8n中,您可以存储此内容 api_key 在变量中供以后使用。
2.创建HTTP请求节点
在n8n中,使用HTTP请求节点:
- 方法: 发布
- 网址:
http://localhost:3000/tools/call(或您的Coolify URL) - 标题:
- X-API-Key: {{ $variables.api_key }} (使用您存储的API密钥)
- 主体:
{
"name": "search",
"arguments": {
"model": "res.partner",
"limit": 10
}
}3.可用工具
所有工具都适用于任何Odoo模型。权限由范围强制执行。
读取操作 (要求 R 许可):
search-使用域搜索记录read-读取特定记录search_read-搜索+阅读search_count-统计匹配记录fields_get-获取模型架构default_get-获取默认值
写入操作 (要求 W 许可):
create-创建新记录write-更新记录
删除操作 (要求 D 许可):
unlink-删除记录
范围格式
使用作用域字符串控制权限:
# Full access to res.partner
res.partner:RWD
# Can search/read/write sales orders, no delete
sale.order:RW
# Read-only access
product.product:R
# Multiple models
res.partner:RWD,sale.order:RW,account.invoice:R
# Wildcard: read-only to all models
*:R
# Mixed: specific full access + wildcard read-only
res.partner:RWD,sale.order:RWD,*:R权限:
R=读取(搜索、读取、search_Read、search_count、fields_get、default_get)W=写入(创建、写入)D=删除(取消链接)
建筑
请求流:
HTTP Request (X-API-Key header)
↓
Authentication & Scope Validation
↓
Connection Pool (scope-aware caching)
↓
Odoo Client (validates permissions, executes operations)
↓
Odoo Instance (XML-RPC)关键部件:
- HTTP服务器 -端口3000上的FastAPI REST API
- 连接池 -使用TTL和作用域隔离缓存经过身份验证的Odoo会话
- 范围验证器 -强制每个模型的R/W/D权限
- Odoo客户端 -带有自动连接池的XML-RPC包装器
环境变量
# Encryption key for API key generation (auto-generated if not set)
# Generate one with: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
ENCRYPTION_KEY=your_base64_fernet_key_here
# Connection pool TTL (default: 60 minutes)
CONNECTION_POOL_TTL_MINUTES=60
# Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
LOG_LEVEL=INFO
# Server host and port (defaults for Docker)
HOST=0.0.0.0
PORT=3000部署
冷却设置
- 将仓库推送到GitHub
- 在Coolify中,创建新服务→ 码头工人
- 指向存储库
- 设置环境变量(如果需要)
- 部署
- 从Coolify获取公共URL
- 在n8n中使用:
https://your-mcp-xxx.coolify.io/tools/call
测试与开发
看 贡献.md 用于:
- 使用pytest运行测试
- 测试覆盖率信息(已实现75.37%)
- 开发工作流程和微提交
错误处理
所有错误返回 {"error": "...", "status": "..."}:
auth_failed-凭据标头无效scope_invalid-作用域语法无效connection_failed-无法连接到Odoopermission_denied-操作违反范围tool_not_found-未知工具名称odoo_error-Odoo RPC错误
注:REST API与MCP协议
该项目揭示 通过HTTP REST API的MCP-样式工具,这与官方的MCP协议不同:
- 此服务器: 带有HTTP端点的REST API(
/tools/list,/tools/call) - MCP官方协议: Claude Desktop、Cursor和其他AI助手通过stdio或websockets使用
有关AI助手集成,请参阅优秀 ivnvxd/mcp服务器odoo 它使用真正的MCP协议。
这种REST API方法非常适合 n8n、webhooks和自动化平台 其中HTTP更实用。
许可证
MIT许可证-请参阅 许可证 了解详情。
这意味着您可以自由使用、修改和分发此软件,只要您包含许可声明。
支持
问题?检查:
- Odoo URL和凭据正确
- 用户在Odoo中具有权限(在设置中创建API用户)
- 作用域语法有效(见上面的示例)
- 服务器日志:
docker logs python-odoo-mcp
关于
Python Odoo MCP服务器 是一个可用于生产的REST API,它将Odoo与n8n、Zapier和自定义集成等自动化平台连接起来。在构建时考虑了安全性和可扩展性:
- 默认加密 -API密钥是Fernet-encrypt的,从不以明文存储
- 多租户就绪 -使用基于范围的访问控制隔离数据
- 连接池 -基于TTL的缓存过期可有效利用资源
- 企业级检测 -142个测试涵盖关键路径,代码覆盖率超过75%
- 开发者友好 -完整的异步/等待支持,清晰的错误消息,详细的文档
无论您是在n8n中自动化Odoo工作流,构建自定义集成,还是以编程方式管理Odoo数据,该服务器都提供了一个可靠、安全的HTTP API,并具有细粒度的权限控制。
用例
- n8n自动化 -将Odoo用作n8n工作流中的数据源或操作
- Webhook集成 -从外部系统触发Odoo操作
- 定制应用 -构建无需直接XML-RPC即可与Odoo交互的应用程序
- API聚合 -将Odoo与自动化平台中的其他API相结合
- 数据同步 -将Odoo数据与其他业务系统同步
技术栈
- 框架: FastAPI(异步Python web框架)
- 协议: 带XML-RPC后端的HTTP REST API
- 缓存: TTL过期的内存连接池
- 安全: 用于API密钥的Fernet加密,基于范围的访问控制
- 测试: pytest,代码覆盖率超过75%
- 部署: Docker、Docker Compose或传统Python服务器
项目状态
- 版本: 0.1.0(稳定)
- 许可证: 麻省理工学院(开源,商业友好)
- 维护: 积极发展
- 兼容性: Odoo 11.0+与Python 3.9+
