Skip to main content
Glama
service.py4.32 kB
# -*- coding: utf-8 -*- """通用服务级 MCP 工具。""" from __future__ import annotations import json from datetime import datetime from app.config.settings import global_settings from app.providers.logger import get_logger logger = get_logger() async def service_info() -> str: """获取服务信息。""" try: # 直接使用 main_app 获取工具数量 from app.api.endpoints import main_app tools_result = await main_app.get_tools() tools_count = len(tools_result) if tools_result else 0 logger.info(f"动态获取工具数量: {tools_count}") except Exception as e: logger.warning(f"获取动态工具数量失败,使用默认值: {e}") tools_count = 8 # 默认值 info = { "name": global_settings.app.name, "version": global_settings.app.version, "description": "AI工具服务", "status": "running", "tools_count": tools_count, } return json.dumps(info, ensure_ascii=False, indent=2) async def service_health() -> str: """健康检查。""" health = { "status": "healthy", "service": global_settings.app.name, "timestamp": datetime.now().isoformat() + "Z", } return json.dumps(health, ensure_ascii=False, indent=2) async def list_tools() -> str: """获取所有工具列表 - 直接使用 main_app。""" try: # 直接使用 main_app 获取工具列表 from app.api.endpoints import main_app tools_result = await main_app.get_tools() logger.info(f"Direct main_app tools result: {tools_result}") # 转换字典格式为简化的分类格式 tools_categories = {} if isinstance(tools_result, dict): for tool_name, tool_obj in tools_result.items(): # 从工具名称提取平台 platform = tool_name.split('_')[0] if '_' in tool_name else 'unknown' if platform not in tools_categories: tools_categories[platform] = [] tools_categories[platform].append({ "name": tool_obj.name, "description": tool_obj.description, "full_name": tool_name }) # 如果没有获取到数据,使用默认结构 if not tools_categories: tools_categories = { "status": "无可用工具或获取失败" } return json.dumps(tools_categories, ensure_ascii=False, indent=2) except Exception as e: logger.error(f"动态获取工具列表失败: {e}") return json.dumps({"error": str(e)}, ensure_ascii=False, indent=2) async def tool_info(tool_name: str) -> str: """获取特定工具信息 - 直接使用 main_app。""" try: # 直接使用 main_app 获取所有工具信息 from app.api.endpoints import main_app tools_result = await main_app.get_tools() # 在工具字典中查找指定工具 if isinstance(tools_result, dict) and tool_name in tools_result: tool_obj = tools_result[tool_name] platform = tool_name.split('_')[0] if '_' in tool_name else 'unknown' info = { "tool": tool_name, "name": tool_obj.name, "description": tool_obj.description, "platform": platform, "available": True, "source": "Direct main_app 获取" } else: info = { "tool": tool_name, "available": False, "message": "工具不存在或未在 MCP 服务中注册", "source": "Direct main_app 查询" } return json.dumps(info, ensure_ascii=False, indent=2) except Exception as e: logger.error(f"动态获取工具信息失败: {e}") info = { "tool": tool_name, "available": False, "message": str(e), "source": f"Error - {str(e)}" } return json.dumps(info, ensure_ascii=False, indent=2) __all__ = ["service_info", "service_health", "list_tools", "tool_info"]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mcp-service/media-crawler-mcp-service'

If you have feedback or need assistance with the MCP directory API, please join our Discord server