@mcptoolshop/file-forge 0.1.0 → 0.2.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 (66) hide show
  1. package/README.md +168 -54
  2. package/package.json +1 -1
  3. package/build/config/index.d.ts +0 -29
  4. package/build/config/index.d.ts.map +0 -1
  5. package/build/config/index.js +0 -229
  6. package/build/config/index.js.map +0 -1
  7. package/build/index.d.ts +0 -9
  8. package/build/index.d.ts.map +0 -1
  9. package/build/index.js +0 -23
  10. package/build/index.js.map +0 -1
  11. package/build/security/index.d.ts +0 -8
  12. package/build/security/index.d.ts.map +0 -1
  13. package/build/security/index.js +0 -8
  14. package/build/security/index.js.map +0 -1
  15. package/build/security/read-only.d.ts +0 -32
  16. package/build/security/read-only.d.ts.map +0 -1
  17. package/build/security/read-only.js +0 -62
  18. package/build/security/read-only.js.map +0 -1
  19. package/build/security/sandbox.d.ts +0 -60
  20. package/build/security/sandbox.d.ts.map +0 -1
  21. package/build/security/sandbox.js +0 -231
  22. package/build/security/sandbox.js.map +0 -1
  23. package/build/server.d.ts +0 -20
  24. package/build/server.d.ts.map +0 -1
  25. package/build/server.js +0 -63
  26. package/build/server.js.map +0 -1
  27. package/build/tools/metadata.d.ts +0 -11
  28. package/build/tools/metadata.d.ts.map +0 -1
  29. package/build/tools/metadata.js +0 -423
  30. package/build/tools/metadata.js.map +0 -1
  31. package/build/tools/read.d.ts +0 -11
  32. package/build/tools/read.d.ts.map +0 -1
  33. package/build/tools/read.js +0 -335
  34. package/build/tools/read.js.map +0 -1
  35. package/build/tools/scaffold.d.ts +0 -11
  36. package/build/tools/scaffold.d.ts.map +0 -1
  37. package/build/tools/scaffold.js +0 -345
  38. package/build/tools/scaffold.js.map +0 -1
  39. package/build/tools/search.d.ts +0 -11
  40. package/build/tools/search.d.ts.map +0 -1
  41. package/build/tools/search.js +0 -250
  42. package/build/tools/search.js.map +0 -1
  43. package/build/tools/write.d.ts +0 -11
  44. package/build/tools/write.d.ts.map +0 -1
  45. package/build/tools/write.js +0 -538
  46. package/build/tools/write.js.map +0 -1
  47. package/build/types.d.ts +0 -402
  48. package/build/types.d.ts.map +0 -1
  49. package/build/types.js +0 -146
  50. package/build/types.js.map +0 -1
  51. package/build/utils/errors.d.ts +0 -43
  52. package/build/utils/errors.d.ts.map +0 -1
  53. package/build/utils/errors.js +0 -125
  54. package/build/utils/errors.js.map +0 -1
  55. package/build/utils/index.d.ts +0 -10
  56. package/build/utils/index.d.ts.map +0 -1
  57. package/build/utils/index.js +0 -9
  58. package/build/utils/index.js.map +0 -1
  59. package/build/utils/logger.d.ts +0 -88
  60. package/build/utils/logger.d.ts.map +0 -1
  61. package/build/utils/logger.js +0 -166
  62. package/build/utils/logger.js.map +0 -1
  63. package/build/utils/validation.d.ts +0 -43
  64. package/build/utils/validation.d.ts.map +0 -1
  65. package/build/utils/validation.js +0 -196
  66. package/build/utils/validation.js.map +0 -1
@@ -1,32 +0,0 @@
1
- /**
2
- * MCP File Forge - Read-Only Mode
3
- *
4
- * Controls whether write operations are allowed.
5
- */
6
- import type { FileForgeError } from '../types.js';
7
- /**
8
- * Enable read-only mode (disables all write operations).
9
- */
10
- export declare function enableReadOnlyMode(): void;
11
- /**
12
- * Disable read-only mode (allows write operations).
13
- */
14
- export declare function disableReadOnlyMode(): void;
15
- /**
16
- * Check if read-only mode is enabled.
17
- */
18
- export declare function isReadOnlyMode(): boolean;
19
- /**
20
- * Validate that a write operation is allowed.
21
- * Returns an error if in read-only mode.
22
- */
23
- export declare function validateWriteAllowed(): FileForgeError | null;
24
- /**
25
- * List of tool names that require write access.
26
- */
27
- export declare const WRITE_TOOLS: readonly ["write_file", "create_directory", "copy_file", "move_file", "delete_file", "scaffold_project"];
28
- /**
29
- * Check if a tool requires write access.
30
- */
31
- export declare function isWriteTool(toolName: string): boolean;
32
- //# sourceMappingURL=read-only.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-only.d.ts","sourceRoot":"","sources":["../../src/security/read-only.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAOlD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,GAAG,IAAI,CAY5D;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,0GAOd,CAAC;AAEX;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErD"}
@@ -1,62 +0,0 @@
1
- /**
2
- * MCP File Forge - Read-Only Mode
3
- *
4
- * Controls whether write operations are allowed.
5
- */
6
- /**
7
- * Global read-only state.
8
- */
9
- let readOnlyMode = false;
10
- /**
11
- * Enable read-only mode (disables all write operations).
12
- */
13
- export function enableReadOnlyMode() {
14
- readOnlyMode = true;
15
- }
16
- /**
17
- * Disable read-only mode (allows write operations).
18
- */
19
- export function disableReadOnlyMode() {
20
- readOnlyMode = false;
21
- }
22
- /**
23
- * Check if read-only mode is enabled.
24
- */
25
- export function isReadOnlyMode() {
26
- return readOnlyMode;
27
- }
28
- /**
29
- * Validate that a write operation is allowed.
30
- * Returns an error if in read-only mode.
31
- */
32
- export function validateWriteAllowed() {
33
- if (readOnlyMode) {
34
- return {
35
- code: 'WRITE_DISABLED',
36
- message: 'Write operations are disabled in read-only mode',
37
- details: {
38
- mode: 'read-only',
39
- hint: 'Set MCP_FILE_FORGE_READ_ONLY=false to enable write operations',
40
- },
41
- };
42
- }
43
- return null;
44
- }
45
- /**
46
- * List of tool names that require write access.
47
- */
48
- export const WRITE_TOOLS = [
49
- 'write_file',
50
- 'create_directory',
51
- 'copy_file',
52
- 'move_file',
53
- 'delete_file',
54
- 'scaffold_project',
55
- ];
56
- /**
57
- * Check if a tool requires write access.
58
- */
59
- export function isWriteTool(toolName) {
60
- return WRITE_TOOLS.includes(toolName);
61
- }
62
- //# sourceMappingURL=read-only.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-only.js","sourceRoot":"","sources":["../../src/security/read-only.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,IAAI,YAAY,GAAG,KAAK,CAAC;AAEzB;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,YAAY,GAAG,IAAI,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,iDAAiD;YAC1D,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,+DAA+D;aACtE;SACF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,YAAY;IACZ,kBAAkB;IAClB,WAAW;IACX,WAAW;IACX,aAAa;IACb,kBAAkB;CACV,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgB;IAC1C,OAAO,WAAW,CAAC,QAAQ,CAAC,QAAwC,CAAC,CAAC;AACxE,CAAC"}
@@ -1,60 +0,0 @@
1
- /**
2
- * MCP File Forge - Sandbox Security Layer
3
- *
4
- * Path validation and access control for file operations.
5
- */
6
- import type { SandboxConfig, FileForgeError } from '../types.js';
7
- /**
8
- * Sandbox manager for validating and controlling file access.
9
- */
10
- export declare class Sandbox {
11
- private config;
12
- private resolvedAllowedPaths;
13
- private initialized;
14
- constructor(config?: Partial<SandboxConfig>);
15
- /**
16
- * Initialize the sandbox by resolving all allowed paths to absolute paths.
17
- */
18
- initialize(): Promise<void>;
19
- /**
20
- * Check if a path is within the allowed sandbox paths.
21
- */
22
- isPathAllowed(targetPath: string): boolean;
23
- /**
24
- * Validate a path and return error if not allowed.
25
- */
26
- validatePath(targetPath: string): Promise<FileForgeError | null>;
27
- /**
28
- * Check if a path contains traversal attempts.
29
- */
30
- private hasPathTraversal;
31
- /**
32
- * Validate file size against limits.
33
- */
34
- validateFileSize(size: number): FileForgeError | null;
35
- /**
36
- * Validate recursion depth.
37
- */
38
- validateDepth(depth: number): FileForgeError | null;
39
- /**
40
- * Get the current configuration.
41
- */
42
- getConfig(): SandboxConfig;
43
- /**
44
- * Get resolved allowed paths.
45
- */
46
- getAllowedPaths(): string[];
47
- /**
48
- * Update configuration at runtime.
49
- */
50
- updateConfig(config: Partial<SandboxConfig>): void;
51
- }
52
- /**
53
- * Get or create the global sandbox instance.
54
- */
55
- export declare function getSandbox(config?: Partial<SandboxConfig>): Sandbox;
56
- /**
57
- * Reset the global sandbox (useful for testing).
58
- */
59
- export declare function resetSandbox(): void;
60
- //# sourceMappingURL=sandbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/security/sandbox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM;IAU/C;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAkC1C;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAqDtE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAcrD;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAcnD;;OAEG;IACH,SAAS,IAAI,aAAa;IAI1B;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;CAkBnD;AAOD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAKnE;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAEnC"}
@@ -1,231 +0,0 @@
1
- /**
2
- * MCP File Forge - Sandbox Security Layer
3
- *
4
- * Path validation and access control for file operations.
5
- */
6
- import * as path from 'node:path';
7
- import * as fs from 'node:fs/promises';
8
- import { minimatch } from 'minimatch';
9
- /**
10
- * Sandbox manager for validating and controlling file access.
11
- */
12
- export class Sandbox {
13
- config;
14
- resolvedAllowedPaths = [];
15
- initialized = false;
16
- constructor(config = {}) {
17
- this.config = {
18
- allowed_paths: config.allowed_paths ?? ['.'],
19
- denied_paths: config.denied_paths,
20
- follow_symlinks: config.follow_symlinks ?? false,
21
- max_file_size: config.max_file_size ?? 104857600, // 100MB
22
- max_depth: config.max_depth ?? 20,
23
- };
24
- }
25
- /**
26
- * Initialize the sandbox by resolving all allowed paths to absolute paths.
27
- */
28
- async initialize() {
29
- if (this.initialized)
30
- return;
31
- this.resolvedAllowedPaths = await Promise.all(this.config.allowed_paths.map(async (p) => {
32
- const resolved = path.resolve(p);
33
- // Verify the path exists
34
- try {
35
- await fs.access(resolved);
36
- return resolved;
37
- }
38
- catch {
39
- // Path doesn't exist yet, but we'll still allow it
40
- return resolved;
41
- }
42
- }));
43
- this.initialized = true;
44
- }
45
- /**
46
- * Check if a path is within the allowed sandbox paths.
47
- */
48
- isPathAllowed(targetPath) {
49
- const resolved = path.resolve(targetPath);
50
- const normalized = path.normalize(resolved);
51
- // Check if path is within any allowed path
52
- const isWithinAllowed = this.resolvedAllowedPaths.some((allowedPath) => {
53
- const normalizedAllowed = path.normalize(allowedPath);
54
- return (normalized === normalizedAllowed ||
55
- normalized.startsWith(normalizedAllowed + path.sep));
56
- });
57
- if (!isWithinAllowed) {
58
- return false;
59
- }
60
- // Check if path matches any denied pattern
61
- if (this.config.denied_paths) {
62
- for (const pattern of this.config.denied_paths) {
63
- if (minimatch(normalized, pattern, { dot: true, nocase: true })) {
64
- return false;
65
- }
66
- // Also check relative path
67
- const relativePath = path.relative(process.cwd(), normalized);
68
- if (minimatch(relativePath, pattern, { dot: true, nocase: true })) {
69
- return false;
70
- }
71
- }
72
- }
73
- return true;
74
- }
75
- /**
76
- * Validate a path and return error if not allowed.
77
- */
78
- async validatePath(targetPath) {
79
- await this.initialize();
80
- const resolved = path.resolve(targetPath);
81
- // Check path traversal attempts
82
- if (this.hasPathTraversal(targetPath)) {
83
- return {
84
- code: 'PATH_OUTSIDE_SANDBOX',
85
- message: 'Path traversal detected',
86
- details: {
87
- path: targetPath,
88
- },
89
- };
90
- }
91
- // Check if path is allowed
92
- if (!this.isPathAllowed(resolved)) {
93
- return {
94
- code: 'PATH_OUTSIDE_SANDBOX',
95
- message: `Path is outside allowed directories`,
96
- details: {
97
- path: resolved,
98
- allowed_paths: this.resolvedAllowedPaths,
99
- },
100
- };
101
- }
102
- // Check symlinks if not allowed
103
- if (!this.config.follow_symlinks) {
104
- try {
105
- const lstat = await fs.lstat(resolved);
106
- if (lstat.isSymbolicLink()) {
107
- const realPath = await fs.realpath(resolved);
108
- if (!this.isPathAllowed(realPath)) {
109
- return {
110
- code: 'PATH_OUTSIDE_SANDBOX',
111
- message: 'Symlink points outside allowed directories',
112
- details: {
113
- symlink: resolved,
114
- target: realPath,
115
- },
116
- };
117
- }
118
- }
119
- }
120
- catch {
121
- // File doesn't exist yet, which is OK for write operations
122
- }
123
- }
124
- return null;
125
- }
126
- /**
127
- * Check if a path contains traversal attempts.
128
- */
129
- hasPathTraversal(targetPath) {
130
- const normalized = path.normalize(targetPath);
131
- const parts = normalized.split(path.sep);
132
- // Check for .. that would escape
133
- let depth = 0;
134
- for (const part of parts) {
135
- if (part === '..') {
136
- depth--;
137
- if (depth < 0)
138
- return true;
139
- }
140
- else if (part && part !== '.') {
141
- depth++;
142
- }
143
- }
144
- return false;
145
- }
146
- /**
147
- * Validate file size against limits.
148
- */
149
- validateFileSize(size) {
150
- if (size > this.config.max_file_size) {
151
- return {
152
- code: 'FILE_TOO_LARGE',
153
- message: `File size ${size} bytes exceeds limit of ${this.config.max_file_size} bytes`,
154
- details: {
155
- size,
156
- limit: this.config.max_file_size,
157
- },
158
- };
159
- }
160
- return null;
161
- }
162
- /**
163
- * Validate recursion depth.
164
- */
165
- validateDepth(depth) {
166
- if (depth > this.config.max_depth) {
167
- return {
168
- code: 'DEPTH_EXCEEDED',
169
- message: `Recursion depth ${depth} exceeds limit of ${this.config.max_depth}`,
170
- details: {
171
- depth,
172
- limit: this.config.max_depth,
173
- },
174
- };
175
- }
176
- return null;
177
- }
178
- /**
179
- * Get the current configuration.
180
- */
181
- getConfig() {
182
- return { ...this.config };
183
- }
184
- /**
185
- * Get resolved allowed paths.
186
- */
187
- getAllowedPaths() {
188
- return [...this.resolvedAllowedPaths];
189
- }
190
- /**
191
- * Update configuration at runtime.
192
- */
193
- updateConfig(config) {
194
- if (config.allowed_paths) {
195
- this.config.allowed_paths = config.allowed_paths;
196
- this.initialized = false; // Force re-initialization
197
- }
198
- if (config.denied_paths !== undefined) {
199
- this.config.denied_paths = config.denied_paths;
200
- }
201
- if (config.follow_symlinks !== undefined) {
202
- this.config.follow_symlinks = config.follow_symlinks;
203
- }
204
- if (config.max_file_size !== undefined) {
205
- this.config.max_file_size = config.max_file_size;
206
- }
207
- if (config.max_depth !== undefined) {
208
- this.config.max_depth = config.max_depth;
209
- }
210
- }
211
- }
212
- /**
213
- * Global sandbox instance.
214
- */
215
- let globalSandbox = null;
216
- /**
217
- * Get or create the global sandbox instance.
218
- */
219
- export function getSandbox(config) {
220
- if (!globalSandbox) {
221
- globalSandbox = new Sandbox(config);
222
- }
223
- return globalSandbox;
224
- }
225
- /**
226
- * Reset the global sandbox (useful for testing).
227
- */
228
- export function resetSandbox() {
229
- globalSandbox = null;
230
- }
231
- //# sourceMappingURL=sandbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/security/sandbox.ts"],"names":[],"mappings":"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"}
package/build/server.d.ts DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * MCP File Forge - Server Implementation
3
- *
4
- * Core MCP server setup with STDIO transport.
5
- */
6
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
- /**
9
- * Create and configure the MCP server instance.
10
- */
11
- export declare function createServer(): McpServer;
12
- /**
13
- * Create STDIO transport for the server.
14
- */
15
- export declare function createTransport(): StdioServerTransport;
16
- /**
17
- * Start the MCP server with STDIO transport.
18
- */
19
- export declare function startServer(): Promise<void>;
20
- //# sourceMappingURL=server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAajF;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAcxC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,oBAAoB,CAEtD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyBjD"}
package/build/server.js DELETED
@@ -1,63 +0,0 @@
1
- /**
2
- * MCP File Forge - Server Implementation
3
- *
4
- * Core MCP server setup with STDIO transport.
5
- */
6
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
- import { registerReadTools } from './tools/read.js';
9
- import { registerWriteTools } from './tools/write.js';
10
- import { registerSearchTools } from './tools/search.js';
11
- import { registerMetadataTools } from './tools/metadata.js';
12
- import { registerScaffoldTools } from './tools/scaffold.js';
13
- import { loadConfig } from './config/index.js';
14
- import { getSandbox, enableReadOnlyMode } from './security/index.js';
15
- // Server metadata
16
- const SERVER_NAME = 'mcp-file-forge';
17
- const SERVER_VERSION = '0.1.0';
18
- /**
19
- * Create and configure the MCP server instance.
20
- */
21
- export function createServer() {
22
- const server = new McpServer({
23
- name: SERVER_NAME,
24
- version: SERVER_VERSION,
25
- });
26
- // Register all tools
27
- registerReadTools(server);
28
- registerWriteTools(server);
29
- registerSearchTools(server);
30
- registerMetadataTools(server);
31
- registerScaffoldTools(server);
32
- return server;
33
- }
34
- /**
35
- * Create STDIO transport for the server.
36
- */
37
- export function createTransport() {
38
- return new StdioServerTransport();
39
- }
40
- /**
41
- * Start the MCP server with STDIO transport.
42
- */
43
- export async function startServer() {
44
- // Load configuration
45
- const config = await loadConfig();
46
- // Initialize sandbox with config
47
- const sandbox = getSandbox(config.sandbox);
48
- await sandbox.initialize();
49
- // Enable read-only mode if configured
50
- if (config.read_only) {
51
- enableReadOnlyMode();
52
- console.error(`[${SERVER_NAME}] Running in read-only mode`);
53
- }
54
- // Create and start server
55
- const server = createServer();
56
- const transport = createTransport();
57
- // Log to stderr (stdout is reserved for MCP protocol)
58
- console.error(`[${SERVER_NAME}] Starting server v${SERVER_VERSION}...`);
59
- console.error(`[${SERVER_NAME}] Allowed paths: ${sandbox.getAllowedPaths().join(', ')}`);
60
- await server.connect(transport);
61
- console.error(`[${SERVER_NAME}] Server connected and ready`);
62
- }
63
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAErE,kBAAkB;AAClB,MAAM,WAAW,GAAG,gBAAgB,CAAC;AACrC,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,qBAAqB;IACrB,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,oBAAoB,EAAE,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,qBAAqB;IACrB,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;IAElC,iCAAiC;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAE3B,sCAAsC;IACtC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,kBAAkB,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,6BAA6B,CAAC,CAAC;IAC9D,CAAC;IAED,0BAA0B;IAC1B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,sDAAsD;IACtD,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,sBAAsB,cAAc,KAAK,CAAC,CAAC;IACxE,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,oBAAoB,OAAO,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEzF,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,8BAA8B,CAAC,CAAC;AAC/D,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * MCP File Forge - File Metadata Tools
3
- *
4
- * Tools for getting file statistics and checking existence.
5
- */
6
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
- /**
8
- * Register file metadata tools with the MCP server.
9
- */
10
- export declare function registerMetadataTools(server: McpServer): void;
11
- //# sourceMappingURL=metadata.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/tools/metadata.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+apE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqD7D"}