@yjzf/mcp-server-yjzf 0.1.1 → 0.1.2

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 ADDED
@@ -0,0 +1,15 @@
1
+ # mcp-server-yjzf
2
+
3
+ > 优居找房 mcp server
4
+
5
+ ## publish
6
+ 需要先加入 npm @yjzf 组织,联系 @xiejinfu
7
+
8
+ ```
9
+ npm login
10
+ npm publish
11
+ ```
12
+
13
+ ## 环境变量
14
+ - MCP_YJZF_API_KEY 访问 YJZF 服务器的 TOKEN
15
+ - DATA_DIR 数据文件目录,默认是 Mac/Linux `~/mcp-server-yjzf/data/` 或者 Windows 环境:`用户目录\AppData\mcp-server-yjzf\data\`
package/dist/index.js CHANGED
@@ -1,30 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
- import * as z from "zod/v4";
5
- import * as fs from "node:fs";
6
- import * as path from "node:path";
7
- import * as os from "node:os";
8
- // ---------------------------------------------------------------------------
9
- // Environment helpers
10
- // ---------------------------------------------------------------------------
11
- function getDataDir() {
12
- const envDir = process.env.DATA_DIR;
13
- if (envDir) {
14
- return envDir;
15
- }
16
- if (process.platform === "win32") {
17
- const appData = process.env.APPDATA;
18
- if (appData) {
19
- return path.join(appData, "mcp-server-yjzf", "data");
20
- }
21
- return path.join(os.homedir(), "AppData", "Roaming", "mcp-server-yjzf", "data");
22
- }
23
- return path.join(os.homedir(), "mcp-server-yjzf", "data");
24
- }
25
- function getApiKey() {
26
- return process.env.API_KEY;
27
- }
4
+ import * as helloWorldTool from "./tools/hello_world.js";
5
+ import * as overviewByCTool from "./tools/overview_by_c.js";
28
6
  // ---------------------------------------------------------------------------
29
7
  // MCP Server
30
8
  // ---------------------------------------------------------------------------
@@ -32,50 +10,8 @@ const server = new McpServer({
32
10
  name: "mcp-server-yjzf",
33
11
  version: "0.1.0",
34
12
  });
35
- server.registerTool("hello_world", {
36
- description: "Send an HTTP GET request to https://mcp.yjzf.com/hello_world and write the response to $DATA_DIR/hello_world-response.txt",
37
- inputSchema: z.object({}),
38
- }, async () => {
39
- const apiKey = getApiKey();
40
- // Build request headers
41
- const headers = {
42
- Accept: "application/json",
43
- };
44
- if (apiKey) {
45
- headers["Authorization"] = `Bearer ${apiKey}`;
46
- }
47
- // HTTP GET request
48
- const response = await fetch("https://mcp.yjzf.com/hello_world", {
49
- method: "GET",
50
- headers,
51
- });
52
- if (!response.ok) {
53
- return {
54
- content: [
55
- {
56
- type: "text",
57
- text: `Request failed with status ${response.status}: ${response.statusText}`,
58
- },
59
- ],
60
- isError: true,
61
- };
62
- }
63
- const body = await response.text();
64
- // Ensure data directory exists
65
- const dataDir = getDataDir();
66
- fs.mkdirSync(dataDir, { recursive: true });
67
- // Write response to file
68
- const filePath = path.join(dataDir, "hello_world-response.txt");
69
- fs.writeFileSync(filePath, body, "utf-8");
70
- return {
71
- content: [
72
- {
73
- type: "text",
74
- text: `Response saved to ${filePath}\n\n${body}`,
75
- },
76
- ],
77
- };
78
- });
13
+ server.registerTool(helloWorldTool.name, helloWorldTool.schema, helloWorldTool.handler);
14
+ server.registerTool(overviewByCTool.name, overviewByCTool.schema, overviewByCTool.handler);
79
15
  // ---------------------------------------------------------------------------
80
16
  // Start
81
17
  // ---------------------------------------------------------------------------
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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;AAE5D,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,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,20 @@
1
+ import * as z from "zod/v4";
2
+ export declare const name = "hello_world";
3
+ export declare const schema: {
4
+ description: string;
5
+ inputSchema: z.ZodObject<{}, z.core.$strip>;
6
+ };
7
+ export declare function handler(): Promise<{
8
+ content: {
9
+ type: "text";
10
+ text: string;
11
+ }[];
12
+ isError: boolean;
13
+ } | {
14
+ content: {
15
+ type: "text";
16
+ text: string;
17
+ }[];
18
+ isError?: undefined;
19
+ }>;
20
+ //# sourceMappingURL=hello_world.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hello_world.d.ts","sourceRoot":"","sources":["../../src/tools/hello_world.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAElC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,wBAAsB,OAAO;;;;;;;;;;;;GAiD5B"}
@@ -0,0 +1,53 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as z from "zod/v4";
4
+ import { getDataDir, getApiKey } from "../utils/env.js";
5
+ export const name = "hello_world";
6
+ export const schema = {
7
+ description: "Say hello world to YJZF",
8
+ inputSchema: z.object({}),
9
+ };
10
+ export async function handler() {
11
+ const apiKey = getApiKey();
12
+ // Build request headers
13
+ const headers = {
14
+ Accept: "application/json",
15
+ };
16
+ if (apiKey) {
17
+ headers["Authorization"] = `Bearer ${apiKey}`;
18
+ }
19
+ // HTTP GET request
20
+ const response = await fetch("https://mcp.yjzf.com/hello_world", {
21
+ method: "GET",
22
+ headers,
23
+ });
24
+ if (!response.ok) {
25
+ return {
26
+ content: [
27
+ {
28
+ type: "text",
29
+ text: `Request failed with status ${response.status}: ${response.statusText}`,
30
+ },
31
+ ],
32
+ isError: true,
33
+ };
34
+ }
35
+ const body = await response.text();
36
+ // Ensure data directory exists
37
+ const dataDir = getDataDir();
38
+ fs.mkdirSync(dataDir, { recursive: true });
39
+ // Write response to file with datetime prefix
40
+ const now = new Date();
41
+ const datetimePrefix = now.toISOString().replace(/[:.]/g, "-").slice(0, 19);
42
+ const filePath = path.join(dataDir, `${datetimePrefix}-hello_world-response.txt`);
43
+ fs.writeFileSync(filePath, body, "utf-8");
44
+ return {
45
+ content: [
46
+ {
47
+ type: "text",
48
+ text: `Response saved to ${filePath}\n\n${body}`,
49
+ },
50
+ ],
51
+ };
52
+ }
53
+ //# sourceMappingURL=hello_world.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hello_world.js","sourceRoot":"","sources":["../../src/tools/hello_world.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,WAAW,EAAE,yBAAyB;IACtC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,wBAAwB;IACxB,MAAM,OAAO,GAA2B;QACtC,MAAM,EAAE,kBAAkB;KAC3B,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;IAChD,CAAC;IAED,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kCAAkC,EAAE;QAC/D,MAAM,EAAE,KAAK;QACb,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,8BAA8B,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE;iBAC9E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEnC,+BAA+B;IAC/B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,8CAA8C;IAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,cAAc,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,cAAc,2BAA2B,CAAC,CAAC;IAClF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE1C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,qBAAqB,QAAQ,OAAO,IAAI,EAAE;aACjD;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import * as z from "zod/v4";
2
+ export declare const name = "overview_by_c";
3
+ export declare const schema: {
4
+ description: string;
5
+ inputSchema: z.ZodObject<{}, z.core.$strip>;
6
+ };
7
+ export declare function handler(): Promise<{
8
+ content: {
9
+ type: "text";
10
+ text: string;
11
+ }[];
12
+ isError: boolean;
13
+ } | {
14
+ content: {
15
+ type: "text";
16
+ text: string;
17
+ }[];
18
+ isError?: undefined;
19
+ }>;
20
+ //# sourceMappingURL=overview_by_c.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview_by_c.d.ts","sourceRoot":"","sources":["../../src/tools/overview_by_c.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAqB5B,eAAO,MAAM,IAAI,kBAAkB,CAAC;AAEpC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AAEF,wBAAsB,OAAO;;;;;;;;;;;;GAiJ5B"}
@@ -0,0 +1,139 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as xlsx from "xlsx";
4
+ import * as z from "zod/v4";
5
+ import { getDataDir, getApiKey } from "../utils/env.js";
6
+ export const name = "overview_by_c";
7
+ export const schema = {
8
+ description: "获取直营城市C端行为数据数据指标报表 生成Excel文件",
9
+ inputSchema: z.object({}),
10
+ };
11
+ export async function handler() {
12
+ const apiKey = getApiKey();
13
+ // Build request headers
14
+ const headers = {
15
+ Accept: "application/json",
16
+ "Content-Type": "application/json",
17
+ };
18
+ if (apiKey) {
19
+ headers["Authorization"] = `Bearer ${apiKey}`;
20
+ }
21
+ try {
22
+ // Step 1: Fetch cities data
23
+ const citiesResponse = await fetch("https://mcp.yjzf.com/cities2.json", {
24
+ method: "GET",
25
+ headers,
26
+ });
27
+ if (!citiesResponse.ok) {
28
+ return {
29
+ content: [
30
+ {
31
+ type: "text",
32
+ text: `获取城市列表失败: ${citiesResponse.status} ${citiesResponse.statusText}`,
33
+ },
34
+ ],
35
+ isError: true,
36
+ };
37
+ }
38
+ const citiesData = await citiesResponse.json();
39
+ // Step 2: Fetch overview data for each city
40
+ const overviewResults = [];
41
+ for (const city of citiesData) {
42
+ const overviewResponse = await fetch("https://mcp.yjzf.com/overview_by_c", {
43
+ method: "POST",
44
+ headers,
45
+ body: JSON.stringify({
46
+ branch_id: city.branch_id,
47
+ city_name: city.name,
48
+ city_code: city.city_code,
49
+ }),
50
+ });
51
+ if (!overviewResponse.ok) {
52
+ console.error(`获取 ${city.name} 数据失败: ${overviewResponse.status}`);
53
+ continue;
54
+ }
55
+ const apiResponse = await overviewResponse.json();
56
+ if (!apiResponse.succeed) {
57
+ console.error(`获取 ${city.name} 数据失败: ${apiResponse.msg}`);
58
+ continue;
59
+ }
60
+ overviewResults.push(apiResponse.data);
61
+ }
62
+ if (overviewResults.length === 0) {
63
+ return {
64
+ content: [
65
+ {
66
+ type: "text",
67
+ text: "没有获取到任何城市数据",
68
+ },
69
+ ],
70
+ isError: true,
71
+ };
72
+ }
73
+ // Step 3: Prepare Excel data
74
+ const excelHeaders = [
75
+ "城市",
76
+ "二手房_活跃用户数",
77
+ "二手房_新增平台商机数",
78
+ "二手房_新增经纪人客户数",
79
+ "二手房_新增带看客户数",
80
+ "二手房_新增成交数",
81
+ "租房_活跃用户数",
82
+ "租房_新增平台商机数",
83
+ "租房_新增经纪人客户数",
84
+ "租房_新增带看客户数",
85
+ "租房_新增成交数",
86
+ "新房_活跃用户数",
87
+ "新房_新增平台商机数",
88
+ "新房_新增经纪人客户数",
89
+ "新房_新增带看客户数",
90
+ "新房_新增成交数",
91
+ ];
92
+ const excelData = [excelHeaders];
93
+ for (const result of overviewResults) {
94
+ const row = [result.city_name];
95
+ // values 数组应该有15个元素,依次填入B-P列
96
+ for (const value of result.values) {
97
+ row.push(value);
98
+ }
99
+ excelData.push(row);
100
+ }
101
+ // Step 4: Create Excel workbook
102
+ const worksheet = xlsx.utils.aoa_to_sheet(excelData);
103
+ const workbook = xlsx.utils.book_new();
104
+ xlsx.utils.book_append_sheet(workbook, worksheet, "城市流量数据");
105
+ // Step 5: Generate filename with date
106
+ const now = new Date();
107
+ const year = now.getFullYear();
108
+ const month = String(now.getMonth() + 1).padStart(2, "0");
109
+ const day = String(now.getDate()).padStart(2, "0");
110
+ const fileName = `${year}${month}${day}_21城市流量数据报告_v2.xlsx`;
111
+ // Ensure data directory exists
112
+ const dataDir = getDataDir();
113
+ fs.mkdirSync(dataDir, { recursive: true });
114
+ const filePath = path.join(dataDir, fileName);
115
+ // Write Excel file
116
+ xlsx.writeFile(workbook, filePath);
117
+ return {
118
+ content: [
119
+ {
120
+ type: "text",
121
+ text: `成功生成Excel报告!\n文件路径: ${filePath}\n共处理 ${overviewResults.length} 个城市数据`,
122
+ },
123
+ ],
124
+ };
125
+ }
126
+ catch (error) {
127
+ const errorMessage = error instanceof Error ? error.message : String(error);
128
+ return {
129
+ content: [
130
+ {
131
+ type: "text",
132
+ text: `执行过程中发生错误: ${errorMessage}`,
133
+ },
134
+ ],
135
+ isError: true,
136
+ };
137
+ }
138
+ }
139
+ //# sourceMappingURL=overview_by_c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview_by_c.js","sourceRoot":"","sources":["../../src/tools/overview_by_c.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function getDataDir(): string;
2
+ export declare function getApiKey(): string | undefined;
3
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAanC;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C"}
@@ -0,0 +1,20 @@
1
+ import * as path from "node:path";
2
+ import * as os from "node:os";
3
+ export function getDataDir() {
4
+ const envDir = process.env.DATA_DIR;
5
+ if (envDir) {
6
+ return envDir;
7
+ }
8
+ if (process.platform === "win32") {
9
+ const appData = process.env.APPDATA;
10
+ if (appData) {
11
+ return path.join(appData, "mcp-server-yjzf", "data");
12
+ }
13
+ return path.join(os.homedir(), "AppData", "mcp-server-yjzf", "data");
14
+ }
15
+ return path.join(os.homedir(), "mcp-server-yjzf", "data");
16
+ }
17
+ export function getApiKey() {
18
+ return process.env.MCP_YJZF_API_KEY;
19
+ }
20
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACtC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yjzf/mcp-server-yjzf",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "MCP Server for YJZF",
5
5
  "type": "module",
6
6
  "bin": {
@@ -22,6 +22,7 @@
22
22
  "license": "MIT",
23
23
  "dependencies": {
24
24
  "@modelcontextprotocol/sdk": "^1.29.0",
25
+ "xlsx": "^0.18.5",
25
26
  "zod": "^4.3.6"
26
27
  },
27
28
  "devDependencies": {