如何用go搭建MCP服务

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原理图

img

顺便贴一下我用mermaid画的MCP原理图mermaid:

​```mermaidsequenceDiagramautonumberactor 用户participant Client as 客户端<br>(Cursor)participant LLM as LLM<br>(Claude-3.7)participant MCP as MCP服务participant 远程 as 远程服务<br>(Web Api)rect rgb(255, 255, 0)	Note over Client,MCP:初始化阶段	Client->>MCP:注册并启动MCP服务	MCP-->>Client:服务注册成功endrect rgb(255, 255, 0)	Note over 用户,远程:交互流程	用户->>Client:输入内容	Client->>LLM:将用户输入的内容提交给LLM	Note over LLM:分析用户内容,<br>并决定是否需要<br>调用MCP	LLM-->>LLM: 	rect rgb(155, 255, 155)		alt 需要调用MCP				LLM->>Client:请求客户端调用特定MCP工具				Client->>MCP:调用MCP服务,执行特定动作				MCP->>远程:调用远程Api服务				远程-->>MCP:返回远程结果				MCP-->>Client:返回结果给客户端				Client->>LLM:将MCP返回结果或动作作为上下文再次请求LLM			else 不需要调用MCP				Note over LLM:直接返回大模型输出结果		end	end	LLM-->>Client:输出内容给客户端	Client-->>用户:显示回答内容end```

4.编译go MCP服务

  • go version:go1.24.1
  • mcp-go库地址:github.com/mark3labs/mcp-go
  • 操作步骤: 下面是一个go MCP服务的demo,可以根据自己的需要添加或更改Tool,下面是详细操作步骤:

步骤1:创建项目和main.go Choose here javascripttypescripthtmlcssshellpythongolangjavacc++c#phprubyswiftkotlinscalarustdartelixirhaskellluaperlrsql

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

​ Choose here javascripttypescripthtmlcssshellpythongolangjavacc++c#phprubyswiftkotlinscalarustdartelixirhaskellluaperlrsql

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:编译 Choose here javascripttypescripthtmlcssshellpythongolangjavacc++c#phprubyswiftkotlinscalarustdartelixirhaskellluaperlrsql

#初始化依赖包
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 Choose here javascripttypescripthtmlcssshellpythongolangjavacc++c#phprubyswiftkotlinscalarustdartelixirhaskellluaperlrsql

{
  "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

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

<think>好的,用户想了解如何搭建MCP Server,特别是用Python在Windows本地快速启动。首先,我需要回忆一下之前处理过的类似问题。根据引用[1],有一篇面向零基础用户的教程,指导如何在Windows上快速启动MCP Server,可能需要Python环境。 首先,我应该检查用户提到的MCP Server的具体定义,但可能是指Minecraft联机服务器的MCP(Mod Coder Pack),但更可能是某个自定义的服务器应用。不过根据引用中的内容,用户提到的是用Python搭建,所以可能是一个自定义的服务器,比如基于某种框架的。 接下来,需要确保步骤清晰,适合新手。可能需要安装Python,然后安装必要的库,比如Flask或socket库,具体取决于MCP Server的实现方式。然后编写服务器代码,运行脚本,最后测试连接。 还要注意用户可能遇到的常见问题,比如防火墙设置、端口被占用等,需要给出解决方法。同时,按照用户的要求,生成相关问题,比如优化、部署到生产环境等。 需要确保所有代码块正确,使用正确的语法,并符合用户要求的格式,比如行内数学公式用$...$,独立公式用$$...$$,但这个问题可能不涉及数学公式,所以可能不需要。但系统指令里有提到,可能需要检查是否有数学内容需要转换。 最后,生成的相关问题需要与搭建MCP Server相关,比如性能优化、安全配置、客户端连接等。确保引用正确,在回答末尾添加引用标识,比如[^1]。 现在整理步骤:安装Python,安装依赖库,编写服务器代码,运行服务器,测试连接,常见问题处理。每一步详细说明,代码示例正确,使用Python的socket或Flask库。例如,可能使用Flask搭建一个简单的HTTP服务器作为MCP Server的基础。 检查是否需要更多的细节,比如具体的代码示例,如何配置端口,处理请求等。同时,提醒用户注意安全,比如不要使用简单密码,暴露公网需要防火墙规则等。 最后,确保回答结构清晰,分步骤说明,代码块正确,相关问题合理。可能用户的问题中的引用[1]是关于搭建MCP Server的基础教程,所以需要准确引用,并在末尾添加引用标识。</think>### 如何搭建 MCP Server(详细教程) MCP Server 通常指基于 Python 的轻量级服务端应用,适用于本地开发或小型项目。以下是面向零基础用户的详细搭建步骤: --- #### **1. 环境准备** - **安装 Python** 访问 [Python官网](https://www.python.org/),下载 Windows 版安装包(建议 Python 3.8+),安装时勾选 `Add Python to PATH`。 - **验证安装** 打开命令提示符,输入: ```bash python --version ``` 若显示版本号(如 `Python 3.10.6`),则安装成功。 --- #### **2. 创建项目目录** - 新建文件夹(如 `mcp_server`),用于存放代码和配置文件。 - 在文件夹内新建文件 `server.py`(主程序文件)。 --- #### **3. 编写 MCP Server 代码** 使用 Python 内置库 `http.server` 快速搭建基础服务器: ```python from http.server import SimpleHTTPRequestHandler, HTTPServer # 定义请求处理类 class MCPHandler(SimpleHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header("Content-type", "text/html") self.end_headers() self.wfile.write(b"<h1>MCP Server Running!</h1>") # 配置服务器参数 HOST = "localhost" PORT = 8000 # 启动服务器 with HTTPServer((HOST, PORT), MCPHandler) as server: print(f"Server started at http://{HOST}:{PORT}") server.serve_forever() ``` --- #### **4. 运行服务器** 在命令提示符中进入项目目录,执行: ```bash python server.py ``` 若看到输出 `Server started at http://localhost:8000`,则服务已启动。 --- #### **5. 测试访问** 浏览器访问 `http://localhost:8000`,若显示 `MCP Server Running!`,则搭建成功。 --- #### **6. 常见问题处理** - **端口冲突**:修改 `PORT` 值(如 `8080`)并重启服务- **防火墙拦截**:允许 Python 通过 Windows 防火墙。 - **依赖缺失**:若使用第三方库,通过 `pip install 库名` 安装。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值