首页
/ FastMCP项目中子服务FastAPI接口的调用方法解析

FastMCP项目中子服务FastAPI接口的调用方法解析

2025-05-30 20:51:10作者:瞿蔚英Wynne

在FastMCP微服务架构中,开发者经常需要将现有的FastAPI应用作为子服务挂载到主MCP服务器上。本文将以一个典型场景为例,详细讲解如何正确调用子服务中的FastAPI接口。

子服务挂载的基本原理

FastMCP提供了FastMCP.from_fastapi()方法,能够直接将FastAPI应用转换为MCP兼容的子服务。当我们将这个子服务挂载到主服务器时,FastMCP会自动处理路由转换和命名空间隔离。

from fastapi import FastAPI
from fastmcp import FastMCP

# 创建FastAPI应用
fastapi_app = FastAPI(title="sub fast api")

@fastapi_app.post("/items")
def create_item(name: str, price: float):
    return {"id": 1, "name": name, "price": price}

# 转换为MCP子服务
sub_mcp_server = FastMCP.from_fastapi(fastapi_app)

# 挂载到主服务器
main_mcp_server = FastMCP(name="MAINSERVER")
main_mcp_server.mount("sub", sub_mcp_server)

接口命名规则解析

当FastAPI接口被转换为MCP工具时,FastMCP会按照特定规则自动生成工具名称:

  1. 前缀:使用挂载时指定的子服务名称(本例中为"sub")
  2. 中间部分:使用FastAPI路由的处理函数名称(本例中为"create_item")
  3. 后缀:添加HTTP方法类型和路由路径(本例中为"items_post")

因此,最终生成的工具名称为:"sub_create_item_items_post"

客户端调用实践

在客户端代码中,我们可以通过以下步骤调用子服务接口:

from fastmcp import Client

# 创建客户端连接
client = Client(SSETransport(url="http://localhost:8001/sse"))

async def call_item_api(client: Client) -> dict:
    # 首先查看所有可用工具
    tools = await client.list_tools()
    print("可用工具:", tools)
    
    # 调用子服务接口
    response = await client.call_tool(
        "sub_create_item_items_post",
        {"name": "测试商品", "price": 99.9}
    )
    return response

最佳实践建议

  1. 工具名称管理:虽然FastMCP会自动生成工具名称,但在实际项目中建议通过装饰器或配置显式指定工具名称,提高代码可读性。

  2. 参数验证:FastAPI原有的参数验证机制在转换为MCP工具后仍然有效,客户端需要确保传入参数符合接口定义。

  3. 错误处理:子服务抛出的异常会被MCP框架捕获并转换为标准错误响应,客户端应做好错误处理。

  4. 性能考虑:频繁调用子服务接口时,建议保持客户端长连接而不是每次都新建连接。

通过理解FastMCP的接口转换机制和命名规则,开发者可以高效地在微服务架构中集成和调用FastAPI子服务,构建更加灵活和可扩展的系统。

登录后查看全文
热门项目推荐
相关项目推荐