kingdee-k3cloud-mcp
This server lets you connect AI assistants to Kingdee K3Cloud ERP via MCP to query, export, and operate ERP business data.
Query bills: Use
query_bill(2D array) orquery_bill_json(JSON objects) with filters, sorting, pagination, and top-count limits on forms like sales orders, purchase orders, materials, and customers.Estimate result sizes: Use
count_billto check row counts before large queries.Auto-paginate: Use
query_bill_allto automatically fetch all matching rows up to a safety limit.Export large datasets: Use
query_bill_to_fileto stream millions of rows to ndjson/csv files without loading into memory.Date-range partitioned queries: Use
query_bill_rangeto split queries by month/week/day and fetch across months or years, with optional file output.View full details: Use
view_billto get a single record by number or internal ID.Inspect metadata: Use
query_metadatato discover form fields and structures before querying or saving.Create and update data: Use
save_billto save or update records.Manage document lifecycle: Use
submit_bill,audit_bill,unaudit_bill, anddelete_billto submit, audit, reverse-audit, and delete records.Execute custom operations: Use
execute_operationfor actions like enabling/disabling records.Push documents: Use
push_billto create downstream documents (e.g., sales order to delivery notice) with optional conversion rules and custom parameters.Choose deployment modes: Supports stdio, SSE, and streamable-http transports with optional API-key auth.
Enforce read-only mode: Use
--mode readonlyorMCP_MODE=readonlyto expose only query tools, preventing accidental writes.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kingdee-k3cloud-mcplist pending sales orders for this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
金蝶MCP Server(Kingdee K3Cloud MCP)
金蝶MCP Server(Kingdee K3Cloud MCP)面向金蝶云星空 ERP,让 AI 助手(Claude Desktop、Claude Code、Cursor、Windsurf、Cline、Continue、Cherry Studio 等任意支持 MCP 协议的客户端)通过自然语言查询和操作金蝶 ERP 系统。标准 PyPI 包,pip install 或 uvx 均可直接运行,无需绑定特定包管理器。
提示:通过 Openclaw 等支持 MCP 的 Agent 平台接入后,可在其支持的 IM 渠道(如微信、Telegram)中用自然语言查库存、查单据,无需打开金蝶网页端。支持 Skill 机制的 AI Agent(Claude Code、Openclaw 等)还可配合 kingdee-k3cloud-skill 获得更佳体验——Skill 为 Agent 注入金蝶表单字段、常用查询模式和工作流知识,大幅减少试错次数,但并非必需,MCP Server 本身即可独立配合任意 MCP 客户端使用全部工具。
┌─────────────────────┐ ┌─────────────────────┐ ┌──────────────────┐
│ kingdee-k3cloud │───▶│ kingdee-k3cloud │───▶│ K3Cloud Web API │
│ -skill │ │ -mcp │ │ (金蝶云星空) │
│ 知识库 / 工作流 │ │ 执行引擎 / MCP工具 │ │ │
└─────────────────────┘ └─────────────────────┘ └──────────────────┘
支持 Skill 的 Agent 所有 MCP 客户端通用MCP Server for Kingdee K3Cloud ERP. Connect AI assistants to your ERP system via the Model Context Protocol.
功能特性
15 个 MCP 工具:覆盖查询、大数据量导出、新增、提交、审核、反审核、删除、下推等核心操作
通用接口设计:单一
form_id参数支持物料、客户、销售订单、采购订单等所有表单,无需为每种业务单独配置高阶查询原语:
query_bill_all(自动翻页)、query_bill_to_file(流式落盘)、query_bill_range(日期分片),彻底消除模型手动循环的负担只读/读写模式:可限制 AI 只能查询,防止误操作
认证失败诊断:启动即校验凭据,凭据/授权配置错误会返回可操作的修复指引,而不是金蝶那句误导的「会话信息已丢失」
多传输协议:支持 stdio(本地)、SSE、streamable-http(远程共享)
标准 Python 包:
pip install即可安装,仅需 Python 3.10+,无强制包管理器依赖类型安全的入参校验:所有工具入参基于类型注解,由 FastMCP 在调用时自动做 Pydantic 运行时校验,参数结构错误会在到达金蝶 API 之前被拦截
Related MCP server: yt-mcp-server-odoo
5 分钟快速开始
安装:
pip install kingdee-k3cloud-mcp(或用uvx kingdee-k3cloud-mcp免安装直接跑)在金蝶云星空「第三方系统登录授权」中申请应用 ID/密钥,拿到 5 个必填环境变量(见下方配置)
把变量填进你的 MCP 客户端配置(见下方客户端配置),保存重启
直接用自然语言提问,例如:
「查一下上周已审核的销售订单,按金额排序」
「XX 物料现在各仓库库存分别是多少」
「把 3 月份所有销售出库单导出成 csv」
快速开始
方式一:pip 安装(推荐,无需 uv)
pip install kingdee-k3cloud-mcp
kingdee-k3cloud-mcp标准 PyPI 包,仅需 Python 3.10+,不依赖 uv。注意:服务启动时必须提供 5 个必填环境变量(KD_SERVER_URL、KD_ACCT_ID、KD_USERNAME、KD_APP_ID、KD_APP_SEC),否则会报错退出。
在 MCP 客户端中使用(推荐,见下方"客户端配置"章节):通过客户端配置的 env 字段传入。
手动测试时,可通过以下任一方式提供环境变量:
# 方式 A:在当前目录创建 .env 文件(服务启动时自动加载)
cp .env.example .env # 填写真实值后再运行
kingdee-k3cloud-mcp
# 方式 B:在命令行临时导出
export KD_SERVER_URL=https://your-server/k3cloud/
export KD_ACCT_ID=your_acct_id
export KD_USERNAME=your_username
export KD_APP_ID=your_app_id
export KD_APP_SEC=your_app_secret
kingdee-k3cloud-mcp方式二:uvx 直接运行(免安装)
无需 pip install,uvx 会自动创建隔离环境并运行,用法与上面完全一致,把 kingdee-k3cloud-mcp 换成 uvx kingdee-k3cloud-mcp 即可:
cp .env.example .env
uvx kingdee-k3cloud-mcp方式三:从源码运行
git clone https://github.com/adamzhang1987/kingdee-k3cloud-mcp.git
cd kingdee-k3cloud-mcp
uv sync
uv run kingdee-k3cloud-mcp配置
复制环境变量模板并填写:
cp .env.example .env环境变量 | 说明 | 示例 |
| 金蝶服务器地址(必须以 |
|
| 账套 ID |
|
| 集成用户账号 |
|
| 应用 ID |
|
| 应用密钥 |
|
| 语言(默认 2052 中文) |
|
| 组织编码(可选) | |
| 启动时是否校验凭据(默认开启, |
|
| 启动自检的超时秒数(默认 5) |
|
第三方应用 ID 和密钥需在金蝶云星空管理端的「第三方系统登录授权」中申请。
环境变量配置说明
在金蝶云星空产品中配置第三方系统集成,需按以下步骤获取 5 个环境变量:
1. 登录金蝶云星空管理后台
使用管理员账号登录金蝶云星空系统,进入「系统管理」菜单下的「第三方系统登录授权」。
点击新增按钮,进入新增第三方系统登录授权功能页面。
点击”获取应用 ID”按钮,根据提示跳转到 Open 网站 的第三方系统登录授权页面,点击“新增授权”。
Open 网站用户根据自身信息进行表单填写。
提交成功后会生成应用信息,复制应用信息填入金蝶云星空产品 - 第三方系统登录授权 - 获取应用 ID - 应用信息框中,点击“确认”按钮。
配置集成用户。
点击“保存”按钮,保存成功后点击“生成测试链接”,测试链接是否成功。
注意:当前数据库中心 ID(即账套 ID)可以通过生成测试链接弹出的信息中获取。
2. 获取 KD_SERVER_URL
金蝶服务器地址,格式为 https://your-server/k3cloud/,其中:
your-server为金蝶云星空服务器的域名或 IP 地址一般以
/k3cloud/结尾示例:
https://erp.company.com/k3cloud/
3. 获取 KD_ACCT_ID - 账套 ID
4. 获取 KD_USERNAME - 集成用户账号
使用具有相关模块操作权限的账号,不建议使用管理员账号。建议新建一个专门的集成用户账号,并为其分配所需的模块操作权限。
5. 获取 KD_APP_ID - 应用 ID 和 KD_APP_SEC - 应用密钥
注意:如需查看 APP_SECRET,可随时在应用详情中查看;如遗失,也可通过「重置」功能重新生成。
6. 验证配置
配置完成后,可通过以下命令验证连接:
cd kingdee-k3cloud-mcp
cp .env.example .env
# 编辑 .env 填写上述 5 个环境变量
uvx kingdee-k3cloud-mcp如看到「MCP Server running」或类似输出,表示配置成功。
参考文档:金蝶云星空第三方系统集成配置指南
客户端配置
以下所有客户端配置都用 "command": "uvx" 免安装启动;若已 pip install kingdee-k3cloud-mcp,把 "command": "uvx" 改成 "command": "kingdee-k3cloud-mcp" 并删掉 "args" 中的包名(保留其余参数如 --mode readonly)即可,两种方式效果完全一致。
Claude Desktop
编辑 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS):
{
"mcpServers": {
"kingdee-k3cloud": {
"command": "uvx",
"args": ["kingdee-k3cloud-mcp"],
"env": {
"KD_SERVER_URL": "https://your-server/k3cloud/",
"KD_ACCT_ID": "your_acct_id",
"KD_USERNAME": "your_username",
"KD_APP_ID": "your_app_id",
"KD_APP_SEC": "your_app_secret",
"KD_LCID": "2052"
}
}
}
}Claude Code
在项目目录下创建 .mcp.json:
{
"mcpServers": {
"kingdee-k3cloud": {
"command": "uvx",
"args": ["kingdee-k3cloud-mcp"],
"env": {
"KD_SERVER_URL": "https://your-server/k3cloud/",
"KD_ACCT_ID": "your_acct_id",
"KD_USERNAME": "your_username",
"KD_APP_ID": "your_app_id",
"KD_APP_SEC": "your_app_secret",
"KD_LCID": "2052"
}
}
}
}Cursor / Windsurf
Cursor:Settings → MCP → Add new MCP Server;Windsurf:编辑 ~/.codeium/windsurf/mcp_config.json。两者配置格式与 Claude Desktop 一致:
{
"mcpServers": {
"kingdee-k3cloud": {
"command": "uvx",
"args": ["kingdee-k3cloud-mcp"],
"env": {
"KD_SERVER_URL": "https://your-server/k3cloud/",
"KD_ACCT_ID": "your_acct_id",
"KD_USERNAME": "your_username",
"KD_APP_ID": "your_app_id",
"KD_APP_SEC": "your_app_secret",
"KD_LCID": "2052"
}
}
}
}Cline / Continue / Cherry Studio 及其他 MCP 客户端
配置结构与上面完全一致——command + args + env,填入相同的 uvx kingdee-k3cloud-mcp 与 5 个环境变量即可。具体填写位置参考各客户端自己的 MCP 配置文档:
Cline(VS Code 插件):MCP Servers 面板 → Configure MCP Servers
Continue:
~/.continue/config.json的mcpServers字段Cherry Studio:设置 → MCP 服务器 → 添加服务器
Openclaw(IM / 移动端接入)
Openclaw 是支持 Skill 机制的 Agent 平台,可将本 MCP Server 接入其支持的 IM 渠道(如微信、Telegram),实现"发一句话查金蝶库存/单据"。配置方式同样是标准 MCP Server 声明(command/args/env),具体接入步骤参考 Openclaw 官方文档;配合 kingdee-k3cloud-skill 使用可进一步减少字段试错。IM 渠道的具体支持范围由 Openclaw 平台决定。
SSE 模式(远程共享)
如需多人共用同一个服务实例:
# 启动 SSE 服务(默认端口 8000)
FASTMCP_HOST=0.0.0.0 FASTMCP_PORT=8080 uvx kingdee-k3cloud-mcp --transport sse客户端连接地址:http://your-server:8080/sse
可通过 MCP_API_KEY 环境变量启用 Bearer Token 鉴权。
可用工具
查询工具(只读模式下可用)
工具 | 说明 |
| 查询单据数据(返回二维数组) |
| 查询单据数据(返回 JSON,字段名作为 key) |
| 估算查询结果行数,用于大数据量查询前的探测 |
| 自动翻页查询直到拉完或达到安全上限,返回合并结果 |
| 自动翻页并流式写入本地文件(ndjson / csv),适合万行以上导出 |
| 按日期自动分片(月/周/日)+ 翻页,适合跨月/跨年查询,支持落盘 |
| 查看单条记录完整详情 |
| 查询表单字段结构(元数据) |
写入工具(读写模式下可用)
工具 | 说明 |
| 保存/新增单据 |
| 提交单据 |
| 审核单据 |
| 反审核单据 |
| 删除单据 |
| 执行自定义操作(禁用、反禁用等) |
| 下推单据(如销售订单→发货通知单) |
所有工具通过 form_id 参数支持任意表单(物料、客户、供应商、销售订单、采购订单等)。
只读模式
通过 --mode readonly 或 MCP_MODE=readonly 限制服务器只暴露 8 个查询工具,防止 AI 误操作写入数据。
"args": ["kingdee-k3cloud-mcp", "--mode", "readonly"]或:
"env": {
"MCP_MODE": "readonly",
...
}数据权限
MCP Server 本身不实现数据权限模型——它以「第三方系统登录授权」方式接入金蝶云星空,身份固定为 .env 中的 KD_ACCT_ID(账套)+ KD_USERNAME(集成用户)+ KD_ORG_NUM(组织,默认 0)。所有工具调用共享这一个身份,不支持按调用方切换用户,因此 AI 能看到什么数据,完全由这个集成用户在星空里的权限配置决定。
在星空侧配置
使用专用集成用户(参见上文「不建议使用管理员账号」),进入「系统管理」→ 用户管理 → 用户授权
分配功能权限:允许访问的表单(如
SAL_SaleOrder)+ 允许的操作(查询/新增/提交/审核)分配数据权限:可访问的组织范围、数据规则(按客户/部门/业务员等过滤)、字段权限
如需将查询默认限定在单一组织,可设置
KD_ORG_NUM
MCP 侧的两道补充闸门
这两者是权限的补充,不能替代星空侧的权限配置:
--mode readonly/MCP_MODE=readonly:全局禁用所有写入工具MCP_API_KEY:SSE / streamable-http 传输下的连接鉴权(stdio 模式不涉及)
排查:权限问题的两种表现
现象 | 原因 | 处理 |
报错 500,错误信息原样透传 | 功能权限不足 | 在星空给集成用户补齐对应表单/操作权限 |
查询不报错,但行数偏少或为空 | 数据规则静默过滤 | 用同一集成用户账号登录星空 Web 端,跑同样的查询条件对比行数,确认是否被权限过滤 |
⚠️ 第二种情况容易被误判为"该时间段确实没有数据"——count_bill / query_bill* 拿到的是权限过滤后的结果,本身无法区分"真没数据"和"被权限挡了"。
调试
使用 MCP Inspector 可视化调试工具:
uvx mcp dev src/kingdee_k3cloud_mcp/server.py架构说明
AI 助手(Claude Desktop / Claude Code / Cursor / Cline / Openclaw 等)
│ MCP 协议
▼
kingdee-k3cloud-mcp(本项目)
│ Kingdee Web API SDK
▼
金蝶云星空 K3Cloud本项目使用官方金蝶 Python SDK(kingdee-cdp-webapi-sdk)与 K3Cloud API 通信,并通过 FastMCP 将其封装为标准 MCP 工具。
适用场景
金蝶 ERP 的 MCP 集成方案不止一种,各有侧重。本项目更适合以下场景:
需要长期稳定运行的生产环境 AI Agent:
--mode readonly提供只读边界;启动时自动校验凭据,配置错误在启动日志里就能看到,不必等到第一次工具调用;认证失败会返回明确的诊断而非误导文案,排障不靠猜数据量较大的查询/导出需求:
query_bill_all(自动翻页)、query_bill_to_file(流式落盘)、query_bill_range(日期分片)三个高阶原语专门处理万行级数据,避免让模型手写翻页循环有自定义字段 / 二次开发的金蝶部署:
query_metadata工具可让 AI 在查询前自行发现表单的实际字段结构,不依赖预置字段表;配合 kingdee-k3cloud-skill 还可把企业专属的表单/字段/审批流封装成可复用的知识需要多种接入方式共存:同一个 Server 支持 stdio(本地 IDE)、SSE、streamable-http(远程共享部署),也可作为 Openclaw 工具接入 IM 渠道
如果你的场景是个人轻量试用、追求几分钟内跑通第一次查询,本项目同样支持 pip install 一步安装、开箱即用;具体选哪个方案,取决于你更看重「装上就能用」还是「长期在生产环境里稳定跑」。
为什么选择 MCP 而非直接调用?
让 AI 直接通过 Skill 构造 HTTP 请求访问 ERP,技术上可行,但会引入一系列安全隐患。MCP 的进程隔离模型从根本上解决了这些问题。
凭证不进入 LLM 上下文
MCP Server 以独立进程运行,凭证(KD_APP_SEC、服务器地址、账套 ID)通过环境变量注入,模型永远看不到这些信息。如果改用 Skill 直接调用,凭证必须出现在提示词或对话上下文中,一旦对话日志被导出、上下文被截图,或模型意外将其输出,机密就泄露了。
强制权限边界,而非依赖提示词约束
Skill 是"建议"——模型可能理解有误,也可能被精心构造的输入绕过。MCP Server 的 --mode readonly 则是物理限制:写入工具根本不存在于工具列表中,模型想用也用不了。这是"告诉实习生不要删数据"和"实习生根本没有 DELETE 权限"之间的本质区别。
网络隔离
MCP Server 部署在企业内网(或本机),可直接访问内部 ERP;LLM 运行在云端,从不直接接触内部网络。使用 stdio 传输时,所有 ERP 流量都在本机进程间流转,不经过任何外部网络。
完整的审计链路
每一次工具调用都经过 MCP Server,可在此统一记录操作类型、参数、时间戳和调用来源。直接调用方式下,AI 的每次请求对企业安全团队来说是不可见的黑盒。
最小权限原则
集成用户(KD_USERNAME)可在金蝶系统内被限制为特定模块、只读权限。MCP Server 继承并传递这些限制,LLM 无需感知权限边界,权限边界自然生效。
个人见解
将 LLM 视为不可信的外部调用方(而非可信的内部系统)是正确的零信任设计思路。MCP 层的存在,使 Skill 和 MCP 的职责分离清晰:Skill 负责"什么时候用、怎么用"(策略),MCP 负责"能做什么"(机制)。即使未来模型能力更强,或出现提示词注入攻击,最坏情况下的爆炸半径也被 MCP Server 的权限模型所限定,而不是依赖模型的"自觉"。
配套 Skill(支持 Skill 的 Agent)
kingdee-k3cloud-skill 是面向支持 Skill 机制的 AI Agent(Claude Code、openclaw、hermes 等)的配套 Skill,提供:
常用表单 ID 速查表(BD_MATERIAL、SAL_SaleOrder 等)
已验证字段名列表(避免字段名错误导致 500)
日报、客户查询、销售分析、库存分析、订单追踪等完整工作流
安装后 Agent 可自动掌握金蝶 ERP 的正确查询方式,无需反复试错。
开发
git clone https://github.com/adamzhang1987/kingdee-k3cloud-mcp.git
cd kingdee-k3cloud-mcp
uv sync --dev
make test # 运行测试(覆盖率报告)
make lint # ruff check + mypy
make format # ruff format + fix
make build # uv build + twine check安装 pre-commit hooks(可选,与 CI 保持一致):
uv run pre-commit install贡献者
Made with contrib.rocks.
许可证
Apache License 2.0 — 详见 LICENSE
Available Tools
15 toolsaudit_billB
审核金蝶云星空单据。
Args: form_id: 表单ID。如 BD_MATERIAL、SAL_SaleOrder 等 numbers: 单据编号,多个用逗号分隔。如 "MAT001,MAT002" ids: 单据内码ID,多个用逗号分隔(numbers 和 ids 二选一)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| form_id | Yes | ||
| numbers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It fails to mention that this is a mutating operation that changes document approval status, nor does it address permissions, reversibility, or side effects. The only behavioral note is the mutual exclusivity of numbers and ids, which is more of a parameter constraint than a behavioral trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of a single purpose sentence followed by an Args list. It is front-loaded with the main action and avoids wasted words. However, it is very terse and could include a brief usage note without sacrificing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and parameters but omits usage guidelines, behavioral impact, and system context. For a mutation tool with no annotations, this leaves significant gaps. The presence of an output schema lessens the need for return-value details but does not compensate for missing safety and usage information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. It explains each parameter: form_id with concrete examples, numbers with comma-separated format, and ids with format and the explicit mutually exclusive relationship to numbers. This adds meaningful semantics beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb '审核' (audit/approve) with the resource '单据' (documents), clearly indicating the action. It distinguishes from sibling tools like unaudit_bill and query_bill by focusing on the approval operation. Parameter examples like BD_MATERIAL and SAL_SaleOrder further clarify the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as submit_bill or unaudit_bill. The description simply states the action and parameter details, leaving the agent reliant on sibling names to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_billA
估算某查询条件下的数据行数(不返回数据内容)。用于大数据量查询前的探测。
返回 JSON 格式: {"estimated_rows": N, "is_exact": true/false, "hint": "..."} 当 is_exact=false 时,实际行数 ≥ estimated_rows,建议按月/周分片查询。
Args: form_id: 表单ID。如 SAL_SaleOrder、PUR_PurchaseOrder、BD_MATERIAL 等 filter_string: 过滤条件。如 "FDate >= '2025-01-01' AND FDate < '2026-01-01'"
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | ||
| filter_string | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the return format including estimated_rows, is_exact, and hint, and explains the implication of is_exact=false (actual rows >= estimated). It also states that no data content is returned, which is a key behavioral trait. Given no annotations, this covers the main behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized with a clear purpose, usage, return format, and attributes. Each section provides useful info without unnecessary fluff, though it is somewhat verbose for a simple count tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 2 parameters (both explained), an output schema, and the description covers the return fields, the estimation caveat, and usage guidance. Considering the moderate complexity, the description is fully sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides no descriptions (coverage 0%), but the description gives concrete examples for both form_id (e.g., SAL_SaleOrder) and filter_string (e.g., FDate condition), adding essential meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it estimates the number of rows for a query condition (估算某查询条件下的数据行数) and explicitly notes it does not return data content (不返回数据内容), distinguishing it from sibling query tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the intended use as probing before large data volume queries (用于大数据量查询前的探测) and advises monthly/weekly sharding when the estimate is not exact (建议按月/周分片查询). It does not name alternatives explicitly but provides clear context for when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_billA
删除金蝶云星空单据。
Args: form_id: 表单ID。如 BD_MATERIAL、SAL_SaleOrder 等 numbers: 单据编号,多个用逗号分隔。如 "MAT001,MAT002" ids: 单据内码ID,多个用逗号分隔(numbers 和 ids 二选一)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| form_id | Yes | ||
| numbers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states 'delete' but does not disclose that the operation is likely irreversible, whether it is a soft or hard delete, or whether audited bills can be deleted. This lack of warning is a significant gap for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: one primary purpose sentence followed by a compact parameter list. Every sentence earns its place, including the mutual-exclusion note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no schema descriptions, the description is incomplete. It omits return values, error behavior, and critical constraints (e.g., cannot delete audited documents). The output schema may define the return shape, but the description does not cover operational context needed for safe use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds valuable meaning beyond the bare schema: it provides examples for form_id (e.g., BD_MATERIAL, SAL_SaleOrder), clarifies comma-separated formats for numbers and ids, and explicitly states that numbers and ids are mutually exclusive. This compensates well for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states '删除金蝶云星空单据' (Delete Kingdee Cloud Galaxy document), which identifies the verb 'delete' and the resource type 'bill/document'. This unambiguously distinguishes it from sibling tools like audit_bill or save_bill, making the purpose specific and clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly say when to use this tool versus alternatives. The purpose implies it is for deleting bills, but no guidance is given on prerequisites (e.g., bill must be unapproved) or exclusions. Usage is implied rather than stated, so it meets the minimum viable level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_operationA
执行金蝶云星空单据操作(禁用、反禁用等)。
Args: form_id: 表单ID。如 BD_MATERIAL、SAL_SaleOrder 等 op_number: 操作类型。常用值:Forbid(禁用)、Enable(反禁用) numbers: 单据编号,多个用逗号分隔 ids: 单据内码ID,多个用逗号分隔(numbers 和 ids 二选一)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| form_id | Yes | ||
| numbers | No | ||
| op_number | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose effects, permissions, and reversibility, but it only lists parameters. It mentions operation types (禁用/反禁用) but does not explain what happens to the document, whether it requires authorization, or whether the operation can be undone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: a one-line summary followed by a structured Args list. Each parameter line conveys necessary details with no redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is an action-oriented operation with no annotations and only minimal context; the description lacks usage conditions, side effects, and error behavior. While the output schema exists and parameters are covered, the agent is not equipped to understand when this operation is appropriate or what consequences it carries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description comprehensively documents all four parameters with examples (form_id like BD_MATERIAL), common op_number values, and the split/selection rule for numbers vs ids. This adds essential meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear action: '执行金蝶云星空单据操作(禁用、反禁用等)', specifying the resource (Kingdee Cloud Star documents) and concrete operation types. This distinguishes it from sibling tools like audit_bill/delete_bill, as execute_operation is a generic dispatch for operations such as Forbid/Enable, not covered by those specialized names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to choose execute_operation over sibling tools; there are no alternatives mentioned or exclusions. The description only explains parameter values, leaving the agent to infer applicability from examples like Forbid/Enable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
push_billA
下推金蝶云星空单据(如销售订单下推发货通知单)。
Args: form_id: 源单表单ID。如 SAL_SaleOrder、PUR_PurchaseOrder 等 numbers: 源单编号,多个用逗号分隔 ids: 源单内码ID,多个用逗号分隔(numbers 和 ids 二选一) rule_id: 转换规则ID(不填则用默认规则) target_form_id: 目标单据表单ID(不填则由规则决定) target_org_id: 目标组织ID,默认"0" target_bill_type_id: 目标单据类型ID(不填则用默认) is_enable_default_rule: 是否启用默认转换规则,默认"true" custom_params: 自定义参数JSON字符串。如 '{"FDATE":"2024-01-01"}'(不填则不传)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| form_id | Yes | ||
| numbers | No | ||
| rule_id | No | ||
| custom_params | No | ||
| target_org_id | No | 0 | |
| target_form_id | No | ||
| target_bill_type_id | No | ||
| is_enable_default_rule | No | true |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only lists parameters and examples, but does not disclose side effects, prerequisites, error behavior, or whether the operation is irreversible. 'Push' implies creating a downstream document, but no details are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a well-structured docstring with a short purpose line and an Args list. Each parameter is one line, making it easy to scan. Slightly verbose but not excessive; it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all 9 parameters effectively, and an output schema exists so return values are not needed. However, it lacks usage context and behavioral side effects (e.g., what happens on error, whether it creates a new document or updates). Given the tool's complexity, more context is needed for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no parameter descriptions (coverage 0%), but the description thoroughly explains every parameter, including examples (form_id: SAL_SaleOrder), relationships (numbers and ids are mutually exclusive), and JSON formatting for custom_params. This fully compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool pushes Kingdee Cloud Star documents (e.g., sales order to delivery notice), with a specific verb and resource. This distinguishes it from sibling tools like query_bill or save_bill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description only explains parameters like '不填则用默认规则' (use default rule if not filled) but does not mention when to prefer this over related operations such as save_bill or execute_operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_billA
查询金蝶云星空单据数据(返回二维数组)。
Args: form_id: 表单ID。常用值: BD_MATERIAL(物料)、BD_Customer(客户)、BD_Supplier(供应商)、 SAL_SaleOrder(销售订单)、PUR_PurchaseOrder(采购订单)、 STK_InStock(入库单)、STK_OutStock(出库单)、GL_VOUCHER(凭证) field_keys: 查询字段,逗号分隔。如 "FName,FNumber" filter_string: 过滤条件。如 "FNumber like 'MAT%'" order_string: 排序字段。如 "FNumber ASC" top_count: 本次最多返回行数,默认100。映射到金蝶 TopRowCount(绝对终止行号 = start_row + top_count), 同时作为金蝶 Limit(单次页大小)。设为 0 表示不限制行数(仅靠 limit 控制)。 start_row: 起始行号,默认0。翻页时传入上一次返回的 next_start_row。 limit: 仅在 top_count=0 时生效,作为金蝶 Limit 页大小上限,默认2000。 top_count>0 时此参数被忽略(页大小由 top_count 决定)。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| form_id | Yes | ||
| start_row | No | ||
| top_count | No | ||
| field_keys | Yes | ||
| order_string | No | ||
| filter_string | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Absent annotations, the description reveals essential behavior: top_count maps to TopRowCount and also acts as page size; limit is only honored when top_count=0; start_row supports pagination via next_start_row. It also states the return type. It does not mention authentication or side effects, but 'query' implies a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured as an Args docstring, it front-loads function purpose and uses compact bullet-like entries for each parameter with examples. It is slightly long but every sentence contributes to clarification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all 7 parameters with semantics and interaction rules, and specifies return format. Since an output schema exists, return values are handled there. The only significant absence is sibling-tool usage guidance, which is already penalized in usage_guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides only property names with zero descriptions. The description compensates by explaining form_id common values, field_keys comma-separated format, filter_string and order_string examples, top_count semantics including Kingdee TopRowCount/Limit interaction, start_row pagination, and limit condition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states '查询金蝶云星空单据数据(返回二维数组)' clearly identifying the operation (query), resource (Kingdee Cloud Star documents), and return format (2D array). It differentiates from siblings like query_bill_json (JSON output) and count_bill (count).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Despite thorough parameter explanations, the description never mentions when to prefer query_bill over other sibling tools such as query_bill_json, view_bill, or query_bill_all. There is no alternative guidance or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_bill_allA
自动翻页查询直到拉完或达到 max_rows 安全上限。
适合估算 ≤ 数千行的场景。大数据量(> 5000 行)请用 query_bill_to_file(落盘) 或 query_bill_range(日期分片),避免超过 MCP 1 MB 返回限制。
返回格式: {"rows": [...], "row_count": N, "exhausted": true/false, "next_start_row": N, # 仅 exhausted=false 时 "hint": "..."} # 仅 exhausted=false 时
Args: form_id: 表单ID。如 SAL_SaleOrder、PUR_PurchaseOrder、BD_MATERIAL 等 field_keys: 查询字段,逗号分隔。如 "FBillNo,FDate,FAmount" filter_string: 过滤条件。如 "FDate >= '2025-01-01'" order_string: 排序字段。如 "FDate ASC" max_rows: 安全上限,默认 20000;超过则提前终止并返回 exhausted=false page_size: 每页行数,默认 2000,建议不超过 2000
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | ||
| max_rows | No | ||
| page_size | No | ||
| field_keys | Yes | ||
| order_string | No | ||
| filter_string | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the pagination loop, early termination via max_rows, exhausted flag semantics, next_start_row continuation, and the MCP response limit rationale. This is rich behavioral context beyond a simple 'query' operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, usage guidance, return format, and parameter breakdown. It is front-loaded with the core behavior, and every line adds value with no filler content. The use of bullets and examples enhances readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity (auto-pagination), but the description covers all aspects: purpose, when to use, parameter semantics, return format, and edge cases (exhausted=false, next_start_row). It is self-contained and sufficient for a correct invocation, especially given the absent annotations and schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description thoroughly explains all 6 parameters with concrete examples (e.g., form_id: SAL_SaleOrder, field_keys: FBillNo,FDate,FAmount, filter_string: FDate >= '2025-01-01'). It also clarifies default values and constraints for max_rows and page_size, fully compensating for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs auto-paginated queries until all records are fetched or max_rows is reached. It distinguishes itself from siblings by explicitly naming alternatives for large datasets (query_bill_to_file, query_bill_range) and defines the exact resource (bills) and operation (query).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states that this tool is suitable for estimating ≤ 5000 rows and directs users to query_bill_to_file or query_bill_range for larger datasets, citing the MCP 1 MB return limit. This provides clear when-to-use and when-not-to-use guidance with alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_bill_jsonA
查询金蝶云星空单据数据(返回JSON格式,字段名作为key)。
与 query_bill 的区别:返回结果是JSON对象数组,每条记录的字段名作为key,更易读。
Args: form_id: 表单ID。常用值: BD_MATERIAL(物料)、BD_Customer(客户)、BD_Supplier(供应商)、 SAL_SaleOrder(销售订单)、PUR_PurchaseOrder(采购订单)、 STK_InStock(入库单)、STK_OutStock(出库单)、GL_VOUCHER(凭证) field_keys: 查询字段,逗号分隔。如 "FName,FNumber,FCreateOrgId,FUseOrgId" filter_string: 过滤条件。如 "FNumber like 'MAT%'" order_string: 排序字段。如 "FNumber ASC" top_count: 本次最多返回行数,默认100。映射到金蝶 TopRowCount(绝对终止行号 = start_row + top_count), 同时作为金蝶 Limit(单次页大小)。设为 0 表示不限制行数(仅靠 limit 控制)。 start_row: 起始行号,默认0。翻页时传入上一次返回的 next_start_row。 limit: 仅在 top_count=0 时生效,作为金蝶 Limit 页大小上限,默认2000。 top_count>0 时此参数被忽略(页大小由 top_count 决定)。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| form_id | Yes | ||
| start_row | No | ||
| top_count | No | ||
| field_keys | Yes | ||
| order_string | No | ||
| filter_string | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility. It thoroughly explains pagination via start_row and next_start_row, the dual role of top_count (TopRowCount and page size), and the conditional behavior of limit. This exceeds typical transparency for a query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-sentence purpose, a one-sentence distinction, then a clear Args list. Each sentence earns its place, and the parameter details are dense but readable. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no annotations and no schema descriptions, this description is unusually complete. It covers return format, pagination, parameter semantics, and sibling differentiation. The presence of an output schema means the return structure doesn't need further explanation, so the description is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates fully. Every parameter is explained with concrete examples: form_id lists common values, field_keys shows a sample, top_count explains its Kingdee mapping and edge cases, and limit's conditional behavior is clarified. This goes far beyond what the bare schema properties provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries Kingdee Cloud document data and returns JSON format with field names as keys. It explicitly differentiates from the sibling query_bill by highlighting the output format difference, making the purpose specific and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with query_bill, explaining when the JSON format is preferable. However, it does not list all alternative tools or provide explicit exclusions for when not to use this tool, so it stops short of full usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_bill_rangeA
按日期自动切片 + 翻页,适合跨月/跨年查询。
将 [date_from, date_to) 按 chunk 切成 N 段,每段独立翻页拉取。 output_path 为空时内联返回(受 MCP 1 MB 限制,适合小跨度); 非空时流式落盘,适合大跨度(年级)查询。
返回格式(内联): {"rows": [...], "row_count": N, "chunks": K, "exhausted": true} 返回格式(落盘): {"path": "...", "row_count": N, "bytes": M, "chunks": K, "format": "ndjson"} 若中途出错:{"error": "...", "path": "...", "row_count": <已写入>, "bytes": M}
Args: form_id: 表单ID。如 SAL_SaleOrder、PUR_PurchaseOrder 等 field_keys: 查询字段,逗号分隔 date_field: 日期字段名。通常是 FDate 或 FCreateDate date_from: 起始日期(含),YYYY-MM-DD date_to: 结束日期(不含),YYYY-MM-DD extra_filter: 额外过滤条件(与日期条件 AND 拼接) chunk: 切片粒度,month(默认)/ week / day output_path: 落盘路径(绝对路径)。空=内联返回 page_size: 每页行数,默认 2000
| Name | Required | Description | Default |
|---|---|---|---|
| chunk | No | month | |
| date_to | Yes | ||
| form_id | Yes | ||
| date_from | Yes | ||
| page_size | No | ||
| date_field | Yes | ||
| field_keys | Yes | ||
| output_path | No | ||
| extra_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behaviors: automatic date slicing, independent pagination per chunk, the 1 MB inline limit, streaming write behavior when output_path is set, and error handling with partial row counts. This is exceptionally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-line summary, behavior explanation, output format examples, and a parameter list. It is slightly long but every section earns its place. The return format examples are slightly redundant given the output schema exists, but they provide valuable concrete context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 9 parameters and chunking logic, the description is complete. It covers all parameters, behavioral nuances, output modes, error handling, and format details. An agent can confidently select and invoke this tool correctly based on this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero description coverage, but the description compensates fully. Every parameter is explained with meaning and examples: form_id (e.g., SAL_SaleOrder), field_keys (comma-separated), date_field (e.g., FDate), date_from/to (inclusive/exclusive), extra_filter (AND-combined), chunk (month/week/day), output_path (empty vs absolute path), and page_size (default 2000).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it automatically slices a date range into chunks and paginates through each chunk, making it suitable for cross-month/year queries. This distinguishes it from siblings like query_bill (likely single-range) and query_bill_all (likely without chunking).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies that it is suited for cross-month/year queries and explains the trade-off between inline return (MCP 1 MB limit) and streaming to file for large spans. It does not explicitly name alternative tools, but the context is clear enough for an agent to decide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_bill_to_fileA
自动翻页并流式写入本地文件,适合大数据量导出(万行以上)。
不在内存中累积数据,写入完成后返回文件路径和统计信息。 文件可用 Read 工具抽检,或交由 pandas/polars 处理。
返回格式: {"path": "...", "row_count": N, "bytes": M, "format": "ndjson"} 若中途出错:{"error": "...", "path": "...", "row_count": <已写入>, "bytes": M}
Args: form_id: 表单ID。如 SAL_SaleOrder、PUR_PurchaseOrder、BD_MATERIAL 等 field_keys: 查询字段,逗号分隔。如 "FBillNo,FDate,FAmount" filter_string: 过滤条件。如 "FDate >= '2025-01-01'" output_path: 输出文件绝对路径。如 "/tmp/orders.ndjson" format: 输出格式,ndjson(每行一个 JSON 对象)或 csv,默认 ndjson page_size: 每页行数,默认 2000 max_rows: 最大写入行数,默认 500000;超过则截断并正常返回
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ndjson | |
| form_id | Yes | ||
| max_rows | No | ||
| page_size | No | ||
| field_keys | Yes | ||
| output_path | No | ||
| filter_string | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility. It discloses auto-pagination, streaming writes, no in-memory accumulation, return format with row_count/bytes, error behavior with partial rows, and max_rows truncation—all beyond what the schema shows.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and use case, followed by a concise return-format spec and a clearly structured Args list. Every section earns its place given the tool's complexity (7 parameters and rich behavior).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is included in the description (@return/error shape) and the parameters are fully documented, the description covers the entire invocation lifecycle: when to use, how to call, and what to expect on success/failure. No major gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate fully. It explains every parameter with concrete examples (e.g., form_id like 'SAL_SaleOrder', filter_string like "FDate >= '2025-01-01'"), defaults, and the output_path example. This is exemplary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+outcome: '自动翻页并流式写入本地文件' (auto-paginate and stream-write to local file). It clearly distinguishes from siblings like query_bill and view_bill by emphasizing file output for large exports.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states suitability for large data exports ('适合大数据量导出(万行以上)') and explains the streaming/no-memory-accumulation advantage. It mentions the file can be read by Read tool or pandas/polars, but does not explicitly state when to avoid this tool or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_metadataA
查询金蝶云星空表单的元数据(字段结构信息)。
用于获取某个表单有哪些字段、字段类型等信息,便于构造查询和保存参数。
Args: form_id: 表单ID。如 SAL_SaleOrder、PUR_PurchaseOrder、BD_MATERIAL 等
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It clearly indicates this is a read-only metadata query ('查询元数据') and explains what information it retrieves (field names, types). It does not go into permissions or side effects, but the query nature is evident and the purpose is well specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear first sentence stating the purpose, a second sentence giving the use case, and a brief Args section. Every sentence earns its place, and the structure is front-loaded with the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no annotations) and the existence of an output schema, the description is quite complete. It explains what the tool does, why it is useful, and defines the parameter. It lacks mention of limitations or alternatives, but these are not critical for this straightforward metadata query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter 'form_id' with no description, but the tool description compensates by explaining that it is the form ID and providing examples such as SAL_SaleOrder, PUR_PurchaseOrder, BD_MATERIAL. This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool queries metadata (field structure information) for Kingdee Cloud Star forms. It specifies the verb '查询' (query) and the resource '元数据' (metadata), distinguishing it from sibling tools that operate on bill data directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides the context of use: to obtain field information for constructing query and save parameters. This makes the tool's use case clear, though it does not explicitly mention alternatives or when not to use it. It is more than implied usage, but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_billA
保存金蝶云星空单据(新增或更新)。
Args: form_id: 表单ID。如 BD_MATERIAL、SAL_SaleOrder 等 model_data: JSON格式的单据数据。示例(保存物料): {"Model": {"FCreateOrgId": {"FNumber": "100"}, "FNumber": "MAT001", "FName": "物料名称"}} 如果传入的JSON中没有"Model"键,会自动包装。
| Name | Required | Description | Default |
|---|---|---|---|
| form_id | Yes | ||
| model_data | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It does mention the auto-wrap behavior for Model keys, which is a positive detail, but it does not disclose permissions, side effects of overwriting data, or error handling. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: a clear one-sentence purpose followed by a two-item Args list. Each line adds value, from the purpose to the examples and the auto-wrap note. It is front-loaded and free of unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers both parameters with examples and explains the create/update nature. With an output schema present, not detailing return values is acceptable. However, it lacks mention of prerequisites (e.g., existing form IDs) or failure modes, leaving minor context gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameter descriptions (0% coverage). The description compensates thoroughly by explaining both form_id and model_data, providing a concrete JSON example, and noting the automatic wrapping of data without a Model key. This goes far beyond the bare schema type declarations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states '保存金蝶云星空单据(新增或更新)' (save Kingdee Cloud documents, create or update), which specifies the verb and resource. It includes concrete examples of form IDs (BD_MATERIAL, SAL_SaleOrder), distinguishing this from sibling tools like query_bill and submit_bill.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating or updating documents but provides no explicit guidance on when to use alternatives like submit_bill or audit_bill. It lacks exclusion conditions or scenarios where this tool should not be used, relying instead on the tool name and basic context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_billB
提交金蝶云星空单据。
Args: form_id: 表单ID。如 BD_MATERIAL、SAL_SaleOrder 等 numbers: 单据编号,多个用逗号分隔。如 "MAT001,MAT002" ids: 单据内码ID,多个用逗号分隔(numbers 和 ids 二选一)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| form_id | Yes | ||
| numbers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavioral traits. It merely says 'submit' without mentioning preconditions, whether it's a write operation, potential irreversibility, required permissions, or what state the document transitions to. The lack of behavioral context is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, with a one-line purpose followed by a clear Args list. It avoids fluff. However, it is quite terse and could benefit from a usage sentence, though that is more a completeness issue than a conciseness one.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a mutation operation with no annotations and an output schema, the description should explain the submission lifecycle, required prior states, and effects. It does not. For an ERP tool, this is insufficient for an agent to make an informed invocation, despite the output schema covering return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description adds meaningful context: form_id is given with concrete examples, numbers is explained with format and examples, and ids is clarified, including the important constraint that numbers and ids are mutually exclusive. This goes well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('提交' = submit) and resource ('金蝶云星空单据' = Kingdee Cloud documents). This clearly distinguishes it from sibling tools like audit, save, or delete. However, it doesn't explicitly differentiate 'submit' from 'submit for approval' or describe the exact workflow state change, leaving some ambiguity for non-domain users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as audit_bill or save_bill. The description only states what it does, not when to choose it. No exclusion criteria or alternative scenarios are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unaudit_billA
反审核金蝶云星空单据。
Args: form_id: 表单ID。如 BD_MATERIAL、SAL_SaleOrder 等 numbers: 单据编号,多个用逗号分隔。如 "MAT001,MAT002" ids: 单据内码ID,多个用逗号分隔(numbers 和 ids 二选一)
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | ||
| form_id | Yes | ||
| numbers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits. It merely states the action (unaudit) without explaining side effects (e.g., that this is a state-changing operation, requires certain permissions, may fail if already un-audited, or is irreversible). It does not describe the outcome or return value. The parameter constraint about numbers/ids is helpful but does not cover the tool's behavioral impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a single sentence stating the purpose, followed by a formatted Args section. No unnecessary detail or fluff. The parameter documentation is organized with clear examples and constraints, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists (so return value explanation is not required), the description lacks critical context for a mutation tool. It does not differentiate from sibling tools, does not explain when to use it, and does not disclose side effects or prerequisites. For a tool that alters document state, this is a significant gap. The description covers parameters well but omits the broader operational context users need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description's Args section carries the full burden. It clearly explains each parameter: form_id provides examples (BD_MATERIAL, SAL_SaleOrder), numbers is described as document numbers with comma-separated examples, and ids as internal IDs. It also explicitly states that numbers and ids are mutually exclusive (二选一), which is crucial operational semantics beyond the schema's property definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: '反审核金蝶云星空单据' (unaudit Kingdee Cloud Starry Sky documents). It uses a specific verb ('unaudit') and resource (Kingdee Cloud documents), distinguishing it from sibling tools like audit_bill, delete_bill, and submit_bill. The purpose is immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not mention that audit_bill is the inverse operation, nor does it explain scenarios where unaudit_bill is preferred over delete_bill or push_bill. The only usage hint is the parameter constraint that numbers and ids are mutually exclusive (二选一), which is parameter-level rather than tool-level guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
view_billA
查看金蝶云星空单条记录的完整详情。
通过编号或内码查看单条记录的所有字段信息。
Args: form_id: 表单ID。如 BD_MATERIAL、SAL_SaleOrder 等 number: 单据编号。如 "MATERIAL001"(number 和 bill_id 二选一) bill_id: 单据内码ID(number 和 bill_id 二选一)
| Name | Required | Description | Default |
|---|---|---|---|
| number | No | ||
| bill_id | No | ||
| form_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It explicitly states '查看' (view), indicating a read-only behavior, and promises '所有字段信息' (all field information), describing what the agent can expect. No side effects or prerequisites are mentioned, but for a straightforward view operation this is reasonable transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and structured. The main purpose is stated in two brief sentences, followed by a compact parameter list with examples. Every sentence contributes value and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, and all parameters effectively. Since an output schema exists, the absence of return-value explanations is acceptable. The only notable gap is the lack of explicit sibling differentiation, but the 'single record' focus already suggests the tool's niche, making it fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates. It defines form_id with examples (BD_MATERIAL, SAL_SaleOrder), explains number as the document number with an example, and clarifies bill_id as the internal ID, plus the mutual exclusivity rule. This adds substantial semantic meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: '查看金蝶云星空单条记录的完整详情' (view complete details of a single record). It specifies a precise verb (view), a resource (bill record), and a scope (single record), which distinguishes it from sibling tools like query_bill that likely handle lists or broader queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how to use the tool: by number or internal ID, with the constraint that number and bill_id are mutually exclusive. It implies the appropriate context (when you need complete details of one specific record) but does not explicitly name alternatives or state when not to use it, so it falls slightly short of full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
15 tool updates
v1.3.2- First observed
audit_bill - First observed
count_bill - First observed
delete_bill - First observed
execute_operation - First observed
push_bill - First observed
query_bill - First observed
query_bill_all - First observed
query_bill_json - First observed
query_bill_range - First observed
query_bill_to_file - First observed
query_metadata - First observed
save_bill - First observed
submit_bill - First observed
unaudit_bill - First observed
view_bill
TDQS
Scored across 15 tools
Multiple query tools (query_bill, query_bill_json, query_bill_all, query_bill_to_file, query_bill_range) overlap in purpose; an agent must read descriptions to choose correctly. The non-query tools are distinctly scoped, but the query cluster creates ambiguity.
All tool names follow a consistent verb_noun snake_case pattern (query_bill, save_bill, delete_bill, audit_bill), making them predictable and easy to navigate.
15 tools is within the ideal range for an ERP-focused server, covering all major operations without unnecessary bloat or trivial additions.
The set covers the full bill lifecycle (save, submit, audit, unaudit, delete), query/selection variants, metadata exploration, and file export, leaving no critical gaps for the stated domain.
Maintenance
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for AI dialogue using various LLM models via AceDataCloud
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
Cloud-hosted MCP server for secure AI access to enterprise data sources via CData Connect AI.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables AI assistants like Claude to interact with Odoo ERP systems through natural language, allowing users to search, create, update, and manage business data in their Odoo instance.384Mozilla Public 2.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to interact with Odoo ERP, allowing natural language queries, record creation, updates, and deletions.LGPL 3.0
- AlicenseAqualityCmaintenanceMCP server for KingBase (PostgreSQL-compatible) databases, enabling AI assistants to query and manage database schemas, tables, and data with configurable access control.11195MIT
- AlicenseBqualityBmaintenanceEnables AI assistants to operate Kingdee Cloud Star ERP via natural language, including querying, creating, submitting, auditing, and deleting business documents.8176MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/adamzhang1987/kingdee-k3cloud-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server