delete_file
Delete files with policy enforcement and optional backup, ensuring safe file removal within configured boundaries.
Instructions
Delete a single file after policy checks and optional pre-delete backup.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| ctx | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- src/tools/file_tools.py:235-284 (handler)The core implementation of the delete_file tool. Validates path policy, checks file exists, refuses directories, performs optional backup, uses os.remove() to delete the file, and returns a result message.
def delete_file(path: str, ctx: Context | None = None) -> str: """Delete a single file after policy checks and optional pre-delete backup.""" context_tokens = activate_runtime_context(ctx) path = str(pathlib.Path(WORKSPACE_ROOT) / path) if not os.path.isabs(path) else path try: refresh_policy_if_changed() path_check = check_path_policy(path, tool="delete_file") if path_check: result = PolicyResult(allowed=False, reason=path_check[0], decision_tier="blocked", matched_rule=path_check[1]) else: result = PolicyResult(allowed=True, reason="allowed", decision_tier="allowed", matched_rule=None) if result.allowed: if not os.path.exists(path): append_log_entry(build_log_entry("delete_file", result, path=path, error="file not found")) return f"Error: file not found: {path}" if os.path.isdir(path): result = PolicyResult( allowed=False, reason=f"'{path}' is a directory - delete_file only removes individual files. Use execute_command for directory operations (note: bulk/recursive deletions are also subject to policy).", decision_tier="blocked", matched_rule=None, ) log_entry = build_log_entry("delete_file", result, path=path) if not result.allowed: append_log_entry(log_entry) return f"[POLICY BLOCK] {result.reason}" backup_enabled = bool(POLICY.get("audit", {}).get("backup_enabled", True)) backup_location = backup_paths([path]) if backup_enabled else "" if backup_location: log_entry["backup_location"] = backup_location append_log_entry(log_entry) try: os.remove(path) except OSError as e: return f"Error deleting file: {e}" return f"Successfully deleted {path}. " + ( f"Backup saved to {backup_location} - the file can be recovered from there." if backup_location else "No content-change backup was needed." ) finally: reset_runtime_context(context_tokens) - src/server.py:21-31 (registration)The MCP server registers delete_file as a tool via mcp.tool()(delete_file) in a loop over the tool list.
for tool in [ server_info, restore_backup, execute_command, read_file, write_file, edit_file, delete_file, list_directory, ]: mcp.tool()(tool) - src/tools/__init__.py:2-14 (registration)Re-exports delete_file from file_tools module in the package's __init__.py.
from .file_tools import delete_file, edit_file, list_directory, read_file, write_file from .restore_tools import restore_backup __all__ = [ "server_info", "execute_command", "read_file", "write_file", "edit_file", "delete_file", "list_directory", "restore_backup", ] - src/mcp_config_manager.py:30-39 (registration)Lists delete_file as one of the AIRG MCP tools in the config manager.
AIRG_MCP_TOOLS = [ "server_info", "restore_backup", "execute_command", "read_file", "write_file", "edit_file", "delete_file", "list_directory", ] - src/airg_hook.py:17-18 (helper)Maps the 'Delete' action from codex/AirG to the MCP tool name 'mcp__ai-runtime-guard__delete_file'.
"Delete": "mcp__ai-runtime-guard__delete_file", }