1.什么是MCP?

MCP是“模型上下文协议(Model Context Protocol)”的简称,用一句简单通俗易懂的话描述:

是一种让 AI 模型能够无缝连接到外部工具和数据源的标准化方式。想象它就像 AI 的“万能接口”,能让 AI 像用 USB 线连接设备一样,轻松调用其他程序或服务。

2.官方MCP架构图

enter image description here

  • MCP Hosts: 是指 LLM 启动连接的应用程序,如 Cursor、Claude Desktop、IDE 或 AI 工具。

  • MCP Clients: 维护与服务器一对一连接的协议客户端。

  • MCP Servers: 通过标准的 Model Context Protocol 给 Client 提供特定的功能。

  • Local Data Sources: 本地的文件、数据库和 API。

  • Remote Service: 外部的文件、数据库和 API。

3.MCP原理图

用户客户端(Cursor)LLM(Claude-3.7)MCP服务远程服务(Web Api)初始化阶段交互流程分析用户内容,并决定是否需要调用MCP直接返回大模型输出结果alt[需要调用MCP][不需要调用MCP]注册并启动MCP服务1服务注册成功2输入内容3将用户输入的内容提交给LLM45请求客户端调用特定MCP工具6调用MCP服务,执行特定动作7调用远程Api服务8返回远程结果9返回结果给客户端10将MCP返回结果或动作作为上下文再次请求LLM11输出内容给客户端12显示回答内容13用户客户端(Cursor)LLM(Claude-3.7)MCP服务远程服务(Web Api)

4.编译go MCP服务

  • go version:go1.24.1

  • mcp-go库地址:github.com/mark3labs/mcp-go

  • 操作步骤: 下面是一个go MCP服务的demo,可以根据自己的需要添加或更改Tool,下面是详细操作步骤:

步骤1:创建项目和main.go

mkdir mcp-server
cd mcp-server
vim main.go
#在main.go中添加如下内容
package main

import (
    "context"
    "errors"
    "fmt"

    "github.com/mark3labs/mcp-go/mcp"
    "github.com/mark3labs/mcp-go/server"
)

func main() {
    // Create a new MCP server
    s := server.NewMCPServer(
        "Calculator Demo",
        "1.0.0",
        server.WithResourceCapabilities(true, true),
        server.WithLogging(),
        server.WithRecovery(),
    )

    // Add a calculator tool
    calculatorTool := mcp.NewTool("calculate",
        mcp.WithDescription("Perform basic arithmetic operations"),
        mcp.WithString("operation",
            mcp.Required(),
            mcp.Description("The operation to perform (add, subtract, multiply, divide)"),
            mcp.Enum("add", "subtract", "multiply", "divide"),
        ),
        mcp.WithNumber("x",
            mcp.Required(),
            mcp.Description("First number"),
        ),
        mcp.WithNumber("y",
            mcp.Required(),
            mcp.Description("Second number"),
        ),
    )

    // Add the calculator handler
    s.AddTool(calculatorTool, func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
        op := request.Params.Arguments["operation"].(string)
        x := request.Params.Arguments["x"].(float64)
        y := request.Params.Arguments["y"].(float64)

        var result float64
        switch op {
        case "add":
            result = x + y
        case "subtract":
            result = x - y
        case "multiply":
            result = x * y
        case "divide":
            if y == 0 {
                return nil, errors.New("Cannot divide by zero")
            }
            result = x / y
        }

        return mcp.NewToolResultText(fmt.Sprintf("%.2f", result)), nil
    })

    // Start the server
    if err := server.ServeStdio(s); err != nil {
        fmt.Printf("Server error: %v\n", err)
    }
}

步骤2:编译

#初始化依赖包
go mod init
#加载依赖包
go mod tidy
#编译
go build -o mcpServer main.go
#查看目录文件
ls -l
#查看文件路径path
pwd
#如下:

enter image description here

步骤3:在Cursor中配置MCP命令

Command + Shift + J 打开Cursor配置命令,如下图所示,在json配置中添加如下内容:
enter image description hereenter image description here

{
  "mcpServers": {
    "calculate": {
      "command": "/Users/xxx(你的项目路径)/src/mcp-service/mcpServer"
    }
  }
}

其中 calculate 表示的是本地MCP工具的名称,command是需要执行的命令路径。

5.在Cursor中调用MCP服务

使用MCP calculate工具,若 x = 120,y = 30 ,x + y 、x * y 、x /y 分别等于多少?

enter image description here

作者:admin  创建时间:2025-04-12 00:53
最后编辑:admin  更新时间:2025-04-24 10:36
上一篇:
下一篇: