AI购物车MCP
MCP(模型上下文协议)
MCP(模型上下文协议)是一种协议,允许AI模型以结构化和受控的方式与外部系统、工具和数据进行交互。
MCP充当AI模型和应用程序之间的桥梁,帮助模型了解它可以执行哪些操作以及如何执行这些操作。
无MCP
AI模型不知道如何与您的系统交互或调用您的API。
使用MCP
AI模型可以:
- 了解用户的请求
- 调用相应的API
- 传递正确的数据
- 接收回复并采取相应行动
______________________________________________________________________
AI购物车用例
例如,如果用户说:
“将最便宜的iPhone添加到我的购物车”
借助MCP,AI可以:
- 理解用户的意图
- 致电产品服务
- 找出最便宜的iPhone
- 使用适当的API将其添加到购物车中
所有这些都是使用MCP以结构化和无缝的方式发生的。
______________________________________________________________________
购物车MCP服务器
在这个项目中,我们使用Spring Boot构建了一个完整的购物车MCP服务器,并将其与Claude Desktop集成。
以下工具已公开:
addToCart–将产品添加到购物车removeCart–从购物车中删除产品getCart–检索购物车中的所有商品getCartTotal–获取购物车的总价
我们使用Spring AI创建MCP服务器,并公开这些端点,以便AI模型可以与系统交互。
对于该模型,我们使用Claude Desktop。
______________________________________________________________________
Claude桌面配置
我们配置了 claude_desktop_config.json 注册我们的MCP服务器的文件:
{
"mcpServers": {
"shopping-cart-server": {
"command": "java",
"args": [
"-jar",
"/Users/adarshkumar/Desktop/Learning/ai-shopping-cart-mcp/target/shopping-cart-server.jar"
]
}
}
}以下是Claude Desktop中的开发人员设置配置:
______________________________________________________________________
样本输出
成功连接到Claude后的截图:
______________________________________________________________________
我面临的问题和解决方法
1.JAR名称错误
最初,使用了不同的JAR名称(如ai-shopping-cart-cp-0.0.1-SNAPSHOT.JAR),这导致了启动失败。
修复: 确保使用正确的最终JAR名称:
购物卡服务器.jar
2.写入stdout的日志
MCP使用JSON通过stdout进行通信。如果您的应用程序将日志写入stdout,则会破坏通信。
您可能会看到错误:
JSON第4位后出现意外的非空白字符
修复:
使用logback-spring.xml将日志重定向到stderr 更新application.properties: spring.main.baner模式=关闭 logging.pattern.console=%d{HH:mm:ss}%-5level-%msg%n
3.日志文件写入错误
Logback试图将日志写入文件(app.log),但环境是只读的,导致应用程序崩溃。
修复:
从logback配置中删除文件附加器 仅使用控制台日志记录(stderr)
4.工具未注册(工具:\[\])
MCP服务器已成功连接,但未暴露任何工具。
原因: @工具注释方法未在MCP服务器上注册。
修复: 添加Toolcallback提供程序bean:
@Bean
public ToolCallbackProvider shoppingCartTools(ShoppingCartMcpService service) {
return MethodToolCallbackProvider.builder()
.toolObjects(service)
.build();
}什么不该做
- 不要向stdout打印任何内容(这会中断MCP通信)
- 不要使用不正确的JAR名称或过时的构建
- 不要忘记使用Toolcallback Provider注册工具
- 不要在受限环境中使用基于文件的日志记录
- 更改配置后不要跳过重新启动Claude Desktop
