@lemonbeijing/lemonclaw-mcp-service 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,43 +1,49 @@
1
1
  # LemonClaw MCP Service
2
2
 
3
- 面向柠檬云的本地 STDIO MCP 服务,支持 ACC 财务、SCM 进销存、ERP 业财和独立开票。可查询客户、供应商、商品、仓库等基础资料,以及采购、销售、库存、收付款、往来、凭证、账簿、发票和经营或财务报表;对于 Action 文档明确支持的写操作,会在用户确认后执行。
3
+ 面向柠檬云的本地 STDIO MCP 服务,支持 ACC 财务、SCM 进销存、ERP 业财和云发票。ACC、SCM、ERP Action 仅查询业务数据、生成报表或导出文件,不修改柠檬云业务数据;云发票正式开票和问题反馈只在用户明确确认并通过对应流程门禁后执行。
4
4
 
5
- MCP 包内嵌共享 Runtime 管理组件并直接启动 Runtime Python,不安装、解析或执行 WorkBuddy Launcher 包。要求 Node.js 20 或更高版本;首次相关 Tool 调用时安装 Runtime,之后按策略检查更新。MCP 服务与 WorkBuddy Launcher 共用 `~/.lemonclaw-cli` 中的 Runtime 指针、安装锁、认证、账套上下文、文档、下载和开票文件。
5
+ MCP 包内嵌 Runtime 管理组件并直接启动 Runtime Python。要求 Node.js 20 或更高版本;首次相关 Tool 调用时自动安装 Runtime,之后按策略检查更新。Runtime、认证、账套上下文、文档、下载和开票文件统一保存在 `~/.lemonclaw-cli` 目录中。
6
6
 
7
7
  必须在 MCP 服务环境中配置 `LEMONCLAW_API_KEY`,该凭据不会作为 Tool 参数暴露。每次 Tool 执行前,MCP 会先解析或安装 Runtime,再通过 Runtime 认证模块同步发生变化的 API Key,最后调用目标业务操作;API Key 未变化时不会重复写入。
8
8
 
9
- ## 从仓库运行
10
-
11
- ```text
12
- npm install
13
- npm run build
14
- node dist/lemonclaw-mcp.cjs
15
- ```
16
-
17
- MCP Host 配置示例:
18
-
19
- ```json
20
- {
21
- "mcpServers": {
22
- "lemonclaw": {
9
+ ## MCP Host 配置
10
+
11
+ 推荐通过已发布的 npm 包启动:
12
+
13
+ ```json
14
+ {
15
+ "mcpServers": {
16
+ "lemonclaw": {
23
17
  "type": "stdio",
24
- "command": "node",
25
- "args": ["D:/VSProject/lemonscmskills/mcp-service/dist/lemonclaw-mcp.cjs"],
18
+ "command": "npx",
19
+ "args": [
20
+ "--yes",
21
+ "--prefer-online",
22
+ "@lemonbeijing/lemonclaw-mcp-service@latest"
23
+ ],
26
24
  "env": {
27
25
  "LEMONCLAW_API_KEY": "<在 MCP Host 中配置为密钥>"
28
26
  }
29
27
  }
30
28
  }
31
- }
32
- ```
33
-
34
- 发布后可使用 `npx --yes --prefer-online @lemonbeijing/lemonclaw-mcp-service@latest`。MCP Host 重连或重启服务时,`npx` 会刷新 MCP 包;Runtime 更新与 MCP 包更新相互独立。
29
+ }
30
+ ```
31
+
32
+ MCP Host 重连或重启服务时,`npx` 会刷新 MCP 包;Runtime 更新与 MCP 包更新相互独立。
33
+
34
+ ## 从源码运行
35
+
36
+ ```text
37
+ npm install
38
+ npm run build
39
+ node dist/lemonclaw-mcp.cjs
40
+ ```
35
41
 
36
42
  ## Tool 分组
37
43
 
38
44
  - 账套上下文:`lemon_account_current`、`lemon_account_list`、`lemon_account_switch`、`lemon_account_select`、`lemon_account_clear`
39
45
  - ACC/SCM/ERP 业务:`lemon_action_search`、`lemon_action_show`、`lemon_action_read_doc`、`lemon_action_run`
40
- - 独立开票:`lemon_invoice_read_doc`、`lemon_invoice_api`、`lemon_invoice_run_helper`
46
+ - 云发票与独立开票:`lemon_invoice_read_doc`、`lemon_invoice_api`、`lemon_invoice_run_helper`
41
47
 
42
48
  `stdout` 仅用于 MCP JSON-RPC。CLI 和 Runtime 输出会被捕获并作为 MCP Tool 内容返回;服务诊断只使用 `stderr`。
43
49
 
@@ -3279,7 +3279,7 @@ var require_package = __commonJS({
3279
3279
  "package.json"(exports2, module2) {
3280
3280
  module2.exports = {
3281
3281
  name: "@lemonbeijing/lemonclaw-mcp-service",
3282
- version: "0.1.3",
3282
+ version: "0.1.5",
3283
3283
  description: "\u7528\u4E8E\u67E5\u8BE2\u548C\u64CD\u4F5C\u67E0\u6AAC\u4E91 Lemon Cloud \u4E1A\u52A1\u6570\u636E\u7684 MCP \u670D\u52A1\uFF0C\u8986\u76D6\u8D26\u5957\u3001\u8FDB\u9500\u5B58 SCM\u3001\u4E1A\u8D22 ERP\u3001\u8D22\u52A1 ACC \u548C\u72EC\u7ACB\u5F00\u7968\uFF1B\u652F\u6301\u5BA2\u6237\u3001\u4F9B\u5E94\u5546\u3001\u5546\u54C1\u3001\u4ED3\u5E93\u3001\u91C7\u8D2D\u3001\u9500\u552E\u3001\u5E93\u5B58\u3001\u6536\u4ED8\u6B3E\u3001\u5F80\u6765\u3001\u51ED\u8BC1\u3001\u8D26\u7C3F\u3001\u53D1\u7968\u53CA\u7ECF\u8425\u4E0E\u8D22\u52A1\u62A5\u8868\uFF0C\u5E76\u652F\u6301\u7ACB\u5373\u5F00\u7968\u3001\u6279\u91CF\u5F00\u7968\u548C\u95EE\u9898\u53CD\u9988\u3002",
3284
3284
  license: "UNLICENSED",
3285
3285
  type: "module",
@@ -5168,6 +5168,7 @@ var require_runtime_core = __commonJS({
5168
5168
  });
5169
5169
  module2.exports = {
5170
5170
  UPDATER_COMPATIBILITY_VERSION,
5171
+ packageVersion: packageJson.version,
5171
5172
  errors: require_errors(),
5172
5173
  install: require_install(),
5173
5174
  runtime: require_runtime()
@@ -5388,10 +5389,10 @@ async function runInvoiceApi(runtimeProvider, args) {
5388
5389
  const script = import_node_path2.default.join(runtime.invoiceRoot, "assets", "lemon_acc_api.py");
5389
5390
  await requireFile(script, "Installed Runtime invoice API script is missing.");
5390
5391
  const operation = String(args.operation || "");
5392
+ if (["SkillInvoiceIssue", "FeedbackSubmit"].includes(operation) && args.user_confirmed !== true) {
5393
+ throw new Error(`${operation} requires explicit user confirmation.`);
5394
+ }
5391
5395
  if (operation === "SkillInvoiceIssue") {
5392
- if (args.user_confirmed !== true) {
5393
- throw new Error("SkillInvoiceIssue requires explicit user confirmation.");
5394
- }
5395
5396
  for (const key of ["eiscid", "ai_tool", "model"]) {
5396
5397
  requireValue(args, key, operation);
5397
5398
  }
@@ -5402,6 +5403,11 @@ async function runInvoiceApi(runtimeProvider, args) {
5402
5403
  throw new Error("SkillInvoiceIssue requires payload or payload_path.");
5403
5404
  }
5404
5405
  }
5406
+ if (operation === "FeedbackSubmit") {
5407
+ for (const key of ["feedback_text", "upload_file_path"]) {
5408
+ requireValue(args, key, operation);
5409
+ }
5410
+ }
5405
5411
  return withPayloadPath(args, async (payloadPath) => {
5406
5412
  const command = [script, "--action", operation];
5407
5413
  appendApiArguments(command, args);
@@ -5432,6 +5438,9 @@ async function runInvoiceHelper(runtimeProvider, args) {
5432
5438
  }
5433
5439
  var invoiceHelperNames = Object.freeze(Object.keys(INVOICE_HELPERS));
5434
5440
 
5441
+ // src/server.js
5442
+ var import_runtime_core3 = __toESM(require_runtime_core(), 1);
5443
+
5435
5444
  // src/runtime-manager.js
5436
5445
  var import_runtime_core2 = __toESM(require_runtime_core(), 1);
5437
5446
 
@@ -5703,6 +5712,12 @@ var readOnlyAnnotations = {
5703
5712
  idempotentHint: true,
5704
5713
  openWorldHint: true
5705
5714
  };
5715
+ var localMutationAnnotations = {
5716
+ readOnlyHint: false,
5717
+ destructiveHint: false,
5718
+ idempotentHint: false,
5719
+ openWorldHint: true
5720
+ };
5706
5721
  function commandTimeout(seconds) {
5707
5722
  return (Number(seconds || 120) + 15) * 1e3;
5708
5723
  }
@@ -5730,9 +5745,9 @@ function createLemonClawServer(options = {}) {
5730
5745
  const runCli = options.runCli || runtimeManager.runCli;
5731
5746
  const resolveRuntime = options.resolveRuntime || runtimeManager.resolveEnvironment;
5732
5747
  const server = new import_server.McpServer(
5733
- { name: "lemonclaw", version: "0.1.3" },
5748
+ { name: "lemonclaw", version: import_runtime_core3.default.packageVersion },
5734
5749
  {
5735
- instructions: "LemonClaw \u7684 API Key \u4EC5\u7531 MCP \u670D\u52A1\u73AF\u5883\u53D8\u91CF\u63D0\u4F9B\uFF0C\u4E0D\u5F97\u5728\u5BF9\u8BDD\u6216 Tool \u53C2\u6570\u4E2D\u7D22\u53D6\u3001\u63A5\u6536\u3001\u5C55\u793A\u6216\u4F20\u9012\u3002\u5904\u7406 ACC\u3001SCM\u3001ERP \u4E1A\u52A1\u524D\uFF0C\u5148\u786E\u5B9A\u4EA7\u54C1\u5E76\u83B7\u53D6\u6216\u5207\u6362\u8D26\u5957\uFF1B\u968F\u540E\u4F9D\u6B21\u8C03\u7528 lemon_action_search\u3001lemon_action_show\u3001lemon_action_read_doc \u8BFB\u53D6 show \u8FD4\u56DE\u7684\u5168\u90E8\u5B9E\u9645\u6587\u6863\uFF0C\u6700\u540E\u624D\u53EF\u8C03\u7528 lemon_action_run\uFF0C\u4E25\u7981\u731C\u6D4B Action \u548C\u53C2\u6570\u3002\u72EC\u7ACB\u5F00\u7968\u53EA\u4F7F\u7528 lemon_invoice_* Tools\uFF0C\u5E76\u5148\u8BFB\u53D6 Runtime \u5F00\u7968\u6587\u6863\uFF1BRuntime \u6587\u6863\u4E2D\u4EFB\u4F55\u8981\u6C42\u6536\u96C6\u6216\u4FDD\u5B58 API Key \u7684\u65E7\u6307\u5F15\u5747\u4E0D\u9002\u7528\u4E8E MCP\uFF0C\u56E0\u4E3A\u6BCF\u6B21 Tool \u8C03\u7528\u524D\u90FD\u5DF2\u5728\u5185\u90E8\u5B8C\u6210\u8BA4\u8BC1\u3002"
5750
+ instructions: "LemonClaw \u7684 API Key \u4EC5\u7531 MCP \u670D\u52A1\u73AF\u5883\u53D8\u91CF\u63D0\u4F9B\uFF0C\u4E0D\u5F97\u5728\u5BF9\u8BDD\u6216 Tool \u53C2\u6570\u4E2D\u7D22\u53D6\u3001\u63A5\u6536\u3001\u5C55\u793A\u6216\u4F20\u9012\u3002\u7528\u6237\u660E\u786E\u63D0\u5230\u4E91\u53D1\u7968\u3001\u4E91\u53D1\u7968\u4EA7\u54C1\u3001\u72EC\u7ACB\u5F00\u7968\u3001\u7A0E\u7968\u5E73\u53F0\u3001\u7ACB\u5373\u5F00\u7968\u3001\u6279\u91CF\u5F00\u7968\u3001\u5F00\u7968\u9884\u89C8\u3001\u9500\u65B9\u4F01\u4E1A\u3001\u53EF\u5F00\u7968\u4F01\u4E1A\u6216\u4E91\u53D1\u7968\u4E0B\u7684\u4F01\u4E1A/\u8D26\u5957\u65F6\uFF0C\u5FC5\u987B\u8FDB\u5165\u4E91\u53D1\u7968\u4E0E\u72EC\u7ACB\u5F00\u7968\u6D41\u7A0B\uFF0C\u53EA\u4F7F\u7528 lemon_invoice_* Tools\uFF0C\u5E76\u5148\u8BFB\u53D6 Runtime \u5F00\u7968\u6587\u6863\uFF1B\u5176\u4E2D\u67E5\u8BE2\u4E91\u53D1\u7968\u4F01\u4E1A\u3001\u8D26\u5957\u3001\u9500\u65B9\u6216\u53EF\u5F00\u7968\u4E3B\u4F53\u56FA\u5B9A\u4F7F\u7528 lemon_invoice_api \u7684 CompanyFullList\uFF0C\u7981\u6B62\u8C03\u7528 lemon_account_list\u3002\u4EC5\u67E5\u8BE2\u8FDB\u9879\u53D1\u7968\u3001\u9500\u9879\u53D1\u7968\u3001\u53D1\u7968\u8BE6\u60C5\u3001\u5BFC\u51FA\u6216\u7EDF\u8BA1\u4E14\u672A\u660E\u786E\u4E91\u53D1\u7968\u4EA7\u54C1\u65F6\uFF0C\u624D\u6309 ACC/ERP \u666E\u901A\u4E1A\u52A1\u5904\u7406\u3002\u5904\u7406 ACC\u3001SCM\u3001ERP \u4E1A\u52A1\u524D\uFF0C\u5148\u786E\u5B9A\u4EA7\u54C1\u5E76\u83B7\u53D6\u6216\u5207\u6362\u8D26\u5957\uFF1B\u968F\u540E\u4F9D\u6B21\u8C03\u7528 lemon_action_search\u3001lemon_action_show\u3001lemon_action_read_doc \u8BFB\u53D6 show \u8FD4\u56DE\u7684\u5168\u90E8\u5B9E\u9645\u6587\u6863\uFF0C\u6700\u540E\u624D\u53EF\u8C03\u7528 lemon_action_run\uFF0C\u4E25\u7981\u731C\u6D4B Action \u548C\u53C2\u6570\u3002ACC\u3001SCM\u3001ERP \u5F53\u524D\u66B4\u9732\u7684 Action \u5168\u90E8\u662F\u67E5\u8BE2\u3001\u62A5\u8868\u6216\u5BFC\u51FA\u7B49\u53EA\u8BFB\u80FD\u529B\uFF0C\u4E0D\u5F97\u63A8\u65AD\u65B0\u589E\u3001\u4FEE\u6539\u3001\u63D0\u4EA4\u3001\u5220\u9664\u6216\u72B6\u6001\u53D8\u66F4\u80FD\u529B\u3002Runtime \u6587\u6863\u4E2D\u4EFB\u4F55\u8981\u6C42\u6536\u96C6\u6216\u4FDD\u5B58 API Key \u7684\u65E7\u6307\u5F15\u5747\u4E0D\u9002\u7528\u4E8E MCP\uFF0C\u56E0\u4E3A\u6BCF\u6B21 Tool \u8C03\u7528\u524D\u90FD\u5DF2\u5728\u5185\u90E8\u5B8C\u6210\u8BA4\u8BC1\u3002"
5736
5751
  }
5737
5752
  );
5738
5753
  registerCliTool(
@@ -5756,12 +5771,12 @@ function createLemonClawServer(options = {}) {
5756
5771
  "lemon_account_list",
5757
5772
  {
5758
5773
  title: "\u5217\u51FA\u67E0\u6AAC\u4E91\u8D26\u5957",
5759
- description: "\u5217\u51FA\u5F53\u524D\u7528\u6237\u53EF\u7528\u7684\u67E0\u6AAC\u4E91\u8D26\u5957\uFF0C\u5E76\u7F13\u5B58\u8FD4\u56DE\u7684\u5019\u9009\u5E8F\u53F7\u4F9B lemon_account_select \u4F7F\u7528\u3002\u4EC5\u5F53 lemon_account_switch \u6CA1\u6709\u8FD4\u56DE\u53EF\u7528\u5019\u9009\uFF0C\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u67E5\u770B\u8D26\u5957\u5217\u8868\u65F6\u8C03\u7528\uFF1B\u4E0D\u8981\u4E3A\u4E86\u9009\u62E9\u5DF2\u6709\u5019\u9009\u800C\u91CD\u590D\u5237\u65B0\u5217\u8868\u3002",
5774
+ description: "\u4EC5\u5217\u51FA ACC \u8D22\u52A1\u3001SCM \u8FDB\u9500\u5B58\u548C ERP \u4E1A\u8D22\u8D26\u5957\uFF0C\u5E76\u7F13\u5B58\u5019\u9009\u5E8F\u53F7\u4F9B lemon_account_select \u4F7F\u7528\u3002\u672C\u5DE5\u5177\u4E0D\u8FD4\u56DE\u4E91\u53D1\u7968\u4F01\u4E1A\u3001\u4E91\u53D1\u7968\u8D26\u5957\u3001\u9500\u65B9\u4F01\u4E1A\u6216\u53EF\u5F00\u7968\u4E3B\u4F53\uFF1B\u7528\u6237\u660E\u786E\u63D0\u5230\u4E91\u53D1\u7968\u6216\u72EC\u7ACB\u5F00\u7968\u65F6\u7981\u6B62\u8C03\u7528\u672C\u5DE5\u5177\uFF0C\u5E94\u6539\u7528 lemon_invoice_api \u7684 CompanyFullList\u3002\u4EC5\u5F53 lemon_account_switch \u6CA1\u6709\u53EF\u7528\u5019\u9009\uFF0C\u6216\u7528\u6237\u660E\u786E\u67E5\u770B ACC/SCM/ERP \u8D26\u5957\u65F6\u8C03\u7528\u3002",
5760
5775
  inputSchema: z.object({
5761
5776
  dry_run: z.boolean().default(false).describe("\u662F\u5426\u4EC5\u68C0\u67E5\u6D41\u7A0B\u800C\u4E0D\u5B9E\u9645\u66F4\u65B0\u672C\u5730\u5019\u9009\u7F13\u5B58\u3002"),
5762
5777
  timeout_seconds: timeoutSchema
5763
5778
  }),
5764
- annotations: readOnlyAnnotations
5779
+ annotations: localMutationAnnotations
5765
5780
  },
5766
5781
  (args) => {
5767
5782
  const command = ["account", "list", "--timeout", String(args.timeout_seconds)];
@@ -5945,8 +5960,8 @@ function createLemonClawServer(options = {}) {
5945
5960
  runCli,
5946
5961
  "lemon_action_run",
5947
5962
  {
5948
- title: "\u67E5\u8BE2\u6216\u6267\u884C\u67E0\u6AAC\u4E91\u4E1A\u52A1\u64CD\u4F5C",
5949
- description: "\u6267\u884C\u5DF2\u901A\u8FC7\u68C0\u7D22\u548C\u6587\u6863\u6838\u9A8C\u7684\u67E0\u6AAC\u4E91 ACC\u3001SCM \u6216 ERP \u4E1A\u52A1\u64CD\u4F5C\u3002\u652F\u6301\u67E5\u8BE2\u5BA2\u6237\u3001\u4F9B\u5E94\u5546\u3001\u5546\u54C1\u3001\u4ED3\u5E93\u7B49\u57FA\u7840\u8D44\u6599\uFF0C\u4EE5\u53CA\u91C7\u8D2D\u8BA2\u5355\u3001\u9500\u552E\u8BA2\u5355\u3001\u5E93\u5B58\u3001\u6536\u4ED8\u6B3E\u3001\u5F80\u6765\u3001\u51ED\u8BC1\u3001\u8D26\u7C3F\u3001\u53D1\u7968\u548C\u7ECF\u8425\u6216\u8D22\u52A1\u62A5\u8868\uFF1BERP \u8FD8\u652F\u6301\u9500\u552E\u62A5\u4EF7\u3001\u4EF7\u683C\u8D44\u6599\u3001\u8BA2\u5355\u6C47\u603B\u3001\u5E93\u5B58\u8D26\u9F84\u3001\u6682\u4F30\u8C03\u6574\u548C\u5E94\u6536\u5E94\u4ED8\u9884\u8B66\u3002\u5BF9\u4E8E Action \u6587\u6863\u660E\u786E\u652F\u6301\u7684\u65B0\u589E\u3001\u4FEE\u6539\u3001\u63D0\u4EA4\u7B49\u5199\u64CD\u4F5C\uFF0C\u4EC5\u5728\u7528\u6237\u660E\u786E\u786E\u8BA4\u540E\u6267\u884C\u3002\u8C03\u7528\u524D\u5FC5\u987B\u5B8C\u6210 search\u3001show \u548C\u5168\u90E8\u6587\u6863\u8BFB\u53D6\uFF0C\u4E0D\u5F97\u731C\u6D4B\u53C2\u6570\uFF1B\u672C\u5DE5\u5177\u4E0D\u7528\u4E8E\u72EC\u7ACB\u5F00\u7968\u3002",
5963
+ title: "\u67E5\u8BE2\u67E0\u6AAC\u4E91 ACC\u3001SCM \u6216 ERP \u4E1A\u52A1\u6570\u636E",
5964
+ description: "\u6267\u884C\u5DF2\u901A\u8FC7\u68C0\u7D22\u548C\u6587\u6863\u6838\u9A8C\u7684\u67E0\u6AAC\u4E91 ACC\u3001SCM \u6216 ERP \u53EA\u8BFB Action\u3002\u7528\u4E8E\u67E5\u8BE2\u5BA2\u6237\u3001\u4F9B\u5E94\u5546\u3001\u5546\u54C1\u3001\u4ED3\u5E93\u7B49\u57FA\u7840\u8D44\u6599\uFF0C\u4EE5\u53CA\u91C7\u8D2D\u8BA2\u5355\u3001\u9500\u552E\u8BA2\u5355\u3001\u5E93\u5B58\u3001\u6536\u4ED8\u6B3E\u3001\u5F80\u6765\u3001\u51ED\u8BC1\u3001\u8D26\u7C3F\u3001\u53D1\u7968\u548C\u7ECF\u8425\u6216\u8D22\u52A1\u62A5\u8868\uFF1BERP \u8FD8\u8986\u76D6\u9500\u552E\u62A5\u4EF7\u3001\u4EF7\u683C\u8D44\u6599\u3001\u8BA2\u5355\u6C47\u603B\u3001\u5E93\u5B58\u8D26\u9F84\u3001\u6682\u4F30\u8C03\u6574\u548C\u5E94\u6536\u5E94\u4ED8\u9884\u8B66\u3002\u5F53\u524D\u4E0D\u63D0\u4F9B\u65B0\u589E\u3001\u4FEE\u6539\u3001\u63D0\u4EA4\u3001\u5220\u9664\u6216\u72B6\u6001\u53D8\u66F4\u80FD\u529B\uFF1B\u90E8\u5206\u53EA\u8BFB\u67E5\u8BE2\u867D\u7136\u4F7F\u7528 HTTP POST\uFF0C\u4ECD\u4E0D\u5C5E\u4E8E\u4E1A\u52A1\u5199\u64CD\u4F5C\uFF0C\u5BFC\u51FA Action \u53EF\u80FD\u5728\u672C\u5730\u751F\u6210\u6587\u4EF6\u3002\u8C03\u7528\u524D\u5FC5\u987B\u5B8C\u6210 search\u3001show \u548C\u5168\u90E8\u6587\u6863\u8BFB\u53D6\uFF0C\u4E0D\u5F97\u731C\u6D4B\u53C2\u6570\uFF1B\u672C\u5DE5\u5177\u4E0D\u7528\u4E8E\u4E91\u53D1\u7968\u6216\u72EC\u7ACB\u5F00\u7968\u3002",
5950
5965
  inputSchema: z.object({
5951
5966
  product: productSchema,
5952
5967
  action: z.string().min(1).describe("\u5DF2\u901A\u8FC7 search\u3001show \u548C\u6587\u6863\u6838\u9A8C\u7684\u7CBE\u786E Action \u540D\u79F0\u3002"),
@@ -5956,16 +5971,10 @@ function createLemonClawServer(options = {}) {
5956
5971
  _outputMode: z.enum(["basic", "full"]).optional().describe("\u6587\u6863\u5141\u8BB8\u65F6\u9009\u62E9\u57FA\u7840\u7ED3\u679C basic \u6216\u5B8C\u6574\u7ED3\u679C full\u3002"),
5957
5972
  _extraDisplayFields: z.array(z.string().min(1)).min(1).optional().describe("\u7528\u6237\u660E\u786E\u8981\u6C42\u989D\u5916\u5C55\u793A\u4E14 Action \u6587\u6863\u652F\u6301\u7684\u5B57\u6BB5\u540D\u79F0\u3002")
5958
5973
  }).strict().describe("\u4E25\u683C\u6309\u7167 Action \u6587\u6863\u6784\u9020\u7684\u5D4C\u5957 query/body \u8BF7\u6C42\u5305\u3002"),
5959
- user_confirmed: z.boolean().default(false).describe("\u53EA\u6709\u7528\u6237\u660E\u786E\u786E\u8BA4\u8BE5 Action \u6587\u6863\u6807\u6CE8\u7684\u5199\u64CD\u4F5C\u65F6\u624D\u80FD\u8BBE\u4E3A true\u3002"),
5960
- dry_run: z.boolean().default(false).describe("\u662F\u5426\u4EC5\u6821\u9A8C\u5E76\u9884\u6F14\uFF0C\u800C\u4E0D\u5B9E\u9645\u6267\u884C\u4E1A\u52A1\u8BF7\u6C42\u3002"),
5974
+ dry_run: z.boolean().default(false).describe("\u662F\u5426\u4EC5\u6821\u9A8C\u5E76\u9884\u6F14\u67E5\u8BE2\u8BF7\u6C42\uFF0C\u800C\u4E0D\u5B9E\u9645\u83B7\u53D6\u4E1A\u52A1\u6570\u636E\u3002"),
5961
5975
  timeout_seconds: timeoutSchema
5962
5976
  }),
5963
- annotations: {
5964
- readOnlyHint: false,
5965
- destructiveHint: true,
5966
- idempotentHint: false,
5967
- openWorldHint: true
5968
- }
5977
+ annotations: localMutationAnnotations
5969
5978
  },
5970
5979
  (args) => {
5971
5980
  const command = [
@@ -5977,7 +5986,6 @@ function createLemonClawServer(options = {}) {
5977
5986
  "--timeout",
5978
5987
  String(args.timeout_seconds)
5979
5988
  ];
5980
- if (args.user_confirmed) command.push("--user-confirmed");
5981
5989
  if (args.dry_run) command.push("--dry-run");
5982
5990
  return {
5983
5991
  command,
@@ -5989,10 +5997,10 @@ function createLemonClawServer(options = {}) {
5989
5997
  server.registerTool(
5990
5998
  "lemon_invoice_read_doc",
5991
5999
  {
5992
- title: "\u8BFB\u53D6\u67E0\u6AAC\u4E91\u72EC\u7ACB\u5F00\u7968\u6587\u6863",
5993
- description: "\u8BFB\u53D6 LemonClaw Runtime \u72EC\u7ACB\u5F00\u7968\u76EE\u5F55\u5185\u7684\u56FA\u5B9A\u6D41\u7A0B\u6587\u6863\uFF0C\u53EA\u5141\u8BB8\u8BBF\u95EE\u8BE5\u76EE\u5F55\u4E2D\u7684 Markdown\u3001JSON \u6216\u6587\u672C\u6587\u4EF6\uFF0C\u4E0D\u80FD\u8BFB\u53D6\u4EFB\u610F\u672C\u5730\u6587\u4EF6\u3002\u5E94\u5148\u8BFB\u53D6 SKILL.md\uFF0C\u518D\u6309\u5176\u6307\u5F15\u8BFB\u53D6\u7ACB\u5373\u5F00\u7968\u3001\u6279\u91CF\u5F00\u7968\u3001\u95EE\u9898\u53CD\u9988\u53CA\u5171\u4EAB\u89C4\u5219\u6587\u6863\u3002",
6000
+ title: "\u8BFB\u53D6\u67E0\u6AAC\u4E91\u53D1\u7968\u4E0E\u72EC\u7ACB\u5F00\u7968\u6587\u6863",
6001
+ description: "\u4E91\u53D1\u7968\u4EA7\u54C1\u3001\u72EC\u7ACB\u5F00\u7968\u548C\u7A0E\u7968\u5E73\u53F0\uFF08\u542B\u5F00\u7968\u52A9\u624B/\u5F00\u7968\u52A9\u7406\uFF09\u7684\u603B\u6D41\u7A0B\u6587\u6863\u5165\u53E3\uFF1B\u672C\u5DE5\u5177\u6309\u76F8\u5BF9\u8DEF\u5F84\u8BFB\u53D6 Runtime \u5F00\u7968\u6587\u6863\uFF0C\u4E0D\u76F4\u63A5\u67E5\u8BE2\u4F01\u4E1A\u6216\u6267\u884C\u5F00\u7968\u3002\u53EA\u8981\u7528\u6237\u660E\u786E\u5904\u4E8E\u4E91\u53D1\u7968\u4EA7\u54C1\uFF0C\u6216\u63D0\u51FA\u67E5\u8BE2\u4E91\u53D1\u7968\u4F01\u4E1A/\u516C\u53F8/\u8D26\u53F7/\u8D26\u5957\u3001\u9500\u65B9/\u8D2D\u65B9/\u5BA2\u6237\u3001\u4F01\u4E1A\u8BE6\u60C5\u3001\u767B\u5F55\u72B6\u6001\u3001\u7A0E\u5C40/\u6570\u7535\u8BA4\u8BC1\u3001\u5269\u4F59\u989D\u5EA6\u3001\u7A0E\u7F16/\u5546\u54C1\u7F16\u7801\u3001\u7ACB\u5373/\u6279\u91CF\u5F00\u7968\u3001\u9884\u89C8/\u786E\u8BA4/\u63D0\u4EA4\u3001\u5BA2\u670D\u6216\u95EE\u9898\u53CD\u9988\uFF0C\u7B2C\u4E00\u6B65\u90FD\u5FC5\u987B\u7528\u672C\u5DE5\u5177\u8BFB\u53D6 SKILL.md\uFF0C\u518D\u6309\u6587\u6863\u4F7F\u7528 lemon_invoice_api \u6216 lemon_invoice_run_helper\uFF0C\u7981\u6B62\u8F6C\u5230 lemon_account_* \u6216 lemon_action_*\u3002\u4EC5\u67E5\u8BE2 ACC/ERP \u8D22\u52A1\u8D26\u5957\u5185\u7684\u8FDB\u9879/\u9500\u9879\u53D1\u7968\u3001\u8BE6\u60C5\u3001\u5BFC\u51FA\u6216\u7EDF\u8BA1\u65F6\u4E0D\u4F7F\u7528\u672C\u5DE5\u5177\u3002",
5994
6002
  inputSchema: z.object({
5995
- path: z.string().min(1).describe("\u5F00\u7968\u76EE\u5F55\u5185\u7684\u76F8\u5BF9\u6587\u6863\u8DEF\u5F84\uFF0C\u4F8B\u5982 SKILL.md \u6216 references/immediate/flow.md\u3002")
6003
+ path: z.string().min(1).describe("\u5F00\u7968\u76EE\u5F55\u5185\u7684\u76F8\u5BF9\u6587\u6863\u8DEF\u5F84\uFF1B\u9996\u6B21\u8FDB\u5165\u4E91\u53D1\u7968\u6D41\u7A0B\u56FA\u5B9A\u4F20 SKILL.md\uFF0C\u540E\u7EED\u53EA\u8BFB\u53D6\u8BE5\u6587\u6863\u6307\u5411\u7684\u8DEF\u5F84\u3002")
5996
6004
  }),
5997
6005
  annotations: readOnlyAnnotations
5998
6006
  },
@@ -6009,7 +6017,7 @@ function createLemonClawServer(options = {}) {
6009
6017
  "lemon_invoice_api",
6010
6018
  {
6011
6019
  title: "\u8C03\u7528\u67E0\u6AAC\u4E91\u72EC\u7ACB\u5F00\u7968\u63A5\u53E3",
6012
- description: "\u6309\u7167\u72EC\u7ACB\u5F00\u7968\u6D41\u7A0B\u6587\u6863\u8C03\u7528\u56FA\u5B9A\u7684\u5F00\u7968\u63A5\u53E3\uFF0C\u652F\u6301\u516C\u53F8\u548C\u5BA2\u6237\u67E5\u8BE2\u3001\u767B\u5F55\u4EFB\u52A1\u72B6\u6001\u3001\u7A0E\u5C40\u8BA4\u8BC1\u72B6\u6001\u3001\u5269\u4F59\u989D\u5EA6\u3001\u7A0E\u76EE\u89E3\u6790\u3001\u7A0E\u5C40\u8BA4\u8BC1\u94FE\u3001\u6B63\u5F0F\u5F00\u7968\u53CA\u95EE\u9898\u53CD\u9988\u3002\u8C03\u7528\u524D\u5FC5\u987B\u8BFB\u53D6\u5BF9\u5E94\u6D41\u7A0B\u6587\u6863\u3002\u6B63\u5F0F\u5F00\u7968\u4EC5\u5728\u7528\u6237\u660E\u786E\u786E\u8BA4\u4E14\u5FC5\u9700\u4E0A\u4E0B\u6587\u5B8C\u6574\u65F6\u6267\u884C\uFF1B\u4E0D\u5F97\u901A\u8FC7\u53C2\u6570\u4F20\u9012 API Key\u3001Token \u6216\u5176\u4ED6\u8BA4\u8BC1\u51ED\u636E\u3002",
6020
+ description: "\u8C03\u7528\u4E91\u53D1\u7968\u4EA7\u54C1\uFF08\u72EC\u7ACB\u5F00\u7968/\u7A0E\u7968\u5E73\u53F0\uFF09\u7684\u56FA\u5B9A\u4E1A\u52A1\u63A5\u53E3\u3002\u7528\u6237\u8BE2\u95EE\u4E91\u53D1\u7968\u4E0B\u6709\u54EA\u4E9B\u4F01\u4E1A\u3001\u8D26\u5957\u3001\u9500\u65B9\u6216\u53EF\u5F00\u7968\u4E3B\u4F53\u65F6\uFF0C\u8BFB\u53D6\u6587\u6863\u540E\u56FA\u5B9A\u4F7F\u7528 operation=CompanyFullList\uFF0C\u7981\u6B62\u8C03\u7528 lemon_account_list\u3002\u5176\u4ED6 operation \u7528\u4E8E\u516C\u53F8\u8BE6\u60C5\u3001\u8D2D\u65B9\u5BA2\u6237\u3001\u767B\u5F55\u72B6\u6001\u3001\u7A0E\u5C40\u8BA4\u8BC1\u3001\u5269\u4F59\u989D\u5EA6\u3001\u7A0E\u76EE\u89E3\u6790\u3001\u6B63\u5F0F\u5F00\u7968\u548C\u95EE\u9898\u53CD\u9988\u3002\u8C03\u7528\u524D\u5FC5\u987B\u8BFB\u53D6\u5BF9\u5E94\u6587\u6863\uFF1B\u6B63\u5F0F\u5F00\u7968\u548C\u53CD\u9988\u63D0\u4EA4\u90FD\u5FC5\u987B\u83B7\u5F97\u7528\u6237\u5BF9\u672C\u6B21\u64CD\u4F5C\u7684\u660E\u786E\u786E\u8BA4\uFF1B\u4E0D\u5F97\u4F20\u9012 API Key\u3001Token \u6216\u5176\u4ED6\u8BA4\u8BC1\u51ED\u636E\u3002",
6013
6021
  inputSchema: z.object({
6014
6022
  operation: z.enum([
6015
6023
  "CompanyFullList",
@@ -6044,7 +6052,7 @@ function createLemonClawServer(options = {}) {
6044
6052
  message_id: optionalText,
6045
6053
  context: optionalText,
6046
6054
  upload_file_path: optionalText,
6047
- user_confirmed: z.boolean().default(false).describe("\u4EC5\u5728\u7528\u6237\u660E\u786E\u786E\u8BA4\u6B63\u5F0F\u5F00\u7968\u6216\u6587\u6863\u6807\u6CE8\u7684\u5199\u64CD\u4F5C\u540E\u8BBE\u4E3A true\u3002"),
6055
+ user_confirmed: z.boolean().default(false).describe("\u4EC5\u5728\u7528\u6237\u660E\u786E\u786E\u8BA4\u672C\u6B21\u6B63\u5F0F\u5F00\u7968 SkillInvoiceIssue \u6216\u53CD\u9988\u63D0\u4EA4 FeedbackSubmit \u540E\u8BBE\u4E3A true\u3002"),
6048
6056
  timeout_seconds: timeoutSchema
6049
6057
  }),
6050
6058
  annotations: {
@@ -6066,7 +6074,7 @@ function createLemonClawServer(options = {}) {
6066
6074
  "lemon_invoice_run_helper",
6067
6075
  {
6068
6076
  title: "\u8FD0\u884C\u67E0\u6AAC\u4E91\u72EC\u7ACB\u5F00\u7968\u8F85\u52A9\u7A0B\u5E8F",
6069
- description: "\u8FD0\u884C\u72EC\u7ACB\u5F00\u7968\u6D41\u7A0B\u5185\u7F6E\u7684\u56FA\u5B9A\u767D\u540D\u5355\u8F85\u52A9\u7A0B\u5E8F\uFF0C\u7528\u4E8E Excel \u6216\u6570\u636E\u6587\u4EF6\u89E3\u6790\u3001JSON \u6821\u9A8C\u3001\u53D1\u7968\u9884\u89C8\u751F\u6210\u3001\u9884\u89C8\u670D\u52A1\u3001\u5BA2\u6237\u67E5\u8BE2\u53CA\u5BA2\u670D\u4FE1\u606F\u8F93\u51FA\u3002\u672C\u5DE5\u5177\u4E0D\u80FD\u6267\u884C\u4EFB\u610F\u7CFB\u7EDF\u547D\u4EE4\u3001\u4EFB\u610F Python \u811A\u672C\u6216\u767D\u540D\u5355\u4E4B\u5916\u7684\u7A0B\u5E8F\uFF1Boperation \u548C\u53C2\u6570\u5FC5\u987B\u6765\u81EA\u5DF2\u8BFB\u53D6\u7684\u5F00\u7968\u6D41\u7A0B\u6587\u6863\u3002",
6077
+ description: "\u4EC5\u8FD0\u884C\u4E91\u53D1\u7968\u4EA7\u54C1\u6D41\u7A0B\u5185\u7F6E\u7684\u767D\u540D\u5355\u8F85\u52A9\u7A0B\u5E8F\uFF0C\u7528\u4E8E Excel/\u6570\u636E\u6587\u4EF6\u89E3\u6790\u3001JSON \u6821\u9A8C\u3001\u53D1\u7968\u9884\u89C8\u751F\u6210\u3001\u9884\u89C8\u670D\u52A1\u3001\u5BA2\u6237\u67E5\u8BE2\u548C\u5BA2\u670D\u4FE1\u606F\u8F93\u51FA\uFF1B\u5B83\u4E0D\u67E5\u8BE2\u8D26\u5957\u6216\u4E91\u53D1\u7968\u4F01\u4E1A\u3002\u67E5\u8BE2\u4E91\u53D1\u7968\u4F01\u4E1A\u3001\u8D26\u5957\u3001\u9500\u65B9\u6216\u53EF\u5F00\u7968\u4E3B\u4F53\u5FC5\u987B\u4F7F\u7528 lemon_invoice_api \u7684 CompanyFullList\u3002\u672C\u5DE5\u5177\u4E0D\u80FD\u6267\u884C\u4EFB\u610F\u7CFB\u7EDF\u547D\u4EE4\u3001\u4EFB\u610F Python \u811A\u672C\u6216\u767D\u540D\u5355\u5916\u7A0B\u5E8F\uFF1Boperation \u548C\u53C2\u6570\u5FC5\u987B\u6765\u81EA\u5DF2\u8BFB\u53D6\u7684\u5F00\u7968\u6587\u6863\u3002",
6070
6078
  inputSchema: z.object({
6071
6079
  operation: z.enum(invoiceHelperNames).describe("\u8981\u8FD0\u884C\u7684\u767D\u540D\u5355\u8F85\u52A9\u64CD\u4F5C\uFF0C\u5FC5\u987B\u6765\u81EA\u5DF2\u8BFB\u53D6\u7684\u5F00\u7968\u6D41\u7A0B\u6587\u6863\u3002"),
6072
6080
  arguments: z.array(z.string()).max(30).default([]).describe("\u6309\u5BF9\u5E94\u6D41\u7A0B\u6587\u6863\u987A\u5E8F\u63D0\u4F9B\u7684\u8F85\u52A9\u7A0B\u5E8F\u53C2\u6570\uFF0C\u6700\u591A 30 \u9879\u3002"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lemonbeijing/lemonclaw-mcp-service",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "用于查询和操作柠檬云 Lemon Cloud 业务数据的 MCP 服务,覆盖账套、进销存 SCM、业财 ERP、财务 ACC 和独立开票;支持客户、供应商、商品、仓库、采购、销售、库存、收付款、往来、凭证、账簿、发票及经营与财务报表,并支持立即开票、批量开票和问题反馈。",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",