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
添加引用
- <properties>
- <java.version>17</java.version>
- <spring-ai.version>1.0.0-M6</spring-ai.version>
- <spring-boot.version>3.4.3</spring-boot.version>
- </properties>
- <dependencies>
-
-
-
-
- <dependency>
- <groupId>org.springframework.ai</groupId>
- spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- spring-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.projectlombok</groupId>
- lombok</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>cn.hutool</groupId>
- hutool-all</artifactId>
- <version>5.8.36</version>
- </dependency>
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.ai</groupId>
- spring-ai-bom</artifactId>
- <version>${spring-ai.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
复制代码 application.yml配置
- stdio 标准输入,mcp client进程到mcp server进程之间进行通讯
- sse 通过Server-Sent Events(SSE) 技术向客户端进行消息推送,标准请求方式是GET
- spring:
- application:
- name: mcp-server-weather
- server:
- port: 8080
- # MCP Server 配置(STDIO 传输)
- ai:
- mcp:
- server:
- enabled: true
- type: ASYNC
- sse-message-endpoint: mcp/messages
- stdio:
- enabled: false
- sse:
- enabled: true
复制代码 添加测试代码
- @Component
- public class WeatherService {
- @Tool(description = "根据城市名称获取天气预报")
- public String getWeatherByCity(String city) {
- Map<String, String> mockData = Map.of(
- "西安", "晴天",
- "北京", "小雨",
- "上海", "大雨"
- );
- return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");
- }
- }
- @Component
- public class HelloWorldTool {
- @Bean
- public ToolCallbackProvider weatherTools(WeatherService weatherService) {
- return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
- }
- }
复制代码 添加Dockerfile
使用性能更好的graalvm这个jdk工具- FROM findepi/graalvm:java17
- MAINTAINER lind
- RUN mkdir -p /mcp-weather-server
- WORKDIR /mcp-weather-server
- ENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="" TZ=Asia/Shanghai WEATHER_API_KEY=""
- EXPOSE 8080
- ADD ./target/mcp-server-weather-0.0.1-SNAPSHOT.jar ./app.jar
- ENTRYPOINT ["java", "-jar", "app.jar"]
复制代码 部署到k8s
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: mcp-weather
- namespace: default
- labels:
- app: mcp-weather
- spec:
- replicas: 1
- selector:
- matchLabels:
- app: mcp-weather
- template:
- metadata:
- labels:
- app: mcp-weather
- spec:
- containers:
- - name: mcp-weather
- image: harbor.xxx.xx:8443/library/mcp-weather:1.0
- ports:
- - name: http
- containerPort: 8080
- protocol: TCP
- resources:
- requests:
- cpu: 250m
- memory: 512Mi
- strategy:
- type: RollingUpdate
- rollingUpdate:
- maxUnavailable: 25%
- maxSurge: 25%
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: mcp-weather
- namespace: default
- status:
- loadBalancer: {}
- spec:
- ports:
- - name: http
- protocol: TCP
- port: 8080
- targetPort: 8080
- selector:
- app: mcp-weather
- type: ClusterIP
- sessionAffinity: None
复制代码 cursor中配置mcp-server信息,测试mcp-server
- {
- "mcpServers": {
- "weather": {
- "url": "https://test-xxx.com/weather/v1/sse",
- "headers": {
- "Authorization": "Bearer WSO2_DEV_PORTAL_APP_OAUTH_TOKEN"
- }
- },
- // 其他服务配置...
- }
- }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |