模型上下文协议(MCP)是一种标准化协议,使 AI 模型能够以结构化的方式与外部工具和资源进行交互。您可以将其视为连接您的 AI 模型与现实世界的桥梁——通过一致的接口,让它们访问数据库、API、文件系统及其他外部服务。它支持多种传输机制,可在不同环境中提供灵活性。
SpringAI2.0提供了MCP的服务端实现和客户端实现,这里要用两个项目
一、服务端
1、依赖pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>4.1.2</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.suibibk</groupId><artifactId>spring-ai-test</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-ai-test</name><description>spring-ai-test</description><properties><java.version>17</java.version><spring-ai.version>2.0.1</spring-ai.version></properties><dependencies><!-- MCP Server 支持:`STREAMABLE` / `SSE` / `STATELESS`(http 网络模式,复用 8080 端口,访问 `/mcp`)--><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>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
2、配置application.yaml
spring:application:name: spring-ai-mcp-testai:mcp:server:protocol: STREAMABLElogging:level:org.springframework.ai: debugserver:port: 8081
3、mcp工具类
@Componentpublic class CalculatorTools {private final Map<String, String> configData = Map.of("name", "demo","version", "1.0.0");@McpTool(name = "add", description = "Add two numbers together")public int add(@McpToolParam(description = "First number", required = true) int a,@McpToolParam(description = "Second number", required = true) int b) {System.out.println("有调用:"+a+";"+b);return a + b;}@McpResource(uri = "config://{key}", name = "Configuration", description = "Read config value by key")public String getConfig(String key) {return configData.getOrDefault(key, "not found");}}
4、启动类
@SpringBootApplicationpublic class SpringAiMCPTestApplication {public static void main(String[] args) {SpringApplication.run(SpringAiMCPTestApplication.class, args);}}
然后启动就好了。
二、客户端
客户端就基于之前的例子,很简单
1、依赖
<!-- MCP Client 依赖,服务端包不要引进来 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-client</artifactId></dependency>
2、配置
spring:application:name: spring-ai-testai:openai:api-key: ${AI_BAILIAN_API_KEY}base-url: https://dashscope.aliyuncs.com/compatible-mode/v1chat:model: qwen3.8-flashtemperature: 0.7embedding:model: qwen3.7-text-embedding-flashdimensions: 2048mcp:client:streamable-http:connections:self-server:url: http://localhost:8081logging:level:org.springframework.ai: debug
3、调用
@Autowiredprivate ToolCallbackProvider mcpTools;@GetMapping("/mcp")public String mcp(String topic){String result = openaiChatClient.prompt().user(u -> u.text("{topic}").param("topic",topic)).tools(mcpTools).call().content();return result;}
4、测试
访问http://localhost:8080/mcp?topic=1加上1等于多少
结果返回1 加上 1 等于 2。看MCPserver的日志也打印了
有调用:1;1
