Odoo销售数据服务

一个通过XML-RPC连接Odoo v18数据库,提取销售信息用于LLM交互的模型上下文协议服务器。

  • by FReptar0
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 FReptar0/odoo-mcp

使用说明

Odoo MCP 服务器

一个模型上下文协议(MCP)服务器,通过XML-RPC连接到Odoo v18数据库,以提取销售信息用于大型语言模型(LLM)交互。

特点/功能

  • :electric_plug:(电插头) XML-RPC 连接通过XML-RPC API直接连接到Odoo v18
  • :bar_chart: 翻译为中文是:“柱状图” 销售数据提取提取销售订单,应用灵活的域过滤条件
  • :mag: 翻译为中文是“放大镜” 高级过滤支持自定义Odoo域过滤器
  • 📈(图表显示上升趋势) 销售分析获取销售统计数据和总结
  • :white_check_mark:(这个符号通常表示“已勾选”或“正确/通过”的意思,直接翻译为中文即“已勾选”或“正确/通过”,但具体翻译可能根据上下文有所调整) 数据验证使用Zod进行全面的输入验证
  • :mag: 翻译为中文是“放大镜” MCP 检查器内置测试支持

可用工具

1. get_sales_orders

从Odoo中提取销售订单,可选择性过滤。

参数:

  • domain (可选):以JSON字符串形式的Odoo域名过滤器
  • limit (可选):要返回的最大记录数(默认:100)
  • offset (可选):要跳过的记录数(默认:0)
  • fields (可选):以逗号分隔的字段列表

默认行为仅返回已确认的销售订单(state = 'sale')

2. get_sales_order_details

获取特定销售订单的详细信息。

参数:

  • order_id (必填):销售订单ID
  • include_lines (可选):包含订单行(默认:true)

3. get_sales_stats

获取销售统计数据和总结。

参数:

  • date_from (可选):开始日期(YYYY-MM-DD)
  • date_to (可选):结束日期(YYYY-MM-DD)
  • group_by (可选):按字段分组(user_id,team_id,state,partner_id)

设置

1. 克隆并安装依赖项

git clone [repository-url]
cd odoo-mcp
npm install

2. 配置环境

复制环境模板并填写您的Odoo凭据:

cp .env.example .env

编辑 .env:

ODOO_URL=<https://your-odoo-instance.com>
ODOO_DATABASE=your_database_name
ODOO_USERNAME=your_username
ODOO_API_KEY=your_api_key

注API密钥比密码更安全。在Odoo中生成一个API密钥:

  1. 进入设置 > 用户与公司 > 用户
  2. 选择您的用户
  3. 前往API密钥选项卡
  4. 生成一个新的API密钥

3. 构建项目

npm run build

使用

开发模式

以开发模式运行服务器,并启用热重载:

npm run dev

生产模式

构建并运行编译后的服务器:

npm run build
npm start

使用MCP Inspector进行测试

在将服务器与Claude集成之前,请使用MCP检查器进行测试:

npm run inspector

这将启动MCP检查器,在那里您可以:

  1. 测试工具调用
  2. 检查回复
  3. 调试连接问题

与Claude的集成

将此服务器添加到您的Claude配置中:

{
  "mcpServers": {
    "odoo-sales": {
      "command": "node",
      "args": ["/path/to/odoo-mcp/dist/server.js"],
      "env": {
        "ODOO_URL": "<https://your-odoo-instance.com>",
        "ODOO_DATABASE": "your_database_name",
        "ODOO_USERNAME": "your_username",
        "ODOO_API_KEY": "your_api_key"
      }
    }
  }
}

示例用法

基本销售订单查询

Get all confirmed sales orders from this month

自定义域名过滤器

Get sales orders for customer "John Smith" that are in draft state

大型语言模型(LLM)将自动构建适当的领域过滤器:

[["partner_id", "ilike", "John Smith"], ["state", "=", "draft"]]

销售统计

Show me sales statistics for the last quarter grouped by salesperson

项目结构

odoo-mcp/
├── src/
│   ├── clients/
│   │   └── odoo-client.ts     # XML-RPC client for Odoo
│   ├── tools/
│   │   └── sales-orders.ts    # Sales order tools implementation
│   ├── types/
│   │   └── odoo.ts            # TypeScript interfaces
│   └── server.ts              # Main MCP server
├── dist/                      # Compiled JavaScript
├── package.json
├── tsconfig.json
├── .env.example
└── README.md

要求

  • Node.js18岁以上
  • **Odoo(注:Odoo是一个开源的业务应用软件套件,用于管理企业运营,如进销存、会计、CRM等,此处为直接音译,实际使用时通常保留原名)**v18(可能与旧版本兼容)
  • XML-RPC 访问Odoo 实例必须允许 XML-RPC 连接

错误处理

服务器包含对以下内容的全面错误处理:

  • 无效的Odoo凭据
  • 网络连接问题
  • 无效的域名过滤器
  • 缺少必需的参数
  • Zod 验证错误
  • XML-RPC 与 HTML 响应检测
  • 自动URL修正建议
  • 详细的诊断信息

增强型诊断

当连接问题发生时,服务器现在提供:

  1. HTTP终端点测试验证端点是否可达
  2. 内容类型验证检测服务器是否返回HTML而非XML-RPC
  3. URL建议为常见的配置错误提供修正后的URL
  4. 特定错误指导解释每个错误的含义及如何修复它

示例错误输出

Server returned HTML instead of XML-RPC response (found <TITLE> tag).

Endpoint returns Content-Type: text/html

This suggests:
1. URL might be pointing to Odoo web interface instead of XML-RPC endpoint
2. XML-RPC might be disabled on this Odoo instance
3. Authentication might be required at web server level
4. Wrong port or path

Try these URLs in your .env file:
1. ODOO_URL=https://your-domain.com:8069
2. ODOO_URL=https://your-domain.com/odoo
3. ODOO_URL=https://your-domain.com/web

做出贡献

  1. 为仓库创建分支
  2. 创建一个特性分支
  3. 进行你的更改
  4. 如适用,请添加测试
  5. 提交一个拉取请求

许可证

MIT 许可证 - 详情请参阅 LICENSE 文件

作者

FReptar0 可以翻译为“F爬行者0”或者根据上下文具体含义进行调整,但通常直接保留原样以表示这是一个特定名称或标识。如果这是一个虚构的名称或特定技术/设备的名称,那么直接使用“FReptar0”作为译文也是可接受的,无需翻译。不过,若需一个更贴近中文表达习惯的译文,“F爬行者0”是一个简单的翻译选项