dsh-plugin
DayuanJiang/next-ai-draw-iodsh 的 draw.io 绘图插件:通过 next-ai-drawio MCP 服务器作图,点回复里的链接在右侧栏打开实时预览,可以手动修改图,AI 的每次修改都是可以恢复的版本。需 Node.js 18+,首次使用由 npx 下载 MCP 服务器。
经 JSON-RPC 的 Odoo 只读工具:服务器信息、模型字段自省,以及受限的 search_read——仅限白名单模型,且 domain 字段名不允许包含点号,因此无法沿关联关系穿透。草稿创建工具需显式开启 allowWrite 才会注册,且仅限 sale.order 与 project.task,草稿状态由插件强制。
dsh-odoo は Odoo external API 向けの、無料・オープンソースで読み取り専用を基本とする
DeepSeek Harness プラグインです。エージェントは Odoo の状態を変更することなく、業務データ
(連絡先、見積、受注、請求書、プロジェクトタスク、リード、在庫)を参照できます。
明示的に有効化した場合のみ、厳しく制限されたドラフトレコードを作成するツールが 1 つ追加されます。
無効のときはそのツール自体が登録されません。
✅ 2026-08-27 に Odoo 18 で live 検証を実施しました。 公式
odoo:18イメージ (server_versionは18.0-20260817)です。互換性に関する前提の大半を実サーバーで確認しており、結果と 未検証の範囲はdocs/live-verification.mdにあります。 検証したのは Odoo 18 のみ(8〜17 および 19 は未検証)、かつ直接接続した Docker イメージのみで、 リバースプロキシ配下・Odoo Online・Odoo.sh は未検証です。本プラグインは JSON-RPC のみを使用し、/jsonrpcに到達できる必要があります(トランスポート参照)。問題が起きた 場合は、Odoo のバージョンと serie、デプロイ形態(Odoo Online、Odoo.sh、自己ホスト、コンテナ、 前段のリバースプロキシ)、およびodoo_server_infoの完全な出力を添えてご報告ください。
| ツール | 用途 |
|---|---|
odoo_server_info | サーバーのバージョンと認証済みユーザー id を読み取ります。 |
odoo_describe_model | 許可リストにある model の照会可能なフィールドを一覧します。 |
odoo_search_read | 許可リストにある model に対して制限付きの search_read を実行します。 |
odoo_create_draft | ドラフトレコードを 1 件作成します。allowWrite: true が必要で、それ以外では登録されません。 |
本プラグインは JSON-RPC 2.0 で POST {baseUrl}/jsonrpc を呼び出すため、Odoo サーバーが
このエンドポイント(web モジュールが提供)を公開している必要があります。エンドポイントが
存在しない、リダイレクトされる、プロキシに遮断される場合は、すべてのツールが
TRANSPORT_UNSUPPORTED エラーでその旨を通知します。XML-RPC は実装していません。
許可リストにある 14 個の model は、すべての Odoo に存在するとは限りません。常に存在するのは
base が提供する model だけで、残りは業務モジュールが提供し、初期状態の Odoo には
インストールされていません。
| モジュール | 許可リストの model | 既定でインストール |
|---|---|---|
base | res.partner、res.users、res.company | はい |
product | product.product、product.template | いいえ |
sale / sale_management | sale.order、sale.order.line | いいえ |
purchase | purchase.order | いいえ |
account | account.move、account.move.line | いいえ |
project | project.project、project.task | いいえ |
crm | crm.lead | いいえ |
stock | stock.quant | いいえ |
業務モジュール未導入の Odoo 18 で sale.order を照会すると ODOO_VALIDATION_ERROR となり、
上流の理由 Object sale.order doesn't exist が付きます。まず odoo_describe_model を呼び出し、
その model がご自身のインスタンスで利用可能かを確認してください。
@deepseek-ai/dsh-tools API を備えた DeepSeek Harness認証情報がプロファイルパッチに現れないよう、環境変数の利用を推奨します:
export ODOO_URL='https://odoo.example.com'
export ODOO_DB='production'
export ODOO_USERNAME='integration@example.com'
export ODOO_API_KEY='your-api-key'
プラグイン設定は環境変数より優先されます:
| Config | 環境変数フォールバック | 既定値 |
|---|---|---|
baseUrl | ODOO_URL | 必須 |
db | ODOO_DB | 必須 |
username | ODOO_USERNAME | 必須 |
apiKey | ODOO_API_KEY | 必須 |
companyId | ODOO_COMPANY_ID | 未設定 |
allowWrite | なし(意図的に非対応) | false |
locale | なし | en(en / zh-TW / zh-CN / ja) |
defaultLimit | なし | 20(1〜100) |
requestTimeoutMs | なし | 30000(1〜300000) |
maxResponseBytes | なし | 1000000(1〜52428800) |
認証情報はツールを実際に実行するときにのみ必要です。プラグインを導入しただけで未設定の状態でも、
プロファイルの読み込みは失敗しません。locale はツールとパラメータの説明のみを切り替え、
ツール名とエラーメッセージは常に英語のままです。
write、unlink、ワークフロー操作はありません。res.partner、res.users、
res.company、product.product、product.template、sale.order、sale.order.line、
purchase.order、account.move、account.move.line、project.project、project.task、
crm.lead、stock.quant。('partner_id','in',[ids]) を使います。
これにより許可リストは提案ではなく実際の能力境界になります。binary のフィールドは拒否され、
既定フィールドセットにも含まれません。limit ≤ 100、offset + limit ≤ 10000、
1 つの文字列値は 2000 文字で切り詰め、すべてのレスポンスにバイト数の上限があります。active_test コンテキストは公開しません。sale.order は常に state=draft で
作成され、project.task は state や stage_id を指定できず、ステージは Odoo の既定の
ステージが適用されます。許可リストのフィールドのみ受け付け、one-to-many コマンドは拒否します。list_customers、list_quotations など)は作りません。実際の Odoo なしでは
検証できないフィールド前提に依存しており、前提が誤っていてもエラーではなく空の結果を返します。
これはエージェントにとって最悪の失敗モードです。0.2 に延期します。bun install
bun run lint
bun run typecheck
bun run test
bun run build
scripts/smoke-odoo.sh は実サーバーに対する手動のエンドツーエンド確認で、意図的に CI から除外しています。
MIT