fastmcp构建mcp server和client

文章目录

项目官网

fastmcp

Server

mcp_server.py

python 复制代码
# 新建实例,这个一定要是一个单独的文件
from fastmcp import FastMCP

mcp = FastMCP(name="MyAssistantServer")

weather_tools.py

python 复制代码
# 工具集需要导入之前的server实列
from typing import Annotated
from mcp_server import mcp
import datetime
from dataclasses import dataclass, field

@dataclass
class WeatherResult:
    date: datetime.date=field(metadata={"description": "日期"})
    temperature: float=field(metadata={"description": "温度,摄氏度"})
    weather:str=field(metadata={"description": "天气:小雨,晴,阴,雾等等"})

@dataclass
class CityWeahterResult:
    city: str=field(metadata={"description": "城市"})
    results: list[WeatherResult]=field(metadata={"description": "几天的天气集合"})

@mcp.tool(
        name="Get city weather",
        description="获取某个城市未来几天的天气",)
def get_weather(
    city: Annotated[str,"城市名"],
    days:Annotated[int,"想要预测的天数"]) -> CityWeahterResult:
    return CityWeahterResult()

run_server.py

python 复制代码
from mcp_server import mcp
import weather_tools #只要导入的工具集,就会自动注册

if __name__ == "__main__":
    mcp.run(transport="http",host="127.0.0.1", port=8765)

客户端

client.py

python 复制代码
import asyncio
from fastmcp import Client


client = Client("http://127.0.0.1:8765/mcp")

async def main():
    async with client:
        # Basic server interaction
        await client.ping()
        
        # List available operations
        tools = await client.list_tools()
        resources = await client.list_resources()
        prompts = await client.list_prompts()
        
        # Execute operations
        print(tools)

asyncio.run(main())

扫描到的工具集

javascript 复制代码
[
  Tool(
    (name = "Get city weather"),
    (title = None),
    (description = "获取某个城市未来几天的天气"),
    (inputSchema = {
      properties: {
        city: { description: "城市名", type: "string" },
        days: { description: "想要预测的天数", type: "integer" },
      },
      required: ["city", "days"],
      type: "object",
    }),
    (outputSchema = {
      $defs: {
        WeatherResult: {
          properties: {
            date: { description: "日期", format: "date", type: "string" },
            temperature: { description: "温度,摄氏度", type: "number" },
            weather: {
              description: "天气:小雨,晴,阴,雾等等",
              type: "string",
            },
          },
          required: ["date", "temperature", "weather"],
          type: "object",
        },
      },
      properties: {
        city: { description: "城市", type: "string" },
        results: {
          description: "几天的天气集合",
          items: { $ref: "#/$defs/WeatherResult" },
          type: "array",
        },
      },
      required: ["city", "results"],
      type: "object",
    }),
    (icons = None),
    (annotations = None),
    (meta = { _fastmcp: { tags: [] } }),
    (execution = None)
  ),
];
相关推荐
跨境Jacky15 分钟前
用Python监控47个AI问答排名:GEO数据工作台实战
跨境电商·mcp·sorftime
外收内放18 分钟前
Python基础语法练习题(69)
开发语言·python
TomEval23 分钟前
【测AI】第11篇:深度学习基础 —— 神经网络是怎么工作的
人工智能·python·深度学习·神经网络·机器学习·aigc
zhang-ge25 分钟前
python包和项目管理器uv在ubuntu下的安装与使用
开发语言·python·uv
for_ever_love__36 分钟前
LangChain 降级、重试与超时:让服务在模型抽风时还能用
python·自然语言处理·langchain·agent·超时·重试·with_retry
MoRanzhi12031 小时前
第 8 篇 · 机器学习建模与实验评估:建模流程与对照实验
python·机器学习·scikit-learn·模型评估·交叉验证·shap·消融实验
棉猴1 小时前
玩游戏学Python9-算术运算符应用1
python·游戏·pygame·玩游戏·游戏编程
ndsc_d1 小时前
AI生成的UI如何继续修改?画布内生成与独立AI设计工具比较
人工智能·ui·ai·ui设计·ai设计·ai设计工具·ai生成ui
凤年徐1 小时前
【Python】Python 语法速通指南
开发语言·python
Danny转行做跨境1 小时前
流水线重复发布治理:提交即标记与滞后窗口实战
跨境电商·mcp·sorftime