找回密码
 立即注册
首页 业界区 业界 springAI实现一个MCP-Server

springAI实现一个MCP-Server

宿遘稠 2025-6-2 23:34:57
mcp

Model Context Protocol(MCP)模型上下文协议(如下图所示)是 Anthropic 发布的一种标准化协议,使得 Agent 智能体应用可以更快捷地与下游异构的数据或者工具进行交互
sequenceDiagram    participant Client as MCP Client (HTTP)    participant WebServer as Web服务层 (Express)    participant MCPCore as MCP 核心逻辑    participant web应用    Client->>WebServer: HTTP 请求 (POST /mcp)    WebServer->>MCPCore: 转换协议格式    MCPCore->>web应用: 执行 MCP 操作    web应用-->>MCPCore: 返回结果    MCPCore-->>WebServer: 格式处理    WebServer-->>Client: HTTP 响应 (JSON)

  • https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html
  • https://blog.csdn.net/sufu1065/article/details/146554118
  • https://medium.com/@nivedita.sood/how-to-build-a-redis-mcp-server-in-cursor-ebb88fbb75e7
  • https://www.51cto.com/aigc/4906.html
添加引用
  1.     <properties>
  2.         <java.version>17</java.version>
  3.         <spring-ai.version>1.0.0-M6</spring-ai.version>
  4.         <spring-boot.version>3.4.3</spring-boot.version>
  5.     </properties>
  6.     <dependencies>
  7.         
  8.         
  9.         
  10.         
  11.         <dependency>
  12.             <groupId>org.springframework.ai</groupId>
  13.             spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
  14.         </dependency>
  15.         <dependency>
  16.             <groupId>org.springframework</groupId>
  17.             spring-web</artifactId>
  18.         </dependency>
  19.         <dependency>
  20.             <groupId>org.projectlombok</groupId>
  21.             lombok</artifactId>
  22.             <optional>true</optional>
  23.         </dependency>
  24.         <dependency>
  25.             <groupId>org.springframework.boot</groupId>
  26.             spring-boot-starter-test</artifactId>
  27.             <scope>test</scope>
  28.         </dependency>
  29.         <dependency>
  30.             <groupId>cn.hutool</groupId>
  31.             hutool-all</artifactId>
  32.             <version>5.8.36</version>
  33.         </dependency>
  34.     </dependencies>
  35.     <dependencyManagement>
  36.         <dependencies>
  37.             <dependency>
  38.                 <groupId>org.springframework.ai</groupId>
  39.                 spring-ai-bom</artifactId>
  40.                 <version>${spring-ai.version}</version>
  41.                 <type>pom</type>
  42.                 <scope>import</scope>
  43.             </dependency>
  44.         </dependencies>
  45.     </dependencyManagement>
复制代码
application.yml配置


  • stdio 标准输入,mcp client进程到mcp server进程之间进行通讯
  • sse 通过Server-Sent Events(SSE) 技术向客户端进行消息推送,标准请求方式是GET
  1. spring:
  2.   application:
  3.     name: mcp-server-weather
  4. server:
  5.   port: 8080
  6.   # MCP Server 配置(STDIO 传输)
  7.   ai:
  8.     mcp:
  9.       server:
  10.         enabled: true
  11.         type: ASYNC
  12.         sse-message-endpoint: mcp/messages
  13.         stdio:
  14.           enabled: false
  15.         sse:
  16.           enabled: true
复制代码
添加测试代码
  1. @Component
  2. public class WeatherService {
  3.     @Tool(description = "根据城市名称获取天气预报")
  4.     public String getWeatherByCity(String city) {
  5.         Map<String, String> mockData = Map.of(
  6.                 "西安", "晴天",
  7.                 "北京", "小雨",
  8.                 "上海", "大雨"
  9.         );
  10.         return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");
  11.     }
  12. }
  13. @Component
  14. public class HelloWorldTool {
  15.     @Bean
  16.     public ToolCallbackProvider weatherTools(WeatherService weatherService) {
  17.         return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
  18.     }
  19. }
复制代码
添加Dockerfile

使用性能更好的graalvm这个jdk工具
  1. FROM findepi/graalvm:java17
  2. MAINTAINER lind
  3. RUN mkdir -p /mcp-weather-server
  4. WORKDIR /mcp-weather-server
  5. ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""  TZ=Asia/Shanghai WEATHER_API_KEY=""
  6. EXPOSE 8080
  7. ADD ./target/mcp-server-weather-0.0.1-SNAPSHOT.jar ./app.jar
  8. ENTRYPOINT ["java", "-jar", "app.jar"]
复制代码
部署到k8s
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: mcp-weather
  5.   namespace: default
  6.   labels:
  7.     app: mcp-weather
  8. spec:
  9.   replicas: 1
  10.   selector:
  11.     matchLabels:
  12.       app: mcp-weather
  13.   template:
  14.     metadata:
  15.       labels:
  16.         app: mcp-weather
  17.     spec:
  18.       containers:
  19.         - name: mcp-weather
  20.           image: harbor.xxx.xx:8443/library/mcp-weather:1.0
  21.           ports:
  22.             - name: http
  23.               containerPort: 8080
  24.               protocol: TCP
  25.           resources:
  26.             requests:
  27.               cpu: 250m
  28.               memory: 512Mi
  29.   strategy:
  30.     type: RollingUpdate
  31.     rollingUpdate:
  32.       maxUnavailable: 25%
  33.       maxSurge: 25%
  34. ---
  35. apiVersion: v1
  36. kind: Service
  37. metadata:
  38.   name: mcp-weather
  39.   namespace: default
  40. status:
  41.   loadBalancer: {}
  42. spec:
  43.   ports:
  44.     - name: http
  45.       protocol: TCP
  46.       port: 8080
  47.       targetPort: 8080
  48.   selector:
  49.     app: mcp-weather
  50.   type: ClusterIP
  51.   sessionAffinity: None
复制代码
cursor中配置mcp-server信息,测试mcp-server
  1. {
  2.     "mcpServers": {
  3.         "weather": {
  4.             "url": "https://test-xxx.com/weather/v1/sse",
  5.             "headers": {
  6.                 "Authorization": "Bearer WSO2_DEV_PORTAL_APP_OAUTH_TOKEN"
  7.             }
  8.         },
  9.         // 其他服务配置...
  10.     }
  11. }
复制代码
1.jpeg


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册