1313# See the License for the specific language governing permissions and
1414# limitations under the License.
1515#
16+ import asyncio
17+
1618from quart import Response , request
1719from api .apps import current_user , login_required
1820
@@ -106,7 +108,7 @@ async def create() -> Response:
106108 return get_data_error_result (message = "Tenant not found." )
107109
108110 mcp_server = MCPServer (id = server_name , name = server_name , url = url , server_type = server_type , variables = variables , headers = headers )
109- server_tools , err_message = get_mcp_tools ( [mcp_server ], timeout )
111+ server_tools , err_message = await asyncio . to_thread ( get_mcp_tools , [mcp_server ], timeout )
110112 if err_message :
111113 return get_data_error_result (err_message )
112114
@@ -158,7 +160,7 @@ async def update() -> Response:
158160 req ["id" ] = mcp_id
159161
160162 mcp_server = MCPServer (id = server_name , name = server_name , url = url , server_type = server_type , variables = variables , headers = headers )
161- server_tools , err_message = get_mcp_tools ( [mcp_server ], timeout )
163+ server_tools , err_message = await asyncio . to_thread ( get_mcp_tools , [mcp_server ], timeout )
162164 if err_message :
163165 return get_data_error_result (err_message )
164166
@@ -242,7 +244,7 @@ async def import_multiple() -> Response:
242244 headers = {"authorization_token" : config ["authorization_token" ]} if "authorization_token" in config else {}
243245 variables = {k : v for k , v in config .items () if k not in {"type" , "url" , "headers" }}
244246 mcp_server = MCPServer (id = new_name , name = new_name , url = config ["url" ], server_type = config ["type" ], variables = variables , headers = headers )
245- server_tools , err_message = get_mcp_tools ( [mcp_server ], timeout )
247+ server_tools , err_message = await asyncio . to_thread ( get_mcp_tools , [mcp_server ], timeout )
246248 if err_message :
247249 results .append ({"server" : base_name , "success" : False , "message" : err_message })
248250 continue
@@ -322,7 +324,7 @@ async def list_tools() -> Response:
322324 tool_call_sessions .append (tool_call_session )
323325
324326 try :
325- tools = tool_call_session .get_tools ( timeout )
327+ tools = await asyncio . to_thread ( tool_call_session .get_tools , timeout )
326328 except Exception as e :
327329 tools = []
328330 return get_data_error_result (message = f"MCP list tools error: { e } " )
@@ -340,7 +342,7 @@ async def list_tools() -> Response:
340342 return server_error_response (e )
341343 finally :
342344 # PERF: blocking call to close sessions — consider moving to background thread or task queue
343- close_multiple_mcp_toolcall_sessions ( tool_call_sessions )
345+ await asyncio . to_thread ( close_multiple_mcp_toolcall_sessions , tool_call_sessions )
344346
345347
346348@manager .route ("/test_tool" , methods = ["POST" ]) # noqa: F821
@@ -367,10 +369,10 @@ async def test_tool() -> Response:
367369
368370 tool_call_session = MCPToolCallSession (mcp_server , mcp_server .variables )
369371 tool_call_sessions .append (tool_call_session )
370- result = tool_call_session .tool_call ( tool_name , arguments , timeout )
372+ result = await asyncio . to_thread ( tool_call_session .tool_call , tool_name , arguments , timeout )
371373
372374 # PERF: blocking call to close sessions — consider moving to background thread or task queue
373- close_multiple_mcp_toolcall_sessions ( tool_call_sessions )
375+ await asyncio . to_thread ( close_multiple_mcp_toolcall_sessions , tool_call_sessions )
374376 return get_json_result (data = result )
375377 except Exception as e :
376378 return server_error_response (e )
@@ -424,13 +426,13 @@ async def test_mcp() -> Response:
424426 tool_call_session = MCPToolCallSession (mcp_server , mcp_server .variables )
425427
426428 try :
427- tools = tool_call_session .get_tools ( timeout )
429+ tools = await asyncio . to_thread ( tool_call_session .get_tools , timeout )
428430 except Exception as e :
429431 tools = []
430432 return get_data_error_result (message = f"Test MCP error: { e } " )
431433 finally :
432434 # PERF: blocking call to close sessions — consider moving to background thread or task queue
433- close_multiple_mcp_toolcall_sessions ( [tool_call_session ])
435+ await asyncio . to_thread ( close_multiple_mcp_toolcall_sessions , [tool_call_session ])
434436
435437 for tool in tools :
436438 tool_dict = tool .model_dump ()
0 commit comments