Skip to main content
Glama

FastAPI OpenAPI MCP Server

by jason-chang
base.py2.42 kB
""" MCP Tool 基类 所有自定义 Tool 都应继承此基类并实现 execute() 方法。 """ from abc import ABC, abstractmethod from typing import TYPE_CHECKING, Any from mcp.types import CallToolResult if TYPE_CHECKING: from openapi_mcp.server import OpenApiMcpServer # type: ignore[import-not-found] class BaseMcpTool(ABC): """MCP Tool 抽象基类 所有自定义 Tool 都应继承此基类并实现 execute() 方法。 基类提供了访问 OpenAPI schema 的通用接口。 Attributes: name: Tool 名称,必须是唯一的标识符 description: Tool 的功能描述,用于 AI 理解工具用途 input_schema: 输入参数的 JSON Schema 定义,None 表示无参数 """ name: str description: str input_schema: dict[str, Any] | None = None def __init__(self, server: 'OpenApiMcpServer') -> None: """初始化 Tool Args: server: OpenApiMcpServer 实例,用于访问 OpenAPI schema 和配置 """ self.server = server # 获取格式化器 self._formatter = self._get_formatter() def _get_formatter(self): """根据配置获取格式化器 Returns: 格式化器实例 """ from openapi_mcp.formatters import ( JsonFormatter, MarkdownFormatter, PlainTextFormatter, ) output_format = self.server.config.output_format max_length = self.server.config.max_output_length if output_format == 'json': return JsonFormatter(max_length=max_length) elif output_format == 'plain': return PlainTextFormatter(max_length=max_length) else: # 默认使用 markdown return MarkdownFormatter(max_length=max_length) def get_openapi_spec(self) -> dict[str, Any]: """获取 OpenAPI specification 从 server 获取完整的 OpenAPI schema,可能从缓存中获取。 Returns: 完整的 OpenAPI specification 字典 Raises: RuntimeError: 当无法获取 OpenAPI schema 时 """ return self.server._get_openapi_spec() @abstractmethod async def execute(self, **kwargs: Any) -> CallToolResult: """执行 Tool 的核心逻辑 子类必须实现此方法来定义工具的具体功能。 Args: **kwargs: 工具的输入参数,应符合 input_schema 定义 Returns: MCP CallToolResult,包含工具执行的结果 Raises: ValueError: 当输入参数不符合要求时 NotImplementedError: 当子类未实现此方法时 """ raise NotImplementedError('子类必须实现 execute() 方法')

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/jason-chang/fastapi-openapi-mcp'

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