返回市场
奴努布局MCP

奴努布局MCP

作者:go-nunu7 星标更新:2025-06-14

项目介绍

🚀 快速构建高性能的Go MCP服务器

简体中文介绍

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

Nunu


🚀 快速开始:在3分钟内运行MCP服务器

1. 创建项目

<details> <summary>选项1:克隆模板仓库</summary>
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>

2. 构建并启动

构建MCP服务器

cd mcp-demo

go build -ldflags="-s -w" -o ./bin/server ./cmd/server

启动MCP Inspector

MCP Inspector是由MCP社区提供的交互式开发者工具,用于测试和调试:

npx -y @modelcontextprotocol/inspector ./bin/server
# 需要安装Node.js

3. 测试服务

打开浏览器:http://127.0.0.1:6274以测试不同的传输协议。

传输类型地址 / 参数使用场景优点缺点
STDIO./bin/serverCLI工具,桌面应用简单,安全,无需网络仅限本地,单个客户端
SSEhttp://localhost:3001/sse网络实时通信多客户端,实时,浏览器友好HTTP开销,仅限服务器到客户端
StreamableHTTPhttp://localhost:3002/mcp网络服务,API标准协议,缓存及负载均衡不支持实时,稍显复杂
In-Process(无外部地址)嵌入式,测试无需序列化,超快仅限进程内

STDIO SSE StreamableHTTP


🛠️ 开发指南

由于此项目基于Nunu架构,建议在开发前了解该框架。


📡 MCP服务器开发

参见MCP-GO服务器文档

此项目默认启用三种协议: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

🤝 集成MCP客户端

参见MCP-GO客户端文档

您可以在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
}

要集成其他协议或客户端,请参考类似redisgorm等模式。


📚 资源


最终说明

目前,MCP组织没有提供官方的Golang SDK。最成熟的开源项目是mark3labs/mcp-go

我们期待官方的Golang SDK发布,并将在其发布后更新此项目。

官方Go MCP SDK:https://github.com/golang/tools/tree/master/internal/mcp


📄 许可证

Nunu是在MIT许可证下发布的——免费使用和贡献!