Skip to main content
Glama
sichang824

MCP Terminal

by sichang824

file_modify

Modify file content by writing, appending, or inserting text at specific positions within files on the MCP Terminal server.

Instructions

Writes content to a file

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filepathYes
contentYes
modeNooverwrite
positionNo
create_dirsNo

Implementation Reference

  • The core handler function for the 'file_modify' tool. It writes content to a specified file path using one of three modes: overwrite, append, or insert at a position. Handles directory creation, error logging, and returns a structured response.
    @mcp.tool(name="file_modify", description="Writes content to a file")
    async def file_modify(
        filepath: str,
        content: str,
        mode: WriteMode = WriteMode.OVERWRITE,
        position: Optional[int] = None,
        create_dirs: bool = True,
    ) -> FileOperationResponse:
        try:
            # Create directories if they don't exist
            if create_dirs:
                directory = os.path.dirname(filepath)
                if directory and not os.path.exists(directory):
                    os.makedirs(directory)
    
            # Handle different write modes
            details = {"mode": mode}
    
            if mode == WriteMode.INSERT:
                if position is None:
                    raise ValueError(
                        "Position must be specified when using INSERT mode"
                    )
    
                # Read existing content if file exists
                existing_content = ""
                if os.path.exists(filepath):
                    with open(filepath, "r", encoding="utf-8") as f:
                        existing_content = f.read()
    
                # Insert the new content at the specified position
                position = min(position, len(existing_content))
                new_content = (
                    existing_content[:position]
                    + content
                    + existing_content[position:]
                )
                details["position"] = position
    
                # Write the combined content
                with open(filepath, "w", encoding="utf-8") as f:
                    f.write(new_content)
    
            elif mode == WriteMode.APPEND:
                # Append to file
                with open(filepath, "a", encoding="utf-8") as f:
                    f.write(content)
    
            else:  # OVERWRITE
                # Overwrite file
                with open(filepath, "w", encoding="utf-8") as f:
                    f.write(content)
    
            return FileOperationResponse(
                success=True, filepath=filepath, details=details
            )
    
        except Exception as e:
            logger.error(f"Error writing to file {filepath}: {e}")
            return FileOperationResponse(
                success=False,
                error=f"Error writing to file: {str(e)}",
                filepath=filepath,
            )
  • Pydantic model defining the response structure for file operations, including success status, error message, filepath, and details. Used as return type for file_modify.
    class FileOperationResponse(BaseModel):
        """Response model for file operations."""
    
        success: bool = Field(..., description="Whether the operation was successful")
        error: Optional[str] = Field(
            None, description="Error message if the operation failed"
        )
        filepath: str = Field(..., description="Path to the file that was operated on")
        details: Optional[Dict[str, Any]] = Field(
            None, description="Additional operation details"
        )
  • Enum defining the write modes supported by the file_modify tool: OVERWRITE, APPEND, INSERT.
    class WriteMode(str, Enum):
        """Enum representing different file writing modes."""
    
        OVERWRITE = "overwrite"  # Overwrite the entire file
        APPEND = "append"  # Append to the end of the file
        INSERT = "insert"  # Insert at a specific position
  • In the register_tools method of MCPTerminalServer, the FileTool instance is created and its register_mcp method is called on the FastMCP server instance, which in turn registers the file_modify tool via its decorator.
    terminal_tool = TerminalTool(
        self.controller_type,
        whitelist_file=self.whitelist_file,
        blacklist_file=self.blacklist_file,
        whitelist_mode=self.whitelist_mode,
    )
    file_tool = FileTool()
    terminal_tool.register_mcp(self.mcp)
    file_tool.register_mcp(self.mcp)
    self.tools["terminal"] = terminal_tool
    self.tools["file"] = file_tool

Tool Definition Quality

Score is being calculated. Check back soon.

Install Server

Other Tools

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/sichang824/mcp-terminal'

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