mcpField
M
mcp-go-starter

mcp-go-starter

本地服务
github.com/SamMorrowDrums开发工具74 周前更新

关于 mcp-go-starter

mcp-go-starter 是使用官方 Go SDK 构建 MCP 服务的模板,面向学习或原型开发。它演示工具、资源、模板、提示词、进度通知,以及 stdio 和 HTTP 传输。

主要功能

  1. 01工具、资源和提示词示例
  2. 02资源模板与动态工具
  3. 03进度更新示例
  4. 04stdio 和 HTTP 传输
  5. 05VS Code 配置

适用场景

  1. 01学习用 Go 实现 MCP 服务
  2. 02使用常见 MCP 功能制作原型
  3. 03在 VS Code 中测试工具和资源
  4. 04检查 MCP 消息与架构

MCP 相关

该模板实现了 MCP 服务,包含工具、资源、模板和提示词示例,并支持 stdio 或 HTTP 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"go-starter": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/inspector"
]
}
}
}
启动命令npx -y @modelcontextprotocol/inspector

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@modelcontextprotocol/inspector

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP Go Starter

CI Go Report Card Go Version License: MIT MCP

使用官方 go-sdk 编写的功能齐全的 Go 语言 Model Context Protocol(MCP)服务模板。此入门项目通过简洁、符合惯例的 Go 代码,演示了所有主要的 MCP 功能。

📚 文档

✨ 功能

类别功能描述
工具hello带注解的基础工具
get_weather返回结构化数据的工具
ask_llm调用 LLM 采样的工具
long_task每隔 5 秒报告进度的工具
load_bonus_tool动态加载新工具
资源info://about静态信息资源
file://example.md基于文件的 Markdown 资源
模板greeting://{name}个性化问候语
data://items/{id}按 ID 查询数据
提示词greet多种风格的问候语
code_review针对特定方面的代码审查

MCP 采样(ask_llm)自协议版本 2026-07-28 起已弃用 (SEP-2577)。 本工作坊会在弃用支持期内保留此示例;新的生产环境服务应直接调用 LLM 提供商 API。

🚀 快速开始

前置条件

Air 和 goimports 已固定在 tools/go.mod 中,包括它们的传递依赖项,并由 Dependabot 与服务模块一同更新。 使用 go -C tools install tool 安装它们。

安装
# Clone the repository
git clone https://github.com/SamMorrowDrums/mcp-go-starter.git
cd mcp-go-starter

# Download dependencies
go mod download
运行服务

stdio 传输(用于本地开发):

go run ./cmd/stdio
# Or: make run-stdio

HTTP 传输(用于远程/Web 部署):

go run ./cmd/http
# Or: make run-http
# Server runs on http://localhost:3000

HTTP 端点要求请求使用 JSON 格式,并会拒绝跨源浏览器请求。 不带 Origin 标头的原生 MCP 客户端以及同源浏览器客户端仍受支持。

构建二进制文件
make build
# Creates bin/stdio and bin/http

🔧 VS Code 集成

此项目包含 VS Code 配置,便于顺畅开发:

  1. 在 VS Code 中打开项目
  2. MCP 配置位于 .vscode/mcp.json
  3. 使用 Ctrl+Shift+B 构建(Mac 上使用 Cmd+Shift+B)
  4. 使用 VS Code 的 MCP 工具测试服务
使用 DevContainers
  1. 安装 Dev Containers 扩展
  2. 打开命令面板:“Dev Containers: Reopen in Container”
  3. 所有内容都已预先配置完毕,可以直接使用!

📁 项目结构

.
├── cmd/
│   ├── stdio/
│   │   └── main.go        # stdio transport entrypoint
│   └── http/
│       └── main.go        # HTTP transport entrypoint
├── internal/
│   └── server/
│       ├── server.go      # Server orchestration
│       ├── tools.go       # Tool definitions (hello, get_weather, etc.)
│       ├── resources.go   # Resource and template definitions
│       └── prompts.go     # Prompt definitions
├── .vscode/
│   ├── mcp.json           # MCP server configuration
│   ├── tasks.json         # Build/run tasks
│   └── extensions.json
├── .devcontainer/
│   └── devcontainer.json
├── .air.toml              # Live reload configuration
├── .golangci.yml          # Linter configuration
├── go.mod
├── Makefile
└── README.md

🛠️ 开发

# Development with live reload (recommended)
make dev
# Requires air: go install github.com/air-verse/air@latest

# Run without live reload
make run-stdio

# Run tests
make test

# Format code
make fmt

# Lint code
make lint

# Install all dev tools
make install-tools

# Clean build artifacts
make clean
实时重载

安装 air 以自动重新构建:

go install github.com/air-verse/air@latest
make dev

任何 .go 文件发生更改后,都会自动重新构建并重启服务。

🔍 MCP Inspector

MCP Inspector 是用于测试和调试 MCP 服务的重要开发工具。

运行 Inspector
npx @modelcontextprotocol/inspector -- go run ./cmd/stdio/main.go
Inspector 提供的功能
  • 工具选项卡:列出并调用所有已注册的工具及其参数
  • 资源选项卡:浏览和读取资源及模板
  • 提示词选项卡:查看和测试提示词模板
  • 日志选项卡:查看客户端与服务之间的 JSON-RPC 消息
  • 架构验证:验证工具输入/输出架构
调试技巧
  1. 在连接 IDE/客户端之前启动 Inspector
  2. 使用“日志”选项卡查看确切的请求/响应负载
  3. 测试工具注解 (ToolAnnotations) 是否正确公开
  4. 验证 long_task 是否会显示进度通知
  5. 检查 ask_llm 的采样功能是否正常

📖 功能示例

带注解的工具
mcp.AddTool(server, &mcp.Tool{
    Name:        "hello",
    Title:       "Say Hello",
    Description: "A friendly greeting tool",
    Annotations: &mcp.ToolAnnotations{
        ReadOnlyHint: ptr(true),
    },
}, helloHandler)

func helloHandler(ctx context.Context, req *mcp.CallToolRequest, input helloInput) (*mcp.CallToolResult, any, error) {
    return &mcp.CallToolResult{
        Content: []mcp.Content{
            &mcp.TextContent{Text: fmt.Sprintf("Hello, %s!", input.Name)},
        },
    }, nil, nil
}
资源模板
server.AddResourceTemplate(&mcp.ResourceTemplate{
    Name:        "Personalized Greeting",
    URITemplate: "greeting://{name}",
    MIMEType:    "text/plain",
}, greetingHandler)
带进度更新的工具
func longTaskHandler(ctx context.Context, req *mcp.CallToolRequest, input longTaskInput) (*mcp.CallToolResult, any, error) {
    progressToken := req.Params.GetProgressToken()
    
    for i := 0; i < 5; i++ {
        req.Session.NotifyProgress(ctx, &mcp.ProgressNotificationParams{
            ProgressToken: progressToken,
            Progress:      float64(i) / 5.0,
            Total:         1.0,
        })
        time.Sleep(time.Second)
    }
    
    return &mcp.CallToolResult{
        Content: []mcp.Content{&mcp.TextContent{Text: "Done!"}},
    }, nil, nil
}
带采样功能的工具
result, err := req.Session.CreateMessage(ctx, &mcp.CreateMessageParams{
    Messages: []*mcp.SamplingMessage{
        {Role: "user", Content: &mcp.TextContent{Text: prompt}},
    },
    MaxTokens: 100,
})

🔐 环境变量

将 .env.example 复制为 .env 并进行配置:

cp .env.example .env
变量描述默认值
PORTHTTP 服务端口3000

🤝 贡献

欢迎贡献!请确保你的更改与其他语言入门项目保持功能一致。

📄 许可证

MIT 许可证 - 详情请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。