Mcp Go

Mcp Go

🚀 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,可参考以下步骤:

  1. 安装

    go get github.com/mark3labs/mcp - go/server
    
  2. 创建服务器实例

    s := server.NewMCPServer(
    server.WithName("My MCP Server"),
    server.WithVersion("1.0.0"),
    )
    
  3. 添加工具

    s.AddTool(mcp.NewTool("echo", func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
    return mcp.NewToolResultText(req.Tool.Args[0]), nil
    }))
    
  4. 启动服务器

    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)了解如何参与。

  • 0 关注
  • 0 收藏,23 浏览
  • system 提出于 2025-09-18 06:21

相似服务问题

相关AI产品