mcpField
O
Odoo Mcp Gateway

Odoo Mcp Gateway

ローカル
github.com/parth-unjiyaビジネス・マーケティング423 週間前に更新

Odoo Mcp Gateway について

Odoo Mcp Gatewayは、AIクライアント経由でOdooのデータにアクセスするチーム向けの、Odoo 17、18、19対応MCPゲートウェイです。YAMLで設定するアクセス制御とOdoo標準のACLを併用し、Odoo側にアドオンを導入せずに利用できます。

主な機能

  1. 01Odoo 17、18、19に対応
  2. 02YAMLによるモデル、フィールド、RBAC制限
  3. 03レート制限、監査ログ、セキュリティ検査
  4. 04カスタムモジュールのモデル検出
  5. 05レコードの検索、作成、更新、削除
  6. 06MCPツール、リソース、プロンプトを提供

活用シーン

  1. 01MCPクライアント経由でOdooレコードを検索
  2. 02ロールに応じたモデルとフィールドの制限
  3. 03書き込み前のデフォルト値確認やdry run
  4. 04カスタムモジュールのアクセスルール設定

MCP 対応

MCP サーバーとしてOdooに接続し、レコード操作などをツール、リソース、プロンプトとしてクライアントに公開します。stdioとstreamable-httpのトランスポートに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"odoo-mcp-gateway": {
"command": "uvx",
"args": [
"odoo-mcp-gateway"
]
}
}
}
起動コマンドuvx odoo-mcp-gateway

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiodoo-mcp-gateway0.1.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

odoo-mcp-gateway

セキュリティを最優先した、Odoo 17/18/19 対応のバージョン非依存 MCP ゲートウェイです。YAML 設定により、標準モジュールとカスタムモジュールの両方で動作します。Odoo 側のコードは一切不要です。

Python 3.10+ License: MIT Odoo Tests Coverage

30 秒で始めるクイックスタート

pip install odoo-mcp-gateway

Claude Desktop の設定(claude_desktop_config.json)に追加します。

{
  "mcpServers": {
    "odoo": {
      "command": "python",
      "args": ["-m", "odoo_mcp_gateway"],
      "env": {
        "ODOO_URL": "http://localhost:8069",
        "ODOO_DB": "your_database"
      }
    }
  }
}

Claude Desktop を再起動します。任意の会話で次のようにします。

login with method "password", username "admin", credential "your_password"

接続完了です。Claude に Odoo レコードの検索、作成、更新を依頼できます。すべての呼び出しはレート制限と監査ログの対象となり、Odoo に到達する前に 2 層のセキュリティチェックを通過します。

Odoo アドオンは不要です。Python コードを書く必要もありません。 きめ細かなアクセス制御のための YAML 設定だけで使用できます(任意です。標準設定でも安全に動作します)。

v0.2.1 の新機能

  • ブルートフォース攻撃対策 — ユーザー名ごと(5 回/5 分)と送信元ごと(30 回/15 分)のロックアウト
  • create_record、update_record、delete_record、execute_method の dry_run モード — 実行せずに検証
  • 新しいツール 2 つ:get_defaults(Odoo のデフォルト値をプレビュー)、get_onchange(フィールドの副作用をプレビュー)
  • read_group の 時間単位でのグループ化:create_date:month、date:quarter など
  • ブロックリストを強化:常時ブロックされるモデルが 32 個(従来は 17 個)、常時ブロックされるメソッドが 29 個(従来は 18 個)、常時ブロックされる書き込みフィールドが 10 個、常時読み取り専用のモデルが 8 個
  • has_group('base.group_system') による サーバー側の管理者確認(従来は認証レスポンスを信頼)
  • 認証情報ラッパーにより、repr()/トレースバック経由のパスワード漏えいを防止
  • JSON-RPC の再試行は OdooSessionExpiredError の場合にのみ実行(従来は認証エラーのたびに再試行)

セキュリティ修正 21 件の全リストについては、CHANGELOG.md を参照してください。

このプロジェクトの目的

既存の Odoo MCP サーバーには、カスタムモジュールを見落とすハードコードされたモデル一覧、後回しにされるセキュリティ、必須のカスタム Odoo アドオン、単一バージョンのみへの対応といった共通の問題があります。このゲートウェイは、それらすべてを解決します。

  • 2 層のセキュリティ — MCP の制限(YAML)と Odoo 組み込みの ACL(ir.model.access + ir.rule)
  • YAML による設定 — モデルの制限、RBAC、フィールド単位のアクセス制御、レート制限、監査ログ
  • カスタムモジュール対応 — ir.model 経由でモデルを自動検出し、YAML 設定を追加するだけで使用可能
  • バージョン非依存 — バージョン別アダプターにより Odoo 17、18、19 に対応
  • Odoo 側のコードは不要 — pip install と YAML 設定だけで完了。カスタムアドオンは不要
  • MCP のプリミティブをすべて提供 — ツール 31 個 + リソース 6 個 + プロンプト 12 個(ほとんどのサーバーはツールしか実装していません)
  • プラグインアーキテクチャ — entry_points 経由で pip インストール可能なドメインパックにより拡張可能

アーキテクチャ

MCP Client (Claude Desktop / Claude Code / HTTP)
    |  User calls login tool with Odoo credentials
    v
MCP Server (FastMCP)
    |
    |-- security_gate()    --> Rate limit + RBAC tool access + audit logging
    |-- restrictions       --> Model/method/field block lists (YAML + hardcoded)
    |-- rbac               --> Field-level filtering + write sanitization
    |
    |-- tools/             --> 31 MCP tools (auth + schema + CRUD + workflow + plugins)
    |-- resources/         --> 6 MCP resources (odoo:// URIs)
    |-- prompts/           --> 12 reusable prompt templates
    |-- plugins/           --> Entry-point plugin system (HR, Sales, Project, Helpdesk)
    |
    |  JSON-RPC / XML-RPC as authenticated user
    v
Odoo 17/18/19 (security enforced per user via ir.model.access + ir.rule)
セキュリティパイプライン

すべてのツール呼び出しとリソース呼び出しは、このパイプラインを通過します。

Request --> Rate Limit --> Authentication Check --> RBAC Tool Access
    --> Model Restriction --> Method Restriction --> Field Validation
    --> Handler Execution --> RBAC Field Filtering --> Audit Log --> Response

YAML で上書きできない、ハードコードされた安全策:

  • 常にブロックされる32モデル — システム内部情報、認証/TOTP、決済トークン、添付ファイル、mail.mail、base.automation など
  • 常に読み取り専用の8モデル — mail.message、mail.followers、mail.activity、discuss.channel、mail.notification、mail.compose.message、mail.alias、discuss.channel.member(全ユーザーで読み取り可能、書き込みはブロック)
  • 常にブロックされる10個の書き込みフィールド — password、password_crypt、groups_id、totp_secret、signup_token/type/expiration、api_key、share、active
  • 常にブロックされる29メソッド — sudo、with_user/env/context、_sql、_write、_create、name_create、load、import_data、export_data など
  • execute_method でブロックされる28個のORMメソッド(フィールドレベルのチェックを回避できないようにします)
  • ユーザー名ごとのブルートフォースロックアウト — 5回失敗すると5分間ロックアウト(固定時間で、延長できません)
  • 接続元ごとのブルートフォースロックアウト — 15分間に30回失敗するとロックアウトし、ユーザー名をローテーションする攻撃を防ぎます
  • 認証情報のラッパークラス — パスワードは情報漏えいを防ぐ __repr__/__str__ で保存され、終了時に消去されます
  • サーバー側での管理者確認 — has_group('base.group_system') が、認証レスポンスの is_admin より優先されます

クイックスタート

pip install odoo-mcp-gateway

# Copy and edit config files
cp config/restrictions.yaml.example config/restrictions.yaml
cp config/model_access.yaml.example config/model_access.yaml
cp config/rbac.yaml.example config/rbac.yaml

# Set environment variables
export ODOO_URL=http://localhost:8069
export ODOO_DB=mydb

# Run (stdio mode for Claude Desktop / Claude Code)
python -m odoo_mcp_gateway

# Or HTTP mode for web clients
MCP_TRANSPORT=streamable-http python -m odoo_mcp_gateway
Claude Desktop の設定

claude_desktop_config.json に追加します:

{
  "mcpServers": {
    "odoo": {
      "command": "python",
      "args": ["-m", "odoo_mcp_gateway"],
      "env": {
        "ODOO_URL": "http://localhost:8069",
        "ODOO_DB": "mydb"
      }
    }
  }
}
Claude Code の設定
# Add as MCP server
claude mcp add odoo -- python -m odoo_mcp_gateway
環境変数
変数デフォルト値説明
ODOO_URLhttp://localhost:8069Odoo サーバーの URL
ODOO_DB(必須)Odoo データベース名
MCP_TRANSPORTstdioトランスポートモード(stdio または streamable-http)
MCP_HOST127.0.0.1HTTP ホスト(streamable-http モード)
MCP_PORT8080HTTP ポート(streamable-http モード)
MCP_LOG_LEVELINFOログレベル
CONFIG_DIR.YAML 設定ファイルのディレクトリ
SESSION_TIMEOUT_SECONDS1800セッションの非アクティブタイムアウト
MAX_CONCURRENT_SESSIONS100同時セッションの最大数
RATE_LIMIT_GLOBAL601分あたりのリクエスト数(全体)
RATE_LIMIT_WRITE201分あたりの書き込み操作数

セキュリティ

2層のセキュリティモデル
  1. MCP ゲートウェイの制限(YAML 設定とハードコードされた安全策)— Odoo への呼び出しが行われる前に、機密モデル、危険なメソッド、特権フィールドをブロックします
  2. Odoo の組み込み ACL — ir.model.access と ir.rule を使用して、実際のレコードに対するユーザーごとのアクセスを強制します
モデルの制限レベル
レベル効果例
always_blocked管理者を含め、誰もアクセスできませんir.config_parameter、res.users.apikeys
admin_only管理者ユーザーのみアクセスできますir.model、ir.model.fields
admin_write_only全員が読み取り可能で、書き込みには管理者権限が必要ですres.company、res.currency
ハードコードされた安全ガードレール

これらは YAML 設定で上書きできません。

ブロック対象のモデル(32):ir.config_parameter、res.users、res.users.apikeys、res.users.log、ir.cron、ir.module.module、ir.model.access、ir.rule、ir.mail_server、ir.ui.view、ir.actions.server、ir.logging、ir.attachment、ir.exports、ir.exports.line、iap.account、auth.totp.wizard、auth.totp.device、payment.token、payment.provider、base.automation、digest.digest、res.config.settings、change.password.wizard、change.password.user、base.module.update、base.module.upgrade、base.module.uninstall、fetchmail.server、bus.bus、mail.mail、mail.template

読み取り専用モデル(8):mail.message、mail.followers、mail.activity、discuss.channel、mail.notification、mail.compose.message、mail.alias、discuss.channel.member(全員に対して読み取りは許可され、書き込みはブロックされます)

書き込みがブロックされるフィールド(10):password、password_crypt、groups_id、totp_secret、signup_token、signup_type、signup_expiration、api_key、share、active

ブロック対象のメソッド(29):sudo、with_user、with_company、with_context、with_env、with_prefetch、_auto_init、_sql、_register_hook、_write、_create、_read、_setup_base、_setup_fields、_setup_complete、init、_table_query、_read_group_raw、name_create、load、import_data、export_data、flush_recordset、invalidate_recordset、_search_panel_select_range、_search_panel_select_multi_range、_search_panel_domain_image、_search、_read_progress_bar

その他のセキュリティ機能
  • ブルートフォース攻撃対策 — ユーザー名ごとのロックアウト(5 回失敗 → 5 分)と、接続元 IP/接続ごとのロックアウト(30 回失敗 → 15 分)を適用し、ユーザー名を切り替える攻撃をブロックします。ロックアウトの期間は固定されており、追加の試行によって延長されません(DoS 耐性)。
  • 認証情報ラッパー — パスワード/セッション ID は、漏えいを防ぐ __repr__/__str__、使用時に明示的に呼び出す .reveal()、終了時に呼び出す .clear() を備えた Credential クラスに保存されます。
  • サーバー側での管理者確認 — 認証後に has_group('base.group_system') を使って is_admin を再確認し、改ざんされた認証レスポンスから保護します。
  • プライベートメソッドガード — アンダースコアで始まるメソッド(_compute_*、_inverse_* など)は、明示的に許可リストに登録されていない限り、管理者を含む全員に対してブロックされます。
  • レート制限 — セッションごとのトークンバケットを使用し、全体用と書き込み用の予算を分けます。
  • RBAC — ユーザーグループによるツールレベルのアクセス制御、フィールドレベルのレスポンスフィルタリング、return_dropped=True による透過的な除外レポート。
  • 入力検証 — モデル名、メソッド名、フィールド名、ドメインフィルター、ORDER BY 句、時間演算子を含むグループ化、書き込み値(サイズ/深さ/型)。
  • IDOR 対策 — プラグインツールのデータアクセス範囲を認証済みユーザーに限定します。
  • 監査ログ — 許可および拒否されたすべての操作について、構造化 JSON ログを記録します。
  • エラーのサニタイズ — エラーメッセージから内部 URL、SQL 断片、ファイルパス、スタックトレースを除去します。
  • XXE 対策 — XML-RPC のレスポンスを defusedxml で解析します。
  • ドメイン検証 — Odoo のドメインフィルターについて、演算子、フィールド名、値の型、ネストの深さ、リストのサイズを検証します。
  • セッション期限切れ時の再試行 — JSON-RPC は OdooSessionExpiredError の場合にのみ再試行し、一般的な認証エラーでは再試行しません(アクセス拒否時に往復処理が二重になりません)。

認証

Odoo 標準の認証方式を 3 つ利用でき、カスタムアドオンは不要です。

方式プロトコル用途
api_keyXML-RPCサーバー間通信、CI/CD パイプライン
passwordJSON-RPCインタラクティブユーザー、Claude Desktop
sessionJSON-RPC既存のブラウザーセッションの再利用(開発用)
# Example: login via the MCP tool
> login(method="password", username="admin", credential="admin", database="mydb")

コア MCP ツール(13)

ツール説明
loginOdoo で認証します(api_key / password / session)
list_modelsアクセス可能なモデルをメタデータとキーワードフィルター付きで一覧表示します
get_model_fieldsオプションのフィルターを指定して、モデルのフィールド定義を取得します
search_readドメインフィルター、フィールド選択、並べ替えを指定してレコードを検索します
get_recordID を指定して単一のレコードを取得します
search_count条件に一致するレコード数を取得します
create_record新しいレコードを作成します(検証のみの dry_run に対応)
update_record既存のレコードを更新します(検証のみの dry_run に対応)
delete_recordID を指定して単一のレコードを削除します(dry_run に対応)
read_group時間演算子(date:month、date:quarter など)を使って、グループ化したデータを集計して読み取ります
get_defaultscreate_record の前に Odoo のデフォルト値をプレビューします
get_onchangeフィールドによる副作用をプレビューします(RBAC フィルタリング対応)
execute_method許可されたモデルメソッドを呼び出します(dry_run に対応)

ワークフローツール(2)

ツール説明
get_create_requirementsレコード作成前に必須フィールドと検証ルールを取得します
get_record_actions既存のレコードで利用可能なワークフローアクションを取得します

MCP リソース(6)

URI説明
odoo://modelsアクセス可能なすべてのモデルを一覧表示します
odoo://models/{name}フィールド定義を含むモデルの詳細
odoo://record/{model}/{id}RBAC によるフィールドフィルタリングを適用した単一レコードのデータ
odoo://schema/{model}型情報と重要度ランクを含むフィールドスキーマ
odoo://categories件数を含むモデルカテゴリ
odoo://workflow/{model}モデルのステージとアクションを含むワークフロー定義

MCP プロンプト(12)

プロンプト説明
analyze_modelモデル構造の包括的な分析
explore_data自然言語によるデータ探索ガイド
create_workflowモデル固有のワークフローを順を追って案内します
compare_recordsレコードの並列比較
generate_report分析レポートの生成
discover_custom_modulesカスタムモジュールの検出と理解
debug_accessアクセスと権限の問題のトラブルシューティング
workflow_guideモデルのワークフローを実行するためのステップごとのガイド
record_creation_guideフィールド検証を伴うレコード作成ガイド
bulk_operations一括操作を安全に実行するためのガイド
field_mappingOdoo バージョン(v17/v18/v19)間のフィールドのマッピング
data_migrationモデル間またはバージョン間でデータを移行するためのガイド

組み込みドメインプラグイン

HR プラグイン
ツール説明
check_in出勤を記録します
check_out退勤を記録します
get_my_attendance出勤記録を表示します(月フィルター対応)
get_my_leaves休暇申請を表示します(状態フィルター対応)
request_leave休暇を申請します
get_my_profile従業員プロフィールを表示します
Sales プラグイン
ツール説明
get_my_quotations見積もり/注文を一覧表示します(状態フィルター対応)
get_order_details明細項目を含む注文の全詳細
confirm_order下書きまたは送信済みの見積もりを確定します
get_sales_summary集計済みの販売統計を表示します(期間フィルター対応)
Project プラグイン
ツール説明
get_my_tasks割り当てられたタスクを一覧表示します(状態/プロジェクトフィルター対応)
get_project_summaryプロジェクト統計:ステージ別のタスク数、期限超過
update_task_stageタスクを別のステージに移動します
Helpdesk プラグイン
ツール説明
get_my_tickets割り当てられたチケットを一覧表示します(状態/優先度フィルター対応)
create_ticket新しいヘルプデスクチケットを作成します
update_ticket_stageチケットを別のステージに移動します

カスタムモジュールのサポート

Python コードを書かずに、カスタム Odoo モジュールを追加できます。model_access.yaml を編集してください。

custom_models:
  full_crud:
    - custom.delivery.route
    - custom.warehouse.zone
  read_only:
    - custom.delivery.log

allowed_methods:
  custom.delivery.route:
    - action_dispatch
    - action_complete
    - action_cancel

すると、すべての CRUD ツール(search_read、create_record、update_record、delete_record)と execute_method が、完全なセキュリティ適用のもとでカスタムモデル上でも動作します。

プラグインシステム

pip でインストール可能なプラグインを使って、ゲートウェイを拡張できます。

from odoo_mcp_gateway.plugins.base import OdooPlugin

class ManufacturingPlugin(OdooPlugin):
    @property
    def name(self) -> str:
        return "manufacturing"

    @property
    def required_odoo_modules(self) -> list[str]:
        return ["mrp"]

    @property
    def required_models(self) -> list[str]:
        return ["mrp.production", "mrp.bom"]

    def register(self, server, context):
        @server.tool()
        async def get_production_orders(...):
            ...

pyproject.toml のエントリーポイントを使って登録します。

[project.entry-points."odoo_mcp_gateway.plugins"]
manufacturing = "my_package:ManufacturingPlugin"

設定ファイル

ファイル用途
config/restrictions.yamlモデル/メソッド/フィールドのブロックリスト(3 層)
config/model_access.yamlモデルごとのアクセス方針、許可されたメソッド、機密フィールド
config/rbac.yamlグループごとのロールベースのツールアクセスとフィールドフィルタリング
config/gateway.yamlサーバー、接続、認証の設定

すべてのファイルには、詳細なインラインドキュメントを含む .example テンプレートがあります。コピーしてカスタマイズしてください。

cp config/restrictions.yaml.example config/restrictions.yaml
cp config/model_access.yaml.example config/model_access.yaml
cp config/rbac.yaml.example config/rbac.yaml
例:モデルの制限
# restrictions.yaml
restrictions:
  always_blocked:
    - my.secret.model
  admin_only:
    - hr.salary.rule
  admin_write_only:
    - res.company
  blocked_write_fields:
    - password_crypt
    - api_key
    - totp_secret
例:グループごとの RBAC
# rbac.yaml
rbac:
  tool_group_requirements:
    delete_record:
      - base.group_system
    execute_method:
      - base.group_erp_manager
  sensitive_fields:
    hr.employee:
      salary:
        required_group: hr.group_hr_manager

Docker

cp .env.example .env   # Edit with your Odoo settings
docker compose up

サービス:

  • MCP ゲートウェイ — ポート 8080(streamable-http モード)
  • Odoo 18 — 内部のみ(デフォルトではホストポートを公開しません)
  • PostgreSQL — 内部のみ

ゲートウェイは、最小構成の Python イメージ内で非 root ユーザーとして実行されます。

CLI ツール

# Test Odoo connectivity
odoo-mcp-tools test-connection --url http://localhost:8069

# Validate all YAML config files
odoo-mcp-tools validate-config --config-dir config

# List configured model access policies
odoo-mcp-tools list-models --config-dir config

開発

git clone https://github.com/parth-unjiya/odoo-mcp-gateway.git
cd odoo-mcp-gateway
pip install -e ".[dev]"

# Run tests
pytest tests/ -v

# Run with coverage
pytest tests/ --cov=odoo_mcp_gateway --cov-report=term-missing

# Lint
ruff check src/ tests/

# Type check (strict mode)
mypy src/
ソース構成
src/odoo_mcp_gateway/
├── __main__.py                  # Entry point (stdio + HTTP)
├── server.py                    # FastMCP server setup, tool registration
├── config.py                    # Pydantic settings (env + .env)
├── client/
│   ├── base.py                  # OdooClientBase ABC, AuthResult
│   ├── jsonrpc.py               # JSON-RPC client (session auth)
│   ├── xmlrpc.py                # XML-RPC client (API key auth, defusedxml)
│   └── exceptions.py            # OdooError hierarchy (7 types)
├── core/
│   ├── auth/manager.py          # 3 auth strategies
│   ├── connection/manager.py    # Circuit breaker + retry
│   ├── version/                 # Odoo 17/18/19 detection + adapters
│   ├── workflow/
│   │   ├── definitions.py      # WorkflowDef, StateDef, TransitionDef dataclasses
│   │   ├── registry.py         # Workflow registration and lookup
│   │   └── stock_workflows/    # Built-in workflows (sale, purchase, HR, etc.)
│   ├── security/
│   │   ├── restrictions.py      # 3-tier model/method restrictions + hardcoded guardrails
│   │   ├── rbac.py              # Tool access + field filtering
│   │   ├── middleware.py        # Security pipeline + security_gate()
│   │   ├── rate_limit.py        # Token bucket rate limiter
│   │   ├── audit.py             # Structured audit logging
│   │   ├── sanitizer.py         # Error message sanitization
│   │   └── config_loader.py     # YAML config → Pydantic models
│   └── discovery/
│       ├── model_registry.py    # ir.model auto-discovery
│       ├── field_inspector.py   # fields_get with TTL cache
│       └── suggestions.py       # Category search + related models
├── tools/
│   ├── auth.py                  # login tool
│   ├── schema.py                # list_models, get_model_fields
│   ├── crud.py                  # search_read, create/update/delete, execute_method
│   └── workflow.py              # get_create_requirements, get_record_actions
├── resources/handlers.py        # 6 MCP resources (odoo:// URIs)
├── prompts/handlers.py          # 12 MCP prompt templates
├── plugins/
│   ├── base.py, registry.py     # Plugin ABC + entry_point discovery
│   └── core/                    # Built-in plugins (HR, Sales, Project, Helpdesk)
├── cli/tools.py                 # CLI: test-connection, validate-config
└── utils/                       # Domain builder, formatting, token budget

テスト

テスト 1,476 件が成功、コードカバレッジ 93%、mypy の strict チェックと ruff のチェックもクリーンです。

tests/unit/
├── client/          # JSON-RPC, XML-RPC, auth manager, XXE protection
├── security/        # Restrictions, RBAC, audit, rate limit, sanitizer, security_gate
├── discovery/       # Model registry, field inspector, suggestions
├── tools/           # All 13 MCP tools + input validation + dry_run
├── plugins/         # Plugin system + 4 domain plugins + IDOR protection
└── cli/             # CLI utility tools
# Run all tests
pytest tests/ -v

# Run specific area
pytest tests/unit/security/ -v
pytest tests/unit/tools/ -v
pytest tests/unit/plugins/ -v

# Coverage report
pytest tests/ --cov=odoo_mcp_gateway --cov-report=html

エラー処理

すべての Odoo エラーは 7 種類に分類されます。

エラー原因
OdooConnectionErrorOdoo サーバーに接続できません
OdooAuthError認証情報が無効です
OdooAccessErrorir.model.access によってアクセスが拒否されました
OdooValidationErrorフィールドの検証に失敗しました
OdooUserErrorビジネスロジックエラーです
OdooMissingErrorレコードが見つかりません
OdooVersionErrorサポートされていない Odoo バージョンです

MCP クライアントに届く前に、すべてのエラーメッセージがサニタイズされます。内部 URL、SQL の断片、ファイルパス、スタックトレースは自動的に取り除かれます。

既知の制限事項

  • XML-RPC の認証情報の処理:API キー認証(XML-RPC)を使用する場合、プロトコル上必要なため、認証情報はすべての RPC 呼び出しで送信されます。本番環境では HTTPS を使用してください。(注:パスワードは repr() やトレースバックへの漏えいを防ぐ Credential ラッパーに保存されます。)
  • HTTP モードのセッション分離:streamable-http トランスポートには、現在、セッション分離に関する既知の制限があります。ログインツール内で _current_session_key ContextVar が設定されますが、異なるリクエストコンテキストからの後続のツール呼び出しでは、最初に利用可能なセッションにフォールバックする場合があります。v0.3.0 でリクエストごとのミドルウェアが導入されるまでは、HTTP モードはシングルテナント専用(サーバープロセスごとにユーザー 1 人)としてデプロイしてください。stdio モードは設計上シングルセッションであり、この影響を受けません。

貢献

  1. リポジトリをフォークします
  2. 機能ブランチを作成します(git checkout -b feature/my-feature)
  3. テストを追加して変更を行います
  4. すべてのチェックが通ることを確認します:pytest && ruff check src/ tests/ && mypy src/
  5. プルリクエストを送信します

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。