Execute tool using SSE transport
(server_config: ServerConfig, tool_name: str, arguments: Dict[str, Any])
| 740 | return {"error": f"Error executing tool via stdio: {str(e)}"} |
| 741 | |
| 742 | async def execute_tool_sse(server_config: ServerConfig, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]: |
| 743 | """Execute tool using SSE transport""" |
| 744 | if not server_config.url: |
| 745 | return {"error": "SSE transport requires URL"} |
| 746 | |
| 747 | try: |
| 748 | # Expand environment variables in headers |
| 749 | expanded_headers = {} |
| 750 | for key, value in server_config.headers.items(): |
| 751 | if isinstance(value, str) and value.startswith("${") and value.endswith("}"): |
| 752 | env_var = value[2:-1] |
| 753 | expanded_value = os.environ.get(env_var) |
| 754 | if expanded_value: |
| 755 | expanded_headers[key] = expanded_value |
| 756 | else: |
| 757 | logger.warning(f"Environment variable {env_var} not found for header {key}") |
| 758 | else: |
| 759 | expanded_headers[key] = value |
| 760 | |
| 761 | logger.debug(f" URL: {server_config.url}") |
| 762 | logger.debug(f" Headers: {list(expanded_headers.keys())}") |
| 763 | |
| 764 | async with sse_client( |
| 765 | url=server_config.url, |
| 766 | headers=expanded_headers, |
| 767 | timeout=server_config.timeout, |
| 768 | sse_read_timeout=server_config.sse_read_timeout |
| 769 | ) as (read_stream, write_stream): |
| 770 | async with LoggingClientSession(read_stream, write_stream) as session: |
| 771 | return await execute_tool_with_session(session, tool_name, arguments) |
| 772 | |
| 773 | except Exception as e: |
| 774 | logger.error(f"Error with SSE tool execution: {e}") |
| 775 | logger.error(traceback.format_exc()) |
| 776 | return {"error": f"Error executing tool via SSE: {str(e)}"} |
| 777 | |
| 778 | async def execute_tool_websocket(server_config: ServerConfig, tool_name: str, arguments: Dict[str, Any]) -> Dict[str, Any]: |
| 779 | """Execute tool using WebSocket transport""" |