mcp-probe-kit 1.3.0 → 1.6.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.
- package/README.md +719 -74
- package/build/index.js +362 -1
- package/build/tools/add_feature.d.ts +33 -0
- package/build/tools/add_feature.js +464 -0
- package/build/tools/css_order.d.ts +13 -0
- package/build/tools/css_order.js +81 -0
- package/build/tools/estimate.d.ts +22 -0
- package/build/tools/estimate.js +225 -0
- package/build/tools/fix_bug.d.ts +24 -0
- package/build/tools/fix_bug.js +298 -0
- package/build/tools/gen_mock.d.ts +22 -0
- package/build/tools/gen_mock.js +250 -0
- package/build/tools/index.d.ts +15 -0
- package/build/tools/index.js +16 -0
- package/build/tools/init_project.js +121 -76
- package/build/tools/init_project_context.d.ts +26 -0
- package/build/tools/init_project_context.js +331 -0
- package/build/tools/security_scan.d.ts +22 -0
- package/build/tools/security_scan.js +282 -0
- package/build/tools/start_api.d.ts +19 -0
- package/build/tools/start_api.js +178 -0
- package/build/tools/start_bugfix.d.ts +19 -0
- package/build/tools/start_bugfix.js +127 -0
- package/build/tools/start_doc.d.ts +19 -0
- package/build/tools/start_doc.js +190 -0
- package/build/tools/start_feature.d.ts +19 -0
- package/build/tools/start_feature.js +122 -0
- package/build/tools/start_onboard.d.ts +19 -0
- package/build/tools/start_onboard.js +146 -0
- package/build/tools/start_refactor.d.ts +19 -0
- package/build/tools/start_refactor.js +175 -0
- package/build/tools/start_release.d.ts +19 -0
- package/build/tools/start_release.js +152 -0
- package/build/tools/start_review.d.ts +19 -0
- package/build/tools/start_review.js +162 -0
- package/docs/BEST_PRACTICES.md +722 -0
- package/docs/HOW_TO_TRIGGER.html +186 -0
- package/docs/HOW_TO_TRIGGER.md +941 -0
- package/docs/specs/add-feature/design.md +608 -0
- package/docs/specs/add-feature/requirements.md +175 -0
- package/docs/specs/add-feature/tasks.md +111 -0
- package/docs/specs/estimate/design.md +209 -0
- package/docs/specs/estimate/requirements.md +140 -0
- package/docs/specs/estimate/tasks.md +66 -0
- package/docs/specs/fix-bug/design.md +259 -0
- package/docs/specs/fix-bug/requirements.md +132 -0
- package/docs/specs/fix-bug/tasks.md +66 -0
- package/docs/specs/gen-mock/design.md +241 -0
- package/docs/specs/gen-mock/requirements.md +137 -0
- package/docs/specs/gen-mock/tasks.md +66 -0
- package/docs/specs/init-project-context/design.md +515 -0
- package/docs/specs/init-project-context/requirements.md +144 -0
- package/docs/specs/init-project-context/tasks.md +93 -0
- package/docs/specs/security-scan/design.md +152 -0
- package/docs/specs/security-scan/requirements.md +150 -0
- package/docs/specs/security-scan/tasks.md +67 -0
- package/docs/specs/start-bugfix/design.md +42 -0
- package/docs/specs/start-bugfix/requirements.md +70 -0
- package/docs/specs/start-bugfix/tasks.md +21 -0
- package/docs/specs/start-feature/design.md +41 -0
- package/docs/specs/start-feature/requirements.md +90 -0
- package/docs/specs/start-feature/tasks.md +21 -0
- package/docs/specs/start-review/requirements.md +0 -0
- package/package.json +66 -65
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* init_project_context 工具
|
|
3
|
+
*
|
|
4
|
+
* 功能:生成项目上下文文档,帮助 AI 理解项目的技术栈、架构和规范
|
|
5
|
+
* 模式:指令生成器模式 - 返回详细的分析指南,由 AI 执行实际操作
|
|
6
|
+
*/
|
|
7
|
+
// 默认文档目录
|
|
8
|
+
const DEFAULT_DOCS_DIR = "docs";
|
|
9
|
+
// 提示词模板
|
|
10
|
+
const PROMPT_TEMPLATE = `# 项目上下文初始化指南
|
|
11
|
+
|
|
12
|
+
## 🎯 任务目标
|
|
13
|
+
|
|
14
|
+
在 \`{docs_dir}/\` 目录下生成 \`project-context.md\` 文件,记录项目的核心信息。
|
|
15
|
+
|
|
16
|
+
**输出文件**: \`{docs_dir}/project-context.md\`
|
|
17
|
+
|
|
18
|
+
**文件用途**: 记录项目的技术栈、架构模式、编码规范等核心信息,供后续功能开发时参考。
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 📋 执行步骤
|
|
23
|
+
|
|
24
|
+
请按照以下步骤分析项目并生成文档:
|
|
25
|
+
|
|
26
|
+
### 步骤 1: 分析技术栈
|
|
27
|
+
|
|
28
|
+
**目标**: 识别项目使用的语言、框架和工具。
|
|
29
|
+
|
|
30
|
+
**操作**:
|
|
31
|
+
1. 读取 \`package.json\` 文件
|
|
32
|
+
2. 从 \`dependencies\` 中识别主要框架:
|
|
33
|
+
- React、Vue、Angular → 前端框架
|
|
34
|
+
- Express、Koa、Fastify、NestJS → 后端框架
|
|
35
|
+
- Next.js、Nuxt.js → 全栈框架
|
|
36
|
+
- @modelcontextprotocol/sdk → MCP 服务器
|
|
37
|
+
3. 从 \`devDependencies\` 中识别开发工具:
|
|
38
|
+
- typescript → TypeScript 项目
|
|
39
|
+
- webpack、vite、rollup、esbuild → 构建工具
|
|
40
|
+
- jest、vitest、mocha → 测试框架
|
|
41
|
+
- eslint、prettier → 代码规范工具
|
|
42
|
+
4. 检查配置文件:
|
|
43
|
+
- \`tsconfig.json\` → TypeScript 配置
|
|
44
|
+
- \`vite.config.js/ts\` → Vite 项目
|
|
45
|
+
- \`webpack.config.js\` → Webpack 项目
|
|
46
|
+
- \`.eslintrc.*\` → ESLint 配置
|
|
47
|
+
- \`.prettierrc.*\` → Prettier 配置
|
|
48
|
+
|
|
49
|
+
**记录**: 语言、框架、构建工具、测试框架、代码规范工具
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
### 步骤 2: 分析项目结构
|
|
54
|
+
|
|
55
|
+
**目标**: 理解项目的目录组织方式。
|
|
56
|
+
|
|
57
|
+
**操作**:
|
|
58
|
+
1. 列出项目根目录下的文件和文件夹
|
|
59
|
+
2. 重点关注以下目录:
|
|
60
|
+
- \`src/\` → 源代码目录
|
|
61
|
+
- \`lib/\` → 库代码目录
|
|
62
|
+
- \`tests/\` 或 \`__tests__/\` → 测试目录
|
|
63
|
+
- \`docs/\` → 文档目录
|
|
64
|
+
- \`build/\` 或 \`dist/\` → 构建输出目录
|
|
65
|
+
3. 识别入口文件:
|
|
66
|
+
- \`src/index.ts\` 或 \`src/index.js\`
|
|
67
|
+
- \`src/main.ts\` 或 \`src/main.js\`
|
|
68
|
+
- \`src/app.ts\` 或 \`src/app.js\`
|
|
69
|
+
4. 生成目录树(深度 2-3 层,忽略 node_modules、.git、dist、build)
|
|
70
|
+
|
|
71
|
+
**记录**: 目录结构、入口文件、主要模块
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
### 步骤 3: 分析编码规范
|
|
76
|
+
|
|
77
|
+
**目标**: 识别项目的代码风格和规范。
|
|
78
|
+
|
|
79
|
+
**操作**:
|
|
80
|
+
1. 检查是否存在以下配置文件:
|
|
81
|
+
- \`.eslintrc.*\` → ESLint 配置
|
|
82
|
+
- \`.prettierrc.*\` → Prettier 配置
|
|
83
|
+
- \`tsconfig.json\` → TypeScript 配置
|
|
84
|
+
2. 从现有代码中识别命名规范:
|
|
85
|
+
- 文件命名: kebab-case / camelCase / PascalCase
|
|
86
|
+
- 变量命名: camelCase
|
|
87
|
+
- 常量命名: UPPER_SNAKE_CASE
|
|
88
|
+
- 类/接口命名: PascalCase
|
|
89
|
+
3. 检查 TypeScript 配置:
|
|
90
|
+
- \`strict\` 是否为 true
|
|
91
|
+
- \`target\` 和 \`module\` 设置
|
|
92
|
+
- 其他重要配置项
|
|
93
|
+
|
|
94
|
+
**记录**: 代码风格工具、命名规范、TypeScript 配置
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 步骤 4: 分析依赖
|
|
99
|
+
|
|
100
|
+
**目标**: 列出项目的主要依赖。
|
|
101
|
+
|
|
102
|
+
**操作**:
|
|
103
|
+
1. 从 \`package.json\` 读取 \`dependencies\`
|
|
104
|
+
2. 从 \`package.json\` 读取 \`devDependencies\`
|
|
105
|
+
3. 识别关键依赖并说明用途
|
|
106
|
+
4. 统计依赖数量
|
|
107
|
+
|
|
108
|
+
**记录**: 主要生产依赖(前 10 个)、主要开发依赖(前 10 个)、依赖总数
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### 步骤 5: 分析开发流程
|
|
113
|
+
|
|
114
|
+
**目标**: 识别项目的开发、构建、测试命令。
|
|
115
|
+
|
|
116
|
+
**操作**:
|
|
117
|
+
1. 从 \`package.json\` 读取 \`scripts\` 字段
|
|
118
|
+
2. 识别常用命令:
|
|
119
|
+
- \`dev\` 或 \`start\` → 开发启动命令
|
|
120
|
+
- \`build\` → 构建命令
|
|
121
|
+
- \`test\` → 测试命令
|
|
122
|
+
- \`lint\` → 代码检查命令
|
|
123
|
+
|
|
124
|
+
**记录**: 开发命令、构建命令、测试命令、其他重要命令
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 📝 文档模板
|
|
129
|
+
|
|
130
|
+
请在 \`{docs_dir}/project-context.md\` 中生成以下内容:
|
|
131
|
+
|
|
132
|
+
\`\`\`markdown
|
|
133
|
+
# 项目上下文
|
|
134
|
+
|
|
135
|
+
> 本文档由 MCP Probe Kit 的 init_project_context 工具生成,记录项目的核心信息。
|
|
136
|
+
> 用于帮助 AI 理解项目,生成更准确的代码和文档。
|
|
137
|
+
|
|
138
|
+
## 项目概览
|
|
139
|
+
|
|
140
|
+
| 属性 | 值 |
|
|
141
|
+
|------|-----|
|
|
142
|
+
| 名称 | [从 package.json 的 name 字段读取] |
|
|
143
|
+
| 版本 | [从 package.json 的 version 字段读取] |
|
|
144
|
+
| 类型 | [分析得出: Web应用 / API服务 / CLI工具 / 库 / MCP服务器] |
|
|
145
|
+
| 描述 | [从 package.json 的 description 字段读取] |
|
|
146
|
+
|
|
147
|
+
## 技术栈
|
|
148
|
+
|
|
149
|
+
| 类别 | 技术 |
|
|
150
|
+
|------|------|
|
|
151
|
+
| 语言 | [JavaScript / TypeScript] |
|
|
152
|
+
| 运行时 | [Node.js / Browser / Deno] |
|
|
153
|
+
| 框架 | [识别的框架,如 React、Express、Next.js] |
|
|
154
|
+
| 构建工具 | [识别的工具,如 TypeScript、Webpack、Vite] |
|
|
155
|
+
| 包管理器 | [npm / yarn / pnpm] |
|
|
156
|
+
| 测试框架 | [识别的测试框架,如 Jest、Vitest,或 "未配置"] |
|
|
157
|
+
|
|
158
|
+
## 项目结构
|
|
159
|
+
|
|
160
|
+
\\\`\\\`\\\`
|
|
161
|
+
[生成目录树,深度 2-3 层]
|
|
162
|
+
[示例:]
|
|
163
|
+
project/
|
|
164
|
+
├── src/
|
|
165
|
+
│ ├── index.ts
|
|
166
|
+
│ └── tools/
|
|
167
|
+
│ ├── index.ts
|
|
168
|
+
│ └── ...
|
|
169
|
+
├── docs/
|
|
170
|
+
├── package.json
|
|
171
|
+
└── tsconfig.json
|
|
172
|
+
\\\`\\\`\\\`
|
|
173
|
+
|
|
174
|
+
### 主要目录说明
|
|
175
|
+
|
|
176
|
+
| 目录 | 用途 |
|
|
177
|
+
|------|------|
|
|
178
|
+
| src/ | [源代码目录,描述主要内容] |
|
|
179
|
+
| docs/ | [文档目录] |
|
|
180
|
+
| tests/ | [测试目录,如果存在] |
|
|
181
|
+
| build/ | [构建输出目录,如果存在] |
|
|
182
|
+
|
|
183
|
+
### 入口文件
|
|
184
|
+
|
|
185
|
+
- 主入口: \`[入口文件路径,如 src/index.ts]\`
|
|
186
|
+
|
|
187
|
+
## 架构模式
|
|
188
|
+
|
|
189
|
+
- **项目类型**: [MCP服务器 / Web应用 / API服务 / 库]
|
|
190
|
+
- **设计模式**: [识别的模式,如 工具模式、MVC、组件化、服务层]
|
|
191
|
+
- **模块划分**: [主要模块说明]
|
|
192
|
+
|
|
193
|
+
## 编码规范
|
|
194
|
+
|
|
195
|
+
### 代码风格
|
|
196
|
+
|
|
197
|
+
| 工具 | 状态 | 配置文件 |
|
|
198
|
+
|------|------|----------|
|
|
199
|
+
| ESLint | [已配置 / 未配置] | [配置文件路径] |
|
|
200
|
+
| Prettier | [已配置 / 未配置] | [配置文件路径] |
|
|
201
|
+
|
|
202
|
+
### 命名规范
|
|
203
|
+
|
|
204
|
+
| 类型 | 规范 | 示例 |
|
|
205
|
+
|------|------|------|
|
|
206
|
+
| 文件命名 | [kebab-case / camelCase / PascalCase] | [示例] |
|
|
207
|
+
| 变量命名 | camelCase | userName |
|
|
208
|
+
| 常量命名 | UPPER_SNAKE_CASE | MAX_COUNT |
|
|
209
|
+
| 函数命名 | camelCase | getUserInfo |
|
|
210
|
+
| 类/接口命名 | PascalCase | UserService |
|
|
211
|
+
|
|
212
|
+
### TypeScript 配置
|
|
213
|
+
|
|
214
|
+
| 配置项 | 值 |
|
|
215
|
+
|--------|-----|
|
|
216
|
+
| strict | [true / false] |
|
|
217
|
+
| target | [ES2020 / ES2022 / ...] |
|
|
218
|
+
| module | [CommonJS / ESNext / Node16 / ...] |
|
|
219
|
+
|
|
220
|
+
## 依赖管理
|
|
221
|
+
|
|
222
|
+
### 主要生产依赖
|
|
223
|
+
|
|
224
|
+
| 依赖 | 版本 | 用途 |
|
|
225
|
+
|------|------|------|
|
|
226
|
+
| [依赖名] | [版本] | [用途说明] |
|
|
227
|
+
|
|
228
|
+
### 主要开发依赖
|
|
229
|
+
|
|
230
|
+
| 依赖 | 版本 | 用途 |
|
|
231
|
+
|------|------|------|
|
|
232
|
+
| [依赖名] | [版本] | [用途说明] |
|
|
233
|
+
|
|
234
|
+
### 依赖统计
|
|
235
|
+
|
|
236
|
+
- 生产依赖: [数量] 个
|
|
237
|
+
- 开发依赖: [数量] 个
|
|
238
|
+
- 总计: [数量] 个
|
|
239
|
+
|
|
240
|
+
## 开发流程
|
|
241
|
+
|
|
242
|
+
### 常用命令
|
|
243
|
+
|
|
244
|
+
| 命令 | 用途 |
|
|
245
|
+
|------|------|
|
|
246
|
+
| \`npm run dev\` | [开发启动,描述具体行为] |
|
|
247
|
+
| \`npm run build\` | [构建,描述输出位置] |
|
|
248
|
+
| \`npm test\` | [测试,或 "未配置"] |
|
|
249
|
+
| \`npm run lint\` | [代码检查,或 "未配置"] |
|
|
250
|
+
|
|
251
|
+
### 开发环境要求
|
|
252
|
+
|
|
253
|
+
- Node.js: [版本要求,从 engines 字段读取或推断]
|
|
254
|
+
- 包管理器: [npm / yarn / pnpm]
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
*生成时间: [当前时间,格式: YYYY-MM-DD HH:mm:ss]*
|
|
259
|
+
*生成工具: MCP Probe Kit - init_project_context*
|
|
260
|
+
\`\`\`
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## ✅ 检查清单
|
|
265
|
+
|
|
266
|
+
生成文档后,请验证以下内容:
|
|
267
|
+
|
|
268
|
+
- [ ] 文件已创建: \`{docs_dir}/project-context.md\`
|
|
269
|
+
- [ ] 项目概览完整(名称、版本、类型、描述都已填写)
|
|
270
|
+
- [ ] 技术栈准确(语言、框架、构建工具正确识别)
|
|
271
|
+
- [ ] 目录结构清晰(树形结构正确,深度适当)
|
|
272
|
+
- [ ] 入口文件正确(主入口文件已识别)
|
|
273
|
+
- [ ] 架构模式已识别(项目类型、设计模式)
|
|
274
|
+
- [ ] 编码规范完整(ESLint、Prettier、命名规范已记录)
|
|
275
|
+
- [ ] TypeScript 配置已记录(如果是 TS 项目)
|
|
276
|
+
- [ ] 依赖列表完整(主要依赖已列出并说明用途)
|
|
277
|
+
- [ ] 开发命令正确(dev、build、test 命令已记录)
|
|
278
|
+
- [ ] 所有占位符已替换(没有 [xxx] 格式的占位符)
|
|
279
|
+
- [ ] Markdown 格式正确(表格、代码块格式正确)
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## 📌 注意事项
|
|
284
|
+
|
|
285
|
+
1. **如果某项信息无法获取**,请填写 "未配置" 或 "无",不要留空
|
|
286
|
+
2. **目录树生成时**,忽略 \`node_modules\`、\`.git\`、\`dist\`、\`build\`、\`coverage\` 等目录
|
|
287
|
+
3. **依赖说明**,只列出主要依赖(前 10 个),其他可省略
|
|
288
|
+
4. **时间格式**,使用 YYYY-MM-DD HH:mm:ss 格式
|
|
289
|
+
5. **如果 docs 目录不存在**,请先创建该目录
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
*指南版本: 1.0.0*
|
|
294
|
+
*工具: MCP Probe Kit - init_project_context*
|
|
295
|
+
`;
|
|
296
|
+
/**
|
|
297
|
+
* init_project_context 工具实现
|
|
298
|
+
*
|
|
299
|
+
* @param args - 工具参数
|
|
300
|
+
* @param args.docs_dir - 文档目录,默认 "docs"
|
|
301
|
+
* @returns MCP 响应,包含项目分析指南
|
|
302
|
+
*/
|
|
303
|
+
export async function initProjectContext(args) {
|
|
304
|
+
try {
|
|
305
|
+
// 解析参数
|
|
306
|
+
const docsDir = args?.docs_dir || DEFAULT_DOCS_DIR;
|
|
307
|
+
// 构建指南文本(替换占位符)
|
|
308
|
+
const guide = PROMPT_TEMPLATE.replace(/{docs_dir}/g, docsDir);
|
|
309
|
+
// 返回结果
|
|
310
|
+
return {
|
|
311
|
+
content: [
|
|
312
|
+
{
|
|
313
|
+
type: "text",
|
|
314
|
+
text: guide,
|
|
315
|
+
},
|
|
316
|
+
],
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
321
|
+
return {
|
|
322
|
+
content: [
|
|
323
|
+
{
|
|
324
|
+
type: "text",
|
|
325
|
+
text: `❌ 初始化项目上下文失败: ${errorMessage}`,
|
|
326
|
+
},
|
|
327
|
+
],
|
|
328
|
+
isError: true,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* security_scan 工具
|
|
3
|
+
*
|
|
4
|
+
* 功能:代码安全扫描,检测常见漏洞和不安全编码实践
|
|
5
|
+
* 模式:指令生成器模式 - 返回安全检查指南,由 AI 执行实际分析
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* security_scan 工具实现
|
|
9
|
+
*/
|
|
10
|
+
export declare function securityScan(args: any): Promise<{
|
|
11
|
+
content: {
|
|
12
|
+
type: string;
|
|
13
|
+
text: string;
|
|
14
|
+
}[];
|
|
15
|
+
isError?: undefined;
|
|
16
|
+
} | {
|
|
17
|
+
content: {
|
|
18
|
+
type: string;
|
|
19
|
+
text: string;
|
|
20
|
+
}[];
|
|
21
|
+
isError: boolean;
|
|
22
|
+
}>;
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* security_scan 工具
|
|
3
|
+
*
|
|
4
|
+
* 功能:代码安全扫描,检测常见漏洞和不安全编码实践
|
|
5
|
+
* 模式:指令生成器模式 - 返回安全检查指南,由 AI 执行实际分析
|
|
6
|
+
*/
|
|
7
|
+
const PROMPT_TEMPLATE = `# 安全扫描指南
|
|
8
|
+
|
|
9
|
+
## 🎯 扫描目标
|
|
10
|
+
|
|
11
|
+
**扫描类型**: {scan_type}
|
|
12
|
+
**编程语言**: {language}
|
|
13
|
+
|
|
14
|
+
**待扫描代码**:
|
|
15
|
+
\`\`\`{language}
|
|
16
|
+
{code}
|
|
17
|
+
\`\`\`
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 📋 安全检查清单
|
|
22
|
+
|
|
23
|
+
### 1. 注入类漏洞 (Injection)
|
|
24
|
+
|
|
25
|
+
#### 1.1 SQL 注入 (CWE-89)
|
|
26
|
+
- [ ] 检查是否使用字符串拼接构建 SQL
|
|
27
|
+
- [ ] 检查是否使用参数化查询/预编译语句
|
|
28
|
+
- [ ] 检查 ORM 是否正确使用
|
|
29
|
+
|
|
30
|
+
**危险模式**:
|
|
31
|
+
\`\`\`
|
|
32
|
+
// ❌ 危险
|
|
33
|
+
query = "SELECT * FROM users WHERE id = " + userId
|
|
34
|
+
db.query(\`SELECT * FROM users WHERE name = '\${name}'\`)
|
|
35
|
+
|
|
36
|
+
// ✅ 安全
|
|
37
|
+
query = "SELECT * FROM users WHERE id = ?"
|
|
38
|
+
db.query("SELECT * FROM users WHERE name = $1", [name])
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
#### 1.2 XSS 跨站脚本 (CWE-79)
|
|
42
|
+
- [ ] 检查用户输入是否直接输出到 HTML
|
|
43
|
+
- [ ] 检查是否使用 innerHTML/dangerouslySetInnerHTML
|
|
44
|
+
- [ ] 检查是否正确转义特殊字符
|
|
45
|
+
|
|
46
|
+
**危险模式**:
|
|
47
|
+
\`\`\`
|
|
48
|
+
// ❌ 危险
|
|
49
|
+
element.innerHTML = userInput
|
|
50
|
+
<div dangerouslySetInnerHTML={{__html: userContent}} />
|
|
51
|
+
|
|
52
|
+
// ✅ 安全
|
|
53
|
+
element.textContent = userInput
|
|
54
|
+
使用 DOMPurify 等库清理 HTML
|
|
55
|
+
\`\`\`
|
|
56
|
+
|
|
57
|
+
#### 1.3 命令注入 (CWE-78)
|
|
58
|
+
- [ ] 检查 exec/spawn/system 是否拼接用户输入
|
|
59
|
+
- [ ] 检查是否使用白名单验证
|
|
60
|
+
|
|
61
|
+
**危险模式**:
|
|
62
|
+
\`\`\`
|
|
63
|
+
// ❌ 危险
|
|
64
|
+
exec("ls " + userPath)
|
|
65
|
+
child_process.exec(\`git clone \${repoUrl}\`)
|
|
66
|
+
|
|
67
|
+
// ✅ 安全
|
|
68
|
+
execFile("ls", [userPath])
|
|
69
|
+
使用白名单验证输入
|
|
70
|
+
\`\`\`
|
|
71
|
+
|
|
72
|
+
#### 1.4 路径遍历 (CWE-22)
|
|
73
|
+
- [ ] 检查文件路径是否包含用户输入
|
|
74
|
+
- [ ] 检查是否验证路径在允许范围内
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### 2. 认证授权问题 (Authentication & Authorization)
|
|
79
|
+
|
|
80
|
+
#### 2.1 硬编码凭证 (CWE-798)
|
|
81
|
+
- [ ] 搜索: password, secret, key, token, api_key
|
|
82
|
+
- [ ] 检查配置文件中的明文密码
|
|
83
|
+
- [ ] 检查注释中的凭证信息
|
|
84
|
+
|
|
85
|
+
**危险模式**:
|
|
86
|
+
\`\`\`
|
|
87
|
+
// ❌ 危险
|
|
88
|
+
const password = "admin123"
|
|
89
|
+
const apiKey = "sk-xxxxxxxxxxxx"
|
|
90
|
+
// TODO: 临时密码 test123
|
|
91
|
+
|
|
92
|
+
// ✅ 安全
|
|
93
|
+
const password = process.env.DB_PASSWORD
|
|
94
|
+
const apiKey = config.get("apiKey")
|
|
95
|
+
\`\`\`
|
|
96
|
+
|
|
97
|
+
#### 2.2 弱认证 (CWE-287)
|
|
98
|
+
- [ ] 检查密码强度验证
|
|
99
|
+
- [ ] 检查是否有暴力破解防护
|
|
100
|
+
- [ ] 检查 Session 管理
|
|
101
|
+
|
|
102
|
+
#### 2.3 权限检查缺失 (CWE-862)
|
|
103
|
+
- [ ] 检查敏感操作是否验证权限
|
|
104
|
+
- [ ] 检查是否存在越权访问风险
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
### 3. 加密安全问题 (Cryptography)
|
|
109
|
+
|
|
110
|
+
#### 3.1 弱哈希算法 (CWE-328)
|
|
111
|
+
- [ ] 检查是否使用 MD5/SHA1 存储密码
|
|
112
|
+
- [ ] 检查是否使用适当的密码哈希(bcrypt, argon2)
|
|
113
|
+
|
|
114
|
+
**危险模式**:
|
|
115
|
+
\`\`\`
|
|
116
|
+
// ❌ 危险
|
|
117
|
+
crypto.createHash('md5').update(password)
|
|
118
|
+
crypto.createHash('sha1').update(password)
|
|
119
|
+
|
|
120
|
+
// ✅ 安全
|
|
121
|
+
bcrypt.hash(password, saltRounds)
|
|
122
|
+
argon2.hash(password)
|
|
123
|
+
\`\`\`
|
|
124
|
+
|
|
125
|
+
#### 3.2 不安全随机数 (CWE-330)
|
|
126
|
+
- [ ] 检查安全相关场景是否使用 Math.random()
|
|
127
|
+
- [ ] 检查是否使用加密安全的随机数生成器
|
|
128
|
+
|
|
129
|
+
**危险模式**:
|
|
130
|
+
\`\`\`
|
|
131
|
+
// ❌ 危险(用于安全场景)
|
|
132
|
+
const token = Math.random().toString(36)
|
|
133
|
+
|
|
134
|
+
// ✅ 安全
|
|
135
|
+
const token = crypto.randomBytes(32).toString('hex')
|
|
136
|
+
\`\`\`
|
|
137
|
+
|
|
138
|
+
#### 3.3 弱加密算法 (CWE-327)
|
|
139
|
+
- [ ] 检查是否使用 DES/3DES/RC4
|
|
140
|
+
- [ ] 检查 AES 是否使用安全模式(GCM)
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### 4. 敏感数据泄露 (Sensitive Data Exposure)
|
|
145
|
+
|
|
146
|
+
#### 4.1 日志泄露 (CWE-532)
|
|
147
|
+
- [ ] 检查日志是否包含密码、token、个人信息
|
|
148
|
+
- [ ] 检查错误日志是否泄露敏感信息
|
|
149
|
+
|
|
150
|
+
**危险模式**:
|
|
151
|
+
\`\`\`
|
|
152
|
+
// ❌ 危险
|
|
153
|
+
console.log("User login:", { username, password })
|
|
154
|
+
logger.info("API call with token:", apiToken)
|
|
155
|
+
|
|
156
|
+
// ✅ 安全
|
|
157
|
+
console.log("User login:", { username, password: "***" })
|
|
158
|
+
logger.info("API call with token:", maskToken(apiToken))
|
|
159
|
+
\`\`\`
|
|
160
|
+
|
|
161
|
+
#### 4.2 错误信息泄露 (CWE-209)
|
|
162
|
+
- [ ] 检查是否向用户返回详细错误信息
|
|
163
|
+
- [ ] 检查是否暴露堆栈跟踪
|
|
164
|
+
|
|
165
|
+
#### 4.3 注释中的敏感信息
|
|
166
|
+
- [ ] 检查注释中是否包含密码、密钥
|
|
167
|
+
- [ ] 检查 TODO/FIXME 中的敏感信息
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### 5. 其他安全问题
|
|
172
|
+
|
|
173
|
+
#### 5.1 不安全的依赖
|
|
174
|
+
- [ ] 检查是否使用已知漏洞的依赖版本
|
|
175
|
+
|
|
176
|
+
#### 5.2 CORS 配置
|
|
177
|
+
- [ ] 检查是否使用 Access-Control-Allow-Origin: *
|
|
178
|
+
|
|
179
|
+
#### 5.3 不安全的反序列化 (CWE-502)
|
|
180
|
+
- [ ] 检查是否反序列化不可信数据
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 📊 报告模板
|
|
185
|
+
|
|
186
|
+
### 漏洞摘要
|
|
187
|
+
|
|
188
|
+
| 严重程度 | 数量 | 说明 |
|
|
189
|
+
|----------|------|------|
|
|
190
|
+
| 🔴 Critical | 0 | 需立即修复 |
|
|
191
|
+
| 🟠 High | 0 | 尽快修复 |
|
|
192
|
+
| 🟡 Medium | 0 | 计划修复 |
|
|
193
|
+
| 🔵 Low | 0 | 建议修复 |
|
|
194
|
+
| ⚪ Info | 0 | 仅供参考 |
|
|
195
|
+
|
|
196
|
+
### 漏洞详情
|
|
197
|
+
|
|
198
|
+
#### [漏洞编号] 漏洞名称
|
|
199
|
+
|
|
200
|
+
| 属性 | 值 |
|
|
201
|
+
|------|-----|
|
|
202
|
+
| 严重程度 | 🔴 Critical / 🟠 High / 🟡 Medium / 🔵 Low |
|
|
203
|
+
| CWE | CWE-XXX |
|
|
204
|
+
| 位置 | 第 X 行 |
|
|
205
|
+
| 置信度 | 高 / 中 / 低 |
|
|
206
|
+
|
|
207
|
+
**问题代码**:
|
|
208
|
+
\`\`\`
|
|
209
|
+
[问题代码片段]
|
|
210
|
+
\`\`\`
|
|
211
|
+
|
|
212
|
+
**问题描述**: [描述安全风险]
|
|
213
|
+
|
|
214
|
+
**修复建议**:
|
|
215
|
+
\`\`\`
|
|
216
|
+
[修复后的代码]
|
|
217
|
+
\`\`\`
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
### 安全最佳实践建议
|
|
222
|
+
|
|
223
|
+
1. **输入验证**: 对所有用户输入进行验证和清理
|
|
224
|
+
2. **输出编码**: 根据上下文正确编码输出
|
|
225
|
+
3. **参数化查询**: 使用参数化查询防止注入
|
|
226
|
+
4. **最小权限**: 遵循最小权限原则
|
|
227
|
+
5. **安全配置**: 使用安全的默认配置
|
|
228
|
+
6. **依赖管理**: 定期更新依赖,修复已知漏洞
|
|
229
|
+
7. **日志安全**: 不记录敏感信息
|
|
230
|
+
8. **错误处理**: 不向用户暴露内部错误详情
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## ✅ 扫描检查清单
|
|
235
|
+
|
|
236
|
+
- [ ] 注入类漏洞已检查
|
|
237
|
+
- [ ] 认证授权问题已检查
|
|
238
|
+
- [ ] 加密安全问题已检查
|
|
239
|
+
- [ ] 敏感数据泄露已检查
|
|
240
|
+
- [ ] 其他安全问题已检查
|
|
241
|
+
- [ ] 漏洞报告已生成
|
|
242
|
+
- [ ] 修复建议已提供
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
*指南版本: 1.0.0*
|
|
247
|
+
*工具: MCP Probe Kit - security_scan*
|
|
248
|
+
`;
|
|
249
|
+
/**
|
|
250
|
+
* security_scan 工具实现
|
|
251
|
+
*/
|
|
252
|
+
export async function securityScan(args) {
|
|
253
|
+
try {
|
|
254
|
+
const code = args?.code;
|
|
255
|
+
if (!code) {
|
|
256
|
+
throw new Error("缺少必填参数: code(需要扫描的代码)");
|
|
257
|
+
}
|
|
258
|
+
const language = args?.language || "auto";
|
|
259
|
+
const scanType = args?.scan_type || "all";
|
|
260
|
+
const scanTypeDesc = {
|
|
261
|
+
all: "全面扫描(注入、认证、加密、敏感数据)",
|
|
262
|
+
injection: "注入类漏洞(SQL注入、XSS、命令注入)",
|
|
263
|
+
auth: "认证授权问题",
|
|
264
|
+
crypto: "加密安全问题",
|
|
265
|
+
sensitive_data: "敏感数据泄露",
|
|
266
|
+
};
|
|
267
|
+
const guide = PROMPT_TEMPLATE
|
|
268
|
+
.replace(/{code}/g, code)
|
|
269
|
+
.replace(/{language}/g, language)
|
|
270
|
+
.replace(/{scan_type}/g, scanTypeDesc[scanType] || scanType);
|
|
271
|
+
return {
|
|
272
|
+
content: [{ type: "text", text: guide }],
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
277
|
+
return {
|
|
278
|
+
content: [{ type: "text", text: `❌ 安全扫描失败: ${errorMsg}` }],
|
|
279
|
+
isError: true,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* start_api 智能编排工具
|
|
3
|
+
*
|
|
4
|
+
* 场景:API 开发
|
|
5
|
+
* 编排:[检查上下文] → genapi → gen_mock → gentest
|
|
6
|
+
*/
|
|
7
|
+
export declare function startApi(args: any): Promise<{
|
|
8
|
+
content: {
|
|
9
|
+
type: string;
|
|
10
|
+
text: string;
|
|
11
|
+
}[];
|
|
12
|
+
isError?: undefined;
|
|
13
|
+
} | {
|
|
14
|
+
content: {
|
|
15
|
+
type: string;
|
|
16
|
+
text: string;
|
|
17
|
+
}[];
|
|
18
|
+
isError: boolean;
|
|
19
|
+
}>;
|