MCP服务器模块

Go模块,用于在AWS Lambda上运行MCP服务器,支持工具函数注册和请求处理。

  • by puttsk
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 puttsk/go-mcp

使用说明

去mcp

在AWS Lambda上运行MCP服务器的Go模块。

安装

go get -u github.com/puttsk/go-mcp

用法

AWS Lambda函数

此示例演示了如何使用名为的简单工具在AWS Lambda上创建MCP服务器 add,它将两个整数相加。服务器使用 内存会话管理器 随着a Lambda传输处理器.

备注:本示例中使用的内存会话管理器仅用于测试目的。由于AWS Lambda实例是无状态的,可以随时终止,因此会话数据无法在实例之间共享,并将在函数结束时重置。

// main.go
import (
  "context"
  "fmt"
  "log"
  "net/http"

  "github.com/aws/aws-lambda-go/events"
  "github.com/aws/aws-lambda-go/lambda"
  "github.com/puttsk/go-mcp"
  "github.com/puttsk/go-mcp/session/memory"
  "github.com/puttsk/go-mcp/transport/awslambda"
)

var server *mcp.McpServer

func handler(ctx context.Context, request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {

  // Processing request from AWS Lambda
  resp, err := server.ProcessRequest(ctx, request)
  if err != nil {
    return events.APIGatewayProxyResponse{
      Body:       "Error processing request",
      Headers:    headers,
      StatusCode: http.StatusInternalServerError,
    }, nil
  }

  if response, ok := resp.(events.APIGatewayProxyResponse); ok {
    return response, nil
  } else {
    return events.APIGatewayProxyResponse{
      Body:       "Invalid response type",
      Headers:    headers,
      StatusCode: http.StatusInternalServerError,
    }, nil
  }
}

func init() {
  // Initialize the MCP server with in-memory session manager and AWS Lambda transport handler
  server, _ = mcp.NewMcpServer("mcptest", "1.0.0", mcp.McpProtocol2025_30_26)
  server.LogLevel = mcp.LogLevelDebug
  server.TransportHandler = &awslambda.TransportHandler{} // Setup transport handler
  server.SessionManager = memory.NewSessionManager() // Setup in-memory session manager

  // Register tool "add" with the server
  server.RegisterTool("add", 
    func(a, b int) int { return a + b },
    mcp.McpToolParameter{Name: "a", Description: "First number"},
    mcp.McpToolParameter{Name: "b", Description: "Second number"},
  )
  server.SetToolDescription("add", "Tool for adding two integers")
}

func main() {
  lambda.Start(handler)
}

工具功能

工具函数可以接受Go上下文作为其第一个参数。您可以使用以下辅助函数检索当前会话和MCP请求ID:

  • GetSessionFromContext(ctx)
  • GetRequestIDFromContext(ctx)

这些功能允许您在工具逻辑中访问特定会话和请求特定信息。

已知限制

  • 仅支持 可流式传输HTTP 运输; 服务器发送事件(SSE) 和 标准输入 不支持
  • 仅支持以下MCP方法
    • initailize
    • notifications/initialized
    • tools/list
    • tools/call
  • 工具输入仅限于 标量类型: number, string, boolean,以及 image.
  • 工具输出仅限于 文本 和 图像.