原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Odoo MCP

作者:ebmurha版本 0.3.0i★ –i在你的电脑上运行
注册名称io.github.ebmurha/odoo-mcp

安装

概览

作者提供的说明(英文原文)

Workflow-native MCP server for safe Odoo Enterprise back-office operations

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 文档、表格与办公
  • 你需要填写:ODOO_MCP_ODOO_URL, ODOO_MCP_ODOO_DATABASE, ODOO_MCP_ODOO_USERNAME, ODOO_MCP_ODOO_API_KEY, ODOO_MCP_ALLOWED_COMPANY_IDS, ODOO_MCP_DEFAULT_COMPANY_ID

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: ODOO_MCP_ODOO_URL, ODOO_MCP_ODOO_DATABASE, ODOO_MCP_ODOO_USERNAME, ODOO_MCP_ODOO_API_KEY, ODOO_MCP_ALLOWED_COMPANY_IDS, ODOO_MCP_DEFAULT_COMPANY_ID

标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。

你需要

  • PyPI已安装 Python 的 uv(用于 uvx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "odoo": {
      "command": "uvx",
      "args": [
        "odoo-erp-mcp",
        "--config",
        "your-value"
      ],
      "env": {
        "ODOO_MCP_ODOO_URL": "your-value",
        "ODOO_MCP_ODOO_DATABASE": "your-value",
        "ODOO_MCP_ODOO_USERNAME": "your-value",
        "ODOO_MCP_ODOO_API_KEY": "your-value",
        "ODOO_MCP_ALLOWED_COMPANY_IDS": "your-value",
        "ODOO_MCP_DEFAULT_COMPANY_ID": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add odoo --env ODOO_MCP_ODOO_URL=your-value --env ODOO_MCP_ODOO_DATABASE=your-value --env ODOO_MCP_ODOO_USERNAME=your-value --env ODOO_MCP_ODOO_API_KEY=your-value --env ODOO_MCP_ALLOWED_COMPANY_IDS=your-value --env ODOO_MCP_DEFAULT_COMPANY_ID=your-value -- uvx odoo-erp-mcp --config your-value

运行前请先填写空着的值。

这个服务器需要在启动命令中填入值,请复制设置后自行填写。

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "odoo": {
      "command": "uvx",
      "args": [
        "odoo-erp-mcp",
        "--config",
        "your-value"
      ],
      "env": {
        "ODOO_MCP_ODOO_URL": "your-value",
        "ODOO_MCP_ODOO_DATABASE": "your-value",
        "ODOO_MCP_ODOO_USERNAME": "your-value",
        "ODOO_MCP_ODOO_API_KEY": "your-value",
        "ODOO_MCP_ALLOWED_COMPANY_IDS": "your-value",
        "ODOO_MCP_DEFAULT_COMPANY_ID": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器需要在启动命令中填入值,请复制设置后自行填写。

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "odoo": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "odoo-erp-mcp",
        "--config",
        "your-value"
      ],
      "env": {
        "ODOO_MCP_ODOO_URL": "your-value",
        "ODOO_MCP_ODOO_DATABASE": "your-value",
        "ODOO_MCP_ODOO_USERNAME": "your-value",
        "ODOO_MCP_ODOO_API_KEY": "your-value",
        "ODOO_MCP_ALLOWED_COMPANY_IDS": "your-value",
        "ODOO_MCP_DEFAULT_COMPANY_ID": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • ODOO_MCP_ODOO_URL 必填 env
    Base URL of the Odoo Enterprise deployment
  • ODOO_MCP_ODOO_DATABASE 必填 env
    Odoo database name
  • ODOO_MCP_ODOO_USERNAME 必填 env
    Dedicated Odoo technical-user login
  • ODOO_MCP_ODOO_API_KEY 机密 必填 env
    API key for the dedicated Odoo technical user
  • ODOO_MCP_ALLOWED_COMPANY_IDS 必填 env
    Comma-separated authorized Odoo company IDs
  • ODOO_MCP_DEFAULT_COMPANY_ID 必填 env
    Default authorized Odoo company ID

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 ebmurha 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“文档、表格与办公”中的其他服务器比较i

  • 星标数多于此分类中其他 3531 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 3531 个服务器的 44% 更新
  • 基础检查结果等于或优于此分类中其他 3531 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Odoo MCP 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

你需要填写:ODOO_MCP_ODOO_URL, ODOO_MCP_ODOO_DATABASE, ODOO_MCP_ODOO_USERNAME, ODOO_MCP_ODOO_API_KEY, ODOO_MCP_ALLOWED_COMPANY_IDS, ODOO_MCP_DEFAULT_COMPANY_ID

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.3.0)于41天前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。

有什么可以替代它?

同一分类中有:Agent-Native Calendar, Excel MCP Server, MCP Server for Excel

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Agent-Native Calendar

作者:BuilderIO

Agent-Native Google Calendar - manage events, sync, and public booking

在云端运行★ 7,620MIT2个月前更新
安装

Excel MCP Server

作者:haris-musa

Create and edit Excel files with AI: charts, PivotTables, formulas. No Excel needed.

在你的电脑上运行★ 4,276MIT7天前更新
安装

MCP Server for Excel

作者:sbroenne

Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.

在你的电脑上运行★ 847MIT4天前更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

Odoo MCP

odoo-mcp is a workflow-native MCP server for Odoo Enterprise. It exposes read-only capability discovery, trial-balance reporting, aged receivables and payables reporting, cashbook visibility, unmatched bank-line detection, and proposal-only bank reconciliation. It also exposes bounded, read-only Payroll evidence for exact periods, batches, payslips, employees, salary rules, and payroll work entries, plus deterministic Payroll comparison and anomaly review.

The initial accounting release also supports bounded invoice, supplier-bill, credit-note, payment-registration, and manual-journal workflows. Mutating tools are preview-only by default and require explicit execution plus idempotency.

The internal Odoo adapter provides bounded, typed, company-scoped primitives for the accounting and Payroll workflows. It enforces fixed model/action allowlists, strips denied fields, normalizes dates, decimals, relations, and cursor pages, and translates Odoo authentication, permission, and transport failures into safe errors. It does not expose generic CRUD or an Odoo configuration surface.

Supported connection targets are Odoo.sh and self-hosted Odoo Enterprise:

  • Odoo 18 through external JSON-RPC
  • Odoo 19 through JSON-2

Other Odoo versions, Odoo Online, Community edition, and custom forks are not supported. This package is not an Odoo module and does not expose generic model CRUD.

Installation

The product and commands are named odoo-mcp; the PyPI distribution is odoo-erp-mcp because the odoo-mcp distribution name is owned by another project.

pipx install odoo-erp-mcp

odoo-mcp --help

The package also exposes odoo-erp-mcp as a compatibility launcher for MCP Registry clients. It starts the same server as odoo-mcp.

Local Development

Requires Python 3.11 or newer and uv.

Copy-Item .env.example .env.local

Replace the placeholders in .env.local, then:

uv sync --locked --all-extras uv run odoo-mcp --profile local --config config/config.example.yaml

Local Development uses stdio. Process-environment settings take precedence over .env.local. Never commit .env.local.

Remote profiles

Dedicated Remote and Shared Hosted use the same server, registry, workflow, and Odoo adapter as Local Development, exposed through Streamable HTTP:

uv run odoo-mcp --profile dedicated --host 127.0.0.1 --port 8000

uv run odoo-mcp --profile shared --host 127.0.0.1 --port 8000

Dedicated Remote reads its single Odoo connection from the process environment; it never loads .env.local. Every /mcp request must carry a deployment-issued HS256 bearer JWT. The server validates its signature, fixed issuer, fixed audience, expiry, issued-at time, subject, and client ID before MCP routing; permissions and company grants remain server-owned. Configure ODOO_MCP_AUTH_ISSUER, ODOO_MCP_AUTH_AUDIENCE, and a secret-store supplied ODOO_MCP_AUTH_SIGNING_KEY of at least 32 characters.

Shared Hosted is a runnable open-enrollment application in the same image. It serves OAuth discovery, dynamic client registration, authorization, token, revocation, browser enrollment, protected-resource metadata, and MCP routes. The application verifies each Odoo connection, lets the user select from the companies that Odoo returned, stores the credential encrypted, and binds every token to exactly one active connector. Configure it from .env.shared.example; its versioned 256-bit encryption keys must come from an operator-controlled secret store. Missing configuration, invalid ciphertext, inactive grants, unsafe Odoo destinations, and unauthorized connector bindings fail closed. Shared Hosted supports either one writable process with a durable local SQLite volume or qualified PostgreSQL with pooled runtime and direct migration connections. TLS, public ingress, monitoring, and production deployment remain operator responsibilities.

Reproducible Dedicated Remote Docker and systemd templates, Shared Hosted integration requirements, and network hardening guidance are in docs/deployment.md. Do not expose the example HTTP listener directly to the public internet.

Durable state

odoo_mcp.storage.Storage provides ordered SQLite and PostgreSQL migrations and tenant-scoped repositories for audit records, proposals, artifacts, idempotency reservations, capability snapshots, and encrypted Shared Hosted connections. Audit rows are append-only and SHA-256 hash-chained per tenant. Idempotency reservations bind the tenant, company, tool, key, and request payload for 24-hour replay, while in-progress and unknown outcomes remain blocked for explicit recovery. Final outcomes must retain a replayable response and match the reserving company. Audit failure text is derived from registered error codes; free-form upstream error text is not persisted.

SQLite backups use a consistent snapshot. Restore writes to a new destination and is accepted only after database integrity, migrations, tenant audit chains, idempotency state, capability data, and encrypted connections verify. Encryption keys must be backed up and restored separately. PostgreSQL uses database-level migration serialization and preserves the same repository, OAuth, audit, idempotency, encryption, and lifecycle contracts.

The server stores local durable state at .odoo-mcp/state.sqlite3 by default. Use --storage to select a different SQLite file. Successful accounting reports atomically persist their Markdown artifact and a compact audit outcome; failed and denied report calls persist a secret-safe failure audit when an isolation identity has been resolved.

Write safety

odoo_mcp.policy.WriteSafetyCoordinator is the required boundary for write-capable workflows. It enforces registry risk metadata, resolved identity, permission, company, and capability gates before workflow preparation. Calls default to preview-only behavior. Execution requires explicit dry_run: false and a non-empty idempotency key, then reserves that key and appends the attempt audit before fresh-state validation and the Odoo mutation.

Successful, rejected, conflicting, replayed, known-failed, and unknown outcomes remain distinct and replay-safe across restart. An uncertain mutation is never automatically retried; if outcome persistence fails after a possible mutation, the in-progress reservation continues to block duplicate execution. Odoo permission denials that prove no mutation occurred remain structured known failures. Audit and response text suppress raw exception details.

Human confirmation belongs to the MCP client host. The server does not issue approval tokens, provide an approval UI, or automatically turn a preview into execution. Reconciliation calls default to preview. An explicit dry_run: false call with an idempotency key stores a server-owned proposal and Markdown artifact, but never finalizes reconciliation or changes a bank statement line in Odoo.

Configuration

Local and Dedicated Odoo settings are documented in .env.example; Shared Hosted operator settings are documented in .env.shared.example. Do not configure an Odoo version: the adapter detects it and fails explicitly for unsupported or malformed responses. config/config.example.yaml is the safe MCP permission-map example and enables the current read tools. A tool is authorized only when it is listed under its registry-defined permission; unknown or mismatched entries prevent startup.

Use a dedicated non-production Odoo technical user with only the required company and module access. Company IDs are an additional MCP authorization boundary and never expand the technical user's Odoo permissions.

Accounting workflows

  • get_currency_rate_history returns the selected company's Odoo rate history for one exact currency, preserving company-over-shared precedence and both rate directions without performing conversions.
  • get_trial_balance returns posted opening balances, inclusive-period debit and credit movement, closing balances, totals, and a Markdown artifact.
  • get_profit_and_loss classifies posted lines by Odoo's income and expense account types for an inclusive period. Income uses credit-minus-debit, expenses use debit-minus-credit, and net profit is income minus expenses.
  • get_balance_sheet classifies posted lines by Odoo's asset, liability, and equity account types through an inclusive date. It reports unclosed earnings separately within total equity and verifies the accounting equation at company-currency precision.
  • get_aged_receivables and get_aged_payables reconstruct posted residuals as of a date, including later partial reconciliations, and group them into not-yet-due, 1–30, 31–60, 61–90, and 90+ day buckets.
  • get_cashbook returns posted move lines from cash and bank journals with opening balance, period debit and credit, and closing balance.
  • flag_unmatched_statement_lines identifies unreconciled statement lines without one unique eligible match at or above the requested threshold.
  • reconcile_bank_statement_lines scores exact one-to-one candidates by amount, partner, normalized reference, and date proximity. Ties and candidate reuse remain explicit unmatched results. The tool can persist a proposal locally; it does not perform Odoo reconciliation.
  • list_open_invoices and list_open_bills reconstruct record- and company-currency residuals as of a date, including later partial reconciliations.
  • create_customer_invoice and create_supplier_bill provide non-mutating, input-only previews by default. Explicit execution creates one unposted draft and reads back Odoo's effective accounting results.
  • create_credit_note creates one linked full draft reversal. Before posting, validate_invoice reports locally determinable balance, currency, account, total, and tax blockers while explicitly deferring Odoo-only posting checks.
  • register_payment delegates route discovery and execution to Odoo's standard payment-registration wizard. Preview may create bounded ephemeral wizard records but never executes a payment or alters accounting records. Non-manual or unidentified methods report their possible external effect as unknown. Execution requires an idempotency key and a freshly revalidated wizard route.
  • list_journal_entries returns filtered draft and posted manual entries with bounded line details and opaque continuation cursors. create_journal_entry creates only a balanced draft, while the separate post_journal_entry tool revalidates and posts one existing draft after explicit execution.

Report results are deterministically ordered and cursor-paginated with a default limit of 100 and maximum of 500. Empty data is a successful empty report; upstream denial, timeout, malformed data, or partial retrieval is a structured failure rather than an empty result. Paginated Markdown artifacts label the row range, continuation state, and whole-report totals explicitly.

Profit-and-loss and balance-sheet analytic filters apply Odoo's percentage distribution to exact analytic account IDs. These reports do not infer custom chart-of-accounts groups, fiscal-year closing rules, consolidation, eliminations, or localization-specific report layouts. Unsupported account classifications fail explicitly instead of being guessed.

Payroll evidence workflows

  • list_payroll_periods lists exact date pairs observed on company-scoped payslips, with bounded status, batch, and currency evidence.
  • get_payroll_batch returns one exact batch, compact payslips, complete employee and state counts, and currency-partitioned observed rule/category totals.
  • list_payslips lists compact payslip facts for an exact batch, exact period, or both. get_payslip returns one exact payslip with all bounded calculated lines, worked days, and one-off inputs.

-

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx