一个使用Spring AI框架并自定义HTTP传输实现的Model Context Protocol (MCP)服务器。该服务器提供了数学计算和游戏工具,可通过HTTP上的JSON-RPC访问。
@Tool注解自动注册工具mvn clean package -DskipTests
java -jar target/mcp-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
服务器将在8090端口启动。
测试MCP端点:
# 测试ping
curl -X POST http://localhost:8090/api/v1/mpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "ping", "params": {}}'
# 测试计算工具
curl -X POST http://localhost:8090/api/v1/mpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": {"name": "calculate", "arguments": {"expression": "22+2"}}}'
server:
port: 8090
spring:
application:
name: mcp-server
ai:
mcp:
server:
name: mcp-server # MCP服务器名称
version: 0.0.1 # 服务器版本
logging:
level:
org.springframework.ai: DEBUG
com.example.mcpserver: DEBUG
在你的Cursor MCP配置文件(~/.cursor/mcp.json)中添加以下内容:
{
"mcpServers": {
"spring-ai-mcp-server": {
"command": "http",
"args": {
"url": "http://localhost:8090/api/v1/mpc"
}
}
}
}
@Service注解的服务类@Tool注解@ToolParam注解示例:
@Service
public class MyToolsService {
@Tool(description = "工具描述")
public String myTool(@ToolParam(description = "参数描述") String parameter) {
// 工具实现
return "结果: " + parameter;
}
}
src/main/java/com/example/mcpserver/
├── McpServerApplication.java # 主应用类
├── controller/
│ └── McpController.java # 自定义MCP HTTP控制器
├── service/
│ ├── CalculatorService.java # 计算器工具服务
│ └── GameService.java # 游戏工具服务
└── resources/
└── application.yml # 应用配置
此项目支持多种传输方法:
POST http://localhost:8090/api/v1/mpc<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<name>Central Portal Snapshots</name>
<id>central-portal-snapshots</id>
<url>https://central.sonatype.com/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
application.yml中的端口@Service注解~/.cursor/mcp.json中的MCP配置应用程序使用SLF4J日志。查看控制台输出以获取详细的日志信息。
mvn clean compile
mvn test
构建Docker镜像:
# 先构建JAR
mvn clean package -DskipTests
# 构建Docker镜像
docker build -t mcp-server .
使用Docker运行:
# 使用Docker运行
docker run -p 8090:8090 mcp-server
# 或使用docker-compose
docker-compose up -d
测试Docker容器:
# 测试POST端点(JSON-RPC)
curl -X POST http://localhost:8090/api/v1/mpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "ping", "params": {}}'
# 测试GET端点(SSE/可流式HTTP)
curl -X GET http://localhost:8090/api/v1/mpc \
-H "Accept: text/event-stream"
有一个基于Web的测试客户端可用:
http://localhost:8090/mcp-client.html
此客户端提供了一个用户友好的界面来测试所有MCP端点和工具。
对于生产环境: 客户端会自动检测服务器URL,因此它既可以在本地工作也可以在Heroku上工作:
https://your-app-name.herokuapp.com/mcp-client.html
对于CI/CD管道,使用提供的测试脚本:
# 将脚本设置为可执行
chmod +x ci-test.sh
# 运行测试
./ci-test.sh
或者手动:
docker run -d --name mcp-test -p 8090:8090 mcp-server:latest
sleep 10
curl -f -X POST http://localhost:8090/api/v1/mpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "ping", "params": {}}' || exit 1
docker stop mcp-test
docker rm mcp-test
使用提供的脚本部署到Heroku:
# 将脚本设置为可执行
chmod +x deploy-heroku.sh
# 部署到Heroku
./deploy-heroku.sh
或者手动:
# 构建应用程序
mvn clean package -DskipTests
# 创建Heroku应用(如果不存在)
heroku create
# 设置环境变量
heroku config:set SPRING_PROFILES_ACTIVE=prod
# 部署
git push heroku main
使用Docker构建和运行:
# 先构建JAR
mvn clean package -DskipTests
# 构建Docker镜像
docker build -t mcp-server .
# 使用Docker运行
docker run -p 8090:8090 mcp-server
# 或使用docker-compose
docker-compose up -d
本项目根据MIT许可证发布 - 查看LICENSE文件了解详情。 </中文翻译>