@yjzf/mcp-server-yjzf 0.1.8 → 0.1.9

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/dist/index.js CHANGED
@@ -6,6 +6,7 @@ import * as overviewByCTool from "./tools/overview_by_c.js";
6
6
  import * as countAllStatementTool from "./tools/count_all_statement.js";
7
7
  import * as getCurrentTimeTool from "./tools/get_current_time.js";
8
8
  import * as dateToTimestampTool from "./tools/date_to_timestamp.js";
9
+ import * as investmentContractExportTool from "./tools/investment_contract.js";
9
10
  // ---------------------------------------------------------------------------
10
11
  // MCP Server
11
12
  // ---------------------------------------------------------------------------
@@ -18,6 +19,7 @@ server.registerTool(overviewByCTool.name, overviewByCTool.schema, overviewByCToo
18
19
  server.registerTool(countAllStatementTool.name, countAllStatementTool.schema, countAllStatementTool.handler);
19
20
  server.registerTool(getCurrentTimeTool.name, getCurrentTimeTool.schema, getCurrentTimeTool.handler);
20
21
  server.registerTool(dateToTimestampTool.name, dateToTimestampTool.schema, dateToTimestampTool.handler);
22
+ server.registerTool(investmentContractExportTool.name, investmentContractExportTool.schema, investmentContractExportTool.handler);
21
23
  // ---------------------------------------------------------------------------
22
24
  // Start
23
25
  // ---------------------------------------------------------------------------
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,qBAAqB,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,kBAAkB,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,mBAAmB,MAAM,8BAA8B,CAAC;AAEpE,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,YAAY,CACjB,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,MAAM,EACrB,cAAc,CAAC,OAAO,CACvB,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,eAAe,CAAC,IAAI,EACpB,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,OAAO,CACxB,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,CAAC,IAAI,EAC1B,qBAAqB,CAAC,MAAM,EAC5B,qBAAqB,CAAC,OAAO,CAC9B,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,CAAC,IAAI,EACvB,kBAAkB,CAAC,MAAM,EACzB,kBAAkB,CAAC,OAAO,CAC3B,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,CAAC,IAAI,EACxB,mBAAmB,CAAC,MAAM,EAC1B,mBAAmB,CAAC,OAAO,CAC5B,CAAC;AAEF,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,cAAc,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,eAAe,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,qBAAqB,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,kBAAkB,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,mBAAmB,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,4BAA4B,MAAM,gCAAgC,CAAC;AAE/E,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,iBAAiB;IACvB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,YAAY,CACjB,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,MAAM,EACrB,cAAc,CAAC,OAAO,CACvB,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,eAAe,CAAC,IAAI,EACpB,eAAe,CAAC,MAAM,EACtB,eAAe,CAAC,OAAO,CACxB,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,CAAC,IAAI,EAC1B,qBAAqB,CAAC,MAAM,EAC5B,qBAAqB,CAAC,OAAO,CAC9B,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,CAAC,IAAI,EACvB,kBAAkB,CAAC,MAAM,EACzB,kBAAkB,CAAC,OAAO,CAC3B,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,CAAC,IAAI,EACxB,mBAAmB,CAAC,MAAM,EAC1B,mBAAmB,CAAC,OAAO,CAC5B,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,4BAA4B,CAAC,IAAI,EACjC,4BAA4B,CAAC,MAAM,EACnC,4BAA4B,CAAC,OAAO,CACrC,CAAC;AAEF,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import * as z from "zod/v4";
2
+ export declare const name = "investment_contract";
3
+ export declare const schema: {
4
+ description: string;
5
+ inputSchema: z.ZodObject<{}, z.core.$strip>;
6
+ };
7
+ export declare function handler(): Promise<import("../utils/http.js").ToolResult>;
8
+ //# sourceMappingURL=investment_contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investment_contract.d.ts","sourceRoot":"","sources":["../../src/tools/investment_contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAqF5B,eAAO,MAAM,IAAI,wBAAwB,CAAC;AAE1C,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,wBAAsB,OAAO,mDAyE5B"}
@@ -0,0 +1,108 @@
1
+ import * as z from "zod/v4";
2
+ import { buildGatewayHeaders, createErrorResult, createSuccessResult } from "../utils/http.js";
3
+ import { saveWorkbook, formatTimestamp } from "../utils/excel.js";
4
+ import { generateDatedFileName } from "../utils/env.js";
5
+ import { debug } from "../utils/debug.js";
6
+ // ---------------------------------------------------------------------------
7
+ // 枚举映射
8
+ // ---------------------------------------------------------------------------
9
+ const LOCKING_STATE_MAP = {
10
+ 1: "是",
11
+ 0: "否",
12
+ };
13
+ const CONTRACT_STATE_MAP = {
14
+ 1: "审核通过",
15
+ 2: "审核否决",
16
+ 3: "待审核",
17
+ 4: "草稿",
18
+ 5: "已撤回",
19
+ 6: "已回收",
20
+ 8: "已签署",
21
+ };
22
+ const SIGN_METHOD_MAP = {
23
+ 1: "线上",
24
+ 2: "线下",
25
+ };
26
+ const ORDER_STATUS_MAP = {
27
+ 0: "已关闭",
28
+ 1: "跟进中",
29
+ 2: "已完成",
30
+ };
31
+ const COLUMNS = [
32
+ ["城市", "cityName"],
33
+ ["锁定状态", "lockingState", (v) => LOCKING_STATE_MAP[Number(v)] ?? ""],
34
+ ["合同名称", "title"],
35
+ ["合同编号", "econtractNo"],
36
+ ["合同状态", "state", (v) => CONTRACT_STATE_MAP[Number(v)] ?? String(v)],
37
+ ["甲方", "companyA"],
38
+ ["乙方", "companyB"],
39
+ ["签署方式", "isOutside", (v) => SIGN_METHOD_MAP[Number(v)] ?? String(v)],
40
+ ["剩余打印次数", "plusPrintNumber"],
41
+ ["关联订单编号", "linkOrderNo"],
42
+ ["对应订单状态", "orderStatus", (v) => ORDER_STATUS_MAP[Number(v)] ?? String(v)],
43
+ ["添加人", "createdBy"],
44
+ ["添加时间", "createTm", (v) => formatTimestamp(Number(v))],
45
+ ];
46
+ // ---------------------------------------------------------------------------
47
+ // 工具导出
48
+ // ---------------------------------------------------------------------------
49
+ export const name = "investment_contract";
50
+ export const schema = {
51
+ description: "从 ERP 系统查询直营城市招商加盟合同列表数据,生成 Excel 文件",
52
+ inputSchema: z.object({}),
53
+ };
54
+ export async function handler() {
55
+ const headers = buildGatewayHeaders();
56
+ try {
57
+ // Step 1: 获取城市列表
58
+ const citiesResponse = await fetch("https://mcp.yjzf.com/zy_cities.json", {
59
+ method: "GET",
60
+ headers,
61
+ });
62
+ if (!citiesResponse.ok) {
63
+ return createErrorResult(`获取 zy_cities 数据失败: ${citiesResponse.status} ${citiesResponse.statusText}`);
64
+ }
65
+ const cities = await citiesResponse.json();
66
+ debug("zy_cities.json", cities);
67
+ // Step 2: 调用 Gateway 获取合同数据
68
+ // 生产环境: https://mcp.yjzf.com/investment_contract
69
+ // 本地调试:http://localhost:3000/investment_contract
70
+ const response = await fetch("https://mcp.yjzf.com/investment_contract", {
71
+ method: "POST",
72
+ headers,
73
+ body: JSON.stringify({ cities }),
74
+ });
75
+ if (!response.ok) {
76
+ return createErrorResult(`请求 investment_contract 失败: ${response.status} ${response.statusText}`);
77
+ }
78
+ const apiResponse = await response.json();
79
+ debug("investment_contract response", apiResponse);
80
+ if (!apiResponse.succeed) {
81
+ return createErrorResult(`网关返回错误: ${apiResponse.msg}`);
82
+ }
83
+ const { list } = apiResponse.data;
84
+ if (list.length === 0) {
85
+ return createSuccessResult("未查询到任何合同数据");
86
+ }
87
+ // Step 3: 构建 Excel 数据
88
+ const headerRow = COLUMNS.map(([label]) => label);
89
+ const dataRows = list.map((item) => COLUMNS.map(([, field, transform]) => {
90
+ const val = item[field];
91
+ if (transform) {
92
+ return transform(val);
93
+ }
94
+ return val != null ? String(val) : "";
95
+ }));
96
+ const sheetData = [headerRow, ...dataRows];
97
+ // Step 4: 保存 Excel 文件
98
+ const fileName = generateDatedFileName("招商加盟合同列表导出", "xlsx", false);
99
+ const sheets = [{ name: "合同数据", data: sheetData }];
100
+ const filePath = saveWorkbook(sheets, fileName);
101
+ return createSuccessResult(`成功导出招商加盟合同数据!\n共 ${list.length} 条记录\n文件路径: ${filePath}`);
102
+ }
103
+ catch (error) {
104
+ const errorMessage = error instanceof Error ? error.message : String(error);
105
+ return createErrorResult(`执行过程中发生错误: ${errorMessage}`);
106
+ }
107
+ }
108
+ //# sourceMappingURL=investment_contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"investment_contract.js","sourceRoot":"","sources":["../../src/tools/investment_contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface SheetDef {
2
+ name: string;
3
+ data: (string | number)[][];
4
+ }
5
+ /**
6
+ * 创建工作簿并保存到 data 目录,返回文件绝对路径。
7
+ * @param sheets 工作表定义列表(名称 + 二维数组数据)
8
+ * @param fileName 文件名(含扩展名,如 "2026-04-21_xxx.xlsx")
9
+ */
10
+ export declare function saveWorkbook(sheets: SheetDef[], fileName: string): string;
11
+ /**
12
+ * 毫秒时间戳转 YYYY-MM-DD hh:mm:ss 格式字符串
13
+ */
14
+ export declare function formatTimestamp(ts: number): string;
15
+ //# sourceMappingURL=excel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel.d.ts","sourceRoot":"","sources":["../../src/utils/excel.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;CAC7B;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAczE;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CASlD"}
@@ -0,0 +1,41 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as xlsx from "xlsx";
4
+ import { getDataDir } from "./env.js";
5
+ // ---------------------------------------------------------------------------
6
+ // Excel 工作簿生成与保存
7
+ // ---------------------------------------------------------------------------
8
+ /**
9
+ * 创建工作簿并保存到 data 目录,返回文件绝对路径。
10
+ * @param sheets 工作表定义列表(名称 + 二维数组数据)
11
+ * @param fileName 文件名(含扩展名,如 "2026-04-21_xxx.xlsx")
12
+ */
13
+ export function saveWorkbook(sheets, fileName) {
14
+ const workbook = xlsx.utils.book_new();
15
+ for (const sheet of sheets) {
16
+ const ws = xlsx.utils.aoa_to_sheet(sheet.data);
17
+ xlsx.utils.book_append_sheet(workbook, ws, sheet.name);
18
+ }
19
+ const dataDir = getDataDir();
20
+ fs.mkdirSync(dataDir, { recursive: true });
21
+ const filePath = path.join(dataDir, fileName);
22
+ xlsx.writeFile(workbook, filePath);
23
+ return filePath;
24
+ }
25
+ // ---------------------------------------------------------------------------
26
+ // 时间格式化
27
+ // ---------------------------------------------------------------------------
28
+ /**
29
+ * 毫秒时间戳转 YYYY-MM-DD hh:mm:ss 格式字符串
30
+ */
31
+ export function formatTimestamp(ts) {
32
+ const date = new Date(ts);
33
+ const Y = date.getFullYear();
34
+ const M = String(date.getMonth() + 1).padStart(2, "0");
35
+ const D = String(date.getDate()).padStart(2, "0");
36
+ const h = String(date.getHours()).padStart(2, "0");
37
+ const m = String(date.getMinutes()).padStart(2, "0");
38
+ const s = String(date.getSeconds()).padStart(2, "0");
39
+ return `${Y}-${M}-${D} ${h}:${m}:${s}`;
40
+ }
41
+ //# sourceMappingURL=excel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel.js","sourceRoot":"","sources":["../../src/utils/excel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAWtC,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,MAAkB,EAAE,QAAgB;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAEvC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAEnC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,14 @@
1
+ interface ToolContent {
2
+ type: "text";
3
+ text: string;
4
+ }
5
+ export interface ToolResult {
6
+ [x: string]: unknown;
7
+ content: ToolContent[];
8
+ isError?: boolean;
9
+ }
10
+ export declare function buildGatewayHeaders(): Record<string, string>;
11
+ export declare function createErrorResult(message: string): ToolResult;
12
+ export declare function createSuccessResult(message: string): ToolResult;
13
+ export {};
14
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAMA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,wBAAgB,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY5D;AAMD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAK7D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAI/D"}
@@ -0,0 +1,30 @@
1
+ import { getApiKey } from "./env.js";
2
+ // ---------------------------------------------------------------------------
3
+ // Gateway 请求头
4
+ // ---------------------------------------------------------------------------
5
+ export function buildGatewayHeaders() {
6
+ const headers = {
7
+ Accept: "application/json",
8
+ "Content-Type": "application/json",
9
+ };
10
+ const apiKey = getApiKey();
11
+ if (apiKey) {
12
+ headers["Authorization"] = `Bearer ${apiKey}`;
13
+ }
14
+ return headers;
15
+ }
16
+ // ---------------------------------------------------------------------------
17
+ // 标准化返回
18
+ // ---------------------------------------------------------------------------
19
+ export function createErrorResult(message) {
20
+ return {
21
+ content: [{ type: "text", text: message }],
22
+ isError: true,
23
+ };
24
+ }
25
+ export function createSuccessResult(message) {
26
+ return {
27
+ content: [{ type: "text", text: message }],
28
+ };
29
+ }
30
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/utils/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAiBrC,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAA2B;QACtC,MAAM,EAAE,kBAAkB;QAC1B,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;IAChD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yjzf/mcp-server-yjzf",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "MCP Server for YJZF",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,8 @@
16
16
  "prepublishOnly": "npm run build",
17
17
  "inspect": "npx @modelcontextprotocol/inspector node dist/index.js",
18
18
  "test": "node test-mcp.js",
19
- "test:debug": "DEBUG=1 node test-mcp.js"
19
+ "test:debug": "DEBUG=1 node test-mcp.js",
20
+ "test:count": "node test-count-all-statement.js"
20
21
  },
21
22
  "keywords": [
22
23
  "mcp",