Odoo について
Odoo MCP serverは、AIクライアントからOdooの販売、購買、製造、在庫データを読み取れるようにします。既定では読み取り専用で、サーバー側で書き込みを有効にし、各呼び出しで指定の確認を行った場合に限り、発注行の納期を更新できます。
主な機能
- 01販売・購買オーダーの状態照会
- 02仕入先予定日と遅延行の確認
- 03製造・作業指示・在庫データの参照
- 04名前、メール、参照番号、VATで連絡先検索
- 05発注行の予定日を任意で更新
活用シーン
- 01遅延している購買・販売行の特定
- 02仕入先の入荷予定日の確認
- 03製造状況と在庫量の確認
- 04仕入先確認後の発注行日付の調整
MCP 対応
stdioでローカル実行するMCPサーバーで、MCPクライアントに12個の読み取りツールと任意の書き込みツールを公開します。書き込みにはODOO_MCP_ENABLE_WRITES=trueと毎回の指定確認文が必要で、アクセス権は設定したOdooユーザーに従います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @heliosone/odoo-mcpODOO_URLOdoo base URL, e.g. https://odoo.example.comODOO_DBOdoo database nameODOO_USERNAMEOdoo login (user email)ODOO_API_KEYシークレットOdoo API key for that user (or set ODOO_PASSWORD instead)ODOO_PASSWORDシークレットOdoo password, if no API key is usedODOO_MCP_ENABLE_WRITESSet to true to allow the one write tool (still needs a confirmation text per call)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
13掲載時のツール一覧 · 1 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | integer | いいえ | Maximum rows to return (1-500, default 50). |
| query | string | いいえ | Match order number, customer name or customer reference. |
| offset | integer | いいえ | ページングのためにスキップする行数(デフォルトは 0)。 |
| includeQuotations | boolean | いいえ |
詳細
Odoo MCP サーバー
AI アシスタント(Claude Desktop、Claude Code、または任意の MCP クライアント)が、Odoo の販売、購買、製造、在庫データを読み取れるようにする MCP サーバーです。また、有効にした場合に限り、購買オーダー明細の納期を更新できます。
- 読み取りツールが 12 個、書き込みツールが 1 個あります(以下に記載)。
- デフォルトでは読み取り専用です。 書き込みツールを使うには、サーバーで
ODOO_MCP_ENABLE_WRITES=trueを設定し、呼び出しごとに正確な確認テキストを指定する必要があります。 - 設定したユーザーとして、Odoo の外部 JSON-RPC API(
/jsonrpc)に接続します。Odoo のアクセス権が適用されます。 - stdio を使用してローカルで動作します。テレメトリーはなく、接続先は Odoo のみです。
Helios One が開発しました。MIT ライセンスです。
クイックスタート(2 分)
Node.js 20 以降と、外部 API にログインできる Odoo ユーザーが必要です。
1. Odoo で API キーを取得します(パスワードより推奨):アバターをクリックし、My Profile / Preferences を選択して、Account Security を開き、New API Key をクリックします。キーをコピーします。
2. MCP クライアントにサーバーを追加します。
Claude Code:
claude mcp add odoo \
-e ODOO_URL=https://odoo.example.com \
-e ODOO_DB=mydb \
-e [email protected] \
-e ODOO_API_KEY=your-api-key \
-- npx -y @heliosone/odoo-mcp
Claude Desktop:Settings > Developer > Edit Config を開き、claude_desktop_config.json に以下を追加してから、Claude Desktop を再起動します。
{
"mcpServers": {
"odoo": {
"command": "npx",
"args": ["-y", "@heliosone/odoo-mcp"],
"env": {
"ODOO_URL": "https://odoo.example.com",
"ODOO_DB": "mydb",
"ODOO_USERNAME": "[email protected]",
"ODOO_API_KEY": "your-api-key"
}
}
}
}
3. たとえば、「遅延している購買オーダー明細と、遅延日数を教えてください」 や 「S00042 のステータスは何ですか?」 と尋ねます。
設定
| 変数 | 必須 | 説明 |
|---|---|---|
ODOO_URL | はい | Odoo のベース URL。例:https://odoo.example.com |
ODOO_DB | はい | データベース名 |
ODOO_USERNAME | はい | ユーザーのログイン名 |
ODOO_API_KEY | 次のいずれか 1 つ | ユーザーの API キー(パスワードの代わりに使用) |
ODOO_PASSWORD | ユーザーのパスワード | |
ODOO_MCP_ENABLE_WRITES | いいえ | true にすると書き込みツールが使用できます。それ以外の場合、サーバーは読み取り専用になります。 |
ODOO_TIMEOUT_MS | いいえ | リクエストのタイムアウト。デフォルトは 30000 です |
設定が不足していてもサーバーは起動するため、クライアントからツールの一覧を取得できます。その後、各呼び出しは、不足している設定名とともに CONFIGURATION_ERROR を返します。
ツール
| ツール | 戻り値 |
|---|---|
list_open_sales_orders | 納品が完了していない確定済み販売オーダー(includeQuotations を指定すると見積もりも追加) |
list_open_purchase_orders | 受領が完了していない確定済み購買オーダー(includeRfqs を指定すると見積依頼も追加) |
get_order_status | 明細(発注/納品または受領/請求)と移動を含む、1 件の販売または購買オーダー。ID、番号、顧客/仕入先参照で指定します。 |
list_supplier_promise_dates | 確定済み購買オーダーの未完了明細を、仕入先の入荷予定日とともに、予定日の早い順で表示 |
list_late_purchase_lines | 入荷予定日を過ぎていて、受領が完了していない購買オーダー明細。days_late を含みます |
list_late_sales_lines | 納期を過ぎていて、納品が完了していない販売明細。days_late を含みます。納期は、オーダーの確約日があればその日付、なければオーダー日付に明細のリードタイムを加えた日付です。 |
list_manufacturing_orders | 製造オーダーのステータス、数量、計画日、部品の在庫状況 |
list_work_orders | 作業オーダーの作業、ワークセンター、ステータス、予定所要時間と実績所要時間 |
list_shipments | 入荷、出荷、または内部移動。予定日を過ぎたものは lateOnly で指定します |
lookup_customer | 名前、メールアドレス、参照、または VAT で連絡先を検索。顧客を優先します |
lookup_supplier | 名前、メールアドレス、参照、または VAT で連絡先を検索。仕入先を優先します |
get_inventory_on_hand | 製品の数量:手持ち、予測、入荷、出荷 |
update_po_line_promise_date | 書き込み。 1 件の購買オーダー明細の入荷予定日を設定します。以下を参照してください。 |
一覧ツールは limit(デフォルトは 50、最大は 500)と offset を受け取ります。結果には、Odoo 独自のフィールド値に加えて、いくつかの計算フィールド(qty_open、days_late、promised_date)が含まれます。お使いの Odoo バージョンに存在しないフィールドは除外されます。
書き込みツール
update_po_line_promise_date は、1件の発注書明細の date_planned を変更します(たとえば、仕入先から新しい日付の連絡があった場合)。次の両方を満たす場合にのみ実行されます。
- サーバーが
ODOO_MCP_ENABLE_WRITES=trueを指定して起動されていること - 呼び出しに
"confirmation": "CONFIRM update_po_line_promise_date"が含まれていること
それ以外の場合は WRITES_DISABLED または CONFIRMATION_REQUIRED を返し、Odoo への呼び出しは行いません。時刻を指定せずに日付を指定した場合、12:00 UTC として保存されるため、ほとんどのタイムゾーンで同じ日に表示されます。結果には変更前と変更後の値が表示されます。
テスト済みの内容
2026年10月24日に、公式 MCP TypeScript SDK クライアントから stdio 経由で odoo-mcp コマンドを実行し、空のプロジェクトにインストールした npm パッケージの tarball を使ってテストしました。対象は、新規にセルフホストした Odoo Community 17.0、18.0、19.0(公式の odoo/odoo ブランチからビルドし、Sales、Purchase、Inventory、Manufacturing をインストール済み。架空のレコードを使用)です。各バージョンで以下を確認しました。
- 13個すべてのツールが一覧表示され、12個すべての読み取りツールがシード済みのレコードを返しました(各バージョンで21回のツール呼び出しと25項目のチェックを行い、すべて成功)。
- 書き込みが無効な状態では書き込みツールが拒否され(
WRITES_DISABLED)、確認テキストなしでも拒否された後(CONFIRMATION_REQUIRED)、正常に実行され、Odoo を直接読み取って新しい日付を確認しました。 - サーバーは Odoo API キーでログインしました。1つのセッションでは代わりに通常のパスワードを使用し、間違ったパスワードでは
AUTH_FAILEDが返されました。 - 1回の呼び出しは MCP Inspector CLI 経由でも実行しました。
ログ: proof/。ユニットテスト(メモリ内の Odoo の偽物を使用する npm test)は Node.js 20 と 25 で成功します。
未テスト: Odoo Online(odoo.com のホスティング)と Odoo.sh、Odoo Enterprise、17より前の Odoo バージョン、複数会社の構成、大規模なデータベース。Odoo Online では、一部のプランでのみ外部 API を利用できます。Odoo 19 では /jsonrpc が非推奨になりました(削除は Odoo 22(2028年秋)および Odoo Online 21.1(2027年冬)で予定されています)。代わりに JSON-2 API が導入されますが、このサーバーはまだ JSON-2 を使用していません。Odoo 19 では /jsonrpc の呼び出しごとに非推奨の警告が記録されます。
開発
npm ci
npm test
proof/run-live.sh 18.0 は、使い捨ての Linux マシン上でライブテストを再実行します(PostgreSQL と Odoo をインストールします。ワークステーションでは実行しないでください)。
セキュリティ
SECURITY.md を参照してください。アシスタントに必要な権限だけを持つ専用の Odoo ユーザーを使用してください。
ライセンス
MIT。詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。