第三章:5、MCP协议入门

1. 理解MCP的核心价值

  • MCP 是一个标准化协议,使AI应用能够以统一的方式接入各种外部工具和数据源。
  • 类比说明:如同 JDBC 让 Java 用统一接口访问不同数据库,MCP 让 AI 用统一接口调用不同工具服务。
  • 你可以将自己的工具暴露为 MCP Server,也可以消费他人提供的 MCP Server 工具。

2. 配置MCP Client

步骤如下:

(1) 在 pom.xml 中添加MCP依赖:

xml 复制代码
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>

(2) 在 application.yml 中配置MCP Server连接:

xml 复制代码
spring:
  ai:
    mcp:
      client:
        stdio:
          connections:
            # 接入一个示例MCP Server(文件系统操作)
            filesystem:
              # 本地有安装node的话,这里只是为了测试。
              # 直接用node运行本地安装的包,避免npx下载延迟和额外输出干扰stdio握手
              command: D:\nodejs\node.exe
              args:
                - "D:/IdeaProject/ai-study/node_modules/@modelcontextprotocol/server-filesystem/dist/index.js"
                - "D:/IdeaProject/ai-study"

3. 混合使用本地工具和MCP工具

使用示例:

  • 注入 MCP 工具:
java 复制代码
@Resource
private SyncMcpToolCallbackProvider mcpTools;
  • 配置 ChatClient,支持本地工具与MCP工具混用:
java 复制代码
@Bean("mcpAgentChatClient")
public ChatClient mcpAgentChatClient(ChatClient.Builder builder, OpsTools opsTools) {
    return builder
            .defaultSystem("你是一个智能运维助手,可以查询服务状态,也可以读写文件。")
            .defaultTools(opsTools, mcpTools)  // 本地工具 + MCP工具混用
            .build();
}
  • 定义接口,进行AI对话:
java 复制代码
@GetMapping(value = "/mcp/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> mcpChat(@RequestParam String message,
                            @RequestParam(defaultValue = "default") String conversationId) {
    return mcpChatClient.prompt()
            .user(message)
            .advisors(spec -> spec.param(ChatMemory.CONVERSATION_ID, conversationId))
            .stream()
            .content();
}

4. 测试

curl "http://localhost:8080/agent/mcp/chat?message=帮我查看/tmp目录下的文件列表"

相关推荐
ServBay43 分钟前
Claude Fable 5.5 测试曝光,但它在悄悄给你打分
后端·ai编程·claude
孟健1 小时前
Claude Code 同需求写两版对比:装不装 frontend-design 差多远?
前端·ai编程·claude
IT规划师2 小时前
一文讲透五种发布机制:滚动、蓝绿、金丝雀、红黑与 AB
后端·面试
OpsEye2 小时前
大模型 Token 计量不准,是什么原因,怎么解决??
javascript·ai编程
西安小哥3 小时前
把 200K 上下文跑满之后,我给编码智能体立了四条规矩
aigc·ai编程
一条Go3 小时前
两套权限目录,三重闸门:Alioth 的多租户 RBAC 为什么这么拧
后端·程序员·github
西安小哥3 小时前
让大模型稳定输出 JSON,我换了三次方案,最后败给一个土办法
ai编程
Tokenfree3 小时前
把多模态 OCR 接进业务系统:四千张运单,三个坑
后端
ryn483983 小时前
01 一个功能模块,怎么分层才不乱
前端·ai编程·claude
文谦南宁AI普工3 小时前
CVSS 10.0 沙箱逃逸 + 假扩展后门:给 Agent 开发者的供应链与沙箱安全复盘(附可跑的配置审计器)
安全·agent·ai编程