使用说明
MCP Go服务器
一个用Go编写的安全、自托管的模型上下文协议(MCP)服务器,具有全面的数据治理功能。此服务器使您可以完全控制您的数据,确保隐私、安全和合规性。
特性
- 🔒 数据治理:完整的审计日志记录、访问控制和数据保留策略
- 🛡️ 安全:身份验证、加密和安全配置管理
- 📊 监控:内置指标和结构化日志记录
- 🔧 可扩展:易于添加自定义工具和资源
- ⚡ 演出:高效的并发请求处理
- 📝 审计跟踪:全面记录所有操作
先决条件
- 转到1.21或更高版本
- 对MCP(模型上下文协议)的基本理解
安装
- 克隆存储库:
git clone <your-repo-url>
cd mcp-go
- 安装依赖项:
go mod download
- 复制示例环境文件:
cp .env.example .env
- 编辑
.env并配置您的设置(尤其是API_KEY如果AUTH_ENABLED=true)
配置
服务器是通过环境变量配置的。看 .env.example 对于所有可用选项:
关键配置选项
AUTH_ENABLED:启用/禁用身份验证(默认值:true)API_KEY:用于身份验证的密钥(如果启用了身份验证,则需要)AUDIT_ENABLED:启用审核日志记录(默认值:true)AUDIT_LOG_PATH:审核日志文件的路径(默认值:./audit.log)DATA_RETENTION_DAYS:保留审计数据的天数(默认值:90)ENCRYPTION_ENABLED:启用数据加密(默认值:true)LOG_LEVEL:日志记录级别(调试、信息、警告、错误)LOG_FORMAT:日志格式(json或控制台)
用法
运行服务器
MCP服务器通过stdin/stdout(标准MCP协议)进行通信:
make run
或者构建并运行:
make build
./bin/mcp-server
与MCP客户端集成
服务器遵循MCP协议,可以与任何兼容MCP的客户端集成。Claude Desktop的配置示例:
{
"mcpServers": {
"mcp-go": {
"command": "/path/to/bin/mcp-server",
"env": {
"API_KEY": "your-api-key",
"AUDIT_ENABLED": "true",
"AUDIT_LOG_PATH": "./audit.log"
}
}
}
}
或者创建一个 .env 文件与配置的二进制文件位于同一目录中。
可用工具
echo
回显输入消息。
参数:
message(string,必填):要回显的消息
例子:
{
"message": "Hello, World!"
}
calculate
执行基本算术运算。
参数:
operation(字符串,必填):“加”、“减”、“乘”、“除”之一a(数字,必填):第一个数字b(数字,必填):第二个数字
例子:
{
"operation": "add",
"a": 10,
"b": 5
}
system_info
返回系统信息和治理指标。
参数: 无
可用资源
config://server
返回当前服务器配置(只读)。
metrics://governance
返回当前数据治理指标。
数据治理
审计日志
所有操作都记录在审计日志文件中(可通过以下方式配置 AUDIT_LOG_PATH).每个条目包括:
- 时间戳
- 动作类型
- 工具/资源已访问
- 成功/失败状态
- 错误消息(如有)
- 数据大小
- 请求ID
访问控制
服务器支持通过API密钥进行身份验证。当 AUTH_ENABLED=true,所有请求都必须包含有效的API密钥。
数据保留
审计日志根据以下内容保留 DATA_RETENTION_DAYS。自动清理每天运行。
加密
当 ENCRYPTION_ENABLED=true,敏感数据可以加密(可以用适当的加密库扩展实现)。
添加自定义工具
要添加自定义工具,请编辑 internal/tools/tools.go 并添加新的工具定义:
// Define your tool arguments struct
type MyToolArgs struct {
Param1 string `json:"param1" jsonschema:"description=Parameter description,required"`
}
// Register the tool
if err := server.RegisterTool("my_tool", "Description of my tool", func(ctx context.Context, args MyToolArgs) (*mcp_golang.ToolResponse, error) {
// Your tool logic here
// Don't forget to audit!
gov.Audit(AuditEntry{
Action: "tool_execution",
Tool: "my_tool",
Success: true,
})
result := map[string]interface{}{
"result": "your result",
}
resultJSON, _ := json.Marshal(result)
return mcp_golang.NewToolResponse(mcp_golang.NewTextContent(string(resultJSON))), nil
}); err != nil {
return fmt.Errorf("failed to register my_tool: %w", err)
}
添加自定义资源
要添加自定义资源,请编辑 internal/resources/resources.go:
if err := server.RegisterResource(
"resource://my-resource",
"My Resource",
"Description of my resource",
"application/json",
func(ctx context.Context) (*mcp_golang.ResourceResponse, error) {
// Your resource logic here
gov.Audit(AuditEntry{
Action: "resource_access",
Resource: "resource://my-resource",
Success: true,
})
data := map[string]interface{}{
"data": "your data",
}
dataJSON, _ := json.Marshal(data)
return mcp_golang.NewResourceResponse(
mcp_golang.NewTextEmbeddedResource("resource://my-resource", string(dataJSON), "application/json"),
), nil
},
); err != nil {
return fmt.Errorf("failed to register resource: %w", err)
}
<|工具▁calls▁开始|><|工具▁call▁开始|> todo_write
安全最佳实践
- 始终设置强API_KEY 启用身份验证时
- 限制允许的来源 到生产中的特定领域
- 启用审核日志记录 跟踪所有操作
- 定期审查审计日志 可疑活动
- 保持依赖关系更新 随着
go get -u ./... - 使用加密 用于传输和静止的敏感数据
- 实施速率限制 用于生产部署
- 监控指标 定期检查异常情况
发展
项目结构
该项目遵循标准的Go项目布局:
mcp-go/
├── cmd/
│ └── mcp-server/ # Main application entry point
│ └── main.go
├── internal/ # Private application code
│ ├── config/ # Configuration management
│ ├── governance/ # Data governance and audit logging
│ ├── logger/ # Logging setup
│ ├── resources/ # MCP resource definitions
│ ├── security/ # Security utilities
│ ├── server/ # MCP server setup
│ └── tools/ # MCP tool definitions
├── bin/ # Build output
├── go.mod # Go module file
├── env.example # Example configuration
├── PROJECT_STRUCTURE.md # Detailed structure documentation
└── README.md # This file
看 项目_结构.md 有关项目组织的详细信息。
测试
go test ./...
建筑
go build -o mcp-go-server
故障排除
服务器无法启动
- 检查是否设置了所有必需的环境变量
- 验证
API_KEY如果满足以下条件,则设置AUTH_ENABLED=true - 检查日志输出中的特定错误消息
工具不工作
- 在中验证工具注册
tools.go - 检查审核日志以了解错误详细信息
- 确保输入架构与预期格式匹配
未创建审核日志
- 检查
AUDIT_LOG_PATH可写 - 验证
AUDIT_ENABLED=true - 检查文件权限
许可证
[在此处指定您的许可证]
贡献
[您的贡献指南]
支持
[您的支持信息]