Skip to main content
Glama
class_method.py8.7 kB
"""Magic-API 类和方法检索 MCP 工具。 此模块提供Java类和方法的检索功能,支持: - 类和方法的分页浏览 - 类详细信息查询 - 方法签名和参数信息获取 - 继承关系和接口实现查询 - 构造函数和静态方法识别 主要工具: - list_magic_api_classes: 列出所有Magic-API可用的类、扩展和函数,支持翻页浏览 - get_class_details: 获取指定类的详细信息,包括方法、属性和继承关系 - get_method_details: 获取指定方法的详细信息,包括参数类型和返回值 """ from __future__ import annotations from typing import TYPE_CHECKING, Annotated, Any, Dict, Literal, Optional from pydantic import Field from magicapi_tools.tools.common import error_response if TYPE_CHECKING: from fastmcp import FastMCP from magicapi_mcp.tool_registry import ToolContext class ClassMethodTools: """类和方法检索工具模块。""" def register_tools(self, mcp_app: "FastMCP", context: "ToolContext") -> None: # pragma: no cover - 装饰器环境 """注册类和方法检索相关工具。""" @mcp_app.tool( name="list_magic_api_classes", description="列出所有 Magic-API 可用的类、扩展和函数,支持翻页浏览。", tags={"class", "method", "list", "browse", "pagination"}, ) def list_magic_api_classes_tool( page: Annotated[ int, Field(description="页码,从1开始,默认1") ] = 1, page_size: Annotated[ int, Field(description="每页显示的数量,默认10") ] = 10, ) -> Dict[str, Any]: """列出所有 Magic-API 可用的类、扩展和函数。""" try: if page < 1: return error_response("invalid_param", "页码必须大于等于1") if page_size < 1: return error_response("invalid_param", "每页大小必须大于等于1") # 使用服务层处理类列表查询 response = context.class_method_service.list_magic_classes(page, page_size) return response.to_dict() except Exception as exc: return error_response("list_error", f"列出类信息失败: {exc}") @mcp_app.tool( name="search_magic_api_classes", description="在 Magic-API 类信息中进行增强搜索,支持正则表达式、关键词、多条件过滤。", tags={"class", "method", "search", "regex", "filter", "pagination"}, ) def search_magic_api_classes_tool( pattern: Annotated[ str, Field(description="搜索模式:关键词或正则表达式") ], search_type: Annotated[ Literal["keyword", "regex"], Field(description="搜索类型:keyword(关键词)或 regex(正则表达式)") ] = "keyword", case_sensitive: Annotated[ bool, Field(description="是否区分大小写,默认false") ] = False, logic: Annotated[ Literal["and", "or"], Field(description="多关键词逻辑:and 或 or,默认or") ] = "or", scope: Annotated[ Literal["all", "class", "method", "field"], Field(description="搜索范围:all(全部)、class(仅类名)、method(仅方法)、field(仅字段),默认all") ] = "all", exact: Annotated[ bool, Field(description="是否精确匹配,默认false") ] = False, exclude_pattern: Annotated[ Optional[str], Field(description="排除包含此模式的匹配项") ] = None, page: Annotated[ int, Field(description="页码,从1开始,默认1") ] = 1, page_size: Annotated[ int, Field(description="每页显示的数量,默认10") ] = 10, ) -> Dict[str, Any]: """在 Magic-API 类信息中进行增强搜索。""" try: if page < 1: return error_response("invalid_param", "页码必须大于等于1") if page_size < 1: return error_response("invalid_param", "每页大小必须大于等于1") if not pattern.strip(): return error_response("invalid_param", "搜索模式不能为空") # 验证正则表达式 if search_type == "regex": try: re.compile(pattern) except re.error as e: return error_response("invalid_param", f"无效的正则表达式: {e}") # 使用服务层处理类搜索查询 from magicapi_tools.domain.dtos.class_method_dtos import ClassSearchRequest request = ClassSearchRequest( query_type="search", pattern=pattern, search_type=search_type, case_sensitive=case_sensitive, logic=logic, scope=scope, exact=exact, exclude_pattern=exclude_pattern, page=page, page_size=page_size ) response = context.class_method_service.search_magic_classes(request) return response.to_dict() except Exception as exc: return error_response("search_error", f"搜索类信息失败: {exc}") @mcp_app.tool( name="search_magic_api_classes_txt", description="在 Magic-API 压缩类信息中进行快速搜索。", tags={"class", "search", "compressed", "txt", "pagination"}, ) def search_magic_api_classes_txt_tool( keyword: Annotated[ str, Field(description="搜索关键词") ], case_sensitive: Annotated[ bool, Field(description="是否区分大小写,默认false") ] = False, page: Annotated[ int, Field(description="页码,从1开始,默认1") ] = 1, page_size: Annotated[ int, Field(description="每页显示的数量,默认10") ] = 10, ) -> Dict[str, Any]: """在压缩类信息中搜索关键词。""" try: if page < 1: return error_response("invalid_param", "页码必须大于等于1") if page_size < 1: return error_response("invalid_param", "每页大小必须大于等于1") if not keyword.strip(): return error_response("invalid_param", "搜索关键词不能为空") # 使用服务层处理压缩类搜索查询 response = context.class_method_service.search_magic_classes_txt( keyword, case_sensitive, page, page_size ) return response.to_dict() except Exception as exc: return error_response("search_txt_error", f"搜索压缩类信息失败: {exc}") @mcp_app.tool( name="get_magic_api_class_details", description="获取指定 Magic-API 类的详细信息,包括方法和字段。", tags={"class", "method", "details", "info"}, ) def get_magic_api_class_details_tool( class_name: Annotated[ str, Field(description="类名") ], ) -> Dict[str, Any]: """获取指定类的详细信息。""" try: if not class_name.strip(): return error_response("invalid_param", "类名不能为空") # 使用服务层处理类详情查询 from magicapi_tools.domain.dtos.class_method_dtos import ClassDetailRequest request = ClassDetailRequest(class_name=class_name) response = context.class_method_service.get_magic_api_class_details(request) return response.to_dict() except Exception as exc: return error_response("details_error", f"获取类详情失败: {exc}")

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/Dwsy/magic-api-mcp-server'

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