Odoo集成服务器

专业的Odoo ERP集成服务器,支持HTTP和STDIO传输协议,提供完整的Odoo模型操作功能。

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

使用说明

Odoo MCP 服务器

一个专业的模型上下文协议(MCP)服务器,用于实现Odoo ERP系统的无缝集成。支持HTTP和STDIO传输方式,以提供最大灵活性。

🚀 功能

🌐 支持双传输

  • HTTP 模式使用Express.js的REST API,适用于Web应用和远程访问
  • STDIO 模式为Claude Desktop和本地AI助手提供直接的stdin/stdout通信

🔧 完整集成Odoo

  • 认证使用环境变量自动登录或手动连接
  • CRUD 操作在任何Odoo模型上实现完整的创建、读取、更新、删除操作
  • 高级搜索使用Odoo强大的搜索语法进行复杂领域过滤
  • 方法调用在Odoo模型上执行任何自定义方法
  • 多协议XML-RPC 和 JSON-RPC 支持

🏗️ 专业建筑

  • TypeScript全面的类型安全和现代ES模块
  • MCP协议符合2024年11月5日模型上下文协议
  • 错误处理全面的错误处理和日志记录
  • 模块化设计职责清晰分离
  • 生产就绪经过真实Odoo部署的实战检验

📦 安装

NPM(推荐)

npm install -g @mweinheimer/odoo-mcp-server

来自来源

git clone https://github.com/heimerle/odoo-mcp-server.git
cd odoo-mcp-server
npm install
npm run build

⚙️ 配置

环境变量

创建一个 .env.local 文件或设置这些环境变量:

# Odoo Connection (Required)
ODOO_URL=http://your-odoo-instance:8069
ODOO_DB=your_database            # or ODOO_DATABASE
ODOO_USERNAME=your_username
ODOO_PASSWORD=your_password

# Transport Mode
MCP_TRANSPORT=stdio              # 'http' or 'stdio' (default: http)

# Odoo Protocol
ODOO_TRANSPORT=jsonrpc           # 'jsonrpc' or 'xmlrpc' (default: jsonrpc)

# HTTP Mode Settings (only for MCP_TRANSPORT=http)
MCP_HTTP_PORT=3001               # HTTP server port (default: 3001)

克劳德桌面配置

添加到你的 claude_desktop_config.json:

{
  "mcpServers": {
    "odoo": {
      "command": "node",
      "args": [
        "/path/to/odoo-mcp-server/dist/stdio-server.js"
      ],
      "env": {
        "ODOO_URL": "http://your-odoo:8069",
        "ODOO_DB": "your_database",
        "ODOO_USERNAME": "your_username",
        "ODOO_PASSWORD": "your_password"
      }
    }
  }
}

或者使用全局安装:

{
  "mcpServers": {
    "odoo": {
      "command": "odoo-mcp-server",
      "args": ["--stdio"],
      "env": {
        "ODOO_URL": "http://your-odoo:8069",
        "ODOO_DB": "your_database",
        "ODOO_USERNAME": "your_username",
        "ODOO_PASSWORD": "your_password",
        "MCP_TRANSPORT": "stdio"
      }
    }
  }
}

🚀 快速入门

HTTP 模式

# Using environment variables
ODOO_URL=http://localhost:8069 \
ODOO_DB=mydb \
ODOO_USERNAME=admin \
ODOO_PASSWORD=admin \
MCP_TRANSPORT=http \
node dist/http-mcp-server.js

# Server starts on http://localhost:3001

STDIO 模式(Claude 桌面版)

# Using the dedicated STDIO entry point
ODOO_URL=http://localhost:8069 \
ODOO_DB=mydb \
ODOO_USERNAME=admin \
ODOO_PASSWORD=admin \
node dist/stdio-server.js

🔧 可用工具

该服务器为Odoo提供了13个MCP工具以实现交互:

  1. Odoo_Ping(注:此处“odoo_ping”可能是一个特定系统或服务中的命令或功能名称,直接翻译为“Odoo_响铃”或“Odoo_测试连接”等可能不完全准确,具体含义需结合上下文或Odoo系统的相关文档来确定。) - 测试Odoo连接并获取服务器信息
  2. Odoo连接 - 手动登录Odoo(当未配置自动登录时)
  3. Odoo搜索读取 - 使用域名过滤器搜索和读取记录
  4. Odoo创建 - 在任何模型中创建新记录
  5. Odoo写入(或Odoo数据写入) - 更新现有记录
  6. Odoo_删除(或“Odoo_解除关联”) - 删除记录
  7. Odoo 调用方法 - 在模型上执行自定义方法
  8. `odoo_get_fields` 翻译成中文可以是“Odoo获取字段” - 获取模型的字段定义
  9. Odoo读取(或Odoo阅读) - 通过ID读取特定记录
  10. Odoo搜索 - 搜索记录ID
  11. Odoo搜索计数 - 统计符合标准的记录数量
  12. `odoo_name_get` 可以翻译为“Odoo中的名称获取”或“Odoo的名称获取方法”,具体取决于上下文和使用场景。这个名称可能指的是在Odoo(一个开源的ERP和CRM软件)中用于获取或显示对象名称的某种方法或函数 - 获取记录的显示名称
  13. Odoo名称搜索 - 按名称搜索记录

📚 使用示例

示例1:搜索客户(HTTP)

curl -X POST http://localhost:3001/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "odoo_search_read",
      "arguments": {
        "model": "res.partner",
        "domain": [["is_company", "=", true]],
        "fields": ["name", "email", "phone"],
        "limit": 10
      }
    },
    "id": 1
  }'

示例2:创建联系人(Claude桌面版 - STDIO)

直接问克劳德:

在Odoo中创建一个新的联系人,姓名为“John Doe”,电子邮件为“john@example.com”

克劳德将使用 odoo_create 工具自动地。

示例3:更新记录

curl -X POST http://localhost:3001/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "odoo_write",
      "arguments": {
        "model": "res.partner",
        "ids": [42],
        "values": {
          "phone": "+1234567890"
        }
      }
    },
    "id": 1
  }'

🧪 开发

从源代码构建

git clone https://github.com/heimerle/odoo-mcp-server.git
cd odoo-mcp-server
npm install
npm run build

开发模式

npm run dev      # Watch mode with auto-recompile
npm run lint     # Run ESLint
npm run test     # Run tests

项目结构

src/
├── http-mcp-server.ts      # Main HTTP/STDIO server
├── stdio-server.ts         # Dedicated STDIO entry point
├── models/
│   ├── odoo-client.ts     # Odoo API client
│   └── odoo-tools.ts      # MCP tool definitions
├── utils/
│   └── odoo-sanitizer.ts  # Response sanitization
└── types/
    └── index.ts           # TypeScript type definitions

📖 文档

🐛 故障排除

STDIO 模式:“未连接到 Odoo”

确保你使用的是正确的环境变量名称:

  • 使用 ODOO_DB 或者 ODOO_DATABASE (两者都有效)
  • 必须提供所有凭据以实现自动登录

HTTP 模式:端口已被占用

# Check what's using port 3001
lsof -i :3001

# Kill the process
pkill -f "node.*http-mcp-server"

# Or use a different port
MCP_HTTP_PORT=3002 node dist/http-mcp-server.js

连接被拒绝

检查您的Odoo实例是否可访问:

curl http://your-odoo-instance:8069/web/database/selector

🤝 贡献/参与

欢迎投稿!请:

  1. 为仓库创建分支(或“克隆仓库”)
  2. 创建一个特性分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add amazing feature')
  4. 推送至分支(git push origin feature/amazing-feature)
  5. 提交一个拉取请求

📄 许可证

MIT 许可证 - 详见 许可证 文件中详述。

🔗 链接

  • GitHubhttps://github.com/heimerle/odoo-mcp-server(中文可表述为:“GitHub上的heimerle/odoo-mcp-server项目”)
  • **NPM(Node Package Manager,节点包管理器)**https://www.npmjs.com/package/@mweinheimer/odoo-mcp-server 的中文翻译为:“https://www.npmjs.com 上的 @mweinheimer/odoo-mcp-server 包”
  • 问题https://github.com/heimerle/odoo-mcp-server/issues(中文可表述为:GitHub上的heimerle/odoo-mcp-server项目的问题页面)

🙏 致谢


为Odoo和AI社区倾心打造