文章目录
项目官网
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)
客户端
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)
),
];