这是一个使用 github.com/metoro-io/mcp-golang
库实现的 Model Context Protocol (MCP) 服务器的 Go 实现,采用模块化方式重构,为用户提供了更灵活、可扩展的 MCP 服务器解决方案。
# 构建服务器
cd cmd/mcp-server
go build -o mcp-server
# 运行服务器
./mcp-server
mcp-server/
├── cmd/
│ └── mcp-server/
│ └── main.go # 入口点
├── internal/
│ ├── config/
│ │ └── config.go # 服务器配置
│ ├── server/
│ │ ├── server.go # MCP 服务器实现
│ │ └── server_test.go # 服务器测试
│ ├── tools/
│ │ ├── tool.go # 工具接口
│ │ ├── execute.go # 执行 shell 命令工具
│ │ ├── showfile.go # 显示文件工具
│ │ ├── searchfile.go # 在文件中搜索工具
│ │ └── writefile.go # 写入文件工具
│ └── utils/
│ └── response.go # 响应公用工具
├── go.mod
├── go.sum
└── README.md
该服务器现在包含路径限制功能,以限制文件操作仅限于指定目录。
你可以通过以下几种方式配置允许的路径:
# 只允许在特定目录中执行操作
./mcp-server --paths=/home/user/safe:/tmp/workspace
# 即使在允许的路径内,显式拒绝某些路径
./mcp-server --paths=/home/user --deny-paths=/home/user/.ssh:/home/user/credentials
# 设置允许的路径
export MCP_ALLOWED_PATHS=/home/user/safe:/tmp/workspace
# 设置拒绝的路径
export MCP_DENIED_PATHS=/home/user/.ssh:/home/user/credentials
# 运行服务器
./mcp-server
cfg := config.DefaultConfig()
cfg.AddAllowedPath("/path/to/allow")
cfg.AddDeniedPath("/path/to/deny")
server, err := server.NewServerWithConfig(cfg)
.git
和 .env
)会自动添加到拒绝列表中。对于 execute_shell_command
工具:
可以方便地添加新工具,具体步骤如下:
internal/tools/
目录下创建一个新的 Go 文件。Tool
接口(定义在 tool.go
中)。server.go
中进行。例如,添加一个新工具:
// new_tool.go
package tools
import (
"internal/tools"
)
type NewTool struct{}
func (n *NewTool) Execute(args []string) error {
// 实现具体的执行逻辑
return nil
}
func init() {
tools.Register("new_tool", &NewTool{})
}
要测试服务器,请运行以下命令:
# 运行测试
go test -v ./...