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]