@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.
- package/LICENSE +21 -0
- package/README.md +125 -0
- package/build/config/index.d.ts +29 -0
- package/build/config/index.d.ts.map +1 -0
- package/build/config/index.js +229 -0
- package/build/config/index.js.map +1 -0
- package/build/index.d.ts +9 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +23 -0
- package/build/index.js.map +1 -0
- package/build/security/index.d.ts +8 -0
- package/build/security/index.d.ts.map +1 -0
- package/build/security/index.js +8 -0
- package/build/security/index.js.map +1 -0
- package/build/security/read-only.d.ts +32 -0
- package/build/security/read-only.d.ts.map +1 -0
- package/build/security/read-only.js +62 -0
- package/build/security/read-only.js.map +1 -0
- package/build/security/sandbox.d.ts +60 -0
- package/build/security/sandbox.d.ts.map +1 -0
- package/build/security/sandbox.js +231 -0
- package/build/security/sandbox.js.map +1 -0
- package/build/server.d.ts +20 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +63 -0
- package/build/server.js.map +1 -0
- package/build/tools/metadata.d.ts +11 -0
- package/build/tools/metadata.d.ts.map +1 -0
- package/build/tools/metadata.js +423 -0
- package/build/tools/metadata.js.map +1 -0
- package/build/tools/read.d.ts +11 -0
- package/build/tools/read.d.ts.map +1 -0
- package/build/tools/read.js +335 -0
- package/build/tools/read.js.map +1 -0
- package/build/tools/scaffold.d.ts +11 -0
- package/build/tools/scaffold.d.ts.map +1 -0
- package/build/tools/scaffold.js +345 -0
- package/build/tools/scaffold.js.map +1 -0
- package/build/tools/search.d.ts +11 -0
- package/build/tools/search.d.ts.map +1 -0
- package/build/tools/search.js +250 -0
- package/build/tools/search.js.map +1 -0
- package/build/tools/write.d.ts +11 -0
- package/build/tools/write.d.ts.map +1 -0
- package/build/tools/write.js +538 -0
- package/build/tools/write.js.map +1 -0
- package/build/types.d.ts +402 -0
- package/build/types.d.ts.map +1 -0
- package/build/types.js +146 -0
- package/build/types.js.map +1 -0
- package/build/utils/errors.d.ts +43 -0
- package/build/utils/errors.d.ts.map +1 -0
- package/build/utils/errors.js +125 -0
- package/build/utils/errors.js.map +1 -0
- package/build/utils/index.d.ts +10 -0
- package/build/utils/index.d.ts.map +1 -0
- package/build/utils/index.js +9 -0
- package/build/utils/index.js.map +1 -0
- package/build/utils/logger.d.ts +88 -0
- package/build/utils/logger.d.ts.map +1 -0
- package/build/utils/logger.js +166 -0
- package/build/utils/logger.js.map +1 -0
- package/build/utils/validation.d.ts +43 -0
- package/build/utils/validation.d.ts.map +1 -0
- package/build/utils/validation.js +196 -0
- package/build/utils/validation.js.map +1 -0
- package/package.json +64 -0
- package/templates/typescript-starter/package.json +18 -0
- package/templates/typescript-starter/src/index.ts +9 -0
- package/templates/typescript-starter/template.json +24 -0
- 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"}
|