fmes-contact-mcp 0.1.0

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.
Files changed (38) hide show
  1. package/.env +3 -0
  2. package/.env.example +6 -0
  3. package/README.md +90 -0
  4. package/dist/client/crm-client.d.ts +13 -0
  5. package/dist/client/crm-client.js +126 -0
  6. package/dist/client/crm-client.js.map +1 -0
  7. package/dist/index.d.ts +1 -0
  8. package/dist/index.js +42 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/tools/get-promoter-contracts.d.ts +30 -0
  11. package/dist/tools/get-promoter-contracts.js +54 -0
  12. package/dist/tools/get-promoter-contracts.js.map +1 -0
  13. package/dist/tools/get-promoter-detail.d.ts +22 -0
  14. package/dist/tools/get-promoter-detail.js +40 -0
  15. package/dist/tools/get-promoter-detail.js.map +1 -0
  16. package/dist/tools/search-contracts.d.ts +31 -0
  17. package/dist/tools/search-contracts.js +50 -0
  18. package/dist/tools/search-contracts.js.map +1 -0
  19. package/dist/tools/search-promoters.d.ts +61 -0
  20. package/dist/tools/search-promoters.js +58 -0
  21. package/dist/tools/search-promoters.js.map +1 -0
  22. package/dist/tools/stats-promoters.d.ts +16 -0
  23. package/dist/tools/stats-promoters.js +19 -0
  24. package/dist/tools/stats-promoters.js.map +1 -0
  25. package/dist/types/index.d.ts +87 -0
  26. package/dist/types/index.js +3 -0
  27. package/dist/types/index.js.map +1 -0
  28. package/package.json +25 -0
  29. package/src/client/crm-client.ts +135 -0
  30. package/src/index.ts +88 -0
  31. package/src/tools/get-promoter-contracts.ts +69 -0
  32. package/src/tools/get-promoter-detail.ts +48 -0
  33. package/src/tools/search-contracts.ts +62 -0
  34. package/src/tools/search-promoters.ts +68 -0
  35. package/src/tools/stats-promoters.ts +25 -0
  36. package/src/types/index.ts +98 -0
  37. package/test/test-client.ts +68 -0
  38. package/tsconfig.json +18 -0
package/.env ADDED
@@ -0,0 +1,3 @@
1
+ CRM_BASE_URL=http://localhost:8080/rest
2
+ CRM_USERNAME=mt011
3
+ CRM_PASSWORD=1
package/.env.example ADDED
@@ -0,0 +1,6 @@
1
+ # CRM 后端地址
2
+ CRM_BASE_URL=http://localhost:8080/rest
3
+ # CRM 登录账号
4
+ CRM_USERNAME=admin
5
+ # CRM 登录密码
6
+ CRM_PASSWORD=123456
package/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # fmes-contact-mcp
2
+
3
+ 触点推荐 MCP Server - 为企业 AI Agent 提供促销员智能推荐。
4
+
5
+ 提供 5 个工具:search_promoters / get_promoter_detail / get_promoter_contracts / search_contracts / stats_promoters。
6
+
7
+ ## 环境准备
8
+
9
+ ```powershell
10
+ cd contact-mcp
11
+ npm install
12
+ ```
13
+
14
+ ## 构建
15
+
16
+ ```powershell
17
+ npm run build
18
+ ```
19
+
20
+ 编译产物输出到 `dist/`,Agent 引用的是 `dist/index.js`。
21
+
22
+ ## 本地调试
23
+
24
+ 1. 确保 CRM 后端已启动(端口 8080)
25
+ 2. 确认 `.env` 配置正确:
26
+
27
+ ```env
28
+ CRM_BASE_URL=http://localhost:8080/rest
29
+ CRM_USERNAME=mt011
30
+ CRM_PASSWORD=1
31
+ ```
32
+
33
+ 3. 启动:
34
+
35
+ ```powershell
36
+ npm start
37
+ ```
38
+
39
+ ## Agent 接入配置
40
+
41
+ 编译完成后,在任意 MCP 兼容 Agent 中添加以下配置:
42
+
43
+ ```json
44
+ {
45
+ "mcpServers": {
46
+ "fmes-contact-mcp": {
47
+ "command": "node",
48
+ "args": ["D:\\Ary\\project\\JXC-PRIVATE\\trae-contact-mcp\\contact-mcp\\dist\\index.js"],
49
+ "env": {
50
+ "CRM_BASE_URL": "http://你的服务器IP:8080/rest",
51
+ "CRM_USERNAME": "mt011",
52
+ "CRM_PASSWORD": "1"
53
+ }
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ - `args` 填入实际的 `dist/index.js` 所在路径
60
+ - `CRM_BASE_URL` 填入 CRM 后端的实际地址
61
+
62
+ ## 发布到 npm(可选)
63
+
64
+ 发布后团队可用 `npx -y fmes-contact-mcp` 启动,无需 clone 仓库。
65
+
66
+ ```powershell
67
+ # 首次需要登录
68
+ npm login --registry=https://registry.npmjs.org
69
+
70
+ # 发布
71
+ npm publish
72
+ ```
73
+
74
+ > 如果公司有内部 npm 私服,将 `--registry` 替换为内部地址。
75
+
76
+ ## 目录结构
77
+
78
+ ```
79
+ contact-mcp/
80
+ ├── src/
81
+ │ ├── index.ts # 入口,注册 5 个 tool
82
+ │ ├── client/
83
+ │ │ └── crm-client.ts # CRM REST API 客户端
84
+ │ ├── tools/ # 5 个 tool 实现
85
+ │ └── types/ # 类型定义
86
+ ├── dist/ # 编译产物
87
+ ├── .env # 环境变量
88
+ ├── package.json
89
+ └── tsconfig.json
90
+ ```
@@ -0,0 +1,13 @@
1
+ import { SearchPromotersParams, SearchPromotersResult, SearchContractsParams, SearchContractsResult, StatsResult, PromoterInfo } from "../types/index.js";
2
+ declare class CrmClient {
3
+ private client;
4
+ private loggedIn;
5
+ constructor();
6
+ login(): Promise<void>;
7
+ searchPromoters(params: SearchPromotersParams): Promise<SearchPromotersResult>;
8
+ getPromoterDetail(empPk?: string, idcard?: string): Promise<PromoterInfo | null>;
9
+ getContracts(params: SearchContractsParams): Promise<SearchContractsResult>;
10
+ statsPromoters(): Promise<StatsResult>;
11
+ }
12
+ export declare const crmClient: CrmClient;
13
+ export {};
@@ -0,0 +1,126 @@
1
+ import axios from "axios";
2
+ import { wrapper } from "axios-cookiejar-support";
3
+ import { CookieJar } from "tough-cookie";
4
+ const CRM_BASE_URL = process.env.CRM_BASE_URL || "http://localhost:8080/rest";
5
+ const CRM_USERNAME = process.env.CRM_USERNAME || "";
6
+ const CRM_PASSWORD = process.env.CRM_PASSWORD || "";
7
+ class CrmClient {
8
+ client;
9
+ loggedIn = false;
10
+ constructor() {
11
+ const jar = new CookieJar();
12
+ this.client = wrapper(axios.create({
13
+ baseURL: CRM_BASE_URL,
14
+ timeout: 30000,
15
+ headers: { "Content-Type": "application/json" },
16
+ jar,
17
+ withCredentials: true,
18
+ }));
19
+ }
20
+ async login() {
21
+ const res = await this.client.get("/sysUser/sysUserLogin", {
22
+ params: { account: CRM_USERNAME, password: CRM_PASSWORD },
23
+ });
24
+ if (res.status === 200) {
25
+ this.loggedIn = true;
26
+ }
27
+ else {
28
+ throw new Error(`登录失败: ${res.status} ${res.statusText}`);
29
+ }
30
+ }
31
+ async searchPromoters(params) {
32
+ if (!this.loggedIn)
33
+ await this.login();
34
+ const body = {
35
+ limit: params.limit,
36
+ };
37
+ if (params.name)
38
+ body.name = params.name;
39
+ if (params.idcard)
40
+ body.idcard = params.idcard;
41
+ if (params.tel)
42
+ body.tel = params.tel;
43
+ if (params.empPk)
44
+ body.empPk = params.empPk;
45
+ if (params.province)
46
+ body.province = params.province;
47
+ if (params.city)
48
+ body.city = params.city;
49
+ if (params.area)
50
+ body.area = params.area;
51
+ if (params.sex !== undefined)
52
+ body.sex = params.sex;
53
+ if (params.ageMin !== undefined)
54
+ body.ageMin = params.ageMin;
55
+ if (params.ageMax !== undefined)
56
+ body.ageMax = params.ageMax;
57
+ if (params.workMonthMin !== undefined)
58
+ body.workMonthMin = params.workMonthMin;
59
+ if (params.projectNumMin !== undefined)
60
+ body.projectNumMin = params.projectNumMin;
61
+ if (params.status)
62
+ body.status = params.status;
63
+ const res = await this.client.post("/mcp/salesman/search", body);
64
+ const data = res.data;
65
+ const list = data.data || [];
66
+ return {
67
+ total: list.length,
68
+ list,
69
+ query: params,
70
+ };
71
+ }
72
+ async getPromoterDetail(empPk, idcard) {
73
+ if (!this.loggedIn)
74
+ await this.login();
75
+ const body = {};
76
+ if (empPk)
77
+ body.empPk = empPk;
78
+ if (idcard)
79
+ body.idcard = idcard;
80
+ const res = await this.client.post("/mcp/salesman/detail", body);
81
+ const data = res.data;
82
+ return data.data || null;
83
+ }
84
+ async getContracts(params) {
85
+ if (!this.loggedIn)
86
+ await this.login();
87
+ const body = {};
88
+ if (params.idcard)
89
+ body.idcard = params.idcard;
90
+ if (params.empPk)
91
+ body.empPk = params.empPk;
92
+ if (params.contractType)
93
+ body.contractType = params.contractType;
94
+ const res = await this.client.post("/mcp/salesman/contract/search", body);
95
+ const data = res.data;
96
+ const result = data.data || { list: [], total: 0 };
97
+ return {
98
+ total: result.total,
99
+ list: result.list,
100
+ query: params,
101
+ };
102
+ }
103
+ async statsPromoters() {
104
+ if (!this.loggedIn)
105
+ await this.login();
106
+ const res = await this.client.post("/mcp/salesman/search", { limit: 500 });
107
+ const data = res.data;
108
+ const list = data.data || [];
109
+ const groups = [];
110
+ const groupMap = new Map();
111
+ for (const p of list) {
112
+ const key = p.status || "未知";
113
+ groupMap.set(key, (groupMap.get(key) || 0) + 1);
114
+ }
115
+ for (const [key, count] of groupMap) {
116
+ groups.push({
117
+ key,
118
+ count,
119
+ percentage: list.length > 0 ? ((count / list.length) * 100).toFixed(1) + "%" : "0%",
120
+ });
121
+ }
122
+ return { total: list.length, groups, query: { groupBy: "status" } };
123
+ }
124
+ }
125
+ export const crmClient = new CrmClient();
126
+ //# sourceMappingURL=crm-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crm-client.js","sourceRoot":"","sources":["../../src/client/crm-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import "dotenv/config";
package/dist/index.js ADDED
@@ -0,0 +1,42 @@
1
+ import "dotenv/config";
2
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import { searchPromoters, searchPromotersSchema, } from "./tools/search-promoters.js";
5
+ import { getPromoterDetail, getPromoterDetailSchema, } from "./tools/get-promoter-detail.js";
6
+ import { getPromoterContracts, getPromoterContractsSchema, } from "./tools/get-promoter-contracts.js";
7
+ import { searchContracts, searchContractsSchema, } from "./tools/search-contracts.js";
8
+ import { statsPromoters, statsPromotersSchema, } from "./tools/stats-promoters.js";
9
+ const server = new McpServer({
10
+ name: "fmes-contact-mcp",
11
+ version: "0.1.0",
12
+ });
13
+ server.registerTool("search_promoters", {
14
+ description: "按多维度筛选触点(促销员),支持按地区、年龄、服务月数、项目数、星级、状态等条件筛选。",
15
+ inputSchema: searchPromotersSchema,
16
+ }, searchPromoters);
17
+ server.registerTool("get_promoter_detail", {
18
+ description: "获取指定触点的详细信息,包括姓名、身份证号、手机号、银行卡、星级、信用分、项目数、服务月数等。",
19
+ inputSchema: getPromoterDetailSchema,
20
+ }, getPromoterDetail);
21
+ server.registerTool("get_promoter_contracts", {
22
+ description: "查询某个触点的所有合同信息,包括长促合同和灵工合同,返回客户名称、签约平台、合同期限等。",
23
+ inputSchema: getPromoterContractsSchema,
24
+ }, getPromoterContracts);
25
+ server.registerTool("search_contracts", {
26
+ description: "按合同维度搜索,支持按身份证号、客户名称、签约平台、合同类型、时间范围筛选。",
27
+ inputSchema: searchContractsSchema,
28
+ }, searchContracts);
29
+ server.registerTool("stats_promoters", {
30
+ description: "触点统计概览,查看触点的分布情况(按状态、地区等维度)。",
31
+ inputSchema: statsPromotersSchema,
32
+ }, statsPromoters);
33
+ async function main() {
34
+ const transport = new StdioServerTransport();
35
+ await server.connect(transport);
36
+ console.error("fmes-contact-mcp Server 已启动,等待连接...");
37
+ }
38
+ main().catch((err) => {
39
+ console.error("启动失败:", err);
40
+ process.exit(1);
41
+ });
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,eAAe,EACf,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,cAAc,EACd,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;IACE,WAAW,EACT,6CAA6C;IAC/C,WAAW,EAAE,qBAAqB;CACnC,EACD,eAAe,CAChB,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;IACE,WAAW,EACT,iDAAiD;IACnD,WAAW,EAAE,uBAAuB;CACrC,EACD,iBAAiB,CAClB,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;IACE,WAAW,EACT,8CAA8C;IAChD,WAAW,EAAE,0BAA0B;CACxC,EACD,oBAAoB,CACrB,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;IACE,WAAW,EACT,wCAAwC;IAC1C,WAAW,EAAE,qBAAqB;CACnC,EACD,eAAe,CAChB,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE,oBAAoB;CAClC,EACD,cAAc,CACf,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACvD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { z } from "zod";
2
+ import type { McpContractInfo } from "../types/index.js";
3
+ export declare const getPromoterContractsSchema: z.ZodObject<{
4
+ empPk: z.ZodString;
5
+ contractType: z.ZodOptional<z.ZodEnum<["1", "2"]>>;
6
+ }, "strip", z.ZodTypeAny, {
7
+ empPk: string;
8
+ contractType?: "1" | "2" | undefined;
9
+ }, {
10
+ empPk: string;
11
+ contractType?: "1" | "2" | undefined;
12
+ }>;
13
+ export type GetPromoterContractsInput = z.infer<typeof getPromoterContractsSchema>;
14
+ export declare function getPromoterContracts(args: GetPromoterContractsInput, _extra?: unknown): Promise<{
15
+ content: {
16
+ type: "text";
17
+ text: string;
18
+ }[];
19
+ structuredContent?: undefined;
20
+ } | {
21
+ content: {
22
+ type: "text";
23
+ text: string;
24
+ }[];
25
+ structuredContent: {
26
+ promoter: import("../types/index.js").PromoterInfo;
27
+ linggongContracts: McpContractInfo[];
28
+ changcuContracts: McpContractInfo[];
29
+ };
30
+ }>;
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ import { crmClient } from "../client/crm-client.js";
3
+ export const getPromoterContractsSchema = z.object({
4
+ empPk: z.string().describe("触点促销员ID(米咖ID)"),
5
+ contractType: z
6
+ .enum(["1", "2"])
7
+ .optional()
8
+ .describe("合同类型(1=灵工合同, 2=长促合同),不传则查全部"),
9
+ });
10
+ export async function getPromoterContracts(args, _extra) {
11
+ const promoter = await crmClient.getPromoterDetail(args.empPk);
12
+ if (!promoter) {
13
+ return {
14
+ content: [
15
+ {
16
+ type: "text",
17
+ text: `未找到促销员ID为 ${args.empPk} 的触点。`,
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ const result = await crmClient.getContracts({
23
+ empPk: args.empPk,
24
+ contractType: args.contractType,
25
+ limit: 100,
26
+ });
27
+ const linggongList = result.list.filter((c) => c.contractType === "1");
28
+ const changcuList = result.list.filter((c) => c.contractType === "2");
29
+ const formatContract = (c, i) => {
30
+ const typeLabel = c.contractType === "1" ? "灵工" : "长促";
31
+ const sourceLabel = c.source ? `(${c.source})` : "";
32
+ return (`${i + 1}. [${typeLabel}${sourceLabel}] 客户: ${c.customer || "未知"} | ` +
33
+ `签约时间: ${c.signedTime || "未知"} | 有效期: ${c.startTime || "?"} ~ ${c.endTime || "?"} | ` +
34
+ `状态: ${c.contractStatus || "未知"}`);
35
+ };
36
+ const text = `触点:${promoter.name}(${args.empPk})的合同信息\n\n` +
37
+ `=== 灵工合同(${linggongList.length} 份)===\n` +
38
+ (linggongList.length === 0
39
+ ? "无灵工合同记录\n"
40
+ : linggongList.map((c, i) => formatContract(c, i)).join("\n") + "\n") +
41
+ `\n=== 长促合同(${changcuList.length} 份)===\n` +
42
+ (changcuList.length === 0
43
+ ? "无长促合同记录"
44
+ : changcuList.map((c, i) => formatContract(c, i)).join("\n"));
45
+ return {
46
+ content: [{ type: "text", text }],
47
+ structuredContent: {
48
+ promoter,
49
+ linggongContracts: linggongList,
50
+ changcuContracts: changcuList,
51
+ },
52
+ };
53
+ }
54
+ //# sourceMappingURL=get-promoter-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-promoter-contracts.js","sourceRoot":"","sources":["../../src/tools/get-promoter-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ export declare const getPromoterDetailSchema: z.ZodObject<{
3
+ empPk: z.ZodString;
4
+ }, "strip", z.ZodTypeAny, {
5
+ empPk: string;
6
+ }, {
7
+ empPk: string;
8
+ }>;
9
+ export type GetPromoterDetailInput = z.infer<typeof getPromoterDetailSchema>;
10
+ export declare function getPromoterDetail(args: GetPromoterDetailInput, _extra?: unknown): Promise<{
11
+ content: {
12
+ type: "text";
13
+ text: string;
14
+ }[];
15
+ structuredContent?: undefined;
16
+ } | {
17
+ content: {
18
+ type: "text";
19
+ text: string;
20
+ }[];
21
+ structuredContent: import("../types/index.js").PromoterInfo;
22
+ }>;
@@ -0,0 +1,40 @@
1
+ import { z } from "zod";
2
+ import { crmClient } from "../client/crm-client.js";
3
+ export const getPromoterDetailSchema = z.object({
4
+ empPk: z.string().describe("触点促销员ID(米咖ID)"),
5
+ });
6
+ export async function getPromoterDetail(args, _extra) {
7
+ const p = await crmClient.getPromoterDetail(args.empPk);
8
+ if (!p) {
9
+ return {
10
+ content: [
11
+ {
12
+ type: "text",
13
+ text: `未找到促销员ID为 ${args.empPk} 的触点。`,
14
+ },
15
+ ],
16
+ };
17
+ }
18
+ const sexLabel = p.sex === 1 ? "男" : p.sex === 0 ? "女" : "未知";
19
+ const authLabel = p.isAuthentication === 1 ? "已认证" : "未认证";
20
+ const detail = `姓名:${p.name}\n` +
21
+ `米咖ID:${p.empPk}\n` +
22
+ `性别:${sexLabel}\n` +
23
+ `年龄:${p.age}岁\n` +
24
+ `身份证号:${p.idcard}\n` +
25
+ `手机号:${p.tel}\n` +
26
+ `地区:${p.province || ""}${p.city || ""}${p.area || ""}\n` +
27
+ `地址:${p.homeAddress || "未知"}\n` +
28
+ `状态:${p.status || "未知"}\n` +
29
+ `项目数:${p.projectNum || 0}个\n` +
30
+ `服务月数:${p.workMonth || 0}个月\n` +
31
+ `开户行:${p.bank || "未知"}\n` +
32
+ `银行卡号:${p.bankNum || "未知"}\n` +
33
+ `注册时间:${p.registerTime || "未知"}\n` +
34
+ `实名认证:${authLabel}`;
35
+ return {
36
+ content: [{ type: "text", text: detail }],
37
+ structuredContent: p,
38
+ };
39
+ }
40
+ //# sourceMappingURL=get-promoter-detail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-promoter-detail.js","sourceRoot":"","sources":["../../src/tools/get-promoter-detail.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;CAC5C,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAA4B,EAAE,MAAgB;IACpF,MAAM,CAAC,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAExD,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,aAAa,IAAI,CAAC,KAAK,OAAO;iBACrC;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,MAAM,SAAS,GAAG,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IAE3D,MAAM,MAAM,GACV,MAAM,CAAC,CAAC,IAAI,IAAI;QAChB,QAAQ,CAAC,CAAC,KAAK,IAAI;QACnB,MAAM,QAAQ,IAAI;QAClB,MAAM,CAAC,CAAC,GAAG,KAAK;QAChB,QAAQ,CAAC,CAAC,MAAM,IAAI;QACpB,OAAO,CAAC,CAAC,GAAG,IAAI;QAChB,MAAM,CAAC,CAAC,QAAQ,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI;QACxD,MAAM,CAAC,CAAC,WAAW,IAAI,IAAI,IAAI;QAC/B,MAAM,CAAC,CAAC,MAAM,IAAI,IAAI,IAAI;QAC1B,OAAO,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK;QAC7B,QAAQ,CAAC,CAAC,SAAS,IAAI,CAAC,MAAM;QAC9B,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI;QACzB,QAAQ,CAAC,CAAC,OAAO,IAAI,IAAI,IAAI;QAC7B,QAAQ,CAAC,CAAC,YAAY,IAAI,IAAI,IAAI;QAClC,QAAQ,SAAS,EAAE,CAAC;IAEtB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAClD,iBAAiB,EAAE,CAAC;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ export declare const searchContractsSchema: z.ZodObject<{
3
+ idcard: z.ZodOptional<z.ZodString>;
4
+ empPk: z.ZodOptional<z.ZodString>;
5
+ contractType: z.ZodOptional<z.ZodEnum<["1", "2"]>>;
6
+ limit: z.ZodDefault<z.ZodNumber>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ limit: number;
9
+ idcard?: string | undefined;
10
+ empPk?: string | undefined;
11
+ contractType?: "1" | "2" | undefined;
12
+ }, {
13
+ idcard?: string | undefined;
14
+ empPk?: string | undefined;
15
+ contractType?: "1" | "2" | undefined;
16
+ limit?: number | undefined;
17
+ }>;
18
+ export type SearchContractsInput = z.infer<typeof searchContractsSchema>;
19
+ export declare function searchContracts(args: SearchContractsInput, _extra?: unknown): Promise<{
20
+ content: {
21
+ type: "text";
22
+ text: string;
23
+ }[];
24
+ structuredContent?: undefined;
25
+ } | {
26
+ content: {
27
+ type: "text";
28
+ text: string;
29
+ }[];
30
+ structuredContent: import("../types/index.js").SearchContractsResult;
31
+ }>;
@@ -0,0 +1,50 @@
1
+ import { z } from "zod";
2
+ import { crmClient } from "../client/crm-client.js";
3
+ export const searchContractsSchema = z.object({
4
+ idcard: z.string().optional().describe("身份证号"),
5
+ empPk: z.string().optional().describe("促销员ID(米咖ID)"),
6
+ contractType: z
7
+ .enum(["1", "2"])
8
+ .optional()
9
+ .describe("合同类型(1=灵工合同, 2=长促合同),不传则查全部"),
10
+ limit: z.number().int().min(1).max(50).default(10).describe("返回数量上限"),
11
+ });
12
+ export async function searchContracts(args, _extra) {
13
+ if (!args.idcard && !args.empPk) {
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: "请至少提供身份证号或促销员ID中的一个条件。",
19
+ },
20
+ ],
21
+ };
22
+ }
23
+ const result = await crmClient.getContracts({
24
+ idcard: args.idcard,
25
+ empPk: args.empPk,
26
+ contractType: args.contractType,
27
+ limit: args.limit,
28
+ });
29
+ if (result.list.length === 0) {
30
+ return {
31
+ content: [
32
+ { type: "text", text: "未找到符合条件的合同记录。" },
33
+ ],
34
+ };
35
+ }
36
+ const formatContract = (c, i) => {
37
+ const typeLabel = c.contractType === "1" ? "灵工" : "长促";
38
+ const sourceLabel = c.source ? `(${c.source})` : "";
39
+ return (`${i + 1}. [${typeLabel}${sourceLabel}] 客户: ${c.customer || "未知"} | ` +
40
+ `签约时间: ${c.signedTime || "未知"} | 有效期: ${c.startTime || "?"} ~ ${c.endTime || "?"} | ` +
41
+ `状态: ${c.contractStatus || "未知"}`);
42
+ };
43
+ const text = `找到 ${result.total} 条合同记录:\n\n` +
44
+ result.list.map((c, i) => formatContract(c, i)).join("\n");
45
+ return {
46
+ content: [{ type: "text", text }],
47
+ structuredContent: result,
48
+ };
49
+ }
50
+ //# sourceMappingURL=search-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-contracts.js","sourceRoot":"","sources":["../../src/tools/search-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IACpD,YAAY,EAAE,CAAC;SACZ,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SAChB,QAAQ,EAAE;SACV,QAAQ,CAAC,6BAA6B,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;CACtE,CAAC,CAAC;AAIH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAA0B,EAAE,MAAgB;IAChF,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,wBAAwB;iBAC/B;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC;QAC1C,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,eAAe,EAAE;aACjD;SACF,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,CAAC,CAAkB,EAAE,CAAS,EAAE,EAAE;QACvD,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,CACL,GAAG,CAAC,GAAG,CAAC,MAAM,SAAS,GAAG,WAAW,SAAS,CAAC,CAAC,QAAQ,IAAI,IAAI,KAAK;YACrE,SAAS,CAAC,CAAC,UAAU,IAAI,IAAI,WAAW,CAAC,CAAC,SAAS,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,IAAI,GAAG,KAAK;YACrF,OAAO,CAAC,CAAC,cAAc,IAAI,IAAI,EAAE,CAClC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,IAAI,GACR,MAAM,MAAM,CAAC,KAAK,aAAa;QAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;QAC1C,iBAAiB,EAAE,MAAM;KAC1B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { z } from "zod";
2
+ export declare const searchPromotersSchema: z.ZodObject<{
3
+ name: z.ZodOptional<z.ZodString>;
4
+ idcard: z.ZodOptional<z.ZodString>;
5
+ tel: z.ZodOptional<z.ZodString>;
6
+ empPk: z.ZodOptional<z.ZodString>;
7
+ province: z.ZodOptional<z.ZodString>;
8
+ city: z.ZodOptional<z.ZodString>;
9
+ area: z.ZodOptional<z.ZodString>;
10
+ sex: z.ZodOptional<z.ZodNumber>;
11
+ ageMin: z.ZodOptional<z.ZodNumber>;
12
+ ageMax: z.ZodOptional<z.ZodNumber>;
13
+ workMonthMin: z.ZodOptional<z.ZodNumber>;
14
+ projectNumMin: z.ZodOptional<z.ZodNumber>;
15
+ status: z.ZodOptional<z.ZodEnum<["项目中", "在岗", "待岗中"]>>;
16
+ limit: z.ZodDefault<z.ZodNumber>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ limit: number;
19
+ status?: "项目中" | "在岗" | "待岗中" | undefined;
20
+ name?: string | undefined;
21
+ sex?: number | undefined;
22
+ tel?: string | undefined;
23
+ idcard?: string | undefined;
24
+ empPk?: string | undefined;
25
+ province?: string | undefined;
26
+ city?: string | undefined;
27
+ area?: string | undefined;
28
+ ageMin?: number | undefined;
29
+ ageMax?: number | undefined;
30
+ workMonthMin?: number | undefined;
31
+ projectNumMin?: number | undefined;
32
+ }, {
33
+ status?: "项目中" | "在岗" | "待岗中" | undefined;
34
+ name?: string | undefined;
35
+ sex?: number | undefined;
36
+ tel?: string | undefined;
37
+ idcard?: string | undefined;
38
+ empPk?: string | undefined;
39
+ province?: string | undefined;
40
+ city?: string | undefined;
41
+ area?: string | undefined;
42
+ limit?: number | undefined;
43
+ ageMin?: number | undefined;
44
+ ageMax?: number | undefined;
45
+ workMonthMin?: number | undefined;
46
+ projectNumMin?: number | undefined;
47
+ }>;
48
+ export type SearchPromotersInput = z.infer<typeof searchPromotersSchema>;
49
+ export declare function searchPromoters(args: SearchPromotersInput, _extra?: unknown): Promise<{
50
+ content: {
51
+ type: "text";
52
+ text: string;
53
+ }[];
54
+ structuredContent?: undefined;
55
+ } | {
56
+ content: {
57
+ type: "text";
58
+ text: string;
59
+ }[];
60
+ structuredContent: import("../types/index.js").SearchPromotersResult;
61
+ }>;