您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

mcp_server.py 1.2KB

12345678910111213141516171819202122232425262728293031323334
  1. from api.db.db_models import MCPServer
  2. from rag.utils.mcp_tool_call_conn import MCPToolCallSession, close_multiple_mcp_toolcall_sessions
  3. def get_mcp_tools(mcp_servers: list[MCPServer], timeout: float | int = 10) -> tuple[dict, str]:
  4. results = {}
  5. tool_call_sessions = []
  6. try:
  7. for mcp_server in mcp_servers:
  8. server_key = mcp_server.id
  9. cached_tools = mcp_server.variables.get("tools", {})
  10. tool_call_session = MCPToolCallSession(mcp_server, mcp_server.variables)
  11. tool_call_sessions.append(tool_call_session)
  12. try:
  13. tools = tool_call_session.get_tools(timeout)
  14. except Exception:
  15. tools = []
  16. results[server_key] = []
  17. for tool in tools:
  18. tool_dict = tool.model_dump()
  19. cached_tool = cached_tools.get(tool_dict["name"], {})
  20. tool_dict["enabled"] = cached_tool.get("enabled", True)
  21. results[server_key].append(tool_dict)
  22. # PERF: blocking call to close sessions — consider moving to background thread or task queue
  23. close_multiple_mcp_toolcall_sessions(tool_call_sessions)
  24. return results, ""
  25. except Exception as e:
  26. return {}, str(e)