Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

mcp_server_service.py 3.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #
  2. # Copyright 2025 The InfiniFlow Authors. All Rights Reserved.
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. # http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10. # Unless required by applicable law or agreed to in writing, software
  11. # distributed under the License is distributed on an "AS IS" BASIS,
  12. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. # See the License for the specific language governing permissions and
  14. # limitations under the License.
  15. #
  16. from peewee import fn
  17. from api.db.db_models import DB, MCPServer
  18. from api.db.services.common_service import CommonService
  19. class MCPServerService(CommonService):
  20. """Service class for managing MCP server related database operations.
  21. This class extends CommonService to provide specialized functionality for MCP server management,
  22. including MCP server creation, updates, and deletions.
  23. Attributes:
  24. model: The MCPServer model class for database operations.
  25. """
  26. model = MCPServer
  27. @classmethod
  28. @DB.connection_context()
  29. def get_servers(cls, tenant_id: str, id_list: list[str] | None, page_number, items_per_page, orderby, desc, keywords):
  30. """Retrieve all MCP servers associated with a tenant.
  31. This method fetches all MCP servers for a given tenant, ordered by creation time.
  32. It only includes fields for list display.
  33. Args:
  34. tenant_id (str): The unique identifier of the tenant.
  35. id_list (list[str]): Get servers by ID list. Will ignore this condition if None.
  36. Returns:
  37. list[dict]: List of MCP server dictionaries containing MCP server details.
  38. Returns None if no MCP servers are found.
  39. """
  40. fields = [
  41. cls.model.id,
  42. cls.model.name,
  43. cls.model.server_type,
  44. cls.model.url,
  45. cls.model.description,
  46. cls.model.variables,
  47. cls.model.create_date,
  48. cls.model.update_date,
  49. ]
  50. query = cls.model.select(*fields).order_by(cls.model.create_time.desc()).where(cls.model.tenant_id == tenant_id)
  51. if id_list:
  52. query = query.where(cls.model.id.in_(id_list))
  53. if keywords:
  54. query = query.where(fn.LOWER(cls.model.name).contains(keywords.lower()))
  55. if desc:
  56. query = query.order_by(cls.model.getter_by(orderby).desc())
  57. else:
  58. query = query.order_by(cls.model.getter_by(orderby).asc())
  59. if page_number and items_per_page:
  60. query = query.paginate(page_number, items_per_page)
  61. servers = list(query.dicts())
  62. if not servers:
  63. return None
  64. return servers
  65. @classmethod
  66. @DB.connection_context()
  67. def get_by_name_and_tenant(cls, name: str, tenant_id: str):
  68. try:
  69. mcp_server = cls.model.query(name=name, tenant_id=tenant_id)
  70. return bool(mcp_server), mcp_server
  71. except Exception:
  72. return False, None