record_safer_pro_mcp 1.0.0 → 1.0.1
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 +28 -0
- package/dist/cli.d.ts +20 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +81 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -78,6 +78,24 @@ npx -v
|
|
|
78
78
|
|
|
79
79
|
MCP Server 会自动发现后端连接地址,无需手动配置端口。每次启动时会自动获取最新版本,无需手动更新。
|
|
80
80
|
|
|
81
|
+
### 4. 验证安装是否成功
|
|
82
|
+
|
|
83
|
+
如果你想单独验证 npm 包是否安装可用,不要只看 `npx -y record_safer_pro_mcp` 是否“卡住”。
|
|
84
|
+
|
|
85
|
+
这个命令默认会启动 `stdio` MCP Server 并持续等待客户端连接,所以终端看起来像“没有输出”或“挂住”,这是正常行为,不代表安装失败。
|
|
86
|
+
|
|
87
|
+
建议用下面两个命令做一次性验证:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npx -y record_safer_pro_mcp --version
|
|
91
|
+
npx -y record_safer_pro_mcp --doctor
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
预期结果:
|
|
95
|
+
|
|
96
|
+
- `--version` 会输出当前已发布版本
|
|
97
|
+
- `--doctor` 会输出 JSON,自检当前 Node 版本与传输模式
|
|
98
|
+
|
|
81
99
|
---
|
|
82
100
|
|
|
83
101
|
## 功能一览
|
|
@@ -184,6 +202,16 @@ npx record_safer_pro_mcp
|
|
|
184
202
|
**Q: 提示找不到 npx 命令?**
|
|
185
203
|
需要安装 Node.js >= 18。访问 https://nodejs.org 下载安装。
|
|
186
204
|
|
|
205
|
+
**Q: 我在终端里运行 `npx -y record_safer_pro_mcp` 后没有任何输出,是不是安装失败了?**
|
|
206
|
+
不是。默认模式是 `stdio` MCP Server,会一直等待 Claude / Cursor / Kiro 之类的客户端接管。请改用:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
npx -y record_safer_pro_mcp --version
|
|
210
|
+
npx -y record_safer_pro_mcp --doctor
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
如果这两个命令能正常输出,说明 npm 包安装和启动链路是正常的。
|
|
214
|
+
|
|
187
215
|
**Q: 端口不是 8080 怎么办?**
|
|
188
216
|
正常情况下不需要手动处理,应用会自动写入端口文件。如果确实需要手动指定,设置环境变量:
|
|
189
217
|
```json
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface CliContext {
|
|
2
|
+
packageName: string;
|
|
3
|
+
version: string;
|
|
4
|
+
nodeVersion: string;
|
|
5
|
+
transport: string;
|
|
6
|
+
}
|
|
7
|
+
export type CliAction = {
|
|
8
|
+
kind: "start";
|
|
9
|
+
} | {
|
|
10
|
+
kind: "stdout";
|
|
11
|
+
text: string;
|
|
12
|
+
exitCode: number;
|
|
13
|
+
} | {
|
|
14
|
+
kind: "stderr";
|
|
15
|
+
text: string;
|
|
16
|
+
exitCode: number;
|
|
17
|
+
};
|
|
18
|
+
export declare function resolveCliAction(args: string[], context: CliContext): CliAction;
|
|
19
|
+
export declare function handleCliArgs(args: string[], stdout?: Pick<NodeJS.WriteStream, "write">, stderr?: Pick<NodeJS.WriteStream, "write">): Promise<boolean>;
|
|
20
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AA6BvD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,SAAS,CAoC/E;AAkBD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,GAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAkB,EAC1D,MAAM,GAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAkB,GACzD,OAAO,CAAC,OAAO,CAAC,CAelB"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { resolveRuntimeConfig } from "./runtime.js";
|
|
3
|
+
const HELP_TEXT = `Record Safer Pro MCP Server
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
record_safer_pro_mcp Start the stdio MCP server
|
|
7
|
+
record_safer_pro_mcp --version Print the published package version
|
|
8
|
+
record_safer_pro_mcp --doctor Print environment diagnostics and exit
|
|
9
|
+
record_safer_pro_mcp --help Show this help
|
|
10
|
+
|
|
11
|
+
Notes:
|
|
12
|
+
- Running without arguments starts a stdio MCP server and waits for the client.
|
|
13
|
+
- In a normal terminal this often looks like "no output" or "hang", which is expected.
|
|
14
|
+
- Typical client config uses: npx -y record_safer_pro_mcp`;
|
|
15
|
+
function buildDoctorReport(context) {
|
|
16
|
+
return JSON.stringify({
|
|
17
|
+
ok: true,
|
|
18
|
+
packageName: context.packageName,
|
|
19
|
+
version: context.version,
|
|
20
|
+
nodeVersion: context.nodeVersion,
|
|
21
|
+
transport: context.transport,
|
|
22
|
+
}, null, 2);
|
|
23
|
+
}
|
|
24
|
+
export function resolveCliAction(args, context) {
|
|
25
|
+
if (args.length === 0) {
|
|
26
|
+
return { kind: "start" };
|
|
27
|
+
}
|
|
28
|
+
const [firstArg] = args;
|
|
29
|
+
if (firstArg === "--help" || firstArg === "-h") {
|
|
30
|
+
return {
|
|
31
|
+
kind: "stdout",
|
|
32
|
+
text: `${HELP_TEXT}\n`,
|
|
33
|
+
exitCode: 0,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (firstArg === "--version" || firstArg === "-v") {
|
|
37
|
+
return {
|
|
38
|
+
kind: "stdout",
|
|
39
|
+
text: `${context.packageName} ${context.version}\n`,
|
|
40
|
+
exitCode: 0,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
if (firstArg === "--doctor") {
|
|
44
|
+
return {
|
|
45
|
+
kind: "stdout",
|
|
46
|
+
text: `${buildDoctorReport(context)}\n`,
|
|
47
|
+
exitCode: 0,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
kind: "stderr",
|
|
52
|
+
text: `Unknown argument: ${firstArg}\n\n${HELP_TEXT}\n`,
|
|
53
|
+
exitCode: 1,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function loadPackageContext() {
|
|
57
|
+
const packageJsonUrl = new URL("../package.json", import.meta.url);
|
|
58
|
+
const packageJson = JSON.parse(await readFile(packageJsonUrl, "utf8"));
|
|
59
|
+
const runtimeConfig = resolveRuntimeConfig();
|
|
60
|
+
return {
|
|
61
|
+
packageName: packageJson.name ?? "record_safer_pro_mcp",
|
|
62
|
+
version: packageJson.version ?? "0.0.0",
|
|
63
|
+
nodeVersion: process.versions.node,
|
|
64
|
+
transport: runtimeConfig.transport,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export async function handleCliArgs(args, stdout = process.stdout, stderr = process.stderr) {
|
|
68
|
+
const action = resolveCliAction(args, await loadPackageContext());
|
|
69
|
+
if (action.kind === "start") {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
if (action.kind === "stdout") {
|
|
73
|
+
stdout.write(action.text);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
stderr.write(action.text);
|
|
77
|
+
}
|
|
78
|
+
process.exitCode = action.exitCode;
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,YAAY,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,MAAM,YAAY,EAAE,CAAC;AACvB,CAAC"}
|
package/package.json
CHANGED