Token导航 LogoToken导航TokenDH.com
Claude Odoo API logo
运维云端stdio官方级别未说明来源级核验

Claude Odoo API

MCP Server

一个提供与Odoo 19外部JSON-2 API交互工具的模型上下文协议(MCP)服务器,支持多公司管理、CRUD操作和高级查询功能。

工具数

0

提示词数

0

GitHub Stars

4

资源数

0
PythonClaude数据集成Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

bmya

提供方

bmya

最后核验

2026/5/17 20:21

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

python -m venv venv

详细介绍

Odoo 19 MCP服务器

模型上下文协议(MCP)服务器,提供与Odoo19的外部JSON-2 API交互的工具。此服务器使Claude和其他MCP客户端能够在Odoo数据库上执行CRUD操作和查询。

特性

  • 多公司支持:从单个MCP服务器管理多个Odoo实例/公司
  • 完整的CRUD操作:创建、读取、更新和删除记录
  • 高级搜索:使用复杂的域筛选器进行搜索
  • 批量操作:对多条记录执行操作
  • 图像处理:内置支持使用Pillow处理图像(调整大小、格式转换)
  • 稳健的错误处理:针对瞬态故障,采用指数回退自动重试
  • 连接池:高效的HTTP连接重用,以获得更好的性能
  • 可配置超时:防止挂在缓慢/无响应的服务器上
  • 类型安全:正确的输入验证和错误处理
  • Docker支持:多阶段构建,优化图像大小和安全性
  • 生产就绪:非root用户、健康检查和全面日志记录

可用工具

1. odoo_list_companies

列出所有可用的公司配置。

参数:

退货: 已配置的公司名称列表

2. odoo_search_read

搜索并读取Odoo模型的记录。

参数:

  • company (必填):公司配置名称(来自.env部分)
  • model (必填):Odoo型号名称(例如。, res.partner, account.move)
  • domain (可选):以列表形式搜索条件(例如。, [["name", "=", "John"]])
  • fields (可选):要检索的字段名列表
  • limit (可选):最大记录数
  • offset (可选):要跳过的记录数
  • order (可选):排序顺序(例如。, "name asc")

3. odoo_create

在Odoo模型中创建新记录。

参数:

  • company (必填):公司配置名称
  • model (必填):Odoo型号名称
  • values (必填):字段值字典

4. odoo_write

更新现有记录。

参数:

  • company (必填):公司配置名称
  • model (必填):Odoo型号名称
  • ids (必填):要更新的记录ID列表
  • values (必填):要更新的字段值字典

5. odoo_unlink

从Odoo模型中删除记录。

参数:

  • company (必填):公司配置名称
  • model (必填):Odoo型号名称
  • ids (必填):要删除的记录ID列表

6. odoo_search

在不读取完整记录的情况下搜索记录ID。

参数:

  • company (必填):公司配置名称
  • model (必填):Odoo型号名称
  • domain (可选):搜索条件
  • limit, offset, order (可选):与search_read相同

7. odoo_read

通过ID读取特定记录。

参数:

  • company (必填):公司配置名称
  • model (必填):Odoo型号名称
  • ids (必填):记录ID列表
  • fields (可选):要检索的字段名列表

8. odoo_search_count

统计符合搜索条件的记录。

参数:

  • company (必填):公司配置名称
  • model (必填):Odoo型号名称
  • domain (可选):搜索条件

先决条件

  • Python 3.10或更高版本(用于本地开发)
  • Docker和Docker Compose(用于容器化部署)
  • 启用了外部API的Odoo 19实例
  • Odoo API密钥(请参阅配置部分)

配置

获取Odoo API密钥

  1. 登录您的Odoo实例
  2. 首选 设置用户和公司用户
  3. 选择您的用户
  4. 转到 偏好设置 标签
  5. API密钥 部分,单击 新API密钥
  6. 给它一个描述,然后单击 生成
  7. 复制生成的API密钥(只显示一次)

多公司配置

服务器支持通过单个MCP服务器实例管理多个Odoo实例/公司。每个公司都配置在 .env 使用INI样式节的文件。

创建一个 .env 项目根目录中的文件:

cp .env.example .env

编辑 .env 根据您的公司配置:

# Company 1
[company1]
ODOO_URL=http://localhost:8069
ODOO_DATABASE=database_name
ODOO_API_KEY=your_api_key_here
COMPANY_ID=1  # Optional, defaults to 1

# Company 2 - same database, different company
[company2]
ODOO_URL=http://localhost:8069
ODOO_DATABASE=database_name
ODOO_API_KEY=another_api_key
COMPANY_ID=2

# Company 3 - different database
[production]
ODOO_URL=https://instance.odoo.com
ODOO_DATABASE=production_db
ODOO_API_KEY=production_key
COMPANY_ID=1

要点:

  • [section_name] 定义公司配置
  • 节名称用作 company 工具调用中的参数
  • 多家公司可以使用不同的API密钥连接到同一Odoo实例/数据库
  • COMPANY_ID 是可选的,如果未指定,则默认为1

高级配置

您可以使用环境变量配置请求行为:

[company1]
ODOO_URL=http://localhost:8069
ODOO_DATABASE=database_name
ODOO_API_KEY=your_api_key_here
COMPANY_ID=1

# Optional: Override global settings per company
ODOO_REQUEST_TIMEOUT=30  # Request timeout in seconds (default: 30)
ODOO_MAX_RETRIES=3       # Maximum retry attempts (default: 3)

或者在您的环境中设置全局默认值/docker-compose:

# docker-compose.yml
environment:
  - ODOO_REQUEST_TIMEOUT=60    # Longer timeout for slow networks
  - ODOO_MAX_RETRIES=5         # More retries for unreliable connections

性能调整:

  • 降低 ODOO_REQUEST_TIMEOUT 用于更快地检测不良连接的故障
  • 增加 ODOO_MAX_RETRIES 对于不可靠的网络(建议最大值:5)
  • 重试使用指数回退:两次尝试之间等待1秒、2秒、4秒

安装与使用

选项1:Docker(推荐)

  1. 使用Docker Compose构建和运行:
docker-compose up -d
  1. 查看日志:
docker-compose logs -f
  1. 停止服务器:
docker-compose down

方案2:地方发展

  1. 创建虚拟环境:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. 安装依赖项:
pip install -r requirements.txt
  1. 运行服务器:
python src/odoo_mcp_server.py

与Claude Desktop一起使用

快速设置(推荐)

运行自动安装脚本:

./setup-claude-desktop.sh

此脚本将:

  1. 构建Docker镜像
  2. 验证Docker是否正在运行
  3. 向您显示要添加到Claude Desktop的确切配置

手动设置

有关详细说明,包括故障排除和高级配置,请参阅 CLAUDE_DESKTOP_SETUP.md.

配置文件位置:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 窗户: %APPDATA%/Claude/claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

Docker安装程序(推荐):

{
  "mcpServers": {
    "odoo": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "--env-file",
        "/absolute/path/to/claude-odoo-api/.env",
        "odoo-mcp-server"
      ]
    }
  }
}

本地Python设置:

{
  "mcpServers": {
    "odoo": {
      "command": "python",
      "args": [
        "/absolute/path/to/claude-odoo-api/src/odoo_mcp_server.py"
      ],
      "env": {
        "ODOO_CONFIG_FILE": "/absolute/path/to/claude-odoo-api/.env"
      }
    }
  }
}

重要提示:

  • 用实际的绝对路径替换路径
  • 如果您的Odoo位于本地主机上,请使用 host.docker.internal.env 或添加 "--network", "host" 到Docker参数
  • 更新配置后,完全重新启动Claude Desktop

CLAUDE_DESKTOP_SETUP.md 有关完整的设置说明和故障排除。

示例和脚本

看看 examples/ 即用型脚本目录:

  • process_contact_images.py:通过自动调整大小和生成HTML库导出和处理联系人图像
  python examples/process_contact_images.py

示例/README.md 查看详细文档和更多示例。

示例用法

连接后,您可以要求Claude与您的Odoo实例进行交互:

列出可用公司:

List all available Odoo companies

寻找合作伙伴:

Find all partners with 'John' in their name in company1

创建新合作伙伴:

Create a new partner in company2 with name "Acme Corp" and email "contact@acme.com"

更新记录:

Update partner ID 42 in production to set their phone to "555-1234"

计数记录:

How many invoices do we have in draft status in company1?

复杂查询:

Find all sales orders in company2 created in the last 30 days with a total amount greater than $1000

多公司运营:

Compare the number of active customers between company1 and company2

Odoo域语法

Odoo使用域过滤器语法进行搜索。以下是一些常见的例子:

# Equals
[["name", "=", "John"]]

# Not equals
[["state", "!=", "draft"]]

# Greater than / Less than
[["amount_total", ">", 1000]]

# In list
[["state", "in", ["sale", "done"]]]

# Like (contains)
[["name", "ilike", "john"]]  # case-insensitive

# AND conditions (default)
[["name", "=", "John"], ["city", "=", "New York"]]

# OR conditions
["|", ["name", "=", "John"], ["name", "=", "Jane"]]

# Complex nested conditions
["|", ["state", "=", "draft"], "&", ["amount_total", ">", 1000], ["partner_id", "!=", False]]

常见Odoo型号

  • res.partner -客户、供应商、联系人
  • product.product -产品中心
  • product.template -产品模板
  • sale.order -销售订单
  • sale.order.line -销售订单行
  • account.move -发票、账单、日记账分录
  • account.move.line -发票/账单行
  • stock.picking -仓库转移
  • purchase.order -采购订单
  • project.project -项目
  • project.task -任务
  • hr.employee -员工
  • crm.lead -CRM线索/机会

故障排除

连接问题

  1. 验证Odoo是否可访问:
curl http://your-odoo-url:8069/web/database/selector
  1. 测试API密钥验证:
curl -X POST http://your-odoo-url:8069/json/2/res.partner/search_count \
  -H "Authorization: Bearer your_api_key" \
  -H "X-Odoo-Database: your_database" \
  -H "Content-Type: application/json" \
  -d '{"domain": []}'

Docker网络问题

如果在本地运行Odoo,而容器无法访问它,请使用 host.docker.internal 而不是 localhost:

ODOO_URL=http://host.docker.internal:8069

或者使用主机网络:

docker run --network host ...

API访问被拒绝

确保Odoo计划支持外部API。根据Odoo文件:

  • 外部API访问需要自定义Odoo定价计划
  • 不适用于One App免费或标准计划

测试

该项目包括全面的单元测试。

在本地运行测试

  1. 安装测试依赖项:
pip install -r requirements.txt
  1. 运行所有测试:
pytest tests/ -v
  1. 运行覆盖率报告:
pytest tests/ -v --cov=src --cov-report=html
  1. 查看覆盖率报告:
open htmlcov/index.html  # macOS
# or
xdg-open htmlcov/index.html  # Linux

持续集成

该项目使用GitHub Actions for CI/CD:

  • 测试:在Python 3.10、3.11和3.12上运行
  • 代码检查:使用flake8、黑色和isort进行代码样式检查
  • 码头工人:自动构建Docker镜像

.github/workflows/ci.yml 有关工作流的详细信息。

发展

项目结构

claude-odoo-api/
├── .github/
│   └── workflows/
│       └── ci.yml             # GitHub Actions CI/CD workflow
├── src/
│   └── odoo_mcp_server.py     # Main MCP server implementation
├── tests/
│   ├── __init__.py
│   ├── test_odoo_mcp_server.py # Unit tests
│   └── README.md              # Test documentation
├── Dockerfile                 # Docker image definition
├── docker-compose.yml         # Docker Compose configuration
├── requirements.txt           # Python dependencies (includes test deps)
├── pytest.ini                 # Pytest configuration
├── pyproject.toml            # Python project metadata
├── .env.example              # Environment variables template
├── .gitignore                # Git ignore rules
├── CLAUDE.md                 # Developer documentation
├── README.md                 # This file
└── create_odoo_invoices.py   # Example usage script

添加新工具

添加新的Odoo API操作:

  1. 向添加方法 OdooClient 类(如果需要)
  2. 在中添加工具定义 list_tools()

- 包含 company 作为Odoo操作的必需参数

  1. 在中添加工具处理程序 call_tool()

- 提取公司参数并获取客户端实例

  1. 在中添加相应的单元测试 tests/

CLAUDE.md 获取详细的实施指南。

资源

许可证

麻省理工学院

贡献

欢迎投稿!请随时提交拉取请求。

目录标签

目录标签

PythonClaude数据集成企业资源规划本地部署API网关多租户系统自动化工具

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

token

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiotoken部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP