mingpan 0.1.5 → 0.1.7
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.en.md +15 -12
- package/README.ja.md +16 -13
- package/README.md +33 -13
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +10 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +7 -5
- package/dist/server.js.map +1 -1
- package/dist/services/bazi/BaziService.d.ts.map +1 -1
- package/dist/services/bazi/BaziService.js +9 -12
- package/dist/services/bazi/BaziService.js.map +1 -1
- package/dist/services/ziwei/ZiweiService.d.ts.map +1 -1
- package/dist/services/ziwei/ZiweiService.js +2 -4
- package/dist/services/ziwei/ZiweiService.js.map +1 -1
- package/dist/shared/logger.d.ts +0 -25
- package/dist/shared/logger.d.ts.map +1 -1
- package/dist/shared/logger.js +13 -72
- package/dist/shared/logger.js.map +1 -1
- package/dist/tools/baziTools.d.ts +5 -2
- package/dist/tools/baziTools.d.ts.map +1 -1
- package/dist/tools/baziTools.js +7 -2
- package/dist/tools/baziTools.js.map +1 -1
- package/dist/tools/calendarTools.d.ts +1 -1
- package/dist/tools/calendarTools.d.ts.map +1 -1
- package/dist/tools/divinationTools.d.ts +1 -1
- package/dist/tools/divinationTools.d.ts.map +1 -1
- package/dist/tools/divinationTools.js +4 -2
- package/dist/tools/divinationTools.js.map +1 -1
- package/dist/tools/qimenTools.d.ts +1 -1
- package/dist/tools/qimenTools.d.ts.map +1 -1
- package/dist/tools/schemas.d.ts +1 -1
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/ziweiTools.d.ts +1 -1
- package/dist/tools/ziweiTools.d.ts.map +1 -1
- package/dist/tools/ziweiTools.js +3 -1
- package/dist/tools/ziweiTools.js.map +1 -1
- package/dist/worker.d.ts +17 -13
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +183 -32
- package/dist/worker.js.map +1 -1
- package/package.json +14 -6
package/dist/worker.js
CHANGED
|
@@ -1,47 +1,198 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Cloudflare Workers
|
|
3
|
+
* Cloudflare Workers 入口(MCP v2 · 2026-07-28 无状态协议)
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* 说明:
|
|
10
|
-
* - 无状态模式(sessionIdGenerator: undefined):每个请求独立处理,
|
|
11
|
-
* 正适合本项目无会话的纯计算特性,且无需 Durable Objects。
|
|
12
|
-
* - 引擎与 stdio 形态共用 createMingpanServer(),输出逐字节一致。
|
|
13
|
-
* - 代码已去本地时区化(Date.UTC 载体约定),Workers 恒 UTC 运行时下
|
|
14
|
-
* 排盘结果与本地形态一致(三时区 CI 矩阵看守)。
|
|
5
|
+
* 公网边界职责:
|
|
6
|
+
* - 只在 /mcp 暴露 MCP handler;/healthz 提供轻量健康检查
|
|
7
|
+
* - 在 SDK handler 前校验 Host / Origin,限制请求体和调用频率
|
|
8
|
+
* - 每个 MCP 请求创建独立服务实例,并关闭出生资料缓存
|
|
15
9
|
*/
|
|
16
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
exports.handleWorkerRequest = handleWorkerRequest;
|
|
12
|
+
const server_1 = require("@modelcontextprotocol/server");
|
|
13
|
+
const server_2 = require("./server");
|
|
14
|
+
const MCP_PATH = "/mcp";
|
|
15
|
+
const HEALTH_PATH = "/healthz";
|
|
16
|
+
const MAX_BODY_BYTES = 256 * 1024;
|
|
17
|
+
const DEFAULT_ALLOWED_HOSTS = [
|
|
18
|
+
"mingpan.bzwai.com",
|
|
19
|
+
"localhost",
|
|
20
|
+
"127.0.0.1",
|
|
21
|
+
"[::1]",
|
|
22
|
+
];
|
|
23
|
+
const DEFAULT_ALLOWED_ORIGINS = [
|
|
24
|
+
"bzwai.com",
|
|
25
|
+
"www.bzwai.com",
|
|
26
|
+
"mingpan.bzwai.com",
|
|
27
|
+
"localhost",
|
|
28
|
+
"127.0.0.1",
|
|
29
|
+
"[::1]",
|
|
30
|
+
];
|
|
31
|
+
const handler = (0, server_1.createMcpHandler)(() => (0, server_2.createMingpanServer)({ enableCalculationCache: false }), {
|
|
32
|
+
onerror: (error) => {
|
|
33
|
+
// 只记录错误类型,不记录可能包含用户输入的 message/stack。
|
|
34
|
+
console.error(`[MCP] ${error.name || "Error"}`);
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
function parseAllowlist(value) {
|
|
38
|
+
return (value ?? "")
|
|
39
|
+
.split(",")
|
|
40
|
+
.map((item) => item.trim().toLowerCase())
|
|
41
|
+
.filter(Boolean);
|
|
42
|
+
}
|
|
43
|
+
function getAllowedHosts(request, env) {
|
|
44
|
+
const hosts = new Set([
|
|
45
|
+
...DEFAULT_ALLOWED_HOSTS,
|
|
46
|
+
...parseAllowlist(env.ALLOWED_HOSTS),
|
|
47
|
+
]);
|
|
48
|
+
// workers.dev 与版本预览域名均由 Cloudflare 控制;只接受包含本 Worker
|
|
49
|
+
// 名称的主机,供维护者诊断正式部署,不把任意 workers.dev 加入白名单。
|
|
50
|
+
const requestHostname = new URL(request.url).hostname.toLowerCase();
|
|
51
|
+
if (requestHostname.endsWith(".workers.dev") &&
|
|
52
|
+
requestHostname.includes("mingpan-mcp")) {
|
|
53
|
+
hosts.add(requestHostname);
|
|
54
|
+
}
|
|
55
|
+
return [...hosts];
|
|
56
|
+
}
|
|
57
|
+
function getAllowedOrigins(env) {
|
|
58
|
+
return [
|
|
59
|
+
...new Set([
|
|
60
|
+
...DEFAULT_ALLOWED_ORIGINS,
|
|
61
|
+
...parseAllowlist(env.ALLOWED_ORIGINS),
|
|
62
|
+
]),
|
|
63
|
+
];
|
|
64
|
+
}
|
|
65
|
+
function withResponseHeaders(response, request, includeCors = true) {
|
|
66
|
+
const headers = new Headers(response.headers);
|
|
67
|
+
headers.set("cache-control", "no-store");
|
|
68
|
+
headers.set("x-content-type-options", "nosniff");
|
|
69
|
+
headers.set("referrer-policy", "no-referrer");
|
|
70
|
+
const origin = request.headers.get("origin");
|
|
71
|
+
if (origin && includeCors) {
|
|
72
|
+
headers.set("access-control-allow-origin", origin);
|
|
73
|
+
headers.set("access-control-allow-methods", "POST, OPTIONS");
|
|
74
|
+
headers.set("access-control-allow-headers", "Content-Type, Accept, MCP-Protocol-Version, Mcp-Method, Mcp-Name");
|
|
75
|
+
const vary = headers.get("vary");
|
|
76
|
+
if (!vary?.split(",").some((value) => value.trim().toLowerCase() === "origin")) {
|
|
77
|
+
headers.set("vary", vary ? `${vary}, Origin` : "Origin");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return new Response(response.body, {
|
|
81
|
+
status: response.status,
|
|
82
|
+
statusText: response.statusText,
|
|
83
|
+
headers,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
function jsonResponse(body, status = 200) {
|
|
87
|
+
return new Response(JSON.stringify(body), {
|
|
88
|
+
status,
|
|
89
|
+
headers: { "content-type": "application/json; charset=utf-8" },
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
async function isBodyTooLarge(request) {
|
|
93
|
+
if (request.method !== "POST" || request.body === null) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
const declaredLength = Number(request.headers.get("content-length"));
|
|
97
|
+
if (Number.isFinite(declaredLength) && declaredLength > MAX_BODY_BYTES) {
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
// Content-Length 可能缺失或不可信。读取 clone 可在不消耗原请求体的前提下
|
|
101
|
+
// 对分块请求执行真实上限,并在越界时尽早停止。
|
|
102
|
+
const reader = request.clone().body?.getReader();
|
|
103
|
+
if (!reader) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
let bytesRead = 0;
|
|
107
|
+
while (true) {
|
|
108
|
+
const { done, value } = await reader.read();
|
|
109
|
+
if (done) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
bytesRead += value.byteLength;
|
|
113
|
+
if (bytesRead > MAX_BODY_BYTES) {
|
|
114
|
+
await reader.cancel();
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
async function isRateLimited(request, env) {
|
|
120
|
+
const clientIp = request.headers.get("cf-connecting-ip");
|
|
121
|
+
if (!env.RATE_LIMITER || !clientIp) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
const result = await env.RATE_LIMITER.limit({ key: `mcp:${clientIp}` });
|
|
126
|
+
return !result.success;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// 防滥用设施异常时保持计算服务可用;不输出请求或用户标识。
|
|
130
|
+
console.error("[MCP] RateLimitUnavailable");
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async function handleWorkerRequest(request, env = {}) {
|
|
135
|
+
const hostRejected = (0, server_1.hostHeaderValidationResponse)(request, getAllowedHosts(request, env));
|
|
136
|
+
if (hostRejected) {
|
|
137
|
+
return withResponseHeaders(hostRejected, request, false);
|
|
138
|
+
}
|
|
139
|
+
const originRejected = (0, server_1.originValidationResponse)(request, getAllowedOrigins(env));
|
|
140
|
+
if (originRejected) {
|
|
141
|
+
return withResponseHeaders(originRejected, request, false);
|
|
142
|
+
}
|
|
22
143
|
const url = new URL(request.url);
|
|
23
|
-
if (url.pathname
|
|
24
|
-
|
|
144
|
+
if (url.pathname === HEALTH_PATH) {
|
|
145
|
+
if (request.method !== "GET" && request.method !== "HEAD") {
|
|
146
|
+
return withResponseHeaders(jsonResponse({ error: "Method not allowed" }, 405), request);
|
|
147
|
+
}
|
|
148
|
+
const response = jsonResponse({
|
|
149
|
+
status: "ok",
|
|
150
|
+
service: server_2.SERVER_NAME,
|
|
151
|
+
version: server_2.SERVER_VERSION,
|
|
152
|
+
protocol: "2026-07-28",
|
|
153
|
+
});
|
|
154
|
+
return withResponseHeaders(request.method === "HEAD"
|
|
155
|
+
? new Response(null, { status: response.status, headers: response.headers })
|
|
156
|
+
: response, request);
|
|
25
157
|
}
|
|
26
|
-
if (
|
|
27
|
-
|
|
28
|
-
|
|
158
|
+
if (url.pathname === "/") {
|
|
159
|
+
if (request.method !== "GET" && request.method !== "HEAD") {
|
|
160
|
+
return withResponseHeaders(jsonResponse({ error: "Method not allowed" }, 405), request);
|
|
161
|
+
}
|
|
162
|
+
const response = jsonResponse({
|
|
163
|
+
name: server_2.SERVER_NAME,
|
|
164
|
+
version: server_2.SERVER_VERSION,
|
|
165
|
+
mcpEndpoint: `${url.origin}${MCP_PATH}`,
|
|
166
|
+
healthEndpoint: `${url.origin}${HEALTH_PATH}`,
|
|
167
|
+
website: "https://mingpan.bzwai.com",
|
|
168
|
+
source: "https://github.com/ChesterRa/mingpan",
|
|
169
|
+
privacy: "Inputs are processed in memory and are not stored or logged.",
|
|
170
|
+
});
|
|
171
|
+
return withResponseHeaders(request.method === "HEAD"
|
|
172
|
+
? new Response(null, { status: response.status, headers: response.headers })
|
|
173
|
+
: response, request);
|
|
29
174
|
}
|
|
30
|
-
if (
|
|
31
|
-
return
|
|
175
|
+
if (url.pathname !== MCP_PATH) {
|
|
176
|
+
return withResponseHeaders(jsonResponse({ error: "Not found" }, 404), request);
|
|
32
177
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
178
|
+
if (request.method === "OPTIONS") {
|
|
179
|
+
return withResponseHeaders(new Response(null, { status: 204 }), request);
|
|
180
|
+
}
|
|
181
|
+
if (request.method === "POST") {
|
|
182
|
+
if (await isRateLimited(request, env)) {
|
|
183
|
+
const response = jsonResponse({ error: "Rate limit exceeded" }, 429);
|
|
184
|
+
response.headers.set("retry-after", "60");
|
|
185
|
+
return withResponseHeaders(response, request);
|
|
186
|
+
}
|
|
187
|
+
if (await isBodyTooLarge(request)) {
|
|
188
|
+
return withResponseHeaders(jsonResponse({ error: "Request body too large" }, 413), request);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return withResponseHeaders(await handler.fetch(request), request);
|
|
41
192
|
}
|
|
42
193
|
exports.default = {
|
|
43
194
|
fetch(request, env) {
|
|
44
|
-
return
|
|
195
|
+
return handleWorkerRequest(request, env);
|
|
45
196
|
},
|
|
46
197
|
};
|
|
47
198
|
//# sourceMappingURL=worker.js.map
|
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mingpan",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "MCP service for Chinese metaphysics chart calculations: BaZi, ZiWei Dou Shu, LiuYao, MeiHua YiShu, DaLiuRen, and QiMen DunJia",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -14,18 +14,24 @@
|
|
|
14
14
|
"type": "git",
|
|
15
15
|
"url": "https://github.com/ChesterRa/mingpan.git"
|
|
16
16
|
},
|
|
17
|
-
"homepage": "https://
|
|
17
|
+
"homepage": "https://mingpan.bzwai.com",
|
|
18
18
|
"bugs": {
|
|
19
19
|
"url": "https://github.com/ChesterRa/mingpan/issues"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "tsc",
|
|
22
|
+
"build": "npm run build:site && tsc",
|
|
23
|
+
"build:site": "node scripts/build-site.mjs",
|
|
23
24
|
"dev": "tsc --watch",
|
|
24
25
|
"start": "node dist/index.js",
|
|
25
26
|
"test": "vitest run",
|
|
26
27
|
"test:watch": "vitest",
|
|
27
28
|
"prepare": "npm run build",
|
|
28
|
-
"
|
|
29
|
+
"check": "npm run build && npm test && npm run smoke:stdio",
|
|
30
|
+
"deploy:worker:dry-run": "wrangler deploy --dry-run",
|
|
31
|
+
"deploy:worker": "npm run check && npm run deploy:worker:dry-run && wrangler deploy",
|
|
32
|
+
"smoke:stdio": "node scripts/smoke-stdio.mjs",
|
|
33
|
+
"smoke:remote": "node scripts/smoke-remote.mjs",
|
|
34
|
+
"verify:release-version": "node scripts/verify-release-version.mjs"
|
|
29
35
|
},
|
|
30
36
|
"keywords": [
|
|
31
37
|
"mcp",
|
|
@@ -48,15 +54,17 @@
|
|
|
48
54
|
"author": "ChesterRa",
|
|
49
55
|
"license": "Apache-2.0",
|
|
50
56
|
"dependencies": {
|
|
51
|
-
"@modelcontextprotocol/
|
|
57
|
+
"@modelcontextprotocol/server": "^2.0.0",
|
|
52
58
|
"iztro": "^2.6.0",
|
|
53
59
|
"lunar-javascript": "^1.7.7",
|
|
54
60
|
"zod": "^4.4.3"
|
|
55
61
|
},
|
|
56
62
|
"devDependencies": {
|
|
63
|
+
"@modelcontextprotocol/client": "^2.0.0",
|
|
57
64
|
"@types/node": "^20.11.17",
|
|
58
65
|
"typescript": "^5.3.3",
|
|
59
|
-
"vitest": "
|
|
66
|
+
"vitest": "4.1.11",
|
|
67
|
+
"wrangler": "4.127.1"
|
|
60
68
|
},
|
|
61
69
|
"engines": {
|
|
62
70
|
"node": ">=20.0.0"
|