createfile
Generate and save files by specifying a file path and content, enabling automated file creation through the MCP File Server interface.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Content to write to the file | |
| filePath | Yes | Path where the file should be created |
Implementation Reference
- src/index.js:30-99 (handler)The handler function for the createfile tool, which ensures the directory exists, writes the file content using fs.writeFile, updates Sentry span with metrics, and returns success or error message.async ({ filePath, content }) => { return await Sentry.startSpan( { name: "createFile", op: "tool.createfile", attributes: { 'file.path': filePath, 'file.content.length': content.length } }, async (span) => { try { // Ensure the directory exists const dirPath = path.dirname(filePath); span.setAttribute('file.directory', dirPath); try { await fs.mkdir(dirPath, { recursive: true }); span.setAttribute('directory.created', true); } catch (mkdirError) { // Directory might already exist, just log this to the span span.setAttribute('directory.creation.error', mkdirError.message); } // Write the file const startTime = Date.now(); await fs.writeFile(filePath, content, 'utf8'); const endTime = Date.now(); // Update span with file details const fileStats = await fs.stat(filePath); span.setAttributes({ 'file.size': fileStats.size, 'operation.duration_ms': endTime - startTime }); span.setStatus("ok"); return { content: [ { type: "text", text: `File created successfully at: ${filePath}\nSize: ${fileStats.size} bytes` } ] }; } catch (error) { // Add error information to the span span.setAttributes({ 'error.message': error.message, 'error.stack': error.stack }); span.setStatus("error"); // Capture the exception for Sentry Sentry.captureException(error); return { content: [ { type: "text", text: `Error creating file: ${error.message}` } ] }; } } ); } )
- src/index.js:26-29 (schema)Zod input schema defining filePath and content parameters for the createfile tool.{ filePath: z.string().describe("Path where the file should be created"), content: z.string().describe("Content to write to the file") },
- src/index.js:24-100 (registration)Registration of the createfile tool using server.tool() with name, input schema, and handler function.server.tool( "createfile", { filePath: z.string().describe("Path where the file should be created"), content: z.string().describe("Content to write to the file") }, async ({ filePath, content }) => { return await Sentry.startSpan( { name: "createFile", op: "tool.createfile", attributes: { 'file.path': filePath, 'file.content.length': content.length } }, async (span) => { try { // Ensure the directory exists const dirPath = path.dirname(filePath); span.setAttribute('file.directory', dirPath); try { await fs.mkdir(dirPath, { recursive: true }); span.setAttribute('directory.created', true); } catch (mkdirError) { // Directory might already exist, just log this to the span span.setAttribute('directory.creation.error', mkdirError.message); } // Write the file const startTime = Date.now(); await fs.writeFile(filePath, content, 'utf8'); const endTime = Date.now(); // Update span with file details const fileStats = await fs.stat(filePath); span.setAttributes({ 'file.size': fileStats.size, 'operation.duration_ms': endTime - startTime }); span.setStatus("ok"); return { content: [ { type: "text", text: `File created successfully at: ${filePath}\nSize: ${fileStats.size} bytes` } ] }; } catch (error) { // Add error information to the span span.setAttributes({ 'error.message': error.message, 'error.stack': error.stack }); span.setStatus("error"); // Capture the exception for Sentry Sentry.captureException(error); return { content: [ { type: "text", text: `Error creating file: ${error.message}` } ] }; } } ); } )