fileWrite
Create, edit, and write files with support for write, append, and JSON modes, directory creation, and formatting options.
Instructions
檔案寫入功能,為文件提供建立、編輯與寫入功能
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | ||
| content | Yes | ||
| mode | No | write | |
| createDirs | No | ||
| prettify | No |
Implementation Reference
- main.ts:139-172 (handler)Main handler function that executes the fileWrite tool logic. It handles different modes ('write', 'append', 'json') by calling appropriate FileWriterTool static methods and returns MCP formatted response.async ({ filePath, content, mode = 'write', createDirs = true, prettify = true }) => { try { let result = ''; // 根據模式選擇適當的方法 switch (mode) { case 'write': result = await FileWriterTool.writeTextToFile(filePath, content, createDirs); break; case 'append': result = await FileWriterTool.appendTextToFile(filePath, content, createDirs); break; case 'json': try { // 嘗試解析JSON const jsonData = JSON.parse(content); result = await FileWriterTool.writeJsonToFile(filePath, jsonData, prettify, createDirs); } catch (parseError) { return { content: [{ type: "text", text: `JSON格式錯誤: ${parseError instanceof Error ? parseError.message : "未知錯誤"}` }] }; } break; } return { content: [{ type: "text", text: result }] }; } catch (error) { return { content: [{ type: "text", text: `檔案寫入失敗: ${error instanceof Error ? error.message : "未知錯誤"}` }] }; } }
- main.ts:132-138 (schema)Input schema using Zod for validating parameters of the fileWrite tool: filePath, content, mode, createDirs, prettify.{ filePath: z.string(), content: z.string(), mode: z.enum(['write', 'append', 'json']).default('write'), createDirs: z.boolean().optional(), prettify: z.boolean().optional() },
- main.ts:130-173 (registration)Registration of the 'fileWrite' tool on the MCP server, including name, description, schema, and handler.server.tool("fileWrite", "檔案寫入功能,為文件提供建立、編輯與寫入功能", { filePath: z.string(), content: z.string(), mode: z.enum(['write', 'append', 'json']).default('write'), createDirs: z.boolean().optional(), prettify: z.boolean().optional() }, async ({ filePath, content, mode = 'write', createDirs = true, prettify = true }) => { try { let result = ''; // 根據模式選擇適當的方法 switch (mode) { case 'write': result = await FileWriterTool.writeTextToFile(filePath, content, createDirs); break; case 'append': result = await FileWriterTool.appendTextToFile(filePath, content, createDirs); break; case 'json': try { // 嘗試解析JSON const jsonData = JSON.parse(content); result = await FileWriterTool.writeJsonToFile(filePath, jsonData, prettify, createDirs); } catch (parseError) { return { content: [{ type: "text", text: `JSON格式錯誤: ${parseError instanceof Error ? parseError.message : "未知錯誤"}` }] }; } break; } return { content: [{ type: "text", text: result }] }; } catch (error) { return { content: [{ type: "text", text: `檔案寫入失敗: ${error instanceof Error ? error.message : "未知錯誤"}` }] }; } } );
- tools/fileWriterTool.ts:70-89 (helper)Core helper method for writing text to file, creates directories if needed, handles errors.static async writeTextToFile(filePath: string, content: string, createDirs: boolean = true): Promise<string> { try { // 獲取目錄路徑 const directory = path.dirname(filePath); // 檢查並創建目錄(如果不存在且createDirs為true) if (createDirs && !existsSync(directory)) { mkdirSync(directory, { recursive: true }); console.log(`已創建目錄: ${directory}`); } // 寫入檔案 await fs.writeFile(filePath, content, 'utf8'); return `檔案已成功寫入: ${filePath}`; } catch (error) { console.error(`寫入檔案時發生錯誤: ${error}`); return `寫入檔案時發生錯誤: ${error instanceof Error ? error.message : '未知錯誤'}`; } }
- tools/fileWriterTool.ts:121-147 (helper)Core helper method for appending text to file, creates file/dir if specified, handles errors.static async appendTextToFile(filePath: string, content: string, createIfNotExist: boolean = true): Promise<string> { try { // 檢查檔案是否存在 const fileExists = existsSync(filePath); // 如果檔案不存在且不需要創建,則返回錯誤 if (!fileExists && !createIfNotExist) { return `錯誤: 檔案 ${filePath} 不存在`; } // 獲取目錄路徑(如果需要創建文件) if (!fileExists && createIfNotExist) { const directory = path.dirname(filePath); if (!existsSync(directory)) { mkdirSync(directory, { recursive: true }); } } // 追加內容到檔案 await fs.appendFile(filePath, content, 'utf8'); return `內容已成功追加到檔案: ${filePath}`; } catch (error) { console.error(`追加內容到檔案時發生錯誤: ${error}`); return `追加內容到檔案時發生錯誤: ${error instanceof Error ? error.message : '未知錯誤'}`; } }