使用说明
MCP演示服务器 - Spring Boot
一个使用Spring Boot和Spring AI构建的演示MCP(模型上下文协议)服务器,该服务器与……集成 ChatGPT 并且 Claude Desktop(可译为“Claude桌面版”或保持原样,根据上下文判断是否需要具体翻译软件名称)。
支持的客户端
- ChatGPT (通过HTTP/SSE连接器)
- Claude Desktop(可译为“Claude桌面版”或保持原样,若“Desktop”在此处特指某种平台或版本,则根据具体语境翻译) (通过STDIO)
- 任何兼容MCP的客户端
特点/特性
这个MCP服务器提供:
工具
-
天气工具
getWeather(cityName)- 获取某城市的当前天气getWeatherForecast(cityName)- 获取3天天气预报getTemperature(cityName, unit)- 获取温度并进行单位转换
-
计算器工具
add(a, b)- 加两个数subtract(a, b)- 减法运算multiply(a, b)- 乘以数字divide(a, b)- 分割数字power(a, b)- 计算功率sqrt(a)- 计算平方根
资源
system://info- 系统信息(操作系统、Java版本、内存)server://info- MCP服务器信息
提示
greeting- 个性化的问候提示weather-query- 天气查询提示模板
先决条件
- Java 17 或更高版本
- Gradle 8.x
- Claude 桌面应用程序
构建项目
# Build the project
./gradlew build
# Run the application
./gradlew bootRun
创建可执行的JAR文件
# Build the JAR
./gradlew bootJar
# The JAR will be created at: build/libs/mcp_demo-1.0-SNAPSHOT.jar
设置说明
选项1:ChatGPT(推荐给网页用户)
ChatGPT 使用 HTTP/SSE 协议与 MCP 服务器进行通信。这是默认配置。
步骤1:构建并运行服务器
# Build the JAR
./gradlew bootJar
# Run the server (HTTP mode - default)
java -jar build/libs/mcp_demo-1.0-SNAPSHOT.jar
服务器将在 http://localhost:8080
步骤2:配置ChatGPT连接器
-
打开ChatGPT (网页或桌面应用程序)
-
进入设置 → 点击您的个人资料/头像
-
导航至“连接器” 在设置侧边栏中
-
点击“创建” 添加一个新的MCP连接器
-
选择“开发者模式” (如可用)或“自定义连接器”
-
请输入以下详细信息:
- 姓名: 演示MCP服务器
- 基本URL:
http://localhost:8080 - SSE 端点:
/sse - 消息端点:
/mcp/message
-
保存 连接器
步骤3:测试连接
在ChatGPT中,尝试提问:
- “东京的天气怎么样?”
- “计算25加17”
- “144的平方根是多少?”
- “给我看看系统信息”
选项2:Claude桌面版(STDIO传输)
Claude Desktop 使用 STDIO 传输协议与本地 MCP 服务器进行通信。
步骤1:构建JAR文件
./gradlew bootJar
步骤2:配置Claude桌面版
macOS:
-
找到Claude桌面配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json -
编辑文件并添加:
{
"mcpServers": {
"demo-mcp-server": {
"command": "java",
"args": [
"-jar",
"/absolute/path/to/mcp_demo/build/libs/mcp_demo-1.0-SNAPSHOT.jar",
"--spring.profiles.active=claude"
]
}
}
}
Windows:
-
找到Claude Desktop的配置文件:
%APPDATA%\Claude\claude_desktop_config.json -
编辑文件并添加:
{
"mcpServers": {
"demo-mcp-server": {
"command": "java",
"args": [
"-jar",
"C:\\absolute\\path\\to\\mcp_demo\\build\\libs\\mcp_demo-1.0-SNAPSHOT.jar",
"--spring.profiles.active=claude"
]
}
}
}
重要提示: 将路径替换为您的实际项目目录路径。
步骤3:重启Claude桌面版
彻底退出并重新打开Claude Desktop。
步骤4:验证与测试
- 在Claude Desktop中查找MCP服务器图标(🔌)
- 你应该能看到“demo-mcp-server”列在其中
- 试着问:“巴黎的天气怎么样?”
测试MCP服务器
对于ChatGPT(HTTP模式 - 默认)
-
构建并运行:
./gradlew bootJar java -jar build/libs/mcp_demo-1.0-SNAPSHOT.jar -
测试服务器:
./test-server.sh -
在ChatGPT中进行配置 (详见CHATGPT_SETUP.md中的详细说明)
-
测试工具: 试试问问ChatGPT:
- “纽约的天气怎么样?”
- “计算15加27”
- “144的平方根是多少?”
对于Claude Desktop(STDIO模式)
-
构建JAR文件:
./gradlew bootJar -
配置Claude桌面版 (见上文选项2)
-
重启Claude桌面版 完全(退出并重新打开)
-
测试工具: 试试问问克劳德:
- “巴黎的天气怎么样?”
- “计算25乘以16”
项目结构
mcp_demo/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── ntnn/
│ │ │ ├── Main.java # Spring Boot application
│ │ │ ├── config/
│ │ │ │ └── McpConfiguration.java # MCP server configuration
│ │ │ └── service/
│ │ │ ├── WeatherService.java # Weather tools
│ │ │ └── CalculatorService.java # Calculator tools
│ │ └── resources/
│ │ └── application.yml # Application configuration
│ └── test/
├── build.gradle # Gradle build configuration
└── README.md # This file
配置
MCP服务器已配置在 src/main/resources/application.yml:
spring:
ai:
mcp:
server:
enabled: true
stdio: true # Use STDIO transport
name: demo-mcp-server
version: 1.0.0
type: SYNC # Synchronous server
capabilities:
tool: true # Enable tools
resource: true # Enable resources
prompt: true # Enable prompts
故障排除
Claude Desktop 不显示 MCP 服务器
- 检查指定路径下是否存在该JAR文件
- 验证路径中的(内容/设置等,具体根据上下文确定)
claude_desktop_config.json是绝对的 - 完全重启Claude桌面版
- 检查Claude Desktop的日志(如果可用)
工具无法正常工作
- 验证服务器是否正在运行(检查日志)
- 确保所有功能都已启用
application.yml - 尝试重新构建项目:
./gradlew clean bootJar
构建错误
- 确保已安装 Java 17 或更高版本:
java -version - 清理并重建:
./gradlew clean build - 检查所有依赖项是否已下载
发展
添加新工具
- 在(某处)创建一个新的服务类
src/main/java/com/ntnn/service/ - 添加带有注解的方法
@Tool - 在(某处)注册该服务
McpConfiguration.java
示例:
@Service
public class MyService {
@Tool(description = "My custom tool")
public String myTool(String input) {
return "Result: " + input;
}
}
添加新资源
添加资源规格 McpConfiguration.mcpResources():
var myResource = new McpSchema.Resource(
"my://resource",
"My Resource",
"Description",
"application/json"
);
参考文献
许可证
这是一个用于教育目的的演示项目。
