Back to MCP directory
publicPublicdnsLocal runtime

mcp-go

MCP Go 是一个 Go 语言实现的模型上下文协议(MCP)服务端框架,用于连接 LLM 应用与外部数据源和工具。它提供了资源管理、工具调用、提示模板等核心功能,支持会话管理和中间件扩展。

article

README

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

help

Runtime guide

cloud

Hosted runtime

Hosted servers run from a provider-managed environment. You usually connect the MCP client to the hosted endpoint or follow the provider's authorization flow, without keeping a local process alive

  1. Open provider connection page
  2. Authorize or copy endpoint
  3. Connect from your MCP client
terminal

Local runtime / other methods

Local servers run on your own machine or infrastructure. You normally copy the server_config into your MCP client, install the required package, and provide env variables from env_schema when needed

  1. Copy server_config
  2. Install required package
  3. Fill env variables and restart client