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

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

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

1、FastMCP 的开发体验(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")

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

@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 内容支持(工具,资源,资源模板,提示语)。

计算器工具

@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;
}
}

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

@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}";
}
}

FastMCP(python)和 SolonMCP(java)的体验比较(不能说一样,但真的很像)的更多相关文章

  1. 第1章Java入门体验

    第1章Java入门体验 1.java简介和平台应用 Java是sun公司开发出来,现在属于ORACLE公司java分为几个部分:首先是最基础的Java SE部分,这部分是Java的基础知识,主要包括: ...

  2. python面向对象进阶 反射 单例模式 以及python实现类似java接口功能

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...

  3. paip.性能跟踪profile原理与架构与本质-- python扫带java php

    paip.性能跟踪profile原理与架构与本质-- python扫带java php ##背景 弄个个输入法音标转换atiEnPH工具,老是python性能不的上K,7k记录浏览过k要30分钟了. ...

  4. python 自动发现Java端口

    python 自动发现Java端口 #!/usr/bin/env python #encoding: utf8 import subprocess try: import json except Im ...

  5. JPype:实现在python中调用JAVA

    一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...

  6. PySpark 的背后原理--在Driver端,通过Py4j实现在Python中调用Java的方法.pyspark.executor 端一个Executor上同时运行多少个Task,就会有多少个对应的pyspark.worker进程。

    PySpark 的背后原理 Spark主要是由Scala语言开发,为了方便和其他系统集成而不引入scala相关依赖,部分实现使用Java语言开发,例如External Shuffle Service等 ...

  7. py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. : java.lang.IllegalArgumentException: Unsupported class file major version 55

    今天小编用Python编写Spark程序报了如下异常: py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apach ...

  8. 三个月死磕Python是种什么样的体验?

    3个月的死磕Python后,参加「 楼+ Python实战 · 第4期 」的学员们感想如何?下面带来他们的真实评价. 作为实验楼的网红课程——「 楼+ Python实战 」已经走过了第四期,经过了三个 ...

  9. JS、JAVA刷题和C刷题的一个很重要的区别

    就是最近在做树方面的题时,发现JS和JAVA刷题和C刷题的一个很重要的区别就是传入null的区别 当遍历的时候,C传参数时可以传进去null的指针,因为递归进去,出来时,指针还是指着那个地方 但是JS ...

  10. protobuf(Protocol Buffers)java初体验

    因为项目须要所以简单的研究了下protobuf.我也是參照网上的博客,所以大部分内容我也就不反复造轮子了.首先protobuf介绍点击这里,使用介绍点击这里,使用demo看这里. 我个人的第一个样例也 ...

随机推荐

  1. Trae初体验

    前情 自从AI IDE面世以来,网络上到处流传程序员要失业了,小白也能轻松完成程序开发了,某某0基础靠AI上架了苹果应用,平时工作也有偶尔用用AI工具的我,都觉得这些都是标题党文章不予理会的,直到看到 ...

  2. 动手学大模型应用开发,第4天:Prompt设计

    第一章.Prompt 设计的原则和技巧 LLM 时代 prompt 这个词对于每个使用者和开发者来说已经听得滚瓜烂熟,那么到底什么是 prompt 呢?简单来说,prompt(提示) 就是用户与大模型 ...

  3. manim边学边做--相机Camera简介

    在Manim中,Camera是实现动画效果的重要工具之一. 它就像我们观察动画的 眼睛,通过控制相机的位置.角度和视野,可以创造出丰富多样的视觉效果. Manim社区版本中提供了多种Camera类型, ...

  4. 花3分钟来了解一下Vue3中的插槽到底是什么玩意

    前言 插槽看着是一个比较神秘的东西,特别是作用域插槽还能让我们在父组件里面直接访问子组件里面的数据,这让插槽变得更加神秘了.其实Vue3的插槽远比你想象的简单,这篇文章我们来揭开插槽的神秘面纱. 欧阳 ...

  5. 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧

    昨天DD以为阿里开源的QwQ-32B会刷爆全网,毕竟对标的是上一个热门项目deepseek-r1.但是,万万没想到,获得更多关注的居然是:Manus. 简单的从网上介绍信息了解了一下,感觉跟OpenA ...

  6. 自动化-Yaml文件写入函数封装

    1.文件布局 打开文件修改读取方式为w dump函数写入文件 写入中文 使用allow_unicode=True class ReadConfiYaml: def __init__(self,yaml ...

  7. VS 2022 WEB发布编译失败

    VS2022当安装在非默认路径时,每次更新后,在发布时,就会出来编译失败的提示,比如这样: C:\VS2022\Preview\MSBuild\Microsoft\VisualStudio\v17.0 ...

  8. 【技术分析】简单了解 AccessControl

    当我们开发一个智能合约,但是里面有一些函数不能随便让别人调用,只能"拥有权限"的管理员能够调用,那么这时候我们会用到权限管理机制. 实现起来也很简单,设置一个 owner 变量,通 ...

  9. 为什么不建议通过Executors构建线程池

    Executors类看起来功能还是比较强大的,又用到了工厂模式.又有比较强的扩展性,重要的是用起来还比较方便,如: ExecutorService executor = Executors.newFi ...

  10. Qt/C++开发经验小技巧311-315

    关于流媒体推拉流延时的几点说明. 经常看到一些流媒体相关的程序,号称零延迟,不用怀疑,这肯定吹牛逼的. 搞音视频开发,有个核心的指标就是实时性,也就是延迟多少毫秒,这个问题问的也是最多的. 音视频文件 ...