MCPcopy Create free account
hub / github.com/TheSecuredAnalyst/security-suite / handle_tool_error

Function handle_tool_error

core/tools.py:109–149  ·  view source on GitHub ↗

Decorator for graceful error handling of tool operations. Args: tool_name: Name of the tool fallback_value: Value to return if tool fails log_level: Log level for errors Example: @handle_tool_error("nmap", fallback_value=[]) async def sca

(
    tool_name: str,
    fallback_value=None,
    log_level: str = "warning",
)

Source from the content-addressed store, hash-verified

107def handle_tool_error(
108 tool_name: str,
109 fallback_value=None,
110 log_level: str = "warning",
111):
112 """Decorator for graceful error handling of tool operations.
113
114 Args:
115 tool_name: Name of the tool
116 fallback_value: Value to return if tool fails
117 log_level: Log level for errors
118
119 Example:
120 @handle_tool_error("nmap", fallback_value=[])
121 async def scan_ports(target):
122 # nmap code
123 pass
124 """
125 def decorator(func):
126 async def wrapper(*args, **kwargs):
127 try:
128 return await func(*args, **kwargs)
129 except ToolNotFoundError as e:
130 logger.log(
131 level=getattr(logger, log_level.upper()),
132 msg=f"Skipping {tool_name}: {e}"
133 )
134 return fallback_value
135 except ToolExecutionError as e:
136 logger.log(
137 level=getattr(logger, log_level.upper()),
138 msg=f"{tool_name} execution failed: {e.error}"
139 )
140 return fallback_value
141 except Exception as e:
142 logger.error(f"Unexpected error in {tool_name}: {e}")
143 return fallback_value
144
145 return wrapper
146
147 return decorator

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected