购物MCP服务器
用于管理购物车系统的MCP(模型上下文协议)服务器,与Claude Desktop兼容。
🎯 描述
该项目公开了MCP工具,允许Claude Desktop通过PostgreSQL数据库与购物车管理系统进行交互。
可用工具
create_cart:创建新的空购物车get_cart_by_id:按UUID检索购物车add_product_to_cart:将产品添加到现有购物车remove_product_from_cart:从购物车中删除产品
🏗️ 建筑
- 框架:弹簧靴3.5.8+弹簧AI 1.1.0
- 语言:科特林
- 数据库:PostgreSQL
- 协议:MCP(模型上下文协议)
- 模式:STDIO用于与Claude Desktop通信
📋 先决条件
- Java 21 (JDK 21或更高版本)
- 码头工人 和 Docker Compose (适用于PostgreSQL)
- 梅文 (通过Maven Wrapper提供)
- 克劳德桌面 (测试MCP工具)
🚀 安装和设置
1.导航到项目目录
cd /home/tom/projects/personnal-projects/mcp2.启动PostgreSQL
该项目使用Docker Compose来管理PostgreSQL:
docker compose up -d验证容器是否正在运行:
docker ps | grep postgres您应该看到:
mcp-postgres-1 Up X minutes 0.0.0.0:5432->5432/tcp3.编写应用程序
./mvnw clean package -DskipTests汇编应显示:
[INFO] BUILD SUCCESS
[INFO] Total time: ~5sJAR将在以下位置创建: target/mcp-0.0.1-SNAPSHOT.jar
4.测试应用程序(可选)
要验证应用程序是否正确启动:
java -jar target/mcp-0.0.1-SNAPSHOT.jar您应该在日志中看到:
Started McpApplicationKt in X.XXX seconds按 Ctrl+C 停止应用程序。
🧪 测试MCP工具
配置完Claude Desktop后,通过向Claude提出以下问题来测试工具:
创建购物车
Can you create a new cart for me?克劳德将使用 create_cart 工具并返回UUID。
取回购物车
Can you retrieve the cart with ID [UUID]?添加产品
Can you add product [product-UUID] to cart [cart-UUID] with a quantity of 2?删除产品
Can you remove product [product-UUID] from cart [cart-UUID]?📁 项目结构
mcp/
├── src/
│ ├── main/
│ │ ├── kotlin/
│ │ │ └── com/eni/demo/mcp/
│ │ │ ├── McpApplication.kt # Entry point
│ │ │ ├── application/
│ │ │ │ └── service/ # Business services
│ │ │ │ ├── CartService.kt
│ │ │ │ └── ProductService.kt
│ │ │ ├── domain/ # Domain models
│ │ │ │ ├── cart/
│ │ │ │ │ ├── model/
│ │ │ │ │ └── spi/
│ │ │ │ └── product/
│ │ │ │ ├── model/
│ │ │ │ └── spi/
│ │ │ └── infrastructure/
│ │ │ ├── claude/
│ │ │ │ └── adapters/
│ │ │ │ └── CartMcpAdapter.kt # MCP Adapter
│ │ │ └── jpa/ # Persistence
│ │ │ ├── adapters/
│ │ │ ├── model/
│ │ │ └── repositories/
│ │ └── resources/
│ │ └── application.yaml # Spring configuration
│ └── test/
├── compose.yaml # Docker Compose for PostgreSQL
├── pom.xml # Maven configuration
└── README.md🐛 故障排除
MCP服务器未出现在Claude Desktop中
- 检查配置:
cat ~/.config/Claude/claude_desktop_config.json- 检查克劳德桌面日志:
tail -f ~/.config/Claude/logs/*.log- 手动测试应用程序:
java -jar target/mcp-0.0.1-SNAPSHOT.jarPostgreSQL连接错误
- 检查PostgreSQL是否正在运行:
docker ps | grep postgres- 如果容器未启动:
docker compose up -d- 检查容器日志:
docker logs mcp-postgres-1JDK编译错误
该项目包括 .mvn/jvm.config 用于解决某些JDK(尤其是Microsoft JDK)问题的文件:
--add-opens=java.base/jdk.internal.crac=ALL-UNNAMED
--add-opens=java.base/jdk.crac.impl=ALL-UNNAMED
--add-opens=java.base/jdk.internal.jimage=ALL-UNNAMED应用程序启动后立即停止
确认:
- PostgreSQL正在运行
- 这
shopping_mcp数据库存在 - 凭据正确
application.yaml
📚 其他文件
🤝 贡献
该项目遵循六边形架构(端口和适配器):
- 领域:纯业务逻辑
- 应用:用例和编排
- 基础设施:技术实现(JPA、MCP等)
📝 重要说明
- MCP服务器使用 工作室 (标准输入/输出)模式,用于与Claude Desktop通信
- 应用程序禁用Tomcat web服务器(
web-application-type: none)因为不需要 - 日志被最小化,以避免污染与Claude的STDIO通信
- 启动时需要PostgreSQL——如果没有可用的数据库,应用程序将失败
🎉 准备好了!
配置好所有内容后,您可以使用自然语言直接从Claude Desktop与购物车系统进行交互!
例子:
You: "Create a new cart for me"
Claude: *uses create_cart*
"I've created a new cart with ID: 123e4567-e89b-12d3-a456-426614174000"