@mcptoolshop/file-forge 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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +125 -0
  3. package/build/config/index.d.ts +29 -0
  4. package/build/config/index.d.ts.map +1 -0
  5. package/build/config/index.js +229 -0
  6. package/build/config/index.js.map +1 -0
  7. package/build/index.d.ts +9 -0
  8. package/build/index.d.ts.map +1 -0
  9. package/build/index.js +23 -0
  10. package/build/index.js.map +1 -0
  11. package/build/security/index.d.ts +8 -0
  12. package/build/security/index.d.ts.map +1 -0
  13. package/build/security/index.js +8 -0
  14. package/build/security/index.js.map +1 -0
  15. package/build/security/read-only.d.ts +32 -0
  16. package/build/security/read-only.d.ts.map +1 -0
  17. package/build/security/read-only.js +62 -0
  18. package/build/security/read-only.js.map +1 -0
  19. package/build/security/sandbox.d.ts +60 -0
  20. package/build/security/sandbox.d.ts.map +1 -0
  21. package/build/security/sandbox.js +231 -0
  22. package/build/security/sandbox.js.map +1 -0
  23. package/build/server.d.ts +20 -0
  24. package/build/server.d.ts.map +1 -0
  25. package/build/server.js +63 -0
  26. package/build/server.js.map +1 -0
  27. package/build/tools/metadata.d.ts +11 -0
  28. package/build/tools/metadata.d.ts.map +1 -0
  29. package/build/tools/metadata.js +423 -0
  30. package/build/tools/metadata.js.map +1 -0
  31. package/build/tools/read.d.ts +11 -0
  32. package/build/tools/read.d.ts.map +1 -0
  33. package/build/tools/read.js +335 -0
  34. package/build/tools/read.js.map +1 -0
  35. package/build/tools/scaffold.d.ts +11 -0
  36. package/build/tools/scaffold.d.ts.map +1 -0
  37. package/build/tools/scaffold.js +345 -0
  38. package/build/tools/scaffold.js.map +1 -0
  39. package/build/tools/search.d.ts +11 -0
  40. package/build/tools/search.d.ts.map +1 -0
  41. package/build/tools/search.js +250 -0
  42. package/build/tools/search.js.map +1 -0
  43. package/build/tools/write.d.ts +11 -0
  44. package/build/tools/write.d.ts.map +1 -0
  45. package/build/tools/write.js +538 -0
  46. package/build/tools/write.js.map +1 -0
  47. package/build/types.d.ts +402 -0
  48. package/build/types.d.ts.map +1 -0
  49. package/build/types.js +146 -0
  50. package/build/types.js.map +1 -0
  51. package/build/utils/errors.d.ts +43 -0
  52. package/build/utils/errors.d.ts.map +1 -0
  53. package/build/utils/errors.js +125 -0
  54. package/build/utils/errors.js.map +1 -0
  55. package/build/utils/index.d.ts +10 -0
  56. package/build/utils/index.d.ts.map +1 -0
  57. package/build/utils/index.js +9 -0
  58. package/build/utils/index.js.map +1 -0
  59. package/build/utils/logger.d.ts +88 -0
  60. package/build/utils/logger.d.ts.map +1 -0
  61. package/build/utils/logger.js +166 -0
  62. package/build/utils/logger.js.map +1 -0
  63. package/build/utils/validation.d.ts +43 -0
  64. package/build/utils/validation.d.ts.map +1 -0
  65. package/build/utils/validation.js +196 -0
  66. package/build/utils/validation.js.map +1 -0
  67. package/package.json +64 -0
  68. package/templates/typescript-starter/package.json +18 -0
  69. package/templates/typescript-starter/src/index.ts +9 -0
  70. package/templates/typescript-starter/template.json +24 -0
  71. package/templates/typescript-starter/tsconfig.json +14 -0
@@ -0,0 +1,335 @@
1
+ /**
2
+ * MCP File Forge - File Reading Tools
3
+ *
4
+ * Tools for reading files and directories.
5
+ */
6
+ import * as fs from 'node:fs/promises';
7
+ import * as path from 'node:path';
8
+ import { z } from 'zod';
9
+ import { ReadFileInputSchema, ReadDirectoryInputSchema } from '../types.js';
10
+ /**
11
+ * Read a file and return its contents.
12
+ */
13
+ async function readFileImpl(input) {
14
+ try {
15
+ const absolutePath = path.resolve(input.path);
16
+ // Check if file exists
17
+ const stats = await fs.stat(absolutePath);
18
+ if (!stats.isFile()) {
19
+ return {
20
+ isError: true,
21
+ content: [
22
+ {
23
+ type: 'text',
24
+ text: JSON.stringify({
25
+ code: 'INVALID_PATH',
26
+ message: `Path is not a file: ${input.path}`,
27
+ }),
28
+ },
29
+ ],
30
+ };
31
+ }
32
+ // Check file size
33
+ const maxBytes = input.max_size_kb * 1024;
34
+ if (stats.size > maxBytes) {
35
+ return {
36
+ isError: true,
37
+ content: [
38
+ {
39
+ type: 'text',
40
+ text: JSON.stringify({
41
+ code: 'FILE_TOO_LARGE',
42
+ message: `File size ${stats.size} bytes exceeds limit of ${maxBytes} bytes`,
43
+ details: {
44
+ file_size: stats.size,
45
+ limit: maxBytes,
46
+ },
47
+ }),
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ // Read file content
53
+ const content = await fs.readFile(absolutePath, {
54
+ encoding: input.encoding,
55
+ });
56
+ // Handle line ranges if specified
57
+ let result = content;
58
+ if (input.start_line !== undefined || input.end_line !== undefined) {
59
+ const lines = content.split('\n');
60
+ const startIdx = (input.start_line ?? 1) - 1;
61
+ const endIdx = input.end_line ?? lines.length;
62
+ result = lines.slice(startIdx, endIdx).join('\n');
63
+ }
64
+ return {
65
+ content: [
66
+ {
67
+ type: 'text',
68
+ text: result,
69
+ },
70
+ ],
71
+ };
72
+ }
73
+ catch (error) {
74
+ const err = error;
75
+ if (err.code === 'ENOENT') {
76
+ return {
77
+ isError: true,
78
+ content: [
79
+ {
80
+ type: 'text',
81
+ text: JSON.stringify({
82
+ code: 'FILE_NOT_FOUND',
83
+ message: `File not found: ${input.path}`,
84
+ }),
85
+ },
86
+ ],
87
+ };
88
+ }
89
+ if (err.code === 'EACCES') {
90
+ return {
91
+ isError: true,
92
+ content: [
93
+ {
94
+ type: 'text',
95
+ text: JSON.stringify({
96
+ code: 'PERMISSION_DENIED',
97
+ message: `Permission denied: ${input.path}`,
98
+ }),
99
+ },
100
+ ],
101
+ };
102
+ }
103
+ return {
104
+ isError: true,
105
+ content: [
106
+ {
107
+ type: 'text',
108
+ text: JSON.stringify({
109
+ code: 'UNKNOWN_ERROR',
110
+ message: `Error reading file: ${err.message}`,
111
+ }),
112
+ },
113
+ ],
114
+ };
115
+ }
116
+ }
117
+ /**
118
+ * Read directory contents.
119
+ */
120
+ async function readDirectoryImpl(input, currentDepth = 0) {
121
+ try {
122
+ const absolutePath = path.resolve(input.path);
123
+ // Check if directory exists
124
+ const stats = await fs.stat(absolutePath);
125
+ if (!stats.isDirectory()) {
126
+ return {
127
+ isError: true,
128
+ content: [
129
+ {
130
+ type: 'text',
131
+ text: JSON.stringify({
132
+ code: 'INVALID_PATH',
133
+ message: `Path is not a directory: ${input.path}`,
134
+ }),
135
+ },
136
+ ],
137
+ };
138
+ }
139
+ // Check depth limit
140
+ if (input.recursive && currentDepth >= input.max_depth) {
141
+ return {
142
+ isError: true,
143
+ content: [
144
+ {
145
+ type: 'text',
146
+ text: JSON.stringify({
147
+ code: 'DEPTH_EXCEEDED',
148
+ message: `Maximum recursion depth ${input.max_depth} exceeded`,
149
+ }),
150
+ },
151
+ ],
152
+ };
153
+ }
154
+ // Read directory entries
155
+ const entries = await fs.readdir(absolutePath, { withFileTypes: true });
156
+ const results = [];
157
+ for (const entry of entries) {
158
+ // Skip hidden files if not requested
159
+ if (!input.include_hidden && entry.name.startsWith('.')) {
160
+ continue;
161
+ }
162
+ // Apply glob pattern filter if specified
163
+ if (input.pattern) {
164
+ // Simple glob matching (basic implementation)
165
+ const regex = globToRegex(input.pattern);
166
+ if (!regex.test(entry.name)) {
167
+ continue;
168
+ }
169
+ }
170
+ const entryPath = path.join(absolutePath, entry.name);
171
+ const isFile = entry.isFile();
172
+ const isDirectory = entry.isDirectory();
173
+ const dirEntry = {
174
+ name: entry.name,
175
+ path: entryPath,
176
+ isFile,
177
+ isDirectory,
178
+ };
179
+ // Get size for files
180
+ if (isFile) {
181
+ try {
182
+ const entryStats = await fs.stat(entryPath);
183
+ dirEntry.size = entryStats.size;
184
+ }
185
+ catch {
186
+ // Ignore stat errors for individual files
187
+ }
188
+ }
189
+ results.push(dirEntry);
190
+ // Recurse into subdirectories if requested
191
+ if (input.recursive && isDirectory) {
192
+ const subResult = await readDirectoryImpl({ ...input, path: entryPath }, currentDepth + 1);
193
+ if (!('isError' in subResult)) {
194
+ const subEntries = JSON.parse(subResult.content[0].text);
195
+ results.push(...subEntries);
196
+ }
197
+ }
198
+ }
199
+ return {
200
+ content: [
201
+ {
202
+ type: 'text',
203
+ text: JSON.stringify(results, null, 2),
204
+ },
205
+ ],
206
+ };
207
+ }
208
+ catch (error) {
209
+ const err = error;
210
+ if (err.code === 'ENOENT') {
211
+ return {
212
+ isError: true,
213
+ content: [
214
+ {
215
+ type: 'text',
216
+ text: JSON.stringify({
217
+ code: 'FILE_NOT_FOUND',
218
+ message: `Directory not found: ${input.path}`,
219
+ }),
220
+ },
221
+ ],
222
+ };
223
+ }
224
+ if (err.code === 'EACCES') {
225
+ return {
226
+ isError: true,
227
+ content: [
228
+ {
229
+ type: 'text',
230
+ text: JSON.stringify({
231
+ code: 'PERMISSION_DENIED',
232
+ message: `Permission denied: ${input.path}`,
233
+ }),
234
+ },
235
+ ],
236
+ };
237
+ }
238
+ return {
239
+ isError: true,
240
+ content: [
241
+ {
242
+ type: 'text',
243
+ text: JSON.stringify({
244
+ code: 'UNKNOWN_ERROR',
245
+ message: `Error reading directory: ${err.message}`,
246
+ }),
247
+ },
248
+ ],
249
+ };
250
+ }
251
+ }
252
+ /**
253
+ * Read multiple files at once.
254
+ */
255
+ async function readMultipleImpl(input) {
256
+ const results = [];
257
+ for (const filePath of input.paths) {
258
+ const result = await readFileImpl({
259
+ path: filePath,
260
+ encoding: input.encoding ?? 'utf-8',
261
+ max_size_kb: 10240,
262
+ });
263
+ if ('isError' in result && result.isError) {
264
+ if (input.fail_on_error) {
265
+ return result;
266
+ }
267
+ results.push({
268
+ path: filePath,
269
+ success: false,
270
+ error: result.content[0].text,
271
+ });
272
+ }
273
+ else {
274
+ results.push({
275
+ path: filePath,
276
+ success: true,
277
+ content: result.content[0].text,
278
+ });
279
+ }
280
+ }
281
+ return {
282
+ content: [
283
+ {
284
+ type: 'text',
285
+ text: JSON.stringify(results, null, 2),
286
+ },
287
+ ],
288
+ };
289
+ }
290
+ /**
291
+ * Convert a simple glob pattern to a regex.
292
+ */
293
+ function globToRegex(pattern) {
294
+ const escaped = pattern
295
+ .replace(/[.+^${}()|[\]\\]/g, '\\$&')
296
+ .replace(/\*/g, '.*')
297
+ .replace(/\?/g, '.');
298
+ return new RegExp(`^${escaped}$`, 'i');
299
+ }
300
+ /**
301
+ * Register file reading tools with the MCP server.
302
+ */
303
+ export function registerReadTools(server) {
304
+ // read_file tool
305
+ server.tool('read_file', 'Read the contents of a file', {
306
+ path: z.string().describe('Path to the file'),
307
+ encoding: z.string().optional().describe('File encoding (default: utf-8)'),
308
+ start_line: z.number().optional().describe('Start line (1-indexed)'),
309
+ end_line: z.number().optional().describe('End line (inclusive)'),
310
+ max_size_kb: z.number().optional().describe('Max file size in KB (default: 10240)'),
311
+ }, async (args) => {
312
+ const input = ReadFileInputSchema.parse(args);
313
+ return await readFileImpl(input);
314
+ });
315
+ // read_directory tool
316
+ server.tool('read_directory', 'List contents of a directory', {
317
+ path: z.string().describe('Path to the directory'),
318
+ recursive: z.boolean().optional().describe('Include subdirectories'),
319
+ max_depth: z.number().optional().describe('Max recursion depth'),
320
+ include_hidden: z.boolean().optional().describe('Include hidden files'),
321
+ pattern: z.string().optional().describe('Glob pattern filter'),
322
+ }, async (args) => {
323
+ const input = ReadDirectoryInputSchema.parse(args);
324
+ return await readDirectoryImpl(input);
325
+ });
326
+ // read_multiple tool
327
+ server.tool('read_multiple', 'Read multiple files at once', {
328
+ paths: z.array(z.string()).describe('Array of file paths'),
329
+ encoding: z.string().optional().describe('File encoding'),
330
+ fail_on_error: z.boolean().optional().describe('Fail if any file errors'),
331
+ }, async (args) => {
332
+ return await readMultipleImpl(args);
333
+ });
334
+ }
335
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MCP File Forge - Project Scaffolding Tools
3
+ *
4
+ * Tools for creating projects from templates.
5
+ */
6
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ /**
8
+ * Register project scaffolding tools with the MCP server.
9
+ */
10
+ export declare function registerScaffoldTools(server: McpServer): void;
11
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/tools/scaffold.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsYpE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgC7D"}