fastmcp 2.0

mcp server

# my_server.py
from fastmcp import FastMCP
from datetime import datetime
import json

mcp = FastMCP(name="MyServer")

# 工具示例
@mcp.tool()
def greet(name: str) -> str:
    """Greet a user by name."""
    return f"Hello, {name}!"

@mcp.tool()
def calculate_stats(numbers: list[float]) -> dict:
    """计算基础统计数据"""
    return {
        "average": sum(numbers)/len(numbers),
        "max": max(numbers),
        "min": min(numbers),
        "timestamp": datetime.now().isoformat()
    }

# 资源示例
@mcp.resource("data://config")
def load_config():
    """加载服务器配置"""
    return json.dumps({
        "max_connections": 100,
        "timeout": 30,
        "analytics_enabled": True
    })

# 资源模板示例
@mcp.resource("users://{user_id}/profile")
def get_user_profile(user_id: str):
    """获取用户资料模板"""
    return {
        "id": user_id,
        "preferences": {"theme": "dark"},
        "last_login": datetime.now().isoformat()
    }

# 提示模板示例
@mcp.prompt_template("analysis_request")
def analysis_prompt(data_type: str) -> str:
    """生成数据分析请求模板"""
    return f"""
    请分析以下{data_type}数据集:
    1. 计算基础统计指标
    2. 识别异常值
    3. 生成趋势图表
    完成后请用JSON格式返回结果。
    """

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

client

from fastmcp import FastMCPClient
import json

def main():
    # 连接HTTP服务端
    with FastMCPClient("http://localhost:9000") as client:
        # 调用所有工具
        print("调用greet工具:")
        print(client.tools.greet("Arthur"))
        
        print("\n调用calculate_stats工具:")
        stats = client.tools.calculate_stats([10, 20, 30, 40])
        print(json.dumps(stats, indent=2))
        
        # 访问资源
        print("\n获取服务器配置:")
        config = client.resources.config()
        print(config)
        
        print("\n获取用户资料:")
        profile = client.resources.users(user_id="123").profile()
        print(json.dumps(profile, indent=2))
        
        # 使用提示模板
        print("\n生成分析请求:")
        prompt = client.prompts.analysis_request("销售数据")
        print(prompt)

if __name__ == "__main__":
    main()

 

 

以下是基于提供的FastMCP服务器文档内容的精简总结,按功能模块分类:


1. 核心概念

  • FastMCP服务器类:作为应用程序的核心容器,管理工具、资源、提示以及与MCP客户端的通信。
  • 初始化参数
    • name(服务器名称)、instructions(交互指南)、lifespan(生命周期管理)、tags(标签)、tools(工具列表)等。
    • 示例:
       
      python
      复制
      mcp = FastMCP(name="MyServer", instructions="数据分析工具集")
       

2. 组件类型

  • 工具(Tools):客户端可调用的函数,标注为@mcp.tool(),支持参数类型提示。
  • 资源(Resources):数据源读取接口,如@mcp.resource("data://config")
  • 资源模板:参数化资源路径(如users://{user_id}/profile)。
  • 提示(Prompts):LLM消息模板,例如生成数据分析请求的文本。

3. 运行与配置

  • 启动方式
    • 默认通过mcp.run()启动,支持多种传输协议(STDIO/HTTP/SSE)。
    • 示例:
       
      python
      复制
      if __name__ == "__main__":
          mcp.run(transport="streamable-http", port=9000)
       
  • 配置选项
    • 通过ServerSettings设置主机、端口、日志级别等。
    • 环境变量前缀FASTMCP_SERVER_或直接传递参数(如port=8080)。

4. 高级功能

  • 服务器组合(v2.2.0+):
    • 使用mount动态链接或import_server静态导入子服务器。
  • 代理模式(v2.0.0+):
    • 通过FastMCP.as_proxy()桥接不同传输协议的服务器。
  • 序列化定制(v2.2.7+):
    • 自定义tool_serializer(如YAML格式输出)。
  • 认证(v2.2.7+):
    • 支持OAuth 2.0,需配置auth_server_providerAuthSettings

5. 关键配置项

参数作用默认值
host SSE主机地址 "127.0.0.1"
on_duplicate_tools 重复工具处理策略(如"error" "warn"
log_level 日志级别 "INFO"

总结

FastMCP是一个模块化的Python服务器框架,适用于构建基于MCP协议的AI工具服务,强调灵活性(组件组合、传输协议适配)和可扩展性(认证、序列化定制)。适合需要集成工具调用、数据访问和LLM交互的场景。

posted @ 2025-06-01 20:16  iTech  阅读(430)  评论(0)    收藏  举报