FIELD NOTE · IMPLEMENTATION EVIDENCE

AI による Odoo 書き込みに ACL だけでは不十分な理由

Odoo の ACL は接続ユーザが書き込めるかを決めます。AI エージェントが今このタイミングで、このペイロードで、人に見せずに変更すべきかは決めません。

Published: August 18, 2026 · Last updated: August 27, 2026

Published: 2026-08-18

MCP endpoint: https://mcp.erpipe.com/mcp

まず結論から

Odoo の ACL は、接続ユーザーが書き込みできるかどうかに答えます。しかし、AI エージェントがこの変更を今、このレコードに対して、このペイロードで行うべきかどうかには答えません。ERPipe は書き込みをデフォルトでオフに保ち、プレビュー、フィールドポリシー、バリデーション、そして 1 回限り消費される人間の決定を Odoo の手前に重ねられます。Odoo 自身のアクセスチェックも引き続き実行されます。

これは https://erpipe.com/ のホステッド製品に関する説明であり、MCP URL の変更ではありません。クライアントは依然として https://mcp.erpipe.com/mcp を呼び出します。

環境と方法

このフィールドノートは、ERPipe のホステッド書き込み経路を、プレビュー、バリデーション、承認、実行、監査、曖昧な結果のチェックとして実装・テストしたものに基づいています。Odoo 接続は引き続き実在の Odoo ユーザーを使用し、ゲートウェイは承認を使ってグループ、ACL、レコードルール、フィールドアクセスを迂回しません。

方法は意図的に狭く設計しました。書き込みを無効にした状態から始め、正確なモデル、レコード ID、フィールド、値を準備し、ポリシーチェックを実行し、1 つの人間の決定を要求し、1 回だけ実行し、その後記録された結果を検査します。これはベンチマークではなく、すべての Odoo ビジネスワークフローが自動化に対して安全だという証拠でもありません。

なぜ人がループに残るのか

エージェントは、正しい請求書日付と、破滅的な取引先変更を、同じ自信でドラフトできます。人間による承認は目に見えるロックです。オーナーはモデル、メソッド、ID、ペイロードを見てから、1 回承認するか拒否します。グラントが密かに拡大することはありません。

Chatter ノートと許可リストされたメソッドには別のゲートを使えるため、コメントが在庫移動のように扱われることはありません。

財務を模した経路

これがループです。「Connect をクリックした後、モデルが何でも好き勝手に投稿する」のではありません。

結果

有用な境界は、2 つの独立した決定です。Odoo は このユーザーがその操作を実行できるか? に答えます。ゲートウェイは このクライアントと提案されたペイロードを、今、試行させてもよいか? に答えます。人間の承認は 2 つ目の決定を狭めることはできますが、1 つ目を広げることはできません。

これらの決定を分離しておいたことで、失効と失敗対応が明確になりました。Odoo のグループを変更せずに接続を一時停止できます。拒否されたペイロードは拒否されたままです。不確実な結果は unknown として記録され、再投稿の理由として扱われません。

オーナーが実際に目にするもの

ステップ起きること起きないこと
Previewペイロードとターゲット ID が表示されるOdoo は変更されない
Validateフィールドポリシーと許可リストが実行されるタイムアウトが盲目的に再試行されない
Approveオーナーの 1 回の決定チームメイトがより広いグラントを継承しない
Execute承認された書き込みが 1 回実行される曖昧な結果が自動で再生されない

Odoo 呼び出しの結果が不明確な場合、ERPipe はそれを unknown とマークします。ゲートウェイのタイムアウトを理由に 2 重に投稿するよりも安全です。

例: フォローアップ日付の変更

  1. 接続の書き込みはまだオフです。エージェントは検索と読み取りのみ可能です。
  2. 書き込みを有効化し、create/write/unlink に対してオーナー承認を維持します。
  3. エージェントが preview を呼び出し、次に validate を呼び出し、待機します。
  4. メールで Approve をタップするか、/app/approvals を開きます。
  5. 書き込みは同じ Odoo ユーザーとして実行されます。レコードルールは引き続き適用されます。

拒否すれば、何も投稿されません。接続を一時停止すれば、後続のツール呼び出しには黙示的な成功ではなく一時停止エラーが返ります。

失敗モード

「モデルがチャットで尋ねてきた」場合との違い

ChatGPT 内のチャット確認はオーナーの受信箱ではありません。チャットにアクセスできる誰もが「はい」と打てます。ERPipe の承認は、特定のプレビュー済みペイロードに対するワークスペースオーナーの決定です。モデルが自信ありげに聞こえたからといって、グラントが拡大することはありません。

ホステッドのオリジナル事実(2026-08-18): execute_approved_writeHITL_APPROVAL_REQUIRED を返すとき、それは 短い待ち であり、失敗でも会話を終える理由でもありません。同じ承認オブジェクトを保持し、オーナーに Approve を伝え、5–10 秒待ってから get_write_approval_status をポーリングします(または同じ承認で実行を再試行します)。約 30–45 秒後も保留のままなら、Approvals に残して置いてください。ポーリングツールはホステッド専用で、カタログ に名前が記載されています。

曖昧な Odoo の結果は unknown とマークされます。タイムアウトが起きたからといって、ゲートウェイが投稿を盲目的に再試行することはありません。

限界

人間による承認は 1 つのクラスのリスクを減らしますが、提案された会計、在庫、顧客アクションが正しいことの証明にはなりません。オーナーには依然として、適切な Odoo ユーザー、バックアップ、ビジネス管理、ワークフロー固有のレビューが必要です。高頻度または時間的制約の強いプロセスでは、行ごとの承認とは別の管理手段が必要な場合があります。

このノートは、ERPipe の現在のホステッド挙動をカバーするものであり、すべての MCP サーバーをカバーするものではありません。別のゲートウェイで書き込みを有効化する前に、実装を検査し、失効、拒否、unknown の結果をテストしてください。

ソースと関連エビデンス

FAQ