本文导读

    mcpModel Context Protocol(MCP)模型上下文协议(如下图所示)是 Anthropic 发布的一种标准化协议,使得 Agent 智能体应用可以更快捷地与下游异构的数据或者工具进行交互seque

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)

添加引用

    <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>-->        <!--            <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>-->        <!--        </dependency>-->        <dependency>            <groupId>org.springframework.ai</groupId>            <artifactId>spring-ai-mcp-server-webmvc-spring-boot-starter</artifactId>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-web</artifactId>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <dependency>            <groupId>cn.hutool</groupId>            <artifactId>hutool-all</artifactId>            <version>5.8.36</version>        </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>

application.yml配置

  • stdio 标准输入,mcp client进程到mcp server进程之间进行通讯
  • sse 通过Server-Sent Events(SSE) 技术向客户端进行消息推送,标准请求方式是GET
spring:  application:    name: mcp-server-weatherserver:  port: 8080  # MCP Server 配置(STDIO 传输)  ai:    mcp:      server:        enabled: true        type: ASYNC        sse-message-endpoint: mcp/messages        stdio:          enabled: false        sse:          enabled: true

添加测试代码

@Componentpublic class WeatherService {    @Tool(description = "根据城市名称获取天气预报")    public String getWeatherByCity(String city) {        Map<String, String> mockData = Map.of(                "西安", "晴天",                "北京", "小雨",                "上海", "大雨"        );        return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");    }}@Componentpublic class HelloWorldTool {    @Bean    public ToolCallbackProvider weatherTools(WeatherService weatherService) {        return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();    }}

添加Dockerfile

使用性能更好的graalvm这个jdk工具

FROM findepi/graalvm:java17MAINTAINER lindRUN mkdir -p /mcp-weather-serverWORKDIR /mcp-weather-serverENV SERVER_PORT=8080 LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""  TZ=Asia/Shanghai WEATHER_API_KEY=""EXPOSE 8080ADD ./target/mcp-server-weather-0.0.1-SNAPSHOT.jar ./app.jarENTRYPOINT ["java", "-jar", "app.jar"]

部署到k8s

apiVersion: apps/v1kind: Deploymentmetadata:  name: mcp-weather  namespace: default  labels:    app: mcp-weatherspec:  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: v1kind: Servicemetadata:  name: mcp-weather  namespace: defaultstatus:  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://t*est-*x*xx.com/weather/v1/sse",            "headers": {                "Authorization": "Bearer WSO2_DEV_PORTAL_APP_OAUTH_TOKEN"            }        },        // 其他服务配置...    }}

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:[email protected]