API 文档 开放 API · 专业版智能体接入 · 免费版可用
开放 API 让你把库存接进自己的脚本、表格与自动化流程;AI 助手(Claude / Cursor / Qoder / WorkBuddy 等)也可以经它对话式查库存、办出入库。本文覆盖认证、接口总览、Webhook 与各主流工具的智能体接入配置,示例均已与实际路由核对。
概述与约定
- Base URL:
{你的实例地址}/api/v1,例如http://192.168.1.10:8066/api/v1; - 响应信封:成功统一为
{"code":"OK","message":"ok","data":…},业务数据在data里;错误返回{"code":"错误码","message":…}; - 限流:按 Token 每分钟 60 次,超限返回 429
RATE_LIMITED——脚本侧请做分页合并(分页page_size建议 ≤50,服务端上限 200); - 机器可读契约:完整接口定义见
/api/openapi.json(Swagger UI 在/api/docs); - 角色:Token 继承其所属用户的角色——读接口需 viewer 及以上,写接口需 member 及以上,「报废」出库与分类 / 库位 / 供应商增删改需 admin;日期参数支持
YYYY-MM-DD。
Token 认证
- 登录系统,进「设置 → API Token」,点「新建」;
- Token 以
xmt_开头,明文只在创建时显示一次,请立即保存(落库的是哈希,丢了只能删除重建); - 所有请求带请求头
Authorization: Bearer xmt_…; - 不用了随时在设置页停用(立即失效,之后可再启用),或直接删除。
curl -s -H "Authorization: Bearer xmt_你的Token" \
"http://你的实例:8066/api/v1/items?page=1&page_size=5"
接口总览
以下为常用精选面,全部路径相对 /api/v1:
读接口(viewer+)
| 接口 | 说明 |
|---|---|
GET /items | 物品列表 / 搜索:q 关键词、category_id、location_id、low_stock、series 等筛选,分页 |
GET /items/{id} | 物品详情(附件、活跃预警、资料标记) |
GET /items/{id}/stocks | 多位置库存分布 |
GET /stock/records | 全局流水:按 item_id / type / 日期区间过滤 |
GET /categoriesGET /locations/treeGET /suppliers | 分类目录 / 库位树 / 供应商 |
GET /alerts | 预警列表(默认 status=active) |
GET /stocktakesGET /stocktakes/{id}/lines | 盘点任务与盘点行(待盘 / 已盘 / 差异过滤) |
GET /docs?item_id= | 物品资料库列表 / 关键词搜索(含抓取与 AI 整理状态) |
GET /projectsGET /projects/{id}/bom | 项目列表(含缺口行数)/ BOM 库存对比明细(需求 / 已领 / 缺口逐行对比,附用料统计) |
GET /custom-fields | 自定义字段定义(枚举可选项、适用大类) |
写接口(member+)
| 接口 | 说明 |
|---|---|
POST /items | 建档(同型号 + 类型重复返回 409 DUPLICATE_ITEM,确认后加 "force": true) |
PUT /items/{id} | 全量更新档案(安全库存变化自动重算预警) |
POST /stock/inbound | 入库:可 item_id 或 new_item 内联建档一步入库 |
POST /stock/outbound | 出库:purpose = project / consume / scrap(报废需 admin) |
POST /stock/transfer | 移库:to_location_id,多位置可指定 from_location_id |
POST /stock/adjust | 按实盘数调整(生成 adjust 流水) |
POST /items/batch | 批量建档:同商品多规格一次建多条(variants,同平台已存在型号跳过;受物品条目数上限约束) |
POST /stocktakesPOST /stocktakes/{id}/confirm/cancel | 创建盘点任务 / 确认结案(差异生成调整流水)/ 取消 |
POST /alerts/{id}/acknowledge | 确认预警(仅 active 状态) |
PUT /stocktakes/{task_id}/lines/{line_id} | 录入盘点实盘数 |
POST /items/{id}/attachments | 上传图片 / 文件(multipart,file_type=image/datasheet/other,≤20MB) |
PUT /items/{id}/attachments/order | 附件重排:ids 须与现有附件一一对应,第一张图即封面 |
DELETE /attachments/{att_id} | 删除附件(磁盘文件同删,不可恢复) |
POST /items/{id}/docs | 添加资料链接(后台抓取正文转 markdown) |
POST /docs/upload | 上传资料文件(后缀白名单 pdf/docx/txt/md/png/jpg/xlsx/csv/pptx/zip 等) |
POST /docs/{doc_id}/items | 关联资料到物品(幂等,一份资料可挂多个物品;GET /docs?item_id= 命中包含该物品的资料) |
DELETE /docs/{doc_id}/items/{item_id} | 解除资料与物品的关联(资料保留,无关联即全局资料) |
PATCH /docs/{doc_id} | 重命名资料显示标题(原文 / 文件不动) |
POST /docs/{doc_id}/ai-cleanPOST /docs/{doc_id}/retry | 触发 AI 整理(仅链接类)/ 重新抓取失败或卡住的资料 |
DELETE /docs/{doc_id} | 删除资料 |
采购 · 项目 BOM · 借用(member+)
| 接口 | 说明 |
|---|---|
GET / POST /purchase-items | 采购清单查询(status=pending/ordered/arrived/done/cancelled)与加入;同物品待购行自动合并 |
PUT /purchase-items/{id} | 改数量 / 状态流转(标记已下单、到货、取消等) |
POST /purchase-items/{id}/receive | 到货入库确认:按实收数量入账、生成流水并解除低库存预警 |
DELETE /purchase-items/{id} | 删除采购行(仅「已取消」状态可删,其余返回 409) |
GET / POST /projectsGET / PUT / DELETE /projects/{id} | 项目增删改查(结项 / 归档经状态更新) |
POST /bom/parse | CSV / 粘贴文本解析为 BOM 行候选(表头自动映射、按型号聚合,不落库) |
POST /projects/{id}/bom | BOM 文本导入:按型号 + 封装聚合落库,只替换导入行(手动添加的行保留) |
POST /projects/{id}/bom/linesPUT / DELETE /projects/{id}/bom/lines/{line_id} | 添加物料行 / 改需求数量(不得低于已领用)/ 删行(仅手动行) |
POST /projects/{id}/bom/purchase | 缺料行放入采购清单:可选 line_ids 指定行,缺省全部缺料;已在采购中的不重复 |
GET /projects/{id}/bom/exportGET /projects/{id}/stats | BOM 导出 / 项目用料统计 |
POST /projects/{id}/consume | 按行从项目领用出库 |
GET / POST /borrowsPOST /borrows/{id}/return | 借出登记与查询 / 归还(逾期自动进预警) |
基础档案(admin)
| 接口 | 说明 |
|---|---|
POST / PUT / DELETE /categories/locations/suppliers | 分类 / 库位 / 供应商增删改(仅 admin):删除时被子项或物品引用会拒绝(409) |
Token 与登录会话同权限,按所属账号角色收紧或放开:删除物品、系统设置、用户与授权管理等敏感接口同样可被 Token 调用——请把 Token 当账号密码保管,只发给可信脚本,只读场景建议用 MCP 只读模式(?mode=readonly)。流水冲正可通过 Token 调用(冲正非本人流水需 admin);MCP 工具面不含冲正,防智能体误操作连环放大。
调用示例
搜索物品
curl -s -H "Authorization: Bearer $XMT" \
"$BASE/api/v1/items?q=M3%E8%9E%BA%E4%B8%9D&page=1&page_size=20"
建档(含期初数量)
curl -s -X POST "$BASE/api/v1/items" \
-H "Authorization: Bearer $XMT" -H "Content-Type: application/json" \
-d '{"name":"M3×8 内六角螺丝","model":"M3x8","type":"PRT","location_id":12,
"unit":"颗","quantity":200,"safety_stock":50,"tags":["紧固件"]}'
入库
curl -s -X POST "$BASE/api/v1/stock/inbound" \
-H "Authorization: Bearer $XMT" -H "Content-Type: application/json" \
-d '{"item_id":34,"quantity":100,"total_price":25.8,"supplier_id":3,"remark":"补货"}'
Webhook
在「设置 → Webhook」配置接收地址,库存相关事件会 POST 到你的端点(JSON)。当前事件:
| 事件 | 触发时机 |
|---|---|
stock.changed | 任何库存变动(入 / 出 / 耗 / 借还 / 移库 / 调整) |
alerts.created / alerts.resolved | 预警产生与消除 |
purchase.done | 采购单完成 |
事件在业务事务内入队、后台轮询投递;带 HMAC-SHA256 签名头 X-Xianmu-Signature(密钥在建 Webhook 时生成),失败退避重试 3 次,投递记录可查、可发测试事件。验签示例(Python):
import hmac, hashlib
def verify(secret: str, body: bytes, signature: str) -> bool:
expected = hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature)
# signature 取请求头 X-Xianmu-Signature;body 为原始请求体字节
智能体接入 免费版可用(50 条目内)· 已上线
开放 API 的产品化形态:让 AI 编码助手与通用智能体直接操作库存——问一句「A 柜还剩多少 M3 螺丝」,或说「把这批料入库到 A 柜二层」。两种形态:
- MCP(推荐,内置端点):服务端原生
/api/mcp(Streamable HTTP),客户端只填「实例地址 + Token」即得精选工具面(查询 21 个 + 写入 46 个,覆盖物品、项目库与 BOM、采购、借用、盘点任务、基础档案、图片与资料管理与操作规范引导),零本地依赖,NAS / 远程实例同样可用;支持?mode=readonly只读模式——「只让 AI 查库存」的安心开关,演示实例自动强制只读; - Skill(技能文件):把随发布包提供的
xianmu-ims技能文件夹(安装版位于安装目录下的skill\xianmu-ims\,Windows 默认%LOCALAPPDATA%\Programs\XianMuIMS\skill\xianmu-ims\;也可从 GitHub 仓库的skill/目录获取)放进 Claude Code / ZCode / Cursor 的技能目录,Agent 即按本文接口约定查库存、办出入库 / 盘点,也可跑内置「初始化引导」(几轮问答配好分类与位置),内置「写操作先确认、限流合并查询」等护栏,适合不想配 MCP 的编码类 Agent。
想让 AI 智能体全自动完成接入(装好软件、连上 MCP、配好初始分类与位置)?把这句话发给任意支持 MCP 的智能体(Claude Desktop / Cursor / WorkBuddy / Qoder 等):英文「Read https://ims.miaoking.com/skill.md and follow the instructions to set up XianMu IMS and connect its MCP server.」或中文「读取 https://ims.miaoking.com/skill.md 并按照其中的说明,安装闲沐 IMS 并连接它的 MCP 服务器。」
MCP 工具面速览(67 个)
服务端精选 67 个工具(读 21 / 写 46),按业务域分组:
| 域 | 数量 | 能做什么 |
|---|---|---|
| 物品与库存 | 11 | 搜索 / 详情 / 多位置库存 / 流水查询,建档、批量建档、部分更新、出入库、移库、调整(search_items、create_item、batch_create_items、inbound、outbound 等) |
| 项目库与 BOM | 11 | 建项目 / 改状态、导入 BOM 文本、加改删 BOM 行、按行领用出库、缺料转采购与对比查询(create_project、import_project_bom、consume_project_bom、purchase_project_bom 等) |
| 采购 | 5 | 清单查询、加购 / 状态流转 / 到货入库 / 删除(receive_purchase_item 按实收数量入账) |
| 盘点 | 6 | 任务创建 / 录数 / 确认结案 / 取消 / 明细查询 |
| 预警 | 2 | 预警查询与确认 |
| 借用 | 3 | 借出登记 / 归还 / 记录查询 |
| 基础档案 | 14 | 分类 / 库位(含收纳说明)/ 供应商目录查询与增删改(增删改需 admin)、自定义字段定义查询、AI 收纳建议(ai_organize_location,分析库位物品给移库建议) |
| 图片与资料 | 14 | 图片增删与排序,资料链接抓取 / 上传 / 多物品关联 / 重命名 / AI 整理 / 抓取重试 |
| 操作引导 | 1 | 各业务域操作规范与初始化五阶段引导话术下发(guide,纯文本不碰库;新用户配分类/位置、采购闭环、BOM 领用等流程防错要点) |
列表类工具统一返回 {total, list} 结构;不含物品删除 / 并库 / 项目删除 / 系统设置等敏感操作。
状态与护栏说明:MCP 端点已上线(服务端原生提供,Claude Desktop / Cursor 等主流客户端已实测连通);MCP 属免费版权益(2026-09-30 起,物品条目 50 件内与专业版无差别;超限返回 LIMIT_EXCEEDED,消息自带购买直达链接);条目不够可到 portal/buy 购买专业版(不限条目);Skill 技能文件可免费取用,但经裸 REST 直调属专业版权益(feature.api),免费版权益的 REST Token 调用返回 403 EDITION_REQUIRED。写工具内置护栏:报废出库与基础档案(分类 / 库位 / 供应商)增删改需 admin 角色、流水冲正不开放给智能体(记错请登录界面操作);注意 MCP 的 update_item 为部分更新语义(REST 的 PUT /items/{id} 是全量语义)。
各工具接入配置
所有 MCP 客户端接入都只需要三样东西:
- 服务地址:
http://你的实例:8066/api/mcp(只读加?mode=readonly); - 请求头:
Authorization: Bearer xmt_你的Token(在「设置 → API Token」创建,见 上文); - 类型:HTTP / Streamable HTTP(不要选 stdio / 本地命令类型)。
地址必须是运行客户端的那台机器能访问到的地址。以下示例统一用演示站 https://imsdemo.miaoking.com——登录演示站后在「设置 → API Token」创建 Token,即可直接连着试用;自建实例则填你的实例地址:同局域网客户端填 NAS / 电脑的内网 IP(如 192.168.1.10:8066),客户端装在实例本机才可用 127.0.0.1,并替换成你的实际地址与 Token。
Claude Desktop(桌面版 · 已实测连通)
- 打开配置文件:
设置 → 开发者 → 编辑配置,或直接编辑%APPDATA%\Claude\claude_desktop_config.json(Windows)/~/Library/Application Support/Claude/claude_desktop_config.json(macOS); - 加入如下配置后完全退出并重启 Claude Desktop;
- 新对话里点输入框的工具图标,应能看到「xianmu-ims」的 67 个工具。
{
"mcpServers": {
"xianmu-ims": {
"url": "https://imsdemo.miaoking.com/api/mcp",
"headers": { "Authorization": "Bearer xmt_你的Token" }
}
}
}
Claude Code(命令行)
在项目目录执行一条命令即可(全局可用加 --scope user):
claude mcp add --transport http xianmu-ims "https://imsdemo.miaoking.com/api/mcp" \
--header "Authorization: Bearer xmt_你的Token"
# 验证:列出已接入的 MCP 与工具
claude mcp list
Cursor(已实测连通)
设置 → MCP & Integrations,点「New MCP Server」,Cursor 会打开mcp.json;- 填入与 Claude Desktop 相同结构的配置:
{
"mcpServers": {
"xianmu-ims": {
"url": "https://imsdemo.miaoking.com/api/mcp",
"headers": { "Authorization": "Bearer xmt_你的Token" }
}
}
}
保存后回到 MCP 列表,xianmu-ims 显示绿色圆点即连接成功。Agent 模式下直接对话即可。
Qoder(同源配置,未逐一实测)
Qoder 同样采用 mcpServers JSON 结构:在客户端的 MCP 设置中添加服务,或直接在项目根目录放 .mcp.json,内容与上面 Cursor 的配置完全一致(入口名称随版本可能不同,认准「MCP / 工具」设置项即可)。
WorkBuddy(已实测全部工具连通)
- 左侧导航「专家 · 技能 · 连接器」→「连接器」,进入连接器页后点「自定义连接器」(或在「MCP 服务管理」弹窗右上角点「+ 添加 MCP」);
- WorkBuddy 采用标准
mcpServersJSON 配置(配置文件路径%USERPROFILE%\.workbuddy\mcp.json,在编辑器里直接修改),填入下面的内容并保存; - 回到「MCP 服务管理」列表:
xianmu-ims显示绿点、工具全部显示「已启用」(当前版本 67 个)即接入成功;列表里可随时用开关启用 / 停用、刷新或删除。
{
"mcpServers": {
"xianmu-ims": {
"url": "https://imsdemo.miaoking.com/api/mcp",
"headers": { "Authorization": "Bearer xmt_你的Token" },
"disabled": false
}
}
}
提示:列表页的「MCP Hub」是服务市场入口,与本接入无关;「连接器」页的搜索框用于检索已有连接器,自定义接入走「自定义连接器」按钮。
ZCode 及其他编码类客户端
ZCode 等编码类 Agent 客户端普遍兼容同一套 mcpServers JSON:在对应的 MCP 配置文件或客户端设置里添加同构配置即可。若客户端不支持远程 HTTP 型 MCP,可改用 Skill 方式——把 xianmu-ims 技能文件夹复制到其技能目录(如 ~/.claude/skills/、.zcode/skills/),Agent 会按技能文件走 REST API 操作库存,效果等价(注意:免费版权益下裸 REST 调用属专业版权益,免费版请优先使用 MCP 方式)。
Cherry Studio 等对话类客户端(同源配置,未逐一实测)
「设置 → MCP 服务器 → 添加」:类型选流式 HTTP(Streamable HTTP),URL 填服务地址,请求头填 Authorization: Bearer xmt_你的Token,开启后即可在对话中直接调用库存工具。
接入后怎么验证
- 客户端工具列表里出现「xianmu-ims」的 67 个工具(
search_items、inbound、create_project等); - 先试只读问题:「现在有多少条低库存预警?」;
- 需要放开写入时,把地址换成完整模式重新连接;不确定就让 AI 先用只读跑几天。
接入常见问题
| 现象 | 原因与处理 |
|---|---|
401 AUTH_REQUIRED | Token 写错、请求头漏了 Bearer 前缀、或 Token 已被停用——到设置页启用或重建,并核对请求头 |
403 EDITION_REQUIRED | 当前授权不含开放 API 权益(裸 REST / Webhook 属专业版;MCP 不受此限,免费版同样可用) |
403 LIMIT_EXCEEDED | 免费版权益物品条目已达 50 件上限(新建档类操作,查询与已有物品出入库不受限):删减条目,或到 portal/buy 购买专业版(不限条目) |
| 连接不上 / 超时 | 客户端所在机器访问不到实例地址:同局域网确认 IP 与端口(默认 8066)、实例防火墙放行;跨公网建议 Nginx 反代 + HTTPS,不要明文暴露公网 |
| 客户端连上但没有工具 | 检查地址是否为 /api/mcp 且类型为 HTTP / Streamable HTTP(误选 stdio / SSE 旧类型会失败);重启客户端再试 |
429 RATE_LIMITED | 超 60 次/分限流:让 AI 少分页、一次多问;服务端 api.rate_limit_per_min 可调 |
| 报废出库 / 分类·库位·供应商增删改返回 403 | 均仅 admin 角色可执行(Token 继承账号角色),换管理员账号签发的 Token |
| 演示站连上但写不了 | 演示实例强制只读模式,属正常保护;请在自己的实例上体验完整能力 |
错误码
| HTTP | code | 含义与处理 |
|---|---|---|
| 401 | — | 未认证:Token 缺失 / 无效 / 已停用 |
| 403 | EDITION_REQUIRED | 当前授权不含开放 API 权益(裸 REST / Webhook 需专业版;MCP 免费版可用) |
| 404 | — | 资源不存在(物品 / 任务 / 位置 id 有误) |
| 409 | DUPLICATE_ITEM | 同型号 + 类型已建档;确认非重复加 force: true |
| 409 | OUT_OF_STOCK | 库存不足,出库被拦截 |
| 409 | CONFLICT | 状态不允许该操作(如确认非 active 预警) |
| 422 | — | 参数校验失败,details 里有字段级说明 |
| 429 | RATE_LIMITED | 超 60 次/分限流,稍后重试或合并请求 |
接口报错、文档没讲清、想要新能力:提交表单(无需登录);集成方案咨询请联系客服(客服邮箱 kf@wwzu.com)。