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 FastMCPmcp = 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 / bif __name__ == "__main__":mcp.run(transport='sse', host="127.0.0.1", port=8001)
启动服务端效果图:
3.客户端代码
import asyncio
from typing import List, Dict, Any# 假设这是MCP客户端的接口定义
class ToolResult:def __init__(self, text: str):self.text = textclass Client:def __init__(self, base_url: str):self.base_url = base_urlasync def __aenter__(self):# 初始化客户端连接print(f"Connecting to {self.base_url}")return selfasync 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,构建 MCP 的 python 框架,比官方 SDK 更好用!