winhelm-mcp 1.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.
Files changed (125) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/LICENSE +21 -0
  3. package/README.md +646 -0
  4. package/dist/config/config-manager.d.ts +50 -0
  5. package/dist/config/config-manager.d.ts.map +1 -0
  6. package/dist/config/config-manager.js +300 -0
  7. package/dist/config/config-manager.js.map +1 -0
  8. package/dist/config/default-config.d.ts +4 -0
  9. package/dist/config/default-config.d.ts.map +1 -0
  10. package/dist/config/default-config.js +48 -0
  11. package/dist/config/default-config.js.map +1 -0
  12. package/dist/config/profiles.d.ts +16 -0
  13. package/dist/config/profiles.d.ts.map +1 -0
  14. package/dist/config/profiles.js +208 -0
  15. package/dist/config/profiles.js.map +1 -0
  16. package/dist/engine/filesystem.d.ts +52 -0
  17. package/dist/engine/filesystem.d.ts.map +1 -0
  18. package/dist/engine/filesystem.js +499 -0
  19. package/dist/engine/filesystem.js.map +1 -0
  20. package/dist/engine/http-client.d.ts +10 -0
  21. package/dist/engine/http-client.d.ts.map +1 -0
  22. package/dist/engine/http-client.js +93 -0
  23. package/dist/engine/http-client.js.map +1 -0
  24. package/dist/engine/pdf-generator.d.ts +15 -0
  25. package/dist/engine/pdf-generator.d.ts.map +1 -0
  26. package/dist/engine/pdf-generator.js +325 -0
  27. package/dist/engine/pdf-generator.js.map +1 -0
  28. package/dist/engine/powershell-runner.d.ts +23 -0
  29. package/dist/engine/powershell-runner.d.ts.map +1 -0
  30. package/dist/engine/powershell-runner.js +148 -0
  31. package/dist/engine/powershell-runner.js.map +1 -0
  32. package/dist/engine/ripgrep.d.ts +20 -0
  33. package/dist/engine/ripgrep.d.ts.map +1 -0
  34. package/dist/engine/ripgrep.js +173 -0
  35. package/dist/engine/ripgrep.js.map +1 -0
  36. package/dist/engine/system.d.ts +67 -0
  37. package/dist/engine/system.d.ts.map +1 -0
  38. package/dist/engine/system.js +558 -0
  39. package/dist/engine/system.js.map +1 -0
  40. package/dist/engine/task-manager.d.ts +66 -0
  41. package/dist/engine/task-manager.d.ts.map +1 -0
  42. package/dist/engine/task-manager.js +203 -0
  43. package/dist/engine/task-manager.js.map +1 -0
  44. package/dist/gateway/dashboard-html.d.ts +7 -0
  45. package/dist/gateway/dashboard-html.d.ts.map +1 -0
  46. package/dist/gateway/dashboard-html.js +624 -0
  47. package/dist/gateway/dashboard-html.js.map +1 -0
  48. package/dist/gateway/preview-html.d.ts +5 -0
  49. package/dist/gateway/preview-html.d.ts.map +1 -0
  50. package/dist/gateway/preview-html.js +351 -0
  51. package/dist/gateway/preview-html.js.map +1 -0
  52. package/dist/gateway/rate-limiter.d.ts +8 -0
  53. package/dist/gateway/rate-limiter.d.ts.map +1 -0
  54. package/dist/gateway/rate-limiter.js +51 -0
  55. package/dist/gateway/rate-limiter.js.map +1 -0
  56. package/dist/gateway/server.d.ts +18 -0
  57. package/dist/gateway/server.d.ts.map +1 -0
  58. package/dist/gateway/server.js +337 -0
  59. package/dist/gateway/server.js.map +1 -0
  60. package/dist/gateway/sse-gateway.d.ts +43 -0
  61. package/dist/gateway/sse-gateway.d.ts.map +1 -0
  62. package/dist/gateway/sse-gateway.js +161 -0
  63. package/dist/gateway/sse-gateway.js.map +1 -0
  64. package/dist/gateway/streamable-gateway.d.ts +39 -0
  65. package/dist/gateway/streamable-gateway.d.ts.map +1 -0
  66. package/dist/gateway/streamable-gateway.js +176 -0
  67. package/dist/gateway/streamable-gateway.js.map +1 -0
  68. package/dist/index.d.ts +5 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +164 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/tools/desktop-tools.d.ts +3 -0
  73. package/dist/tools/desktop-tools.d.ts.map +1 -0
  74. package/dist/tools/desktop-tools.js +280 -0
  75. package/dist/tools/desktop-tools.js.map +1 -0
  76. package/dist/tools/file-tools.d.ts +3 -0
  77. package/dist/tools/file-tools.d.ts.map +1 -0
  78. package/dist/tools/file-tools.js +433 -0
  79. package/dist/tools/file-tools.js.map +1 -0
  80. package/dist/tools/index.d.ts +12 -0
  81. package/dist/tools/index.d.ts.map +1 -0
  82. package/dist/tools/index.js +16 -0
  83. package/dist/tools/index.js.map +1 -0
  84. package/dist/tools/network-tools.d.ts +3 -0
  85. package/dist/tools/network-tools.d.ts.map +1 -0
  86. package/dist/tools/network-tools.js +108 -0
  87. package/dist/tools/network-tools.js.map +1 -0
  88. package/dist/tools/registry.d.ts +50 -0
  89. package/dist/tools/registry.d.ts.map +1 -0
  90. package/dist/tools/registry.js +54 -0
  91. package/dist/tools/registry.js.map +1 -0
  92. package/dist/tools/terminal-tools.d.ts +3 -0
  93. package/dist/tools/terminal-tools.d.ts.map +1 -0
  94. package/dist/tools/terminal-tools.js +152 -0
  95. package/dist/tools/terminal-tools.js.map +1 -0
  96. package/dist/tools/tool-wrapper.d.ts +7 -0
  97. package/dist/tools/tool-wrapper.d.ts.map +1 -0
  98. package/dist/tools/tool-wrapper.js +47 -0
  99. package/dist/tools/tool-wrapper.js.map +1 -0
  100. package/dist/types/index.d.ts +261 -0
  101. package/dist/types/index.d.ts.map +1 -0
  102. package/dist/types/index.js +2 -0
  103. package/dist/types/index.js.map +1 -0
  104. package/dist/utils/file-logger.d.ts +24 -0
  105. package/dist/utils/file-logger.d.ts.map +1 -0
  106. package/dist/utils/file-logger.js +117 -0
  107. package/dist/utils/file-logger.js.map +1 -0
  108. package/dist/utils/logger.d.ts +51 -0
  109. package/dist/utils/logger.d.ts.map +1 -0
  110. package/dist/utils/logger.js +189 -0
  111. package/dist/utils/logger.js.map +1 -0
  112. package/dist/utils/sanitizer.d.ts +13 -0
  113. package/dist/utils/sanitizer.d.ts.map +1 -0
  114. package/dist/utils/sanitizer.js +60 -0
  115. package/dist/utils/sanitizer.js.map +1 -0
  116. package/docs/EXAMPLES.md +171 -0
  117. package/docs/PROFILES.md +423 -0
  118. package/docs/SECURITY.md +190 -0
  119. package/docs/TOOLS.md +366 -0
  120. package/manifest.json +74 -0
  121. package/package.json +89 -0
  122. package/scripts/build-exe.ps1 +37 -0
  123. package/scripts/manage-service.ps1 +112 -0
  124. package/server.json +23 -0
  125. package/winhelm.config.example.json +30 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-tools.js","sourceRoot":"","sources":["../../src/tools/desktop-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerFileTools(server: McpServer): void;
3
+ //# sourceMappingURL=file-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-tools.d.ts","sourceRoot":"","sources":["../../src/tools/file-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqBzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2gBzD"}
@@ -0,0 +1,433 @@
1
+ import fs from "node:fs/promises";
2
+ import { existsSync, statSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { z } from "zod";
5
+ import { ConfigManager } from "../config/config-manager.js";
6
+ import { PROFILES } from "../config/profiles.js";
7
+ import { searchCodebase } from "../engine/ripgrep.js";
8
+ import { generatePdf } from "../engine/pdf-generator.js";
9
+ import { copyFileOrDir, createZip, deleteFileToRecycleBin, editFileContent, extractZip, hashFile, listDirectory, moveFile, readFileContent, searchInFiles, tailFileContent, writeFileContent, } from "../engine/filesystem.js";
10
+ import { registerTracedTool } from "./tool-wrapper.js";
11
+ export function registerFileTools(server) {
12
+ // 1. File Read
13
+ registerTracedTool(server, "file_read", {
14
+ path: z.string().describe("Absolute or relative path to file"),
15
+ start_line: z.number().optional().describe("Starting line number (1-based, inclusive)"),
16
+ end_line: z.number().optional().describe("Ending line number (1-based, inclusive)"),
17
+ }, async ({ path: filePath, start_line, end_line }) => {
18
+ try {
19
+ const res = await readFileContent(filePath, start_line, end_line);
20
+ return {
21
+ content: [
22
+ {
23
+ type: "text",
24
+ text: res.content,
25
+ },
26
+ ],
27
+ };
28
+ }
29
+ catch (err) {
30
+ return {
31
+ content: [{ type: "text", text: `Error reading file: ${err.message}` }],
32
+ isError: true,
33
+ };
34
+ }
35
+ });
36
+ // 2. File Write
37
+ registerTracedTool(server, "file_write", {
38
+ path: z.string().describe("Target file path"),
39
+ content: z.string().describe("Full content to write"),
40
+ }, async ({ path: filePath, content }) => {
41
+ try {
42
+ const res = await writeFileContent(filePath, content);
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: `Successfully wrote ${res.bytesWritten} bytes to ${res.filePath}`,
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ catch (err) {
53
+ return {
54
+ content: [{ type: "text", text: `Error writing file: ${err.message}` }],
55
+ isError: true,
56
+ };
57
+ }
58
+ });
59
+ // 3. File Edit (Surgical Edit)
60
+ registerTracedTool(server, "file_edit", {
61
+ path: z.string().describe("File to edit"),
62
+ old_text: z.string().describe("Exact string to replace (must appear uniquely in the file)"),
63
+ new_text: z.string().describe("Replacement string"),
64
+ }, async ({ path: filePath, old_text, new_text }) => {
65
+ try {
66
+ const res = await editFileContent(filePath, old_text, new_text);
67
+ return {
68
+ content: [{ type: "text", text: `Successfully updated ${res.filePath}` }],
69
+ };
70
+ }
71
+ catch (err) {
72
+ return {
73
+ content: [{ type: "text", text: `Edit failed: ${err.message}` }],
74
+ isError: true,
75
+ };
76
+ }
77
+ });
78
+ // 4. File List
79
+ registerTracedTool(server, "file_list", {
80
+ path: z.string().optional().describe("Directory path (default: current directory)"),
81
+ recursive: z.boolean().optional().describe("Whether to scan subdirectories (up to 3 levels)"),
82
+ }, async ({ path: dirPath = ".", recursive = false }) => {
83
+ try {
84
+ const list = await listDirectory(dirPath, recursive);
85
+ return {
86
+ content: [{ type: "text", text: JSON.stringify(list, null, 2) }],
87
+ };
88
+ }
89
+ catch (err) {
90
+ return {
91
+ content: [{ type: "text", text: `Failed to list directory: ${err.message}` }],
92
+ isError: true,
93
+ };
94
+ }
95
+ });
96
+ // 5. File Search
97
+ registerTracedTool(server, "file_search", {
98
+ query: z.string().describe("Search string to find within files"),
99
+ path: z.string().optional().describe("Folder path to search in (default: current directory)"),
100
+ file_pattern: z.string().optional().describe("File name filter (e.g. '.js', '.json')"),
101
+ }, async ({ query, path: searchPath = ".", file_pattern = "" }) => {
102
+ try {
103
+ const matches = await searchInFiles(query, searchPath, file_pattern);
104
+ return {
105
+ content: [
106
+ {
107
+ type: "text",
108
+ text: matches.length > 0
109
+ ? JSON.stringify(matches, null, 2)
110
+ : `No matches found for "${query}"`,
111
+ },
112
+ ],
113
+ };
114
+ }
115
+ catch (err) {
116
+ return {
117
+ content: [{ type: "text", text: `Search failed: ${err.message}` }],
118
+ isError: true,
119
+ };
120
+ }
121
+ });
122
+ // 6. Safe Delete (to Windows Recycle Bin)
123
+ registerTracedTool(server, "file_delete_safe", {
124
+ path: z.string().describe("Target file or directory path to send to Windows Recycle Bin"),
125
+ }, async ({ path: targetPath }) => {
126
+ try {
127
+ const res = await deleteFileToRecycleBin(targetPath);
128
+ return {
129
+ content: [
130
+ {
131
+ type: "text",
132
+ text: `Successfully sent to Recycle Bin: ${res.path}`,
133
+ },
134
+ ],
135
+ };
136
+ }
137
+ catch (err) {
138
+ return {
139
+ content: [{ type: "text", text: `Safe delete failed: ${err.message}` }],
140
+ isError: true,
141
+ };
142
+ }
143
+ });
144
+ // 7. File Move / Rename
145
+ registerTracedTool(server, "file_move", {
146
+ source: z.string().describe("Source file or folder path"),
147
+ destination: z.string().describe("Destination file or folder path"),
148
+ overwrite: z.boolean().optional().describe("Whether to overwrite destination if it exists (default: false)"),
149
+ }, async ({ source, destination, overwrite }) => {
150
+ try {
151
+ const res = await moveFile(source, destination, overwrite);
152
+ return {
153
+ content: [
154
+ {
155
+ type: "text",
156
+ text: `Successfully moved from ${res.from} to ${res.to}`,
157
+ },
158
+ ],
159
+ };
160
+ }
161
+ catch (err) {
162
+ return {
163
+ content: [{ type: "text", text: `File move failed: ${err.message}` }],
164
+ isError: true,
165
+ };
166
+ }
167
+ });
168
+ // 8. File Copy
169
+ registerTracedTool(server, "file_copy", {
170
+ source: z.string().describe("Source file or folder path"),
171
+ destination: z.string().describe("Destination file or folder path"),
172
+ overwrite: z.boolean().optional().describe("Whether to overwrite destination if it exists (default: true)"),
173
+ }, async ({ source, destination, overwrite }) => {
174
+ try {
175
+ const res = await copyFileOrDir(source, destination, overwrite);
176
+ return {
177
+ content: [
178
+ {
179
+ type: "text",
180
+ text: `Successfully copied from ${res.from} to ${res.to}`,
181
+ },
182
+ ],
183
+ };
184
+ }
185
+ catch (err) {
186
+ return {
187
+ content: [{ type: "text", text: `File copy failed: ${err.message}` }],
188
+ isError: true,
189
+ };
190
+ }
191
+ });
192
+ // 9. Archive Zip (Create)
193
+ registerTracedTool(server, "archive_zip", {
194
+ source_dir: z.string().describe("Directory path to compress"),
195
+ zip_path: z.string().describe("Destination .zip file path"),
196
+ }, async ({ source_dir, zip_path }) => {
197
+ try {
198
+ const res = await createZip(source_dir, zip_path);
199
+ return {
200
+ content: [
201
+ {
202
+ type: "text",
203
+ text: `Successfully compressed ${res.targetPath} into ${res.zipPath}`,
204
+ },
205
+ ],
206
+ };
207
+ }
208
+ catch (err) {
209
+ return {
210
+ content: [{ type: "text", text: `Zip compression failed: ${err.message}` }],
211
+ isError: true,
212
+ };
213
+ }
214
+ });
215
+ // 10. Archive Unzip (Extract)
216
+ registerTracedTool(server, "archive_unzip", {
217
+ zip_path: z.string().describe("Path to .zip file to extract"),
218
+ target_dir: z.string().describe("Destination directory path for extracted files"),
219
+ overwrite: z.boolean().optional().describe("Whether to overwrite existing files (default: true)"),
220
+ }, async ({ zip_path, target_dir, overwrite }) => {
221
+ try {
222
+ const res = await extractZip(zip_path, target_dir, overwrite);
223
+ return {
224
+ content: [
225
+ {
226
+ type: "text",
227
+ text: `Successfully extracted ${res.zipPath} to ${res.targetPath}`,
228
+ },
229
+ ],
230
+ };
231
+ }
232
+ catch (err) {
233
+ return {
234
+ content: [{ type: "text", text: `Zip extraction failed: ${err.message}` }],
235
+ isError: true,
236
+ };
237
+ }
238
+ });
239
+ // 11. Ripgrep High-Speed Paginated Search
240
+ registerTracedTool(server, "file_search_ripgrep", {
241
+ query: z.string().describe("Search string or regex pattern"),
242
+ path: z.string().optional().describe("Directory path to search in (default: current workspace)"),
243
+ file_pattern: z.string().optional().describe("Glob pattern filter (e.g. '*.ts', '*.py', 'src/**')"),
244
+ case_sensitive: z.boolean().optional().describe("Enable case-sensitive matching (default: false)"),
245
+ is_regex: z.boolean().optional().describe("Treat query as regular expression (default: false)"),
246
+ page: z.number().optional().describe("Page number (1-based, default: 1)"),
247
+ page_size: z.number().optional().describe("Results per page (default: 50, max: 200)"),
248
+ context_lines: z.number().optional().describe("Lines of context around match (default: 0)"),
249
+ }, async ({ query, path: searchPath, file_pattern, case_sensitive, is_regex, page, page_size, context_lines, }) => {
250
+ try {
251
+ const res = await searchCodebase({
252
+ query,
253
+ searchPath,
254
+ filePattern: file_pattern,
255
+ caseSensitive: case_sensitive,
256
+ isRegex: is_regex,
257
+ page,
258
+ pageSize: page_size,
259
+ contextLines: context_lines,
260
+ });
261
+ const summary = [
262
+ `Engine: ${res.engine.toUpperCase()}`,
263
+ `Query: "${res.query}"`,
264
+ `Matches: ${res.totalMatches} total (Showing page ${res.page} with ${res.matches.length} matches, hasMore: ${res.hasMore})`,
265
+ "",
266
+ ...res.matches.map((m) => `${m.file}:${m.line}:${m.column} -> ${m.text}`),
267
+ ].join("\n");
268
+ return {
269
+ content: [{ type: "text", text: summary }],
270
+ };
271
+ }
272
+ catch (err) {
273
+ return {
274
+ content: [{ type: "text", text: `Ripgrep search failed: ${err.message}` }],
275
+ isError: true,
276
+ };
277
+ }
278
+ });
279
+ // 12. Native Windows PDF Document Generator
280
+ registerTracedTool(server, "pdf_generate", {
281
+ source_path: z.string().describe("Path to input Markdown (.md), HTML (.html), or text file"),
282
+ pdf_path: z.string().describe("Output destination .pdf file path"),
283
+ landscape: z.boolean().optional().describe("Use landscape orientation instead of portrait (default: false)"),
284
+ title: z.string().optional().describe("Document title for header"),
285
+ }, async ({ source_path, pdf_path, landscape, title }) => {
286
+ try {
287
+ const res = await generatePdf({
288
+ sourcePath: source_path,
289
+ pdfPath: pdf_path,
290
+ landscape,
291
+ title,
292
+ });
293
+ return {
294
+ content: [
295
+ {
296
+ type: "text",
297
+ text: `PDF generated successfully!\nPath: ${res.pdfPath}\nSource: ${res.sourcePath}\nSize: ${(res.sizeBytes / 1024).toFixed(1)} KB\nBrowser Engine: ${res.browserUsed}`,
298
+ },
299
+ ],
300
+ };
301
+ }
302
+ catch (err) {
303
+ return {
304
+ content: [{ type: "text", text: `PDF generation failed: ${err.message}` }],
305
+ isError: true,
306
+ };
307
+ }
308
+ });
309
+ // 13. Interactive File & Markdown Previewer
310
+ registerTracedTool(server, "file_preview", {
311
+ path: z.string().describe("Absolute or relative path to file to preview"),
312
+ max_lines: z.number().optional().describe("Maximum lines of text to return in preview snippet (default: 50)"),
313
+ }, async ({ path: targetPath, max_lines = 50 }) => {
314
+ try {
315
+ const configManager = ConfigManager.getInstance();
316
+ const resolved = path.resolve(targetPath);
317
+ const pathCheck = configManager.isPathAllowed(resolved);
318
+ if (!pathCheck.allowed) {
319
+ throw new Error(pathCheck.reason);
320
+ }
321
+ if (!existsSync(resolved)) {
322
+ throw new Error(`File not found: ${targetPath}`);
323
+ }
324
+ const stat = statSync(resolved);
325
+ if (stat.isDirectory()) {
326
+ throw new Error(`Path is a directory: ${targetPath}`);
327
+ }
328
+ const ext = path.extname(resolved).toLowerCase();
329
+ const imageExts = [".png", ".jpg", ".jpeg", ".gif", ".webp", ".svg", ".ico"];
330
+ const isImage = imageExts.includes(ext);
331
+ const isPdf = ext === ".pdf";
332
+ const isBinary = isImage || isPdf;
333
+ let snippet = "";
334
+ let lineCount = 0;
335
+ if (!isBinary) {
336
+ const content = await fs.readFile(resolved, "utf-8");
337
+ const lines = content.split(/\r?\n/);
338
+ lineCount = lines.length;
339
+ snippet = lines.slice(0, max_lines).join("\n");
340
+ if (lines.length > max_lines) {
341
+ snippet += `\n... [${lines.length - max_lines} more lines truncated]`;
342
+ }
343
+ }
344
+ const previewUrl = `http://localhost:8788/preview?path=${encodeURIComponent(resolved)}`;
345
+ const result = {
346
+ file: path.basename(resolved),
347
+ path: resolved,
348
+ extension: ext,
349
+ sizeBytes: stat.size,
350
+ sizeKb: (stat.size / 1024).toFixed(1),
351
+ lineCount: isBinary ? undefined : lineCount,
352
+ isBinary,
353
+ previewUrl,
354
+ snippet: isBinary ? `[Binary/Image file (${ext}) - view at ${previewUrl}]` : snippet,
355
+ };
356
+ return {
357
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
358
+ };
359
+ }
360
+ catch (err) {
361
+ return {
362
+ content: [{ type: "text", text: `File preview failed: ${err.message}` }],
363
+ isError: true,
364
+ };
365
+ }
366
+ });
367
+ // 14. File Tail (Read last N lines)
368
+ registerTracedTool(server, "file_tail", {
369
+ path: z.string().describe("Target file path to tail"),
370
+ lines: z.number().optional().describe("Number of lines from end of file to read (default: 50)"),
371
+ }, async ({ path: filePath, lines }) => {
372
+ try {
373
+ const res = await tailFileContent(filePath, lines);
374
+ return {
375
+ content: [
376
+ {
377
+ type: "text",
378
+ text: res.content || `(File is empty: ${res.filePath})`,
379
+ },
380
+ ],
381
+ };
382
+ }
383
+ catch (err) {
384
+ return {
385
+ content: [{ type: "text", text: `Tail failed: ${err.message}` }],
386
+ isError: true,
387
+ };
388
+ }
389
+ });
390
+ // 15. File Hash (SHA-256, MD5, SHA-1)
391
+ registerTracedTool(server, "file_hash", {
392
+ path: z.string().describe("Target file path to compute hash"),
393
+ algorithm: z.enum(["sha256", "md5", "sha1"]).optional().describe("Hash algorithm to use (default: sha256)"),
394
+ }, async ({ path: filePath, algorithm }) => {
395
+ try {
396
+ const res = await hashFile(filePath, algorithm || "sha256");
397
+ return {
398
+ content: [
399
+ {
400
+ type: "text",
401
+ text: JSON.stringify(res, null, 2),
402
+ },
403
+ ],
404
+ };
405
+ }
406
+ catch (err) {
407
+ return {
408
+ content: [{ type: "text", text: `Hash calculation failed: ${err.message}` }],
409
+ isError: true,
410
+ };
411
+ }
412
+ });
413
+ // MCP UI / Preview Resource (registered if profile permits)
414
+ const profile = ConfigManager.getInstance().getConfig().profile || "full";
415
+ const profileDef = PROFILES[profile] || PROFILES.full;
416
+ if (profileDef.includesResource) {
417
+ server.registerResource("file-preview", "preview://file", {
418
+ mimeType: "text/html;profile=mcp-app",
419
+ description: "Interactive HTML preview for files on Windows host",
420
+ }, async (uri) => {
421
+ return {
422
+ contents: [
423
+ {
424
+ uri: uri.href,
425
+ mimeType: "text/html;profile=mcp-app",
426
+ text: "WinHelm Web Preview is active. View files in your browser at http://localhost:8788/preview?path=<filepath>",
427
+ },
428
+ ],
429
+ };
430
+ });
431
+ }
432
+ }
433
+ //# sourceMappingURL=file-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-tools.js","sourceRoot":"","sources":["../../src/tools/file-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { registerTerminalTools } from "./terminal-tools.js";
3
+ import { registerFileTools } from "./file-tools.js";
4
+ import { registerDesktopTools } from "./desktop-tools.js";
5
+ import { registerNetworkTools } from "./network-tools.js";
6
+ /**
7
+ * Register all WinHelm tools into an McpServer instance
8
+ */
9
+ export declare function registerAllTools(server: McpServer): void;
10
+ export * from "./registry.js";
11
+ export { registerTerminalTools, registerFileTools, registerDesktopTools, registerNetworkTools };
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAKxD;AAED,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { registerTerminalTools } from "./terminal-tools.js";
2
+ import { registerFileTools } from "./file-tools.js";
3
+ import { registerDesktopTools } from "./desktop-tools.js";
4
+ import { registerNetworkTools } from "./network-tools.js";
5
+ /**
6
+ * Register all WinHelm tools into an McpServer instance
7
+ */
8
+ export function registerAllTools(server) {
9
+ registerTerminalTools(server);
10
+ registerFileTools(server);
11
+ registerDesktopTools(server);
12
+ registerNetworkTools(server);
13
+ }
14
+ export * from "./registry.js";
15
+ export { registerTerminalTools, registerFileTools, registerDesktopTools, registerNetworkTools };
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerNetworkTools(server: McpServer): void;
3
+ //# sourceMappingURL=network-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-tools.d.ts","sourceRoot":"","sources":["../../src/tools/network-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuH5D"}
@@ -0,0 +1,108 @@
1
+ import { z } from "zod";
2
+ import { executeHttpRequest, pingEndpoint } from "../engine/http-client.js";
3
+ import { getNetworkInfo } from "../engine/system.js";
4
+ import { ConfigManager } from "../config/config-manager.js";
5
+ import { registerTracedTool } from "./tool-wrapper.js";
6
+ export function registerNetworkTools(server) {
7
+ // 1. HTTP Ping / Health Check
8
+ registerTracedTool(server, "http_ping", {
9
+ url: z.string().url().describe("HTTP or HTTPS URL to ping (e.g. 'http://localhost:3000', 'http://127.0.0.1:8788/health')"),
10
+ timeout_ms: z.number().optional().describe("Timeout in milliseconds (default: 5000)"),
11
+ expected_status: z.number().optional().describe("Expected HTTP status code (default: any 2xx status)"),
12
+ }, async ({ url, timeout_ms, expected_status }) => {
13
+ try {
14
+ const res = await pingEndpoint(url, timeout_ms, expected_status);
15
+ return {
16
+ content: [{ type: "text", text: JSON.stringify(res, null, 2) }],
17
+ isError: !res.ok,
18
+ };
19
+ }
20
+ catch (err) {
21
+ return {
22
+ content: [{ type: "text", text: `HTTP ping failed: ${err.message}` }],
23
+ isError: true,
24
+ };
25
+ }
26
+ });
27
+ // 2. Full HTTP Request Client
28
+ registerTracedTool(server, "http_request", {
29
+ url: z.string().url().describe("Target HTTP/HTTPS URL"),
30
+ method: z
31
+ .enum(["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"])
32
+ .optional()
33
+ .describe("HTTP method (default: GET)"),
34
+ headers: z
35
+ .record(z.string())
36
+ .optional()
37
+ .describe("Optional key-value HTTP headers"),
38
+ body: z
39
+ .string()
40
+ .optional()
41
+ .describe("Optional request payload (string or JSON string)"),
42
+ timeout_ms: z.number().optional().describe("Timeout in milliseconds (default: 15000)"),
43
+ }, async ({ url, method, headers, body, timeout_ms }) => {
44
+ const methodUpper = (method || "GET").toUpperCase();
45
+ if (ConfigManager.getInstance().isReadOnly() && !["GET", "HEAD"].includes(methodUpper)) {
46
+ return {
47
+ content: [
48
+ {
49
+ type: "text",
50
+ text: `HTTP mutation blocked: ${methodUpper} requests are not permitted in read-only mode.`,
51
+ },
52
+ ],
53
+ isError: true,
54
+ };
55
+ }
56
+ try {
57
+ const res = await executeHttpRequest({
58
+ url,
59
+ method,
60
+ headers,
61
+ body,
62
+ timeoutMs: timeout_ms,
63
+ });
64
+ return {
65
+ content: [
66
+ {
67
+ type: "text",
68
+ text: JSON.stringify({
69
+ status: res.status,
70
+ statusText: res.statusText,
71
+ durationMs: res.durationMs,
72
+ headers: res.headers,
73
+ body: res.isJson ? res.json : res.body,
74
+ }, null, 2),
75
+ },
76
+ ],
77
+ isError: res.status === 0 || res.status >= 400,
78
+ };
79
+ }
80
+ catch (err) {
81
+ return {
82
+ content: [{ type: "text", text: `HTTP request failed: ${err.message}` }],
83
+ isError: true,
84
+ };
85
+ }
86
+ });
87
+ // 3. Network & Adapters Inspector
88
+ registerTracedTool(server, "network_info", {
89
+ include_listening_ports: z
90
+ .boolean()
91
+ .optional()
92
+ .describe("Include list of active listening TCP ports and owning processes (default: false)"),
93
+ }, async ({ include_listening_ports }) => {
94
+ try {
95
+ const res = await getNetworkInfo(include_listening_ports === true);
96
+ return {
97
+ content: [{ type: "text", text: JSON.stringify(res, null, 2) }],
98
+ };
99
+ }
100
+ catch (err) {
101
+ return {
102
+ content: [{ type: "text", text: `Network inspection failed: ${err.message}` }],
103
+ isError: true,
104
+ };
105
+ }
106
+ });
107
+ }
108
+ //# sourceMappingURL=network-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-tools.js","sourceRoot":"","sources":["../../src/tools/network-tools.ts"],"names":[],"mappings":"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"}