MCP Odoo服务器
一种模型上下文协议(MCP)服务器,用于通过XML-RPC和JSON-RPC连接到Odoo数据库。该服务器使AI助手和其他MCP客户端能够与Odoo数据库交互,执行CRUD操作、管理模块和执行管理任务。
特性
- 数据库连接:使用主机、数据库名称、用户名和API密钥连接到任何Odoo实例
- CRUD操作:在任何Odoo模型中创建、读取、更新和删除记录
- 搜索与查询:具有域过滤器的强大搜索功能
- 模块管理:安装、卸载和升级Odoo模块
- 现场检查:获取详细的字段定义和元数据
- 访问控制:检查用户操作权限
- 版本信息:获取Odoo服务器版本和功能
安装
- 导航到MCP服务器目录:
cd mcp-odoo-server- 安装依赖项:
npm install- 构建TypeScript代码:
npm run build配置
MCP客户端配置
将此服务器添加到您的MCP客户端配置中(例如,Claude Desktop):
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"odoo": {
"command": "node",
"args": [
"/Users/malvernbright/development/Odoo/odoo-17.0+e.20251121/mcp-odoo-server/build/index.js"
]
}
}
}Odoo API密钥
- 登录您的Odoo实例
- 首选 设置 → 用户和公司 → 用户
- 打开您的用户记录
- 转到 偏好设置 标签
- 点击 新API密钥 按钮
- 复制生成的API密钥(您将使用此密钥作为密码)
用法
1.连接Odoo数据库
首先,建立与Odoo数据库的连接:
// Parameters
{
host: "localhost", // or "example.odoo.com"
database: "mydb",
username: "admin@example.com",
apiKey: "your-api-key-here",
port: 8069, // optional, default: 8069
protocol: "http" // optional, default: "http", can be "https"
}2.搜索记录
搜索符合特定条件的记录:
// Find all customers named "John"
{
model: "res.partner",
domain: [["name", "ilike", "John"], ["customer_rank", ">", 0]],
limit: 10,
order: "name ASC"
}3.搜索和读取记录
在一次通话中获取完整记录数据:
{
model: "sale.order",
domain: [["state", "=", "sale"]],
fields: ["name", "partner_id", "amount_total", "date_order"],
limit: 20
}4.阅读具体记录
按ID读取记录:
{
model: "res.partner",
ids: [1, 2, 3],
fields: ["name", "email", "phone"]
}5.创建记录
创建新记录:
{
model: "res.partner",
values: {
name: "New Customer",
email: "customer@example.com",
phone: "+1234567890",
is_company: true
}
}6.更新记录
更新现有记录:
{
model: "res.partner",
ids: [123],
values: {
phone: "+0987654321",
street: "123 Main St"
}
}7.删除记录
删除记录:
{
model: "res.partner",
ids: [123, 456]
}8.获取字段定义
检查模型字段:
{
model: "sale.order",
fields: ["state", "amount_total"], // empty array for all fields
attributes: ["string", "type", "required", "help"]
}9.模块管理
安装模块:
{
module_name: "sale_management";
}卸载模块:
{
module_name: "sale_management";
}升级模块:
{
module_name: "sale_management";
}列出已安装的模块:
{
limit: 50;
}可用工具
| 工具 | 说明 |
|---|---|
odoo_connect | 连接到Odoo数据库 |
odoo_search | 搜索符合条件的记录ID |
odoo_search_read | 在一次通话中搜索和读取记录 |
odoo_read | 按ID读取特定记录 |
odoo_create | 创建新记录 |
odoo_write | 更新现有记录 |
odoo_delete | 删除记录 |
odoo_fields_get | 获取模型的字段定义 |
odoo_execute | 在模型上执行任何方法(高级) |
odoo_version | 获取Odoo服务器版本信息 |
odoo_check_access_rights | 检查用户权限 |
odoo_get_installed_modules | 列出已安装的模块 |
odoo_install_module | 安装模块 |
odoo_uninstall_module | 卸载模块 |
odoo_upgrade_module | 升级模块 |
Odoo域语法
域使用波兰语表示法(前缀表示法),由元组组成:
# Simple conditions
[["field_name", "operator", "value"]]
# Multiple conditions (AND by default)
[["name", "ilike", "John"], ["age", ">", 18]]
# OR operator
["|", ["name", "=", "John"], ["name", "=", "Jane"]]
# NOT operator
["!", ["active", "=", False]]
# Complex example
["|", "&", ["name", "ilike", "John"], ["age", ">", 18], ["vip", "=", True]]常见操作员
=-等于!=-不等于>-大于>=-大于或等于<-小于<=-小于或等于like-类似SQLilike-不区分大小写LIKEin-在列表中not in-不在列表中child_of-(等级)的孩子parent_of-父级(分级)
常见Odoo型号
| 型号 | 描述 |
|---|---|
res.partner | 联系人和公司 |
res.users | 用户 |
sale.order | 销售订单 |
purchase.order | 采购订单 |
account.move | 日记账分录(发票) |
stock.picking | 转移/交付 |
product.product | 产品(变体) |
product.template | 产品模板 |
ir.module.module | 已安装的模块 |
res.company | 公司 |
hr.employee | 员工 |
发展
观看模式
对于自动重建的开发:
npm run watch在开发中运行
npm run dev故障排除
连接问题
- 检查Odoo是否正在运行:确保您的Odoo服务器可访问
- 验证凭据:请确保API密钥有效
- 检查防火墙:确保端口8069(或您的自定义端口)可访问
- 协议:使用
http为了地方发展,https用于生产
身份验证错误
- 验证您的API密钥是否正确
- 确保用户有足够的权限
- 检查数据库名称是否正确
模块安装问题
- 只有具有管理员权限的用户才能安装模块
- 某些模块具有必须先安装的依赖项
- 检查Odoo日志以了解详细的错误消息
与odoo.conf集成
虽然此MCP服务器使用XML-RPC进行远程连接,但您的本地 odoo.conf 该文件用于配置Odoo服务器本身。以下是它们如何协同工作:
odoo.conf(用于odoo服务器)
[options]
db_host = localhost
db_port = 5432
db_user = odoo
db_password = your_postgres_password
db_name = FalseMCP服务器(用于远程访问)
MCP服务器使用XML-RPC API连接到正在运行的Odoo实例(可能是本地或远程),类似于Odoo网络界面或移动应用程序的连接方式。
安全说明
- API密钥:从不将API密钥提交到版本控制
- 访问控制:MCP服务器尊重Odoo的安全规则和访问权限
- 超文本传输安全协议:在生产环境中始终使用HTTPS
- 权限:操作受到经过身份验证的用户权限的限制
许可证
麻省理工学院
贡献
欢迎投稿!请随时提交拉取请求。
