使用说明
去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方法
initailizenotifications/initializedtools/listtools/call
- 工具输入仅限于 标量类型:
number,string,boolean,以及image. - 工具输出仅限于 文本 和 图像.
