FastMCP+python简单测试

FastMCP 是构建 MCP 服务器和客户端的标准框架。FastMCP 1.0 已被纳入官方 MCP Python SDK。当前 FastMCP 已更新至 2.0 版本,2.0 版本通过引入完整的客户端支持、服务器组合、OpenAPI/FastAPI 集成、远程服务器代理、内置测试工具等功能,显著扩展了 1.0 版本的基础服务器构建能力。

1.测试前准备

使用pip进行安装,安装命令如下:

pip install fastmcp

2.服务端代码 

接下来以编写一个计算加减乘除的服务端为例:

from fastmcp import FastMCP

mcp = FastMCP(name="MyAssistantServer")


@mcp.tool()
def add(a: float, b: float) -> float:
    """加法运算

    参数:
    a: 第一个数字
    b: 第二个数字

    返回:
    两数之和
    """
    return a + b


@mcp.tool()
def subtract(a: float, b: float) -> float:
    """减法运算

    参数:
    a: 第一个数字
    b: 第二个数字

    返回:
    两数之差 (a - b)
    """
    return a - b


@mcp.tool()
def multiply(a: float, b: float) -> float:
    """乘法运算

    参数:
    a: 第一个数字
    b: 第二个数字

    返回:
    两数之积
    """
    return a * b


@mcp.tool()
def divide(a: float, b: float) -> float:
    """除法运算

    参数:
    a: 被除数
    b: 除数

    返回:
    两数之商 (a / b)

    异常:
    ValueError: 当除数为零时
    """
    if b == 0:
        raise ValueError("除数不能为零")
    return a / b


if __name__ == "__main__":
    mcp.run(transport='sse', host="127.0.0.1", port=8001)

启动服务端效果图:

FastMCP+python简单测试_第1张图片 

3.客户端代码

import asyncio
from typing import List, Dict, Any


# 假设这是MCP客户端的接口定义
class ToolResult:
    def __init__(self, text: str):
        self.text = text


class Client:
    def __init__(self, base_url: str):
        self.base_url = base_url

    async def __aenter__(self):
        # 初始化客户端连接
        print(f"Connecting to {self.base_url}")
        return self

    async def __aexit__(self, exc_type, exc_val, exc_tb):
        # 清理资源
        print("Closing connection")

    async def list_tools(self) -> List[str]:
        # 列出可用工具的实现
        return ["add", "subtract", "multiply"]

    async def call_tool(self, tool_name: str, parameters: Dict[str, Any]) -> List[ToolResult]:
        # 调用工具的实现
        if tool_name == "add":
            result = parameters.get("a", 0) + parameters.get("b", 0)
            return [ToolResult(text=str(result))]
        return [ToolResult(text="Unknown tool")]


async def main():
    # 测试 mcp 客户端的功能
    async with Client("http://127.0.0.1:8001/sse") as mcp_client:
        tools = await mcp_client.list_tools()
        print(f"Available tools: {tools}")
        result = await mcp_client.call_tool("add", {"a": 5, "b": 3})
        print(f"Result: {result[0].text}")


# 运行异步主函数
if __name__ == "__main__":
    asyncio.run(main())

客户端运行效果图:

FastMCP+python简单测试_第2张图片

参考链接:FastMCP,构建 MCP 的 python 框架,比官方 SDK 更好用! 

你可能感兴趣的:(树莓派5开发,python,开发语言)