Announcement

👇Official Account👇

Welcome to join the group & private message

Article first/tail QR code

Skip to content

VS Code 中 MCP 服务器的开发者快速入门(进阶详解版) ​

“开发环境选得好,效率提升少不了。”
—— 一位热爱折腾的开发者

前言:为什么用 VS Code 开发 MCP 服务器? ​

在现代开发流程中,选择一个趁手的 IDE 能让你的效率翻倍。VS Code 以其轻量、插件丰富、跨平台等优点,成为众多 Go 开发者的首选。对于 MCP(Mock Cloud Platform)服务器的开发,VS Code 不仅能让你写代码更顺手,还能让调试、测试、部署一气呵成。


目录 ​

  1. 环境准备与插件推荐
  2. 项目结构与核心文件
  3. 详细开发流程与代码示例
  4. 调试与测试技巧
  5. 常见问题与解决方案
  6. 实用建议与最佳实践
  7. 总结与展望

环境准备与插件推荐 ​

1. 安装 VS Code ​

官网下载最新版 VS Code,支持 Windows、macOS、Linux,安装过程一键到底。

2. 必备插件配置 ​

  • Go(Google 官方):
    安装后建议按提示执行一次 Go: Install/Update Tools,选择全部工具安装,涵盖调试、lint、代码补全、重构等。
  • REST Client:
    直接在 VS Code 里新建 .http 文件即可测试 HTTP 接口,支持变量、环境、历史记录。
  • GitLens:
    代码历史、作者、分支、blame 一目了然,团队协作必备。
  • Error Lens:
    让错误和警告直接高亮在代码行内,极大提升修错效率。
  • Docker:
    图形化管理容器、镜像、网络,适合本地开发和部署。
  • Path Intellisense、Bracket Pair Colorizer 2、Markdown All in One:
    提升代码导航、括号配色、文档编写体验。

“插件装得好,开发没烦恼。”
—— 摘自《golang提升效率的小工具.md》


项目结构与核心文件 ​

一个典型的 Go MCP 服务器项目结构如下:

mcp-server/
├── cmd/
│   └── main.go
├── internal/
│   ├── api/
│   │   └── handler.go
│   ├── storage/
│   │   └── file.go
│   └── service/
│       └── mcp.go
├── configs/
│   └── config.yaml
├── scripts/
│   └── dev.sh
├── go.mod
├── go.sum
└── README.md
  • cmd/:主程序入口(main.go)
  • internal/api/:HTTP 路由与处理器
  • internal/storage/:存储相关逻辑(如本地文件、云存储)
  • internal/service/:业务逻辑
  • configs/:配置文件(如端口、存储路径等)
  • scripts/:常用脚本(如一键启动、测试、部署)
  • go.mod/go.sum:依赖管理

详细开发流程与代码示例 ​

1. 初始化 Go 项目 ​

shell
go mod init github.com/yourname/mcp-server
go get github.com/gin-gonic/gin

2. 编写主程序入口 ​

cmd/main.go

go
package main

import (
    "github.com/gin-gonic/gin"
    "mcp-server/internal/api"
)

func main() {
    r := gin.Default()
    api.RegisterRoutes(r)
    r.Run(":8080") // 端口可配置
}

3. 路由与处理器 ​

internal/api/handler.go

go
package api

import (
    "github.com/gin-gonic/gin"
    "mcp-server/internal/service"
    "net/http"
)

func RegisterRoutes(r *gin.Engine) {
    r.POST("/upload", uploadHandler)
    r.GET("/download/:filename", downloadHandler)
}

func uploadHandler(c *gin.Context) {
    file, err := c.FormFile("file")
    if err != nil {
        c.JSON(http.StatusBadRequest, gin.H{"error": "文件上传失败"})
        return
    }
    if err := service.SaveFile(file); err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
        return
    }
    c.JSON(http.StatusOK, gin.H{"message": "上传成功"})
}

func downloadHandler(c *gin.Context) {
    filename := c.Param("filename")
    c.File("./data/" + filename)
}

4. 业务逻辑与存储实现 ​

internal/service/mcp.go

go
package service

import (
    "mime/multipart"
    "os"
    "io"
)

func SaveFile(file *multipart.FileHeader) error {
    dst := "./data/" + file.Filename
    return saveUploadedFile(file, dst)
}

func saveUploadedFile(file *multipart.FileHeader, dst string) error {
    src, err := file.Open()
    if err != nil {
        return err
    }
    defer src.Close()

    out, err := os.Create(dst)
    if err != nil {
        return err
    }
    defer out.Close()

    _, err = io.Copy(out, src)
    return err
}

5. 配置文件示例 ​

configs/config.yaml

yaml
server:
  port: 8080
storage:
  path: ./data

6. 启动脚本 ​

scripts/dev.sh

bash
#!/bin/bash
go run cmd/main.go

调试与测试技巧 ​

1. 断点调试 ​

  • 在 main.go 或 handler.go 关键行点击左侧红点设置断点。
  • 按 F5 或点击“运行和调试”按钮,选择 Go 环境。
  • 调试面板可查看变量、调用栈、goroutine 等。

2. 单元测试 ​

internal/service/mcp_test.go

go
package service

import (
    "os"
    "testing"
)

func TestSaveFile(t *testing.T) {
    // 伪造一个文件头,略
    // 调用 SaveFile,断言结果
}

在终端运行:

shell
go test ./internal/service/...

3. API 测试 ​

新建 test.http 文件

http
### 上传文件
POST http://localhost:8080/upload
Content-Type: multipart/form-data; boundary=boundary

--boundary
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain

hello mcp
--boundary--

下载文件

http
GET http://localhost:8080/download/test.txt

常见问题与解决方案 ​

1. 依赖包下载慢 ​

  • 配置 Go Proxy:
    shell
    go env -w GOPROXY=https://goproxy.cn,direct

2. 断点不生效 ​

  • 确保用 F5 启动调试,且代码已保存。
  • 检查 launch.json 配置,推荐如下:
json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch MCP Server",
      "type": "go",
      "request": "launch",
      "mode": "auto",
      "program": "${workspaceFolder}/cmd/main.go"
    }
  ]
}

3. 端口被占用 ​

  • macOS 下查找并杀死进程:
    shell
    lsof -i :8080
    kill -9 <PID>

4. 文件热更新不生效 ​

  • 推荐用 air 工具,配置 .air.toml,保存代码自动重启服务。

实用建议与最佳实践 ​

  1. 善用插件:Go、REST Client、GitLens 等插件能极大提升开发体验。
  2. 多用快捷键:如 Cmd+P 快速跳转文件,Cmd+Shift+F 全局搜索。
  3. 代码分层清晰:API、Service、Storage 分层,便于维护和扩展。
  4. 写好 README:项目说明、启动方式、接口文档一应俱全。
  5. 持续集成:结合 GitHub Actions 或本地脚本,自动化测试和部署。
  6. 日志与监控:集成 zap、prometheus 等库,便于排查问题和性能分析。
  7. 环境变量管理:用 godotenv 或 viper 管理多环境配置。

总结与展望 ​

用 VS Code 开发 MCP 服务器,不仅能享受高效的编码体验,还能借助丰富的插件和调试工具,让开发、测试、部署一气呵成。只要环境搭建到位,工具用得顺手,开发 MCP 服务器就像搭积木一样轻松。

未来,VS Code 生态还会有更多适合 Go 和云原生开发的插件和工具。希望本文能帮你快速上手,在开发之路上越走越顺!


“代码之外,亦有风景。”
—— 祝你写 Go 快乐,开发效率稳如老狗!

上次更新于: