最完整FastAPI-MCP零配置指南:从OpenAPI到MCP工具的自动转换机制
你是否还在为手动转换API接口为MCP工具而烦恼?是否希望有一种方式能零配置将FastAPI端点自动公开为模型上下文协议(MCP)工具?本文将详细介绍fastapi_mcp如何实现从OpenAPI到MCP工具的自动转换,帮助你快速掌握这一强大工具的核心机制。读完本文,你将了解转换流程、关键参数配置以及实际应用示例。
OpenAPI到MCP工具的转换流程
fastapi_mcp的核心功能是自动将FastAPI生成的OpenAPI规范转换为MCP工具。这一转换过程主要由fastapi_mcp/openapi/convert.py文件中的convert_openapi_to_mcp_tools函数实现。该函数接收OpenAPI schema作为输入,经过解析、处理后输出MCP工具列表和操作映射。
转换流程主要包括以下步骤:
- 解析OpenAPI schema,处理路径、方法、参数等信息
- 构建工具描述,包括摘要、描述和响应信息
- 组织参数,按路径、查询、请求体等类型分类
- 创建输入schema,定义工具的参数结构
- 生成MCP工具定义
关键参数配置
在使用fastapi_mcp时,有两个关键参数可以控制响应信息的展示方式:describe_full_response_schema和describe_all_responses。这两个参数在初始化FastApiMCP时设置,如examples/02_full_schema_description_example.py所示:
mcp = FastApiMCP(
app,
name="Item API MCP",
description="MCP server for the Item API",
describe_full_response_schema=True, # 描述完整的响应JSON模式
describe_all_responses=True, # 描述所有可能的响应
)
describe_full_response_schema:设置为True时,将展示完整的响应JSON模式,包括属性、类型等详细信息describe_all_responses:设置为True时,将展示所有可能的响应状态码及其描述,而不仅仅是成功响应(2XX)
响应处理机制
在转换过程中,响应信息的处理是一个重要环节。fastapi_mcp/openapi/convert.py中的代码展示了如何处理不同类型的响应:
- 首先查找成功响应(200-299状态码)
- 根据配置决定是否包含所有响应或仅包含成功响应
- 为每个响应添加描述、内容类型和示例
- 如果配置了
describe_full_response_schema,还会展示完整的响应模式
下面是处理响应的核心代码片段:
# Find the success response
success_codes = range(200, 300)
success_response = None
for status_code in success_codes:
if str(status_code) in responses:
success_response = responses[str(status_code)]
break
# Get the list of responses to include
responses_to_include = responses
if not describe_all_responses and success_response:
# If we're not describing all responses, only include the success response
success_code = next((code for code in success_codes if str(code) in responses), None)
if success_code:
responses_to_include = {str(success_code): success_response}
参数处理与输入模式构建
fastapi_mcp会将FastAPI端点的参数按类型(路径参数、查询参数、请求体参数等)进行分类,并构建统一的输入模式。这一过程在fastapi_mcp/openapi/convert.py中实现:
- 将参数分为路径参数、查询参数、请求头参数和请求体参数
- 为每个参数添加类型、描述、默认值等信息
- 构建包含所有参数的输入模式(input schema)
- 标记必填参数
这一机制确保了生成的MCP工具能够准确反映FastAPI端点的参数要求,方便使用者正确调用API。
实际应用示例
为了更好地理解fastapi_mcp的转换机制,我们可以参考examples/02_full_schema_description_example.py中的示例。该示例展示了如何使用fastapi_mcp将一个简单的FastAPI应用转换为MCP工具:
from examples.shared.apps.items import app # The FastAPI app
from fastapi_mcp import FastApiMCP
# Add MCP server to the FastAPI app
mcp = FastApiMCP(
app,
name="Item API MCP",
description="MCP server for the Item API",
describe_full_response_schema=True, # 展示完整响应模式
describe_all_responses=True, # 展示所有响应
)
mcp.mount_http()
通过这个示例,我们可以看到fastapi_mcp的使用非常简单,只需几行代码即可将现有的FastAPI应用转换为MCP工具服务器。
总结与展望
fastapi_mcp提供了一种零配置的方式,将FastAPI端点自动转换为MCP工具。通过分析fastapi_mcp/openapi/convert.py中的核心代码,我们了解了转换机制的实现细节,包括响应处理、参数分类和输入模式构建等关键环节。
使用fastapi_mcp,开发者可以轻松地将现有的FastAPI应用转换为MCP工具,无需手动编写大量的转换代码。这不仅提高了开发效率,还确保了API描述的准确性和一致性。
未来,fastapi_mcp可能会进一步扩展功能,支持更多的定制选项和高级特性,为开发者提供更灵活、更强大的MCP工具转换体验。
如果你想深入了解fastapi_mcp的更多功能,可以参考以下资源:
- 官方文档:docs/getting-started/quickstart.mdx
- 更多示例:examples/
- 源码实现:fastapi_mcp/
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



