MCP协议简介
Arthropic公司推出了模型上下文协议(Model Context Protocol, MCP),通过标准化的协议,旨在解决LLM与外部工具集成的标准化问题。MCP希望能够像Type-C接口一样成为AI与各种数据源和工具之间的"通用接口",使AI应用程序开发和集成变得简单和统一。 在MCP没有出现之前,开发者开发一个agent应用,依赖工具来扩展agent的能力边界,需要开发者手动编写工具注册逻辑,然后将用户输入和工具schema信息塞到大模型中,大模型会输出工具和对应的参数信息。而MCP的出现,提供了以下关键价值:
- 统一的集成标准:一个协议对接所有集成,提高开发效率,降低开发难度;
- 工具复用:这些工具能直接在其他应用被复用,减少重复的开发工作,例如,你可以使用到其他人开发的工具。
- 自动工具发出:支持动态工具发现和上下文处理。
MCP核心概念
MCP 遵循客户端-服务器架构(client-server),其中包含以下几个核心概念:
- MCP 主机(MCP Hosts):发起请求的 LLM 应用程序(例如Claude Desktop、IDE 或 AI 工具)。
- MCP 客户端(MCP Clients):在主机程序内部,与 MCP server 保持 1:1 的连接。
- MCP 服务器(MCP Servers):为 MCP client 提供上下文、工具和 prompt 信息。
- 本地资源(Local Resources):本地计算机中可供 MCP server 安全访问的资源(例如文件、数据库)。
- 远程资源(Remote Resources):MCP server 可以连接到的远程资源(例如通过 API)。
MCP Server实践
引入webmvc sse依赖
xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
<version>1.0.0-M6</version>
</dependency>
</dependencies>
注册tools信息
kotlin
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ToolsPublisher {
@Bean
ToolCallbackProvider myTools(UserTools userTools) {
return MethodToolCallbackProvider
.builder()
.toolObjects(userTools)
.build();
}
}
配置文件
yaml
spring:
application:
name: ai-project
ai:
mcp:
server:
name: webmvc-mcp-server
version: 1.0.0
type: ASYNC
stdio: false
sse-message-endpoint: /mcp/messages
当完成上述操作后,能发现一个mcp server已经提供了,从日志中可以发现工具注册的日志信息:
cherry studio
这里不想实现MCP Client,因此使用现成的client产品cherry studio,需要操作以下几步:
- 配置大模型,这里我使用阿里云百炼的免费额度:
- 配置MCP Server,如下图:
能看到配置了MCP Server暴露的sse URL后,能找到对应可用的工具列表信息。
- 接下来选择MCP服务器,即可发起调用: