返回市场
go开发mcp服务器

go开发mcp服务器

作者:fpt7 星标更新:2025-09-06

项目介绍

GoDevMCP

简介

GoDevMCP 提供了方便的工具,用于与模型上下文协议(MCP)集成的 Go 开发。

安装

先决条件

  • 需要 GitHub 的 gh 命令。

使用 go install 安装

你可以直接使用 Go 的安装命令来安装 GoDevMCP:

go install github.com/fpt/go-dev-mcp/godevmcp@latest

这将下载、编译并安装二进制文件到你的 $GOPATH/bin 目录(通常是 ~/go/bin)。确保这个目录在你的系统 PATH 中。

从源码构建

  1. 克隆仓库
  2. 运行 make build 来构建应用程序,并运行 make install 来安装。

MCP 设置

Claude 代码

运行以下命令以添加到用户范围

claude mcp add godevmcp -s user godevmcp serve

VSCode

在用户的 settings.json 中添加以下部分

    "mcp": {
        "servers": {
            "go-dev-mcp": {
                "type": "stdio",
                "command": "godevmcp",
                "args": [
                    "serve"
                ],
            }
        }
    }

工具

run_make

执行常见的开发任务的 make 命令。

tree_dir

返回项目导航的目录树结构。

search_godoc

搜索 pkg.go.dev 上的 Go 包,并返回匹配的结果。

用法:

search_godoc 查询

示例:

search_godoc html

这将搜索与 "html" 相关的包,并返回一个带有描述的匹配包列表。

read_godoc

获取并显示特定 Go 包的文档。

用法:

read_godoc 包地址

示例:

read_godoc golang.org/x/net/html

这将检索指定包的文档,包括描述、函数、类型和示例。

extract_function_names

从目录中的 Go 源文件中提取导出的函数名称。

用法:

extract_function_names 目录

示例:

extract_function_names ./internal/app

这将递归扫描目录中的 .go 文件(排除测试文件),并提取所有导出的函数名称,显示常规函数和方法及其接收器类型。

extract_call_graph

分析单个 Go 文件内的函数调用关系。

用法:

extract_call_graph 文件路径

示例:

extract_call_graph ./internal/app/github.go

这将显示哪些函数调用了其他哪些函数,包括外部包调用和本地函数调用。有助于理解代码依赖关系和重构影响分析。

search_local_files

在本地目录的文件中搜索文本,限制匹配以减少输出大小。

用法:

search_local_files 路径 查询 扩展名 最大匹配数

示例:

search_local_files ./internal/app "SearchLocalFiles" go 1

这将在 ./internal/app 目录内的所有 .go 文件中搜索文本 "SearchLocalFiles",每个文件最多显示 10 个匹配项及其行号。

get_github_content

从 GitHub 存储库中检索特定文件的内容,可选地基于行进行分页以处理大型文件。

用法:

get_github_content repo 路径 [偏移量] [限制]

参数:

  • repo:GitHub 存储库,格式为 'owner/repo'
  • 路径:存储库中的文件路径
  • 偏移量:开始读取的行号(0 基数,默认值:0)
  • 限制:要读取的行数(默认值:100,0 表示所有行)

示例:

# 获取整个文件
get_github_content owner/repo-name README.md

# 获取前 20 行
get_github_content owner/repo-name src/main.go 0 20

# 获取第 50 到第 70 行(从第 50 行开始的 20 行)
get_github_content owner/repo-name src/main.go 50 20

这将从 GitHub 文件中获取内容,对于大型文件可以进行分页,类似于 read_godoc 工具。

tree_github_repo

显示 GitHub 存储库的目录树结构,深度限制以高效探索。

用法:

tree_github_repo repo 路径 最大深度 忽略点

示例:

tree_github_repo owner/repo-name "" 3 false

这将显示 GitHub 存储库的目录结构,最多显示 3 层深。

search_github_code

在 GitHub 存储库中搜索代码模式,紧凑格式化。

用法:

search_github_code 查询 语言 repo

示例:

search_github_code "func main" go owner/repo-name

这将在指定存储库的 Go 文件中搜索 "func main",以紧凑格式返回结果。

get_current_datetime

返回当前日期和时间。

用法:

get_current_datetime

此工具不需要参数,并返回当前的时间戳。

操作指南

  1. 构建应用程序

    make build
    
  2. 运行应用程序

    make run
    

可用的 Make 命令

  • make run - 运行应用程序
  • make build - 构建应用程序并安装到 ~/bin
  • make test - 运行单元测试
  • make fmt - 使用 gofumpt 格式化代码
  • make lint - 运行 golangci-lint
  • make inspect - 在 MCP 检查器中运行
  • make help - 显示帮助信息

开发

项目结构

.
├── godevmcp/       # 应用程序入口点
│   └── main.go     # 主应用程序入口点
├── doc/            # 文档文件
├── internal/       # 私有应用程序和库代码
│   ├── app/        # 应用核心功能
│   ├── infra/      # 基础设施代码
│   ├── mcptool/    # MCP 工具实现
│   ├── repository/ # 存储库实现
│   └── subcmd/     # 子命令实现
├── output/         # 构建工件
│   └── godevmcp    # 编译的二进制文件
├── pkg/            # 公共库代码
│   └── dq/         # 文档查询实用包
├── Makefile        # 构建自动化
├── go.mod          # Go 模块定义
└── go.sum          # Go 模块校验和

包依赖

以下 Mermaid 图表展示了项目内部的包依赖关系:

graph TD
    %% 入口点
    main[godevmcp/main] --> subcmd[internal/subcmd]
    
    %% 核心应用层
    subcmd --> app[internal/app]
    subcmd --> mcptool[internal/mcptool]
    mcptool --> app
    
    %% 应用模块
    app --> repository[internal/repository]
    app --> infra[internal/infra]
    app --> contentsearch[internal/contentsearch]
    app --> model[internal/model]
    app --> dq[pkg/dq]
    
    %% MCP 层
    mcptool --> infra
    
    %% 基础设施依赖
    infra --> repository
    contentsearch --> model
    
    %% 外部依赖(关键的)
    subcmd -.-> subcommands[google/subcommands]
    mcptool -.-> mcp[mark3labs/mcp-go]
    infra -.-> github[google/go-github]
    app -.-> errors[pkg/errors]
    app -.-> goldmark[yuin/goldmark]
    app -.-> cache[patrickmn/go-cache]
    
    %% 样式
    classDef entryPoint fill:#e1f5fe
    classDef coreLayer fill:#f3e5f5
    classDef appLayer fill:#e8f5e8
    classDef infraLayer fill:#fff3e0
    classDef external fill:#fce4ec,stroke-dasharray: 5 5
    
    class main entryPoint
    class subcmd,mcptool coreLayer
    class app,repository,infra,contentsearch,model appLayer
    class dq infraLayer
    class subcommands,mcp,github,errors,goldmark,cache external

该图说明了:

  • 入口点main 包协调子命令
  • 核心层subcmd(CLI)和 mcptool(MCP 服务器)提供用户界面
  • 应用层app 包含业务逻辑,由基础设施包支持
  • 基础设施层:共享实用工具和外部集成
  • 外部依赖:关键第三方包(用虚线表示)

常见开发工作流程

  1. 对代码进行更改
  2. 运行 make fmt 来格式化代码
  3. 运行 make lint 来检查问题
  4. 运行 make test 来确保测试通过
  5. 使用 make build 构建

用于 AI 开发

  • 遵循 CONTRIBUTING.md 中的说明
  • 使用 run_maketree_dir 工具而不是使用 shell 命令。
  • 使用 search_godocread_godoc 工具来了解如何使用依赖包。
  • 使用 tree_github_reposearch_github_codeget_github_content 来检查 GitHub 存储库。
  • 记得在进行重大更改时更新 README.md