内容
# go-mcp
在AWS Lambda上运行MCP服务器的Go模块。
## 安装
```
go get -u github.com/puttsk/go-mcp
```
## 使用
### AWS Lambda函数
此示例演示如何使用一个名为`add`的简单工具在AWS Lambda上创建一个MCP服务器,该工具用于将两个整数相加。服务器使用**内存会话管理器**和**Lambda传输处理程序**。
> **注意**:此示例中使用的内存会话管理器仅用于测试目的。由于AWS Lambda实例是无状态的,并且可以随时终止,因此会话数据无法跨实例共享,并且在函数结束时会被重置。
```go
// 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) {
// 处理来自AWS Lambda的请求
resp, err := server.ProcessRequest(ctx, request)
if err != nil {
return events.APIGatewayProxyResponse{
Body: "处理请求时出错",
Headers: headers,
StatusCode: http.StatusInternalServerError,
}, nil
}
if response, ok := resp.(events.APIGatewayProxyResponse); ok {
return response, nil
} else {
return events.APIGatewayProxyResponse{
Body: "无效的响应类型",
Headers: headers,
StatusCode: http.StatusInternalServerError,
}, nil
}
}
func init() {
// 使用内存会话管理器和AWS Lambda传输处理程序初始化MCP服务器
server, _ = mcp.NewMcpServer("mcptest", "1.0.0", mcp.McpProtocol2025_30_26)
server.LogLevel = mcp.LogLevelDebug
server.TransportHandler = &awslambda.TransportHandler{} // 设置传输处理程序
server.SessionManager = memory.NewSessionManager() // 设置内存会话管理器
// 在服务器上注册工具"add"
server.RegisterTool("add", "用于将两个数字相加的工具",
func(a, b int) int { return a + b },
mcp.McpToolParameter{Name: "a", Description: "第一个数字"},
mcp.McpToolParameter{Name: "b", Description: "第二个数字"},
)
}
func main() {
lambda.Start(handler)
}
```
### 工具函数
工具函数可以接受一个Go上下文作为它们的第一个参数。您可以使用以下辅助函数检索当前会话和MCP请求ID:
* `GetSessionFromContext(ctx)`
* `GetRequestIDFromContext(ctx)`
这些函数允许您在工具逻辑中访问特定于会话和请求的信息。
## 已知限制
* 仅支持**可流式传输的HTTP**;不支持**服务器发送事件(SSE)**和**stdin**。
* 仅支持以下MCP方法:
* `initailize`
* `notifications/initialized`
* `tools/list`
* `tools/call`
* 工具输入仅限于**标量类型**:`number`、`string`和`boolean`。
* 工具输出仅限于**文本**。