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 サポート。 |
安全な書き込み | 直接的な |
リアルなスモークテスト | 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 --healthMCP ツール
ツール | 目的 |
| レビュー済みのモデルメソッドを実行します。直接的な |
| Odoo モデルの技術名とラベルを一覧表示します。 |
| 1 つのモデルのフィールドメタデータを読み取ります。 |
| 制限付きの読み取り専用 |
| モデルと ID で 1 つのレコードを読み取ります。 |
| 名前で従業員を検索します。 |
| 日付範囲で休暇レコードを検索します。 |
| 実行せずにモデル呼び出しを診断します。 |
| 現在の Odoo 資格情報の ACL およびレコードルールの可視性を診断します。 |
| リレーションシップフィールド、必須フィールド、作成/書き込みのヒントをグループ化します。 |
| XML-RPC 形式の入力を JSON-2 エンドポイント、ヘッダー、名前付きボディに変換します。 |
| Odoo バージョン間のトランスポート、メソッド、移行のリスクを表面化させます。 |
| 要件を標準、構成、Studio、カスタムモジュール、回避、または不明に分類します。 |
| サーバーバージョン、ユーザーコンテキスト、トランスポート、データベース、インストール済みモジュールの概要を読み取ります。 |
| オプションのフィールドメタデータを含む制限付きモデルカタログを構築します。 |
|
|
| 信頼できるライブ |
|
|
| アドオンコードをインポートせずにローカルアドオンソースをスキャンします。 |
| 構造化された条件から Odoo ドメインを構築および検証します。 |
| 販売、CRM、在庫、会計、または人事向けの期待されるモジュール、モデル、検出呼び出しを報告します。 |
| 非機密の MCP ランタイム状態を報告します。 |
リソース
URI | 説明 |
| 利用可能なモデルを一覧表示します。 |
| モデルのメタデータとフィールドを読み取ります。 |
| 1 つのレコードを読み取ります。 |
| 制限付きドメインでレコードを検索します。 |
プロンプト
プロンプト | 用途 |
| 再試行する前に失敗した Odoo 呼び出しの根本原因を特定します。 |
| 未加工の要件を Odoo のフィット/ギャップバケットに変換します。 |
| XML-RPC または JSON-RPC から External JSON-2 への移行を計画します。 |
| 提案された |
| スキャン、リスク、ビジネス上の証拠を用いてローカルアドオンソースを監査します。 |
安全な書き込みモデル
書き込みは意図的に退屈な手順になっています。
preview_writeが標準的で非実行のペイロードを作成します。validate_writeがモデルメタデータ、必須フィールド、読み取り専用フィールド、リレーションヒント、レコード ID、およびペイロードの形状をチェックします。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.jsonGUI アプリはシェルの 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 を参照してください。
Maintenance
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