该项目是一个使用Nunu框架和MCP-GO构建的示例MCP服务器。它允许您快速设置一个基于Golang的MCP服务器,并使用MCP Inspector工具进行测试和调试。

git clone https://github.com/go-nunu/nunu-layout-mcp.git
# 注意:默认项目名称是nunu-layout-mcp
</details>
<details>
<summary>选项2:通过Nunu CLI创建新项目(推荐)</summary>
go install github.com/go-nunu/nunu@latest
nunu new mcp-demo -r https://github.com/go-nunu/nunu-layout-mcp.git
</details>
cd mcp-demo
go build -ldflags="-s -w" -o ./bin/server ./cmd/server
MCP Inspector是由MCP社区提供的交互式开发者工具,用于测试和调试:
npx -y @modelcontextprotocol/inspector ./bin/server
# 需要安装Node.js
打开浏览器:http://127.0.0.1:6274以测试不同的传输协议。
| 传输类型 | 地址 / 参数 | 使用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| STDIO | ./bin/server | CLI工具,桌面应用 | 简单,安全,无需网络 | 仅限本地,单个客户端 |
| SSE | http://localhost:3001/sse | 网络实时通信 | 多客户端,实时,浏览器友好 | HTTP开销,仅限服务器到客户端 |
| StreamableHTTP | http://localhost:3002/mcp | 网络服务,API | 标准协议,缓存及负载均衡 | 不支持实时,稍显复杂 |
| In-Process | (无外部地址) | 嵌入式,测试 | 无需序列化,超快 | 仅限进程内 |

由于此项目基于Nunu架构,建议在开发前了解该框架。
此项目默认启用三种协议:STDIO、SSE、StreamableHTTP。您可以根据需要修改或禁用它们:
// 文件:internal/server/mcp.go
func setupSrv(logger *log.Logger) *servermcp.Server {
mcpServer := server.NewMCPServer(
"example-servers/everything",
"1.0.0",
server.WithResourceCapabilities(true, true),
server.WithPromptCapabilities(true),
server.WithToolCapabilities(true),
server.WithLogging(),
server.WithHooks(newHooks(logger)),
)
return servermcp.NewServer(logger,
servermcp.WithMCPSrv(mcpServer),
// STDIO
servermcp.WithStdioSrv(true),
// SSE
servermcp.WithSSESrv(":3001", server.NewSSEServer(
mcpServer,
server.WithSSEEndpoint("/sse"),
)),
// StreamableHTTP
servermcp.WithStreamableHTTPSrv(":3002", server.NewStreamableHTTPServer(
mcpServer,
server.WithEndpointPath("/mcp"),
)),
)
}
客户端
↓
internal/server/mcp.go
↓
internal/handler/example.go
↓
internal/service/example.go
↓
internal/repository/example.go
↓
数据库 / 第三方服务
注意:
如果启用了MCP STDIO,则不应将日志打印到终端,否则会中断通信。必须配置日志只写入文件:
# 文件:config/local.yml
log:
log_level: debug
mode: file # file, console, 或者两者
encoding: console # json 或 console
log_file_name: "./storage/logs/server.log"
max_backups: 30
max_age: 7
max_size: 1024
compress: true
在Unix系统中查看日志:
tail -f storage/logs/server.log
您可以在internal/repository/repository.go中注册一个客户端,例如:
func NewStdioMCPClient() *client.Client {
c, err := client.NewStdioMCPClient(
"go", []string{}, "run", "/path/to/server/main.go",
)
if err != nil {
panic(err)
}
defer c.Close()
return c
}
要集成其他协议或客户端,请参考类似redis、gorm等模式。
目前,MCP组织没有提供官方的Golang SDK。最成熟的开源项目是mark3labs/mcp-go。
我们期待官方的Golang SDK发布,并将在其发布后更新此项目。
官方Go MCP SDK:https://github.com/golang/tools/tree/master/internal/mcp
Nunu是在MIT许可证下发布的——免费使用和贡献!