@panguard-ai/panguard-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.
- package/LICENSE +21 -0
- package/dist/cli/index.d.ts +13 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +67 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +356 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +323 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/guard-tools.d.ts +57 -0
- package/dist/tools/guard-tools.d.ts.map +1 -0
- package/dist/tools/guard-tools.js +210 -0
- package/dist/tools/guard-tools.js.map +1 -0
- package/dist/tools/manage-tools.d.ts +65 -0
- package/dist/tools/manage-tools.d.ts.map +1 -0
- package/dist/tools/manage-tools.js +271 -0
- package/dist/tools/manage-tools.js.map +1 -0
- package/dist/tools/scan-tools.d.ts +46 -0
- package/dist/tools/scan-tools.d.ts.map +1 -0
- package/dist/tools/scan-tools.js +157 -0
- package/dist/tools/scan-tools.js.map +1 -0
- package/package.json +37 -0
package/dist/server.js
ADDED
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panguard MCP - Server
|
|
3
|
+
* Panguard MCP - 伺服器
|
|
4
|
+
*
|
|
5
|
+
* Main MCP server entry: registers all tools and dispatches incoming requests.
|
|
6
|
+
* 主要 MCP 伺服器入口:註冊所有工具並分派傳入請求。
|
|
7
|
+
*
|
|
8
|
+
* @module @panguard-ai/panguard-mcp/server
|
|
9
|
+
*/
|
|
10
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
11
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
12
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
13
|
+
import { createLogger } from '@panguard-ai/core';
|
|
14
|
+
import { executeScan, executeScanCode } from './tools/scan-tools.js';
|
|
15
|
+
import { executeGuardStart, executeGuardStop, executeStatus, executeAlerts } from './tools/guard-tools.js';
|
|
16
|
+
import { executeBlockIP, executeGenerateReport, executeInit, executeDeploy, } from './tools/manage-tools.js';
|
|
17
|
+
const logger = createLogger('panguard-mcp:server');
|
|
18
|
+
import { createRequire } from 'node:module';
|
|
19
|
+
const _require = createRequire(import.meta.url);
|
|
20
|
+
const _pkg = _require('../package.json');
|
|
21
|
+
/** MCP server version / MCP 伺服器版本 */
|
|
22
|
+
export const PANGUARD_MCP_VERSION = _pkg.version;
|
|
23
|
+
/**
|
|
24
|
+
* All MCP tool definitions.
|
|
25
|
+
* 所有 MCP 工具定義。
|
|
26
|
+
*
|
|
27
|
+
* Each tool has a name, description (bilingual EN/ZH-TW), and inputSchema.
|
|
28
|
+
* 每個工具都有名稱、雙語描述(EN/ZH-TW)和輸入結構。
|
|
29
|
+
*/
|
|
30
|
+
const TOOL_DEFINITIONS = [
|
|
31
|
+
{
|
|
32
|
+
name: 'panguard_scan',
|
|
33
|
+
description: 'Run a security health check scan on the local system. Returns risk score (0-100), grade (A-F), and list of security findings. / 在本機執行資安健檢掃描,回傳風險分數、等級和安全發現清單。',
|
|
34
|
+
inputSchema: {
|
|
35
|
+
type: 'object',
|
|
36
|
+
properties: {
|
|
37
|
+
depth: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
enum: ['quick', 'full'],
|
|
40
|
+
description: 'Scan depth: quick (~30s) or full (~60s)',
|
|
41
|
+
default: 'quick',
|
|
42
|
+
},
|
|
43
|
+
lang: {
|
|
44
|
+
type: 'string',
|
|
45
|
+
enum: ['en', 'zh-TW'],
|
|
46
|
+
description: 'Output language',
|
|
47
|
+
default: 'en',
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'panguard_scan_code',
|
|
54
|
+
description: 'Scan source code directory for security vulnerabilities (SAST). Detects SQL injection, XSS, hardcoded secrets, command injection, and more. / 掃描原始碼目錄的安全漏洞(SAST)。偵測 SQL 注入、XSS、硬編碼密鑰等。',
|
|
55
|
+
inputSchema: {
|
|
56
|
+
type: 'object',
|
|
57
|
+
properties: {
|
|
58
|
+
dir: {
|
|
59
|
+
type: 'string',
|
|
60
|
+
description: 'Source code directory to scan',
|
|
61
|
+
default: '.',
|
|
62
|
+
},
|
|
63
|
+
lang: {
|
|
64
|
+
type: 'string',
|
|
65
|
+
enum: ['en', 'zh-TW'],
|
|
66
|
+
default: 'en',
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
required: ['dir'],
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'panguard_guard_start',
|
|
74
|
+
description: 'Start the Panguard Guard real-time threat monitoring daemon. / 啟動 Panguard Guard 即時威脅監控常駐程式。',
|
|
75
|
+
inputSchema: {
|
|
76
|
+
type: 'object',
|
|
77
|
+
properties: {
|
|
78
|
+
dataDir: {
|
|
79
|
+
type: 'string',
|
|
80
|
+
description: 'Data directory (default: ~/.panguard-guard)',
|
|
81
|
+
},
|
|
82
|
+
mode: {
|
|
83
|
+
type: 'string',
|
|
84
|
+
enum: ['learning', 'protection'],
|
|
85
|
+
description: 'Operating mode',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'panguard_guard_stop',
|
|
92
|
+
description: 'Stop the Panguard Guard daemon. / 停止 Panguard Guard 常駐程式。',
|
|
93
|
+
inputSchema: {
|
|
94
|
+
type: 'object',
|
|
95
|
+
properties: {
|
|
96
|
+
dataDir: {
|
|
97
|
+
type: 'string',
|
|
98
|
+
description: 'Data directory (default: ~/.panguard-guard)',
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: 'panguard_status',
|
|
105
|
+
description: 'Get the current status of all Panguard services (guard, scan, manager). Returns running state, threat counts, and system info. / 取得所有 Panguard 服務的當前狀態。',
|
|
106
|
+
inputSchema: {
|
|
107
|
+
type: 'object',
|
|
108
|
+
properties: {
|
|
109
|
+
dataDir: {
|
|
110
|
+
type: 'string',
|
|
111
|
+
description: 'Data directory (default: ~/.panguard-guard)',
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'panguard_alerts',
|
|
118
|
+
description: 'Get recent security alerts detected by Panguard Guard. Returns the latest threat events with severity and details. / 取得 Panguard Guard 偵測到的近期安全告警。',
|
|
119
|
+
inputSchema: {
|
|
120
|
+
type: 'object',
|
|
121
|
+
properties: {
|
|
122
|
+
limit: {
|
|
123
|
+
type: 'number',
|
|
124
|
+
description: 'Maximum number of alerts to return',
|
|
125
|
+
default: 20,
|
|
126
|
+
},
|
|
127
|
+
severity: {
|
|
128
|
+
type: 'string',
|
|
129
|
+
enum: ['critical', 'high', 'medium', 'low', 'all'],
|
|
130
|
+
default: 'all',
|
|
131
|
+
},
|
|
132
|
+
dataDir: {
|
|
133
|
+
type: 'string',
|
|
134
|
+
description: 'Data directory (default: ~/.panguard-guard)',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: 'panguard_block_ip',
|
|
141
|
+
description: 'Manually block an IP address from accessing the system. / 手動封鎖 IP 位址存取系統。',
|
|
142
|
+
inputSchema: {
|
|
143
|
+
type: 'object',
|
|
144
|
+
properties: {
|
|
145
|
+
ip: {
|
|
146
|
+
type: 'string',
|
|
147
|
+
description: 'IP address to block (IPv4 or IPv6)',
|
|
148
|
+
},
|
|
149
|
+
duration: {
|
|
150
|
+
type: 'string',
|
|
151
|
+
description: 'Block duration (e.g., "1h", "24h", "permanent")',
|
|
152
|
+
default: '1h',
|
|
153
|
+
},
|
|
154
|
+
reason: {
|
|
155
|
+
type: 'string',
|
|
156
|
+
description: 'Reason for blocking',
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
required: ['ip'],
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: 'panguard_generate_report',
|
|
164
|
+
description: 'Generate a PDF compliance report from scan results. Returns the path to the generated PDF. / 從掃描結果生成 PDF 合規報告。',
|
|
165
|
+
inputSchema: {
|
|
166
|
+
type: 'object',
|
|
167
|
+
properties: {
|
|
168
|
+
output: {
|
|
169
|
+
type: 'string',
|
|
170
|
+
description: 'Output PDF path',
|
|
171
|
+
default: './panguard-report.pdf',
|
|
172
|
+
},
|
|
173
|
+
lang: {
|
|
174
|
+
type: 'string',
|
|
175
|
+
enum: ['en', 'zh-TW'],
|
|
176
|
+
default: 'en',
|
|
177
|
+
},
|
|
178
|
+
depth: {
|
|
179
|
+
type: 'string',
|
|
180
|
+
enum: ['quick', 'full'],
|
|
181
|
+
default: 'full',
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: 'panguard_init',
|
|
188
|
+
description: 'Initialize Panguard configuration interactively (non-interactive mode with defaults). / 以非互動模式初始化 Panguard 配置。',
|
|
189
|
+
inputSchema: {
|
|
190
|
+
type: 'object',
|
|
191
|
+
properties: {
|
|
192
|
+
dataDir: {
|
|
193
|
+
type: 'string',
|
|
194
|
+
description: 'Data directory (default: ~/.panguard-guard)',
|
|
195
|
+
},
|
|
196
|
+
lang: {
|
|
197
|
+
type: 'string',
|
|
198
|
+
enum: ['en', 'zh-TW'],
|
|
199
|
+
default: 'en',
|
|
200
|
+
},
|
|
201
|
+
mode: {
|
|
202
|
+
type: 'string',
|
|
203
|
+
enum: ['learning', 'protection'],
|
|
204
|
+
default: 'learning',
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
name: 'panguard_audit_skill',
|
|
211
|
+
description: 'Audit an OpenClaw/AgentSkills SKILL.md directory for security issues. Checks manifest validity, prompt injection, tool poisoning, code vulnerabilities, dependencies, and permissions. Returns risk score (0-100) and detailed findings. / 審計 OpenClaw 技能目錄的安全問題。檢查清單有效性、提示注入、工具投毒、程式碼漏洞、依賴和權限。',
|
|
212
|
+
inputSchema: {
|
|
213
|
+
type: 'object',
|
|
214
|
+
properties: {
|
|
215
|
+
path: {
|
|
216
|
+
type: 'string',
|
|
217
|
+
description: 'Path to skill directory containing SKILL.md',
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
required: ['path'],
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: 'panguard_deploy',
|
|
225
|
+
description: 'Deploy Panguard services: scan for vulnerabilities, start guard monitoring, and generate initial report. This is the one-click setup for protection. / 部署 Panguard 服務:掃描漏洞、啟動監控並生成初始報告。一鍵設定防護。',
|
|
226
|
+
inputSchema: {
|
|
227
|
+
type: 'object',
|
|
228
|
+
properties: {
|
|
229
|
+
dataDir: {
|
|
230
|
+
type: 'string',
|
|
231
|
+
description: 'Data directory (default: ~/.panguard-guard)',
|
|
232
|
+
},
|
|
233
|
+
lang: {
|
|
234
|
+
type: 'string',
|
|
235
|
+
enum: ['en', 'zh-TW'],
|
|
236
|
+
default: 'en',
|
|
237
|
+
},
|
|
238
|
+
mode: {
|
|
239
|
+
type: 'string',
|
|
240
|
+
enum: ['learning', 'protection'],
|
|
241
|
+
default: 'learning',
|
|
242
|
+
},
|
|
243
|
+
generateReport: {
|
|
244
|
+
type: 'boolean',
|
|
245
|
+
description: 'Generate PDF report after scan',
|
|
246
|
+
default: true,
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
];
|
|
252
|
+
/**
|
|
253
|
+
* Returns the complete list of all MCP tool definitions.
|
|
254
|
+
* 返回所有 MCP 工具定義的完整清單。
|
|
255
|
+
*/
|
|
256
|
+
export function getAllToolDefinitions() {
|
|
257
|
+
return TOOL_DEFINITIONS;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Dispatch an incoming tool call to the appropriate handler.
|
|
261
|
+
* 將傳入的工具呼叫分派給適當的處理程序。
|
|
262
|
+
*
|
|
263
|
+
* @param name - Tool name / 工具名稱
|
|
264
|
+
* @param args - Tool arguments / 工具參數
|
|
265
|
+
*/
|
|
266
|
+
export async function dispatchTool(name, args) {
|
|
267
|
+
switch (name) {
|
|
268
|
+
case 'panguard_scan':
|
|
269
|
+
return executeScan(args);
|
|
270
|
+
case 'panguard_scan_code':
|
|
271
|
+
return executeScanCode(args);
|
|
272
|
+
case 'panguard_guard_start':
|
|
273
|
+
return executeGuardStart(args);
|
|
274
|
+
case 'panguard_guard_stop':
|
|
275
|
+
return executeGuardStop(args);
|
|
276
|
+
case 'panguard_status':
|
|
277
|
+
return executeStatus(args);
|
|
278
|
+
case 'panguard_alerts':
|
|
279
|
+
return executeAlerts(args);
|
|
280
|
+
case 'panguard_block_ip':
|
|
281
|
+
return executeBlockIP(args);
|
|
282
|
+
case 'panguard_generate_report':
|
|
283
|
+
return executeGenerateReport(args);
|
|
284
|
+
case 'panguard_init':
|
|
285
|
+
return executeInit(args);
|
|
286
|
+
case 'panguard_deploy':
|
|
287
|
+
return executeDeploy(args);
|
|
288
|
+
case 'panguard_audit_skill': {
|
|
289
|
+
const { auditSkill } = await import('@panguard-ai/panguard-skill-auditor');
|
|
290
|
+
const skillPath = args['path'] ?? '.';
|
|
291
|
+
const report = await auditSkill(skillPath);
|
|
292
|
+
return {
|
|
293
|
+
content: [{ type: 'text', text: JSON.stringify(report, null, 2) }],
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
default:
|
|
297
|
+
return {
|
|
298
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
299
|
+
isError: true,
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Create and start the MCP server using stdio transport.
|
|
305
|
+
* 使用 stdio 傳輸建立並啟動 MCP 伺服器。
|
|
306
|
+
*
|
|
307
|
+
* This is the main entry point for the MCP server process.
|
|
308
|
+
* 這是 MCP 伺服器進程的主要入口點。
|
|
309
|
+
*/
|
|
310
|
+
export async function startMCPServer() {
|
|
311
|
+
const server = new Server({ name: 'panguard-mcp', version: PANGUARD_MCP_VERSION }, { capabilities: { tools: {} } });
|
|
312
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
313
|
+
tools: getAllToolDefinitions(),
|
|
314
|
+
}));
|
|
315
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
316
|
+
const { name, arguments: args } = request.params;
|
|
317
|
+
return await dispatchTool(name, args ?? {});
|
|
318
|
+
});
|
|
319
|
+
const transport = new StdioServerTransport();
|
|
320
|
+
await server.connect(transport);
|
|
321
|
+
logger.info('Panguard MCP server started / Panguard MCP 伺服器已啟動');
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panguard MCP - Guard Tools
|
|
3
|
+
* Panguard MCP - 守護工具
|
|
4
|
+
*
|
|
5
|
+
* Implements panguard_guard_start, panguard_guard_stop, panguard_status,
|
|
6
|
+
* and panguard_alerts MCP tools.
|
|
7
|
+
* 實作 panguard_guard_start、panguard_guard_stop、panguard_status 和 panguard_alerts MCP 工具。
|
|
8
|
+
*
|
|
9
|
+
* @module @panguard-ai/panguard-mcp/tools/guard-tools
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Execute panguard_guard_start — start the real-time threat monitoring daemon.
|
|
13
|
+
* 執行 panguard_guard_start — 啟動即時威脅監控常駐程式。
|
|
14
|
+
*
|
|
15
|
+
* NOTE: The MCP server does not directly spawn daemon processes to avoid
|
|
16
|
+
* interfering with the stdio transport. Instead it validates the data directory
|
|
17
|
+
* and returns instructions for the user/agent to run panguard-guard CLI.
|
|
18
|
+
* 注意:MCP 伺服器不直接生成常駐進程以避免干擾 stdio 傳輸。
|
|
19
|
+
* 改為驗證資料目錄並返回讓用戶/代理執行 panguard-guard CLI 的指示。
|
|
20
|
+
*/
|
|
21
|
+
export declare function executeGuardStart(args: Record<string, unknown>): Promise<{
|
|
22
|
+
content: {
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}[];
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Execute panguard_guard_stop — stop the real-time threat monitoring daemon.
|
|
29
|
+
* 執行 panguard_guard_stop — 停止即時威脅監控常駐程式。
|
|
30
|
+
*/
|
|
31
|
+
export declare function executeGuardStop(args: Record<string, unknown>): Promise<{
|
|
32
|
+
content: {
|
|
33
|
+
type: "text";
|
|
34
|
+
text: string;
|
|
35
|
+
}[];
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Execute panguard_status — get current status of all Panguard services.
|
|
39
|
+
* 執行 panguard_status — 取得所有 Panguard 服務的當前狀態。
|
|
40
|
+
*/
|
|
41
|
+
export declare function executeStatus(args: Record<string, unknown>): Promise<{
|
|
42
|
+
content: {
|
|
43
|
+
type: "text";
|
|
44
|
+
text: string;
|
|
45
|
+
}[];
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* Execute panguard_alerts — get recent security alerts from guard event log.
|
|
49
|
+
* 執行 panguard_alerts — 從守護事件日誌取得近期安全告警。
|
|
50
|
+
*/
|
|
51
|
+
export declare function executeAlerts(args: Record<string, unknown>): Promise<{
|
|
52
|
+
content: {
|
|
53
|
+
type: "text";
|
|
54
|
+
text: string;
|
|
55
|
+
}[];
|
|
56
|
+
}>;
|
|
57
|
+
//# sourceMappingURL=guard-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard-tools.d.ts","sourceRoot":"","sources":["../../src/tools/guard-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAcH;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;GA8BpE;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;GA6CnE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;GAiEhE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;GAiDhE"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panguard MCP - Guard Tools
|
|
3
|
+
* Panguard MCP - 守護工具
|
|
4
|
+
*
|
|
5
|
+
* Implements panguard_guard_start, panguard_guard_stop, panguard_status,
|
|
6
|
+
* and panguard_alerts MCP tools.
|
|
7
|
+
* 實作 panguard_guard_start、panguard_guard_stop、panguard_status 和 panguard_alerts MCP 工具。
|
|
8
|
+
*
|
|
9
|
+
* @module @panguard-ai/panguard-mcp/tools/guard-tools
|
|
10
|
+
*/
|
|
11
|
+
import { promises as fs } from 'node:fs';
|
|
12
|
+
import os from 'node:os';
|
|
13
|
+
import path from 'node:path';
|
|
14
|
+
/**
|
|
15
|
+
* Resolve the guard data directory from args or default.
|
|
16
|
+
* 從參數或預設值解析守護資料目錄。
|
|
17
|
+
*/
|
|
18
|
+
function resolveDataDir(args) {
|
|
19
|
+
return args['dataDir'] ?? path.join(os.homedir(), '.panguard-guard');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute panguard_guard_start — start the real-time threat monitoring daemon.
|
|
23
|
+
* 執行 panguard_guard_start — 啟動即時威脅監控常駐程式。
|
|
24
|
+
*
|
|
25
|
+
* NOTE: The MCP server does not directly spawn daemon processes to avoid
|
|
26
|
+
* interfering with the stdio transport. Instead it validates the data directory
|
|
27
|
+
* and returns instructions for the user/agent to run panguard-guard CLI.
|
|
28
|
+
* 注意:MCP 伺服器不直接生成常駐進程以避免干擾 stdio 傳輸。
|
|
29
|
+
* 改為驗證資料目錄並返回讓用戶/代理執行 panguard-guard CLI 的指示。
|
|
30
|
+
*/
|
|
31
|
+
export async function executeGuardStart(args) {
|
|
32
|
+
const dataDir = resolveDataDir(args);
|
|
33
|
+
const mode = args['mode'] ?? 'learning';
|
|
34
|
+
try {
|
|
35
|
+
await fs.mkdir(dataDir, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
// Directory may already exist
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
content: [
|
|
42
|
+
{
|
|
43
|
+
type: 'text',
|
|
44
|
+
text: JSON.stringify({
|
|
45
|
+
status: 'ready',
|
|
46
|
+
dataDir,
|
|
47
|
+
mode,
|
|
48
|
+
message: 'Guard engine is ready to start. Run the following command in a terminal to start real-time monitoring:',
|
|
49
|
+
command: `panguard-guard start --mode ${mode} --data-dir "${dataDir}"`,
|
|
50
|
+
note: 'Use panguard_status to check current guard state after starting.',
|
|
51
|
+
}, null, 2),
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Execute panguard_guard_stop — stop the real-time threat monitoring daemon.
|
|
58
|
+
* 執行 panguard_guard_stop — 停止即時威脅監控常駐程式。
|
|
59
|
+
*/
|
|
60
|
+
export async function executeGuardStop(args) {
|
|
61
|
+
const dataDir = resolveDataDir(args);
|
|
62
|
+
const pidFile = path.join(dataDir, 'guard.pid');
|
|
63
|
+
let pid = null;
|
|
64
|
+
let stopped = false;
|
|
65
|
+
try {
|
|
66
|
+
const pidContent = await fs.readFile(pidFile, 'utf-8');
|
|
67
|
+
pid = parseInt(pidContent.trim(), 10);
|
|
68
|
+
if (!isNaN(pid)) {
|
|
69
|
+
try {
|
|
70
|
+
process.kill(pid, 'SIGTERM');
|
|
71
|
+
stopped = true;
|
|
72
|
+
// Remove stale PID file
|
|
73
|
+
await fs.unlink(pidFile).catch(() => undefined);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Process not running — clean up stale PID file
|
|
77
|
+
await fs.unlink(pidFile).catch(() => undefined);
|
|
78
|
+
stopped = false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// No PID file found
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
content: [
|
|
87
|
+
{
|
|
88
|
+
type: 'text',
|
|
89
|
+
text: JSON.stringify({
|
|
90
|
+
status: stopped ? 'stopped' : 'not_running',
|
|
91
|
+
pid,
|
|
92
|
+
message: stopped
|
|
93
|
+
? `Guard engine (PID: ${pid}) has been sent SIGTERM.`
|
|
94
|
+
: 'Guard engine was not running (no PID file found).',
|
|
95
|
+
}, null, 2),
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Execute panguard_status — get current status of all Panguard services.
|
|
102
|
+
* 執行 panguard_status — 取得所有 Panguard 服務的當前狀態。
|
|
103
|
+
*/
|
|
104
|
+
export async function executeStatus(args) {
|
|
105
|
+
const dataDir = resolveDataDir(args);
|
|
106
|
+
const pidFile = path.join(dataDir, 'guard.pid');
|
|
107
|
+
let isRunning = false;
|
|
108
|
+
let pid = null;
|
|
109
|
+
try {
|
|
110
|
+
const pidContent = await fs.readFile(pidFile, 'utf-8');
|
|
111
|
+
pid = parseInt(pidContent.trim(), 10);
|
|
112
|
+
if (!isNaN(pid)) {
|
|
113
|
+
// Sending signal 0 checks if process exists without killing it
|
|
114
|
+
process.kill(pid, 0);
|
|
115
|
+
isRunning = true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
isRunning = false;
|
|
120
|
+
}
|
|
121
|
+
// Try to read guard config
|
|
122
|
+
let config = {};
|
|
123
|
+
try {
|
|
124
|
+
const configPath = path.join(dataDir, 'config.json');
|
|
125
|
+
const configContent = await fs.readFile(configPath, 'utf-8');
|
|
126
|
+
config = JSON.parse(configContent);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// No config file yet
|
|
130
|
+
}
|
|
131
|
+
// Count recent events as a proxy for threat activity
|
|
132
|
+
let eventCount = 0;
|
|
133
|
+
try {
|
|
134
|
+
const eventsFile = path.join(dataDir, 'events.jsonl');
|
|
135
|
+
const content = await fs.readFile(eventsFile, 'utf-8');
|
|
136
|
+
eventCount = content.trim().split('\n').filter(Boolean).length;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// No events file
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
content: [
|
|
143
|
+
{
|
|
144
|
+
type: 'text',
|
|
145
|
+
text: JSON.stringify({
|
|
146
|
+
guard: {
|
|
147
|
+
running: isRunning,
|
|
148
|
+
pid,
|
|
149
|
+
dataDir,
|
|
150
|
+
mode: config['mode'] ?? 'unknown',
|
|
151
|
+
lang: config['lang'] ?? 'en',
|
|
152
|
+
},
|
|
153
|
+
events: {
|
|
154
|
+
total_logged: eventCount,
|
|
155
|
+
},
|
|
156
|
+
summary: isRunning
|
|
157
|
+
? `Panguard Guard is RUNNING (PID: ${pid}, mode: ${config['mode'] ?? 'unknown'}).`
|
|
158
|
+
: 'Panguard Guard is NOT running. Use panguard_guard_start to start it.',
|
|
159
|
+
}, null, 2),
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Execute panguard_alerts — get recent security alerts from guard event log.
|
|
166
|
+
* 執行 panguard_alerts — 從守護事件日誌取得近期安全告警。
|
|
167
|
+
*/
|
|
168
|
+
export async function executeAlerts(args) {
|
|
169
|
+
const limit = args['limit'] ?? 20;
|
|
170
|
+
const severity = args['severity'] ?? 'all';
|
|
171
|
+
const dataDir = resolveDataDir(args);
|
|
172
|
+
const eventsFile = path.join(dataDir, 'events.jsonl');
|
|
173
|
+
const alerts = [];
|
|
174
|
+
try {
|
|
175
|
+
const content = await fs.readFile(eventsFile, 'utf-8');
|
|
176
|
+
const lines = content.trim().split('\n').filter(Boolean);
|
|
177
|
+
for (const line of lines) {
|
|
178
|
+
try {
|
|
179
|
+
const event = JSON.parse(line);
|
|
180
|
+
if (severity === 'all' || event['severity'] === severity) {
|
|
181
|
+
alerts.push(event);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// Skip malformed JSONL lines
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// No events file yet — guard may not have started
|
|
191
|
+
}
|
|
192
|
+
// Return the most recent `limit` alerts
|
|
193
|
+
const recentAlerts = alerts.slice(-Math.max(1, limit));
|
|
194
|
+
return {
|
|
195
|
+
content: [
|
|
196
|
+
{
|
|
197
|
+
type: 'text',
|
|
198
|
+
text: JSON.stringify({
|
|
199
|
+
total_alerts: recentAlerts.length,
|
|
200
|
+
filter: { severity, limit },
|
|
201
|
+
alerts: recentAlerts,
|
|
202
|
+
summary: recentAlerts.length === 0
|
|
203
|
+
? 'No recent alerts. System appears clean.'
|
|
204
|
+
: `${recentAlerts.length} recent alert(s) detected.`,
|
|
205
|
+
}, null, 2),
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=guard-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard-tools.js","sourceRoot":"","sources":["../../src/tools/guard-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panguard MCP - Management Tools
|
|
3
|
+
* Panguard MCP - 管理工具
|
|
4
|
+
*
|
|
5
|
+
* Implements panguard_init, panguard_deploy, panguard_block_ip,
|
|
6
|
+
* and panguard_generate_report MCP tools.
|
|
7
|
+
* 實作 panguard_init、panguard_deploy、panguard_block_ip 和 panguard_generate_report MCP 工具。
|
|
8
|
+
*
|
|
9
|
+
* @module @panguard-ai/panguard-mcp/tools/manage-tools
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Execute panguard_block_ip — manually block an IP address.
|
|
13
|
+
* 執行 panguard_block_ip — 手動封鎖 IP 位址。
|
|
14
|
+
*/
|
|
15
|
+
export declare function executeBlockIP(args: Record<string, unknown>): Promise<{
|
|
16
|
+
content: {
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
}[];
|
|
20
|
+
isError: boolean;
|
|
21
|
+
} | {
|
|
22
|
+
content: {
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}[];
|
|
26
|
+
isError?: undefined;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Execute panguard_generate_report — run scan and generate a PDF compliance report.
|
|
30
|
+
* 執行 panguard_generate_report — 執行掃描並生成 PDF 合規報告。
|
|
31
|
+
*/
|
|
32
|
+
export declare function executeGenerateReport(args: Record<string, unknown>): Promise<{
|
|
33
|
+
content: {
|
|
34
|
+
type: "text";
|
|
35
|
+
text: string;
|
|
36
|
+
}[];
|
|
37
|
+
isError?: undefined;
|
|
38
|
+
} | {
|
|
39
|
+
content: {
|
|
40
|
+
type: "text";
|
|
41
|
+
text: string;
|
|
42
|
+
}[];
|
|
43
|
+
isError: boolean;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* Execute panguard_init — initialize Panguard configuration with defaults.
|
|
47
|
+
* 執行 panguard_init — 以預設值初始化 Panguard 配置。
|
|
48
|
+
*/
|
|
49
|
+
export declare function executeInit(args: Record<string, unknown>): Promise<{
|
|
50
|
+
content: {
|
|
51
|
+
type: "text";
|
|
52
|
+
text: string;
|
|
53
|
+
}[];
|
|
54
|
+
}>;
|
|
55
|
+
/**
|
|
56
|
+
* Execute panguard_deploy — one-click setup: init + scan + optional report.
|
|
57
|
+
* 執行 panguard_deploy — 一鍵設定:初始化 + 掃描 + 可選報告。
|
|
58
|
+
*/
|
|
59
|
+
export declare function executeDeploy(args: Record<string, unknown>): Promise<{
|
|
60
|
+
content: {
|
|
61
|
+
type: "text";
|
|
62
|
+
text: string;
|
|
63
|
+
}[];
|
|
64
|
+
}>;
|
|
65
|
+
//# sourceMappingURL=manage-tools.d.ts.map
|