Skip to main content
Glama
tuanle96

Odoo MCP Server

Odoo MCP

Odoo MCP は、Odoo データベースを Model Context Protocol サーバーに変えます。手書きのスクリプトや安全でない直接的な書き込みアクセスを必要とせず、実際の Odoo コンテキストを必要とするローカルエージェント、IDE、自動化ツール向けに構築されています。

Odoo 16-18 用の XML-RPC と、Odoo 19 用の External JSON-2 に対応しています。読み取りツール、診断、スキーマ検出、移行ヘルパー、ローカルアドオンスキャン、およびゲート付き書き込みワークフローを備えたコンパクトな MCP インターフェースを提供します。

ハイライト

機能

提供内容

22 個の MCP ツール

レコードの読み取り、スキーマの調査、ドメインの構築、アドオンスキャン、呼び出し診断、アクセスルール、書き込み検証。

5 個のエージェントプロンプト

失敗した呼び出し、フィット/ギャップワークショップ、JSON-2 移行、安全な書き込み、モジュール監査のための再利用可能なワークフロー。

Odoo 16-19 対応

デフォルトで XML-RPC、Odoo 19 では JSON-2 を選択可能。

ストリーミング可能な HTTP

stdio を使用しないクライアント向けのローカル HTTP/SSE サポート。

安全な書き込み

直接的な createwriteunlink はブロックされます。承認された書き込みには、ライブメタデータ、同一セッションのトークン、明示的な確認、および環境ゲートが必要です。

リアルなスモークテスト

Docker Compose 検証により、制限付きユーザー、カスタムレコードルール、パッケージ化されたアドオンの XML インストール/更新を含む、使い捨ての Odoo 16.0、17.0、18.0、19.0 スタックを起動します。

Related MCP server: Odoo MCP Server

インストール

pip install odoo-mcp

ローカル開発用:

git clone https://github.com/tuanle96/mcp-odoo.git
cd mcp-odoo
uv sync --extra dev

設定

環境変数に接続値を設定します:

export ODOO_URL="https://your-odoo-instance.com"
export ODOO_DB="your-database"
export ODOO_USERNAME="your-user"
export ODOO_PASSWORD="your-password-or-api-key"
export ODOO_TRANSPORT="xmlrpc"

Odoo 19 JSON-2 の場合:

export ODOO_TRANSPORT="json2"
export ODOO_API_KEY="your-odoo-api-key"
export ODOO_JSON2_DATABASE_HEADER="1"

ODOO_JSON2_DATABASE_HEADER=1 は JSON-2 呼び出しで X-Odoo-Database を送信します。ホストまたは dbfilter ルーティングによって目的のデータベースが既に選択されている場合にのみ 0 に設定してください。

odoo_config.json を使用することもできます:

{
  "url": "https://your-odoo-instance.com",
  "db": "your-database",
  "username": "your-user",
  "password": "your-password-or-api-key"
}

実行

stdio 経由で MCP サーバーを起動:

odoo-mcp

または:

python -m odoo_mcp

ローカルクライアント用にストリーミング可能な HTTP を起動:

odoo-mcp --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp

--allow-remote-http を渡すか MCP_ALLOW_REMOTE_HTTP=1 を設定しない限り、ローカル以外の HTTP バインドは拒否されます。このサーバーには組み込みの HTTP 認証は含まれていません。リモート HTTP デプロイメントは、独自の認証、TLS、およびネットワークポリシーの背後に配置してください。

サーバーループを開始せずにランタイムの状態を確認:

odoo-mcp --health

MCP ツール

ツール

目的

execute_method

レビュー済みのモデルメソッドを実行します。直接的な createwriteunlink はブロックされます。副作用のあるメソッドには正確な許可リストまたは ODOO_MCP_ALLOW_UNKNOWN_METHODS=1 が必要です。

list_models

Odoo モデルの技術名とラベルを一覧表示します。

get_model_fields

1 つのモデルのフィールドメタデータを読み取ります。

search_records

制限付きの読み取り専用 search_read を実行します。

read_record

モデルと ID で 1 つのレコードを読み取ります。

search_employee

名前で従業員を検索します。

search_holidays

日付範囲で休暇レコードを検索します。

diagnose_odoo_call

実行せずにモデル呼び出しを診断します。

diagnose_access

現在の Odoo 資格情報の ACL およびレコードルールの可視性を診断します。

inspect_model_relationships

リレーションシップフィールド、必須フィールド、作成/書き込みのヒントをグループ化します。

generate_json2_payload

XML-RPC 形式の入力を JSON-2 エンドポイント、ヘッダー、名前付きボディに変換します。

upgrade_risk_report

Odoo バージョン間のトランスポート、メソッド、移行のリスクを表面化させます。

fit_gap_report

要件を標準、構成、Studio、カスタムモジュール、回避、または不明に分類します。

get_odoo_profile

サーバーバージョン、ユーザーコンテキスト、トランスポート、データベース、インストール済みモジュールの概要を読み取ります。

schema_catalog

オプションのフィールドメタデータを含む制限付きモデルカタログを構築します。

preview_write

createwrite、または unlink 用の非実行承認ペイロードを作成します。

validate_write

信頼できるライブ fields_get メタデータに対して書き込みペイロードを検証します。

execute_approved_write

ODOO_MCP_ENABLE_WRITES=1 の場合に、同一セッションでライブ検証され、確認された書き込みのみを実行します。

scan_addons_source

アドオンコードをインポートせずにローカルアドオンソースをスキャンします。

build_domain

構造化された条件から Odoo ドメインを構築および検証します。

business_pack_report

販売、CRM、在庫、会計、または人事向けの期待されるモジュール、モデル、検出呼び出しを報告します。

health_check

非機密の MCP ランタイム状態を報告します。

リソース

URI

説明

odoo://models

利用可能なモデルを一覧表示します。

odoo://model/{model_name}

モデルのメタデータとフィールドを読み取ります。

odoo://record/{model_name}/{record_id}

1 つのレコードを読み取ります。

odoo://search/{model_name}/{domain}

制限付きドメインでレコードを検索します。

プロンプト

プロンプト

用途

diagnose_failed_odoo_call

再試行する前に失敗した Odoo 呼び出しの根本原因を特定します。

fit_gap_workshop

未加工の要件を Odoo のフィット/ギャップバケットに変換します。

json2_migration_plan

XML-RPC または JSON-RPC から External JSON-2 への移行を計画します。

safe_write_review

提案された createwrite、または unlink をレビューします。

custom_module_audit

スキャン、リスク、ビジネス上の証拠を用いてローカルアドオンソースを監査します。

安全な書き込みモデル

書き込みは意図的に退屈な手順になっています。

  1. preview_write が標準的で非実行のペイロードを作成します。

  2. validate_write がモデルメタデータ、必須フィールド、読み取り専用フィールド、リレーションヒント、レコード ID、およびペイロードの形状をチェックします。

  3. execute_approved_write は、すべてのゲートを通過した場合にのみ実行されます:

    • 承認が同じサーバープロセス内の validate_write からのものであること、

    • 検証に信頼できる空ではないライブ Odoo fields_get メタデータが使用されていること、

    • トークンが期限切れになっておらず、消費されていないこと、

    • confirm=true が渡されていること、

    • ODOO_MCP_ENABLE_WRITES=1 が設定されていること。

Odoo のアクセスルール、レコードルール、およびサーバー側の制約が最終的な結果を決定します。

sale.order.action_confirm などのレビュー済みの副作用のあるメソッドは、1 つずつ有効にできます:

export ODOO_MCP_ALLOWED_SIDE_EFFECT_METHODS="sale.order.action_confirm,res.partner.message_post"

ODOO_MCP_ALLOW_UNKNOWN_METHODS=1 は信頼できるデプロイメントでは引き続きサポートされますが、health_check はこれをブロードモードとして報告します。少数のレビュー済みメソッドのみが必要な場合は、正確な許可リストエントリを優先してください。

クライアント設定

macOS 上の Claude Desktop は、以下の場所から MCP 設定を読み取ります:

~/Library/Application Support/Claude/claude_desktop_config.json

GUI アプリはシェルの PATH を継承しない可能性があるため、絶対的な Python パスを使用してください:

{
  "mcpServers": {
    "odoo": {
      "command": "/opt/homebrew/bin/python3",
      "args": ["-m", "odoo_mcp"],
      "env": {
        "ODOO_URL": "https://your-odoo-instance.com",
        "ODOO_DB": "your-database",
        "ODOO_USERNAME": "your-user",
        "ODOO_PASSWORD": "your-password-or-api-key",
        "ODOO_TRANSPORT": "xmlrpc"
      }
    }
  }
}

その他の例は docs/client-configs.md にあります。

Docker

イメージをビルドします:

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

MCP クライアントから stdio 経由で実行します:

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

ストリーミング可能な HTTP をローカルで実行します:

docker run --rm \
  -p 127.0.0.1:8000:8000 \
  -e ODOO_URL \
  -e ODOO_DB \
  -e ODOO_USERNAME \
  -e ODOO_PASSWORD \
  -e ODOO_TRANSPORT \
  -e ODOO_API_KEY \
  mcp/odoo:latest \
  --transport streamable-http \
  --host 0.0.0.0 \
  --port 8000 \
  --allow-remote-http

テスト

通常の品質ゲートを実行します:

uv run python -m ruff check .
uv run python -m mypy src
uv run python -m pytest

実際の Odoo スモークテストを実行します:

uv run --python 3.12 --with-editable . scripts/odoo_compose_smoke.py \
  --versions 16.0 17.0 18.0 19.0 \
  --timeout 360 \
  --inspector-smoke

スモークハーネスは、使い捨ての Docker Compose スタックを起動し、直接的な Odoo アクセスを検証し、MCP stdio を検証し、Odoo 19 の場合は JSON-2 とストリーミング可能な HTTP も検証します。

互換性

XML-RPC は、幅広い互換性のためにデフォルトのトランスポートとして維持されます。Odoo 19 は ODOO_TRANSPORT=json2 を通じて External JSON-2 をサポートしています。Odoo は Odoo 20 で XML-RPC と JSON-RPC の非推奨を文書化しているため、新しい統合は JSON-2 を計画する必要があります。

貢献

問題報告、プルリクエスト、互換性レポートを歓迎します。CONTRIBUTING.md から始めて、Odoo のバージョン、トランスポート、クライアントタイプ、および実行した検証を含めてください。

セキュリティ

Odoo の資格情報、API キー、プライベート環境のデータベース名、または完全な Odoo デバッグトレースを含むログを公開しないでください。脆弱性は SECURITY.md を通じて報告してください。

ライセンス

MIT。LICENSE を参照してください。

Install Server
A
license - permissive license
B
quality
B
maintenance

Maintenance

Maintainers
Response time
1dRelease cycle
4Releases (12mo)
Commit activity
Issues opened vs closed

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tuanle96/mcp-odoo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server