Skip to main content
Glama

write_file

Create or update files by specifying a path and content, with options for encoding and directory creation.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes
encodingNoutf8
createDirectoriesNo

Implementation Reference

  • The handler function for the 'write_file' tool. It validates the file path, optionally creates parent directories, writes the provided content to the file using fs.writeFile, and returns a success message with the character count.
    async ({ path: filePath, content, encoding, createDirectories }) => {
      return wrapToolExecution(async () => {
        const validatedPath = await validatePath(filePath);
    
        if (createDirectories) {
          const dir = path.dirname(validatedPath);
          await fs.mkdir(dir, { recursive: true });
        }
    
        await fs.writeFile(validatedPath, content, { encoding: encoding as FileEncoding });
    
        return {
          content: [{
            type: "text" as const,
            text: `Successfully wrote ${content.length} characters to ${validatedPath}`
          }]
        };
      }, {
        errorCode: ERROR_CODES.FILE_OPERATION,
        context: "Failed to write file"
      });
    }
  • Zod schema defining the input parameters for the 'write_file' tool: path (required string), content (string), encoding (optional enum), createDirectories (optional boolean).
    {
      path: z.string().min(1, "Path is required"),
      content: z.string(),
      encoding: z.enum(["utf8", "utf-16le", "latin1"]).optional().default(DEFAULTS.FILE_ENCODING),
      createDirectories: z.boolean().optional().default(DEFAULTS.CREATE_DIRECTORIES)
    },
  • The registerWriteFile function that registers the 'write_file' tool on the MCP server using server.tool(), including the schema and handler.
    function registerWriteFile(server: McpServer): void {
      server.tool("write_file",
        {
          path: z.string().min(1, "Path is required"),
          content: z.string(),
          encoding: z.enum(["utf8", "utf-16le", "latin1"]).optional().default(DEFAULTS.FILE_ENCODING),
          createDirectories: z.boolean().optional().default(DEFAULTS.CREATE_DIRECTORIES)
        },
        async ({ path: filePath, content, encoding, createDirectories }) => {
          return wrapToolExecution(async () => {
            const validatedPath = await validatePath(filePath);
    
            if (createDirectories) {
              const dir = path.dirname(validatedPath);
              await fs.mkdir(dir, { recursive: true });
            }
    
            await fs.writeFile(validatedPath, content, { encoding: encoding as FileEncoding });
    
            return {
              content: [{
                type: "text" as const,
                text: `Successfully wrote ${content.length} characters to ${validatedPath}`
              }]
            };
          }, {
            errorCode: ERROR_CODES.FILE_OPERATION,
            context: "Failed to write file"
          });
        }
      );
    }
  • src/index.ts:65-65 (registration)
    Top-level registration call in the main server initialization that invokes registerFileTools, which includes the write_file tool.
    registerFileTools(server);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ishuru/open-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server