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)
}
}
欢迎任何贡献!请参考[开发者指南](https://github.com/mark3labs/mcp - go/blob/main/CONTRIBUTING.md)了解如何参与。