🚀 mcp - go
mcp - go
是一个功能强大的 Go 库,用于构建与 Mark3 Labs 的 [MCP](https://github.com/mark3labs/mcp - spec) 标准兼容的服务器。它为构建智能代理和 AI 驱动的应用程序提供核心功能,涵盖工具管理、资源提供和会话处理等方面。
🚀 快速开始
要快速入门,请参考[快速入门](https://github.com/mark3labs/mcp - go/blob/main/docs/zh_cn/getting_started.md)文档。
若要快速使用 mcp - go
,可参考以下步骤:
-
安装:
go get github.com/mark3labs/mcp - go/server
-
创建服务器实例:
s := server.NewMCPServer(
server.WithName("My MCP Server"),
server.WithVersion("1.0.0"),
)
-
添加工具:
s.AddTool(mcp.NewTool("echo", func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
return mcp.NewToolResultText(req.Tool.Args[0]), nil
}))
-
启动服务器:
s.ListenAndServe(":8080")
✨ 主要特性
- 工具管理:支持添加、删除和管理自定义工具。
- 资源提供:通过
Resource
接口扩展服务器的功能,处理文件、数据库或其他服务。
- 会话支持:基于上下文的会话管理,确保不同用户之间的数据隔离。
- 请求挂钩:在请求生命周期的关键点添加回调,实现监控和可观测性。
- 工具处理器中间件:通过中间件扩展工具调用的功能,如日志记录、性能监控等。
工具管理
mcp - go
提供了强大的工具管理功能,允许您轻松添加、删除和管理自定义工具。工具可以是任何能够处理请求并返回结果的函数。
示例:添加工具
s.AddTool(mcp.NewTool("echo", func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
return mcp.NewToolResultText(req.Tool.Args[0]), nil
}))
示例:删除工具
s.DeleteTool("echo")
资源管理
通过 Resource
接口,您可以扩展服务器的功能,处理文件、数据库或其他服务。
示例:添加资源
s.AddResource(mcp.NewResource("file", func(ctx context.Context, req mcp.CallResourceRequest) (*mcp.ResourceResult, error) {
}))
会话支持
mcp - go
基于上下文的会话管理,确保不同用户之间的数据隔离。
示例:获取当前会话
ctx := context.WithValue(context.Background(), server.SessionKey, "my - session - id")
s.ServeHTTP(ctx, w, r)
请求挂钩
在请求生命周期的关键点添加回调,实现监控和可观测性。
示例:添加挂钩
s.AddHook(server.HookTypeRequestStart, func(r *server.Server, ctx context.Context) {
log.Println("Request started")
})
工具处理器中间件
通过中间件扩展工具调用的功能,如日志记录、性能监控等。
示例:添加中间件
s.AddMiddleware(mcp.MiddlewareFunc(func(ctx context.Context, next mcp.ToolHandler) mcp.ToolHandler {
return func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
log.Println("Before processing tool")
result, err := next(ctx, req)
log.Println("After processing tool")
return result, err
}
}))
💻 使用示例
基础用法
package main
import (
"context"
"fmt"
"log"
"github.com/mark3labs/mcp - go/server"
)
func main() {
s := server.NewMCPServer(
server.WithName("My MCP Server"),
server.WithVersion("1.0.0"),
server.WithTools(func(s *server.Server) {
s.AddTool(mcp.NewTool("echo", func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
return mcp.NewToolResultText(req.Tool.Args[0]), nil
})
}),
)
log.Println("Starting server on :8080...")
if err := s.ListenAndServe(":8080"); err != nil {
fmt.Printf("Server exited with error: %v\n", err)
}
}
📚 详细文档
英文文档
- [Getting Started](https://github.com/mark3labs/mcp - go/blob/main/docs/en - us/getting_started.md)
- [API Reference](https://github.com/mark3labs/mcp - go/blob/main/docs/en - us/api_reference.md)
- [Tool Management](https://github.com/mark3labs/mcp - go/blob/main/docs/en - us/tool_management.md)
- [Resource Management](https://github.com/mark3labs/mcp - go/blob/main/docs/en - us/resource_management.md)
中文文档
- [快速入门](https://github.com/mark3labs/mcp - go/blob/main/docs/zh_cn/getting_started.md)
- [API 参考](https://github.com/mark3labs/mcp - go/blob/main/docs/zh_cn/api_reference.md)
- [工具管理](https://github.com/mark3labs/mcp - go/blob/main/docs/zh_cn/tool_management.md)
- [资源管理](https://github.com/mark3labs/mcp - go/blob/main/docs/zh_cn/resource_management.md)
🤝 贡献指南
欢迎任何贡献!请参考[开发者指南](https://github.com/mark3labs/mcp - go/blob/main/CONTRIBUTING.md)了解如何参与。