模型上下文协议(MCP)是一种标准化协议,支持AI模型通过结构化方式与外部工具及资源进行交互。该协议支持多种传输机制,以在不同环境中提供灵活性、便捷性。
MCP服务器是MCP架构中的基础组件,负责为客户端提供工具、资源及能力支持。该服务器实现协议的服务端部分。
- 核心职责包括:
- 服务端协议操作实现 :处理协议交互逻辑。
- 工具暴露与发现 :通过标准化接口提供可调用的外部工具(如函数/API)。
- 基于URI的资源管理 :支持文件、数据库等本地资源的安全访问。
- 提示模板提供与处理 :管理预定义的Prompt模板并动态注入上下文。
- 能力协商 :与客户端协商支持的功能范围(如同步/异步模式)。
- 结构化日志与通知 :记录操作日志并推送状态变更事件。
- 多客户端并发管理 :支持高并发连接与会话隔离。
- 同步与异步API支持 :适配不同场景的调用需求。
- 传输实现 :
- 基于标准输入/输出的传输(适用于进程间通信)。
- 基于Servlet的SSE服务端传输(支持事件流HTTP响应)。
- 基于WebFlux的响应式SSE传输(用于异步HTTP流式处理)。
- 基于WebMVC的Servlet SSE传输(兼容传统HTTP流式交互)。
MCP服务器简单示例
-
项目依赖
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>
</dependencies><dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> -
项目配置
spring:
profiles:
active: dev
application:
name: ai–demo–mcp–server
main:
allow-bean-definition-overriding: true
ai:
mcp:
server:
enabled: true
name: ai–demo–mcp–server
type: SYNC # ASYNC / SYNC
version: 1.0.0
resource-change-notification: true
prompt-change-notification: true
tool-change-notification: trueserver:
port: 10102 -
项目代码
- @Tool 注解用于标记这个方法是一个工具方法,并为其提供了名称和描述。
@Service
public class DemoService {@Tool(name = "addInteger", description = "计算两个整数的和")
public String addInteger(@ToolParam(description = "整数1") Integer param1, @ToolParam(description = "整数2") Integer param2) {
return String.format("%d + %d = %d", param1, param2, param1 + param2);
}@Tool(description = "计算两个小数的和")
public String addDouble(@ToolParam(description = "小数1") Double param1, @ToolParam(description = "参数2") Double param2) {
return String.format("%f + %f = %f", param1, param2, param1 + param2);
}}
- 配置一个ToolCallbackProvider实例。将服务中的工具方法暴露给MCP服务器,使其能够通过标准化的接口被外部调用。
@Configuration
public class McpServerConfiguration {@Bean
public ToolCallbackProvider demoTools(DemoService demoService) {
return MethodToolCallbackProvider.builder().toolObjects(demoService).build();
}}
-
通过上述配置和代码,即可搭建一个简单的MCP服务器示例,用于暴露服务,供外部使用的工具。
评论前必须登录!
注册