Odoo集成服务器

一个实现MCP协议的Odoo集成服务器,通过HTTP和stdio传输层提供对Odoo数据和功能的AI助手访问。

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

使用说明

带有HTTP传输的Odoo MCP服务器

(基于tuanle96/mcp-odoo,感谢他的出色工作)

一个与Odoo ERP系统集成的MCP服务器实现,使AI助手能够通过模型上下文协议与Odoo的数据和功能进行交互。现在,该实现同时支持stdio和HTTP传输层,以提供最大的灵活性。

特点/特性

  • 双传输支持同时支持stdio(传统)和HTTP传输层
  • 全面的Odoo系统集成完全访问Odoo模型、记录和方法
  • XML-RPC 通信通过XML-RPC安全连接到Odoo实例
  • HTTP传输安全API密钥认证、速率限制和CORS支持
  • 会话管理为HTTP客户端提供安全的会话处理
  • SSL/TLS 支持生产环境部署中的HTTPS加密
  • 灵活配置支持配置文件和环境变量
  • 资源模式系统基于URI的Odoo数据结构访问
  • 错误处理为常见的Odoo API问题提供清晰的错误信息
  • 无状态操作可靠的集成所需的清晰请求/响应周期

工具

  • 执行方法

    • 在Odoo模型上执行自定义方法
    • 输入:
      • model (字符串):模型名称(例如,'res.partner')
      • method (字符串):要执行的方法名
      • args (可选数组):位置参数
      • kwargs (可选对象):关键字参数
    • 返回值:包含方法结果和成功指示符的字典
  • 搜索员工

    • 按姓名搜索员工
    • 输入:
      • name (字符串):要搜索的名称(或名称的一部分)
      • limit (可选数字):要返回的最大结果数(默认20)
    • 返回值:一个包含成功指示器、匹配的员工姓名和ID列表以及任何错误消息的对象
  • 搜索假期

    • 在指定日期范围内搜索假期
    • 输入:
      • start_date (字符串):开始日期,格式为YYYY-MM-DD
      • end_date (字符串):结束日期,格式为YYYY-MM-DD
      • employee_id (可选编号):可选的员工ID,用于筛选假期
    • 返回值:一个对象,包含成功指示器、找到的节假日列表以及任何错误消息

资源

  • odoo://models 翻译为中文是:“Odoo://模型(或模型库)”。不过,这里的“models”在Odoo上下文中通常指的是Odoo系统中的各种模型(即业务对象或数据模型),所以更贴切的翻译可能是“Odoo://模型(业务对象/数据模型)”。但为了简洁,一般翻译为“Odoo://模型”即可

    • 列出Odoo系统中所有可用的模型
    • 返回:模型信息的JSON数组
  • odoo://model/{model_name} 翻译为中文是:“Odoo://模型/{模型名称}”

    • 获取特定模型的信息,包括字段
    • 示例: odoo://model/res.partner
    • 返回:包含模型元数据和字段定义的JSON对象
  • odoo://record/{模型名称}/{记录ID}

    • 通过ID获取特定记录
    • 示例: odoo://record/res.partner/1
    • 返回:包含记录数据的JSON对象
  • Odoo://搜索/{模型名称}/{领域条件}

    • 搜索与特定域匹配的记录
    • 示例: odoo://search/res.partner/[["is_company","=",true]]
    • 返回:匹配记录的JSON数组(默认限制为10条)

配置

Odoo 连接设置

  1. 创建一个名为的配置文件 odoo_config.json:
{
  "url": "https://your-odoo-instance.com",
  "db": "your-database-name",
  "username": "your-username",
  "password": "your-password-or-api-key"
}
  1. 或者,使用环境变量:
    • ODOO_URL您的Odoo服务器URL
    • ODOO_DB数据库名称
    • ODOO_USERNAME登录用户名
    • ODOO_PASSWORD密码或API密钥
    • ODOO_TIMEOUT连接超时时间(以秒为单位)(默认:30)
    • ODOO_VERIFY_SSL是否验证SSL证书(默认:true)
    • HTTP_PROXY强制ODOO连接使用HTTP代理

HTTP传输配置

对于HTTP传输,您可以通过环境变量或(其他方式)配置额外设置 http_config.json:

{
  "host": "0.0.0.0",
  "port": 8000,
  "path": "/mcp",
  "require_https": false,
  "allowed_origins": ["*"],
  "ssl_certfile": null,
  "ssl_keyfile": null,
  "default_rate_limit": 1000,
  "session_timeout": 3600
}

HTTP 环境变量:

  • HTTP_HOST服务器主机(默认:127.0.0.1)
  • HTTP_PORT服务器端口(默认:8000)
  • REQUIRE_HTTPS强制使用 HTTPS(默认:false)
  • ALLOWED_ORIGINS逗号分隔的CORS来源(默认:*)
  • SSL_CERTFILESSL证书文件路径
  • SSL_KEYFILESSL私钥文件路径

与Claude Desktop的使用

把它加到你的(列表/计划/等)里 claude_desktop_config.json:

{
  "mcpServers": {
    "odoo": {
      "command": "python",
      "args": [
        "-m",
        "odoo_mcp"
      ],
      "env": {
        "ODOO_URL": "https://your-odoo-instance.com",
        "ODOO_DB": "your-database-name",
        "ODOO_USERNAME": "your-username",
        "ODOO_PASSWORD": "your-password-or-api-key"
      }
    }
  }
}

Docker

{
  "mcpServers": {
    "odoo": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "ODOO_URL",
        "-e",
        "ODOO_DB",
        "-e",
        "ODOO_USERNAME",
        "-e",
        "ODOO_PASSWORD",
        "mcp/odoo"
      ],
    }
  }
}

安装方法

1. Docker 构建和运行

Docker 构建:

docker build -t mcp/odoo:latest -f Dockerfile .

Docker 运行:

docker run -i --rm -e ODOO_URL -e ODOO_DB -e ODOO_USERNAME -e ODOO_PASSWORD mcp/odoo

2. Python 包

pip install odoo-mcp

运行服务器

Stdio 传输(传统 MCP)

# Using the installed package (default stdio transport)
odoo-mcp

# Using the MCP development tools
mcp dev odoo_mcp/server.py

# With additional dependencies
mcp dev odoo_mcp/server.py --with pandas --with numpy

# Mount local code for development
mcp dev odoo_mcp/server.py --with-editable .

HTTP传输(新)

# Run HTTP server in development mode
odoo-mcp --transport http --dev

# Run HTTP server with custom host/port
odoo-mcp --transport http --host 0.0.0.0 --port 8080

# Run HTTPS server with SSL certificates
odoo-mcp --transport http --ssl-cert /path/to/cert.pem --ssl-key /path/to/key.pem

# Run with custom configuration file
odoo-mcp --transport http --config http_config.json

API密钥管理

# Create a new API key
odoo-mcp --create-api-key "my-application"

# List all API keys
odoo-mcp --list-api-keys

HTTP传输使用

一旦HTTP服务器运行起来,您就可以访问:

  • 健康检查: GET http://localhost:8000/health
  • API 文档: GET http://localhost:8000/docs
  • MCP 端点: POST http://localhost:8000/mcp

示例HTTP请求(URL中包含API密钥):

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":"1","method":"tools/list"}' \
  "http://localhost:8000/mcp?api_key=your_api_key_here"

或者使用带有Authorization头的请求:

curl -X POST \
  -H "Authorization: Bearer your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":"1","method":"tools/list"}' \
  http://localhost:8000/mcp

客户示例:

  • Python 客户端:参见 examples/http_client_example.py
  • JavaScript 客户端:参见 examples/javascript_client_example.html

参数格式化指南

在使用MCP工具为Odoo进行开发时,请注意以下参数格式化指南:

  1. 域名参数:

    • 支持以下域名格式:
      • 列表格式: [["field", "operator", value], ...]
      • 对象格式: {"conditions": [{"field": "...", "operator": "...", "value": "..."}]}
      • 任一格式的JSON字符串
    • 示例:
      • 列表格式: [["is_company", "=", true]]
      • 对象格式: {"conditions": [{"field": "date_order", "operator": ">=", "value": "2025-03-01"}]}
      • 多种条件: [["date_order", ">=", "2025-03-01"], ["date_order", "<=", "2025-03-31"]]
  2. 字段参数:

    • 应该是一个字段名的数组: ["name", "email", "phone"]
    • 服务器将尝试将字符串输入解析为JSON

许可证

这个MCP服务器采用MIT许可证授权。