DeepSHPlugins
dsh-odoo 项目预览
GITHUB / COMMUNITY PROJECT

dsh-odoo

工具与集成TypeScriptMIT

经 JSON-RPC 的 Odoo 只读工具:服务器信息、模型字段自省,以及受限的 search_read——仅限白名单模型,且 domain 字段名不允许包含点号,因此无法沿关联关系穿透。草稿创建工具需显式开启 allowWrite 才会注册,且仅限 sale.order 与 project.task,草稿状态由插件强制。

2 Starsmaxmilian 更新时间 2026-08-27
访问 GitHub 仓库
dsh-odoo 项目预览

项目介绍

中文

经 JSON-RPC 的 Odoo 只读工具:服务器信息、模型字段自省,以及受限的 search_read——仅限白名单模型,且 domain 字段名不允许包含点号,因此无法沿关联关系穿透。草稿创建工具需显式开启 allowWrite 才会注册,且仅限 sale.order 与 project.task,草稿状态由插件强制。

English

Read-only Odoo tools over JSON-RPC: server info, model field introspection, and a restricted search_read limited to an allow list of models whose domain field names may not contain dots, so related-record traversal is not possible. A draft-create tool is registered only when allowWrite is enabled, and is limited to sale.order and project.task with the draft state enforced by the plugin.

项目信息与收录信号

快照 2026-09-11
作者 / 组织
maxmilian
仓库
maxmilian/dsh-odoo
GitHub Stars
2
Forks
0
开发语言
TypeScript
许可证
MIT
最近推送
2026-08-27
Manifest
数据中检测到声明

公开仓库不自动等于可商用;许可证与当前兼容性以原项目文档为准。Manifest 和数据评分不构成安装安全认证。

数据评分

45/ 100
维护活跃
91
文档与实用信息
39
生态关注度
14
安装便捷信号
55
项目声明信号
100

近 15 天仍在更新;文档较简略;关注度尚低(2)。

评分来自已有数据快照的五维模型,仅作浏览参考,不是实际使用评测或安全检测结论。

安装与使用

所有项目资料与许可均以对应 GitHub 仓库为准。

dsh plugin --profile web add github:maxmilian/dsh-odoo

复制命令不会自动执行。请先阅读仓库文档,确认环境要求与许可证。

项目截图

仓库 README

GitHub 原文

已保存的仓库文档快照;文档抓取时间未记录,可能与上方目录介绍处于不同版本。安装前请核对当前仓库说明。

dsh-odoo

English | 繁體中文 | 简体中文 | 日本語

dsh-odoo is a free, open-source, read-only DeepSeek Harness plugin for the Odoo external API. It lets an agent inspect Odoo business data — contacts, quotations, sales orders, invoices, project tasks, leads, stock — without changing Odoo state. One opt-in tool can create a strictly limited draft record, and it is not even registered unless you enable it.

✅ Verified against Odoo 18 on 2026-08-27 — the official odoo:18 image reporting
server_version 18.0-20260817. Most compatibility assumptions were checked on a live
server; the results, and what is still unverified, are in
docs/live-verification.md: only Odoo 18 was tested (8–17 and 19
were not), and only a Docker image reached directly — behind a reverse proxy, Odoo Online and
Odoo.sh remain untested. The plugin speaks JSON-RPC only and needs /jsonrpc to be reachable
(see Transport). When something breaks, please report the Odoo version and
serie, how it is deployed (Odoo Online, Odoo.sh, self-hosted, container, and which reverse
proxy sits in front), and the full output of odoo_server_info.

Tools

ToolPurpose
odoo_server_infoRead the server version and the authenticated user id.
odoo_describe_modelList the queryable fields of one allow-listed model.
odoo_search_readRun a restricted search_read on one allow-listed model.
odoo_create_draftCreate one draft record. Requires allowWrite: true; otherwise it is never registered.

Transport

This plugin speaks JSON-RPC 2.0 to POST {baseUrl}/jsonrpc, so your Odoo server must expose that endpoint (it is provided by the web module). If the endpoint is missing, redirected, or intercepted by a proxy, every tool fails with a TRANSPORT_UNSUPPORTED error that says so. XML-RPC is not implemented.

Model availability

The 14 allow-listed models are not guaranteed to exist on every Odoo. Only the base models are always present; the rest come from business modules a stock Odoo does not install.

ModuleAllow-listed modelsInstalled by default
baseres.partner, res.users, res.companyyes
productproduct.product, product.templateno
sale / sale_managementsale.order, sale.order.lineno
purchasepurchase.orderno
accountaccount.move, account.move.lineno
projectproject.project, project.taskno
crmcrm.leadno
stockstock.quantno

On a stock Odoo 18 with no business modules, querying sale.order fails with ODOO_VALIDATION_ERROR carrying the upstream reason Object sale.order doesn't exist. Call odoo_describe_model first to confirm a model is available on your instance.

Requirements

  • DeepSeek Harness with compatible @deepseek-ai/dsh-tools APIs
  • Node.js 22.19 or newer in the 22.x line, or Node.js 24 or newer
  • Bun 1.3.5 or newer when installing from GitHub source or developing locally
  • An Odoo URL, database name, login, and API key (or password) with access to the models you query

Configuration

Environment variables are recommended so credentials do not appear in a profile patch:

export ODOO_URL='https://odoo.example.com'
export ODOO_DB='production'
export ODOO_USERNAME='[email protected]'
export ODOO_API_KEY='your-api-key'

Plugin config takes precedence over environment variables:

ConfigEnvironment fallbackDefault
baseUrlODOO_URLrequired
dbODOO_DBrequired
usernameODOO_USERNAMErequired
apiKeyODOO_API_KEYrequired
companyIdODOO_COMPANY_IDunset
allowWritenone (deliberately)false
localenoneen (en / zh-TW / zh-CN / ja)
defaultLimitnone20 (1–100)
requestTimeoutMsnone30000 (1–300000)
maxResponseBytesnone1000000 (1–52428800)

Credentials are only required when a tool actually runs: installing the plugin without filling them in does not break profile loading. locale switches tool and parameter descriptions; tool names and error messages always stay in English.

Safety

  • Read-only by default. No write, unlink, or workflow actions exist in this release.
  • Model allow list. Queries are limited to 14 standard models: 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.

  • No relational traversal. Domain field names may not contain dots. To filter by a related

record, query the related model first and then filter with ('partner_id','in',[ids]). This keeps the allow list an actual capability boundary instead of a suggestion.

  • No binary fields. Fields whose Odoo type is binary are rejected, and default field sets

never include one.

  • Bounded responses. Default fields per model, limit ≤ 100, offset + limit ≤ 10000,

single string values truncated at 2000 characters, and a hard byte cap on every response.

  • Only non-archived records are returned; the active_test context is not exposed.
  • Draft creation is opt-in and fixed. sale.order is always created with state=draft;

project.task may not specify state or stage_id, so Odoo applies its own default stage. Only an allow-listed subset of fields is accepted, and one-to-many commands are rejected.

Non-goals for 0.1

  • No business wrapper tools (list_customers, list_quotations, …). They depend on field

assumptions that cannot be verified without a live Odoo, and a wrong assumption returns an empty result instead of an error — the worst failure mode for an agent. Deferred to 0.2.

  • No updates, deletions, or workflow transitions; no attachments or report generation.
  • No XML-RPC transport, no model discovery, no multi-database switching, no cursor pagination.

Development

bun install
bun run lint
bun run typecheck
bun run test
bun run build

scripts/smoke-odoo.sh runs a manual end-to-end check against a real server; it is deliberately excluded from CI.

License

MIT

使用前核对

安装步骤、兼容版本与授权范围以原项目当前文档为准。Stars 和评分是快照中的导航信号。

安装与排错 · 项目问题反馈

同类项目