FastMCP(python)和 SolonMCP(java)的体验比较(不能说一样,但真的很像)

从 MCP SDK 的发展史上看,FastMCP 是前辈,SolonMCP 则是后辈。mcp-python-sdk 功能完善,已经很成熟了。而 mcp-java-sdk 却还不完善,比如:

  • 还不支持 http streaming
  • 还不支持 resouce template,不过有 pr 在走流程了(SolonMCP 提前提供了支持)
  • 只支持 jdk17+(SolonMCP 提供了 jdk8+ 支持)
  • 不支持 客户端断线自动重连(SolonMCP 提供了自动重连支持)

两者的体验不能说是一样,但真的很像。

1、FastMCP 的开发体验(python)

计算器工具

python 复制代码
@mcp.tool()
def add(a: int, b: int) -> int:
    """将两个数字相加"""
    return a + b
 
@mcp.tool()
def subtract(a: int, b: int) -> int:
    """从第一个数中减去第二个数"""
    return a - b
 
@mcp.tool()
def multiply(a: int, b: int) -> int:
    """将两个数相乘"""
    return a * b
 
@mcp.tool()
def divide(a: float, b: float) -> float:
    """将第一个数除以第二个数"""
    if b == 0:
        raise ValueError("除数不能为零")
    return a / b
    
if __name__ == "__main__":
    # 使用stdio传输方式启动服务器
    mcp.run(transport="stdio")

天气工具(有工具,资源,资源模板)

python 复制代码
@mcp.tool()
def get_weather(city: str) -> dict:
    """获取指定城市的当前天气"""
    return "24度,晴"
 
@mcp.resource("weather://cities")
def get_available_cities() -> list:
    """获取所有可用的城市列表"""
    return ["Tokyo", "Sydney", "Tokyo"]
 
@mcp.resource("weather://forecast/{city}")
def get_forecast(city: str) -> dict:
    """获取指定城市的天气预报资源"""
    return {
        "city": city,
        "temperature": [10,25],
        "condition":['sunny', 'clear', 'hot'],
        "unit": "celsius"
    }
 
if __name__ == "__main__":
    # 使用SSE传输方式启动服务器
    mcp.run(transport="sse")

2、SolonMCP 的开发体验(java)

SolonMCP(全称:solon-ai-mcp),支持 java8,可提供完成的 mcp 内容支持(工具,资源,资源模板,提示语)。

计算器工具

java 复制代码
@McpServerEndpoint(channel = McpChannel.STDIO)
public class CalculatorTools {
    @ToolMapping(description = "将两个数字相加")
    public int add(@Param int a, @Param int b) {
        return a + b;
    }

    @ToolMapping(description = "从第一个数中减去第二个数")
    public int subtract(@Param int a, @Param int b) {
        return a - b;
    }

    @ToolMapping(description = "将两个数相乘")
    public int multiply(@Param int a, @Param int b) {
        return a * b;
    }

    @ToolMapping(description = "将第一个数除以第二个数")
    public float divide(@Param float a, @Param float b) {
        return a / b;
    }
}

天气工具(有工具,资源,资源模板)

java 复制代码
@McpServerEndpoint(sseEndpoint = "/mcp/sse")
public class WeatherTools {
    @ToolMapping(description = "获取指定城市的当前天气")
    public String get_weather(@Param(description="城市") String city) {
        return "{city: '" + city + "', temperature:[10,25], condition:['sunny', 'clear', 'hot'], unit:celsius}";
    }

    //可以给前端用,输出严格的 json 格式
    @Produces(MimeType.APPLICATION_JSON_VALUE)
    @ResourceMapping(uri = "weather://cities", description = "获取所有可用的城市列表")
    public List<String> get_available_cities() {
        return Arrays.asList("Tokyo", "Sydney", "Tokyo");
    }

    @ResourceMapping(uri = "weather://forecast/{city}", description = "获取指定城市的天气预报资源")
    public String get_forecast(@Param(description="城市") String city) {
         return "{city: '" + city + "', temperature:[10,25], condition:['sunny', 'clear', 'hot'], unit:celsius}";
    }
}
相关推荐
川石课堂软件测试9 分钟前
CSS中常用的几种定位。
开发语言·css·python·网络协议·http·html·pytest
没有bug.的程序员13 分钟前
分布式链路追踪:微服务可观测性的核心支柱
java·分布式·微服务·架构·wpf
C.R.xing14 分钟前
Pyspark分布式访问NebulaGraph图数据库
数据库·分布式·python·pyspark·nebulagraph
我是华为OD~HR~栗栗呀16 分钟前
华为OD-21届考研-Java面经
java·前端·c++·python·华为od·华为·面试
凤山老林18 分钟前
SpringBoot 启动时执行某些操作的 8 种方式
java·开发语言·spring boot·后端
松果集30 分钟前
【2】数据结构·序列构成的数组
python
狼爷34 分钟前
Java 开发必看:UUIDv7 终于标准化了!这次真香🔥(基于 uuid-creator 实战)
java
局外人LZ1 小时前
django rest framework:从零开始搭建RESTful API
python·django·restful·drf
㏕追忆似水年华あ1 小时前
逻辑600解析本03
python·flask
AndrewHZ1 小时前
【图像处理基石】遥感图像高度信息提取:Python实战全流程+常用库汇总
图像处理·人工智能·python·计算机视觉·cv·遥感图像·高程信息