关于 MCP Lambda SAM
MCP Lambda SAM 使用 AWS Lambda 和 SAM 实现无服务器 MCP 服务,面向需要在 AWS 上部署和管理 MCP 工具、资源及提示词的管理员与客户端开发者。它通过注册表动态调用已注册的 Lambda 工具。
主要功能
- 01注册工具、资源和提示词
- 02通过 IAM 管理访问权限
- 03使用 SSE 建立连接
- 04流式接收响应
- 05动态调用已注册 Lambda 工具
适用场景
- 01在 AWS 上部署 MCP 服务
- 02登记或更新 MCP 工具与资源
- 03为管理员和客户端配置 IAM 权限
- 04通过会话向已注册工具发送请求
MCP 相关
它实现 MCP 服务端接口,客户端通过 SSE 和消息端点连接并发送命令。管理员可注册工具、资源和提示词,服务会动态调用已注册的 Lambda 工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP Lambda SAM
使用 AWS Lambda 和 SAM 实现的模型上下文协议(Model Context Protocol,MCP)。
概览
本项目提供了模型上下文协议的无服务器实现,包含两个不同的接口:
-
系统配置(管理):
- 注册 MCP 工具、资源和提示词
- 管理 IAM 权限
- 设置和配置基础设施
-
系统使用(客户端):
- 建立 SSE 连接
- 发送命令
- 接收流式响应
架构
Mermaid 图
你可以使用以下 Mermaid 语法查看系统:
graph TD
Client --> MCP[/"MCP Lambda\n(/sse & /message)"/]
MCP -->|read/write| SessionTable[(Session Table)]
MCP -->|query| RegistrationTable[(Registration Table)]
MCP -->|invoke| RegisteredLambda["Registered Lambda Tool"]
Admin[Administrator] --> RegistrationLambda[/"Registration Lambda\n(/register)"/]
RegistrationLambda -->|write| RegistrationTable
- MCP Lambda 会在启动时和处理请求时从 Registration Table 读取注册信息。
- 它使用 Session Table 持久化会话状态。
- 它会使用 Registration Table 中存储的 ARN 动态调用已注册的 Lambda 工具。
系统配置指南(管理员)
本节适用于需要配置和管理 MCP 服务的系统管理员。
部署
npx @markvp/mcp-lambda-sam deploy
命令会以交互方式提示进行管理配置:
- 堆栈名称(用于多个实例)
- AWS 区域
- VPC 配置(可选)
权限概览
要访问 MCP 端点,用户和客户端必须拥有调用相应 Function URL 的 IAM 权限。
- 管理员:必须获准调用
mcp-registrationFunction URL - 客户端:必须获准调用
mcpFunction URL
你可以通过 IAM 策略或 aws lambda add-permission 授予访问权限(见下文)。
通过 AWS CLI 分配权限
要授予调用注册 Function URL的权限:
aws lambda add-permission \
--function-name <registration-function-name> \
--statement-id allow-registration \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAM
要授予调用MCP Function URL(SSE 和消息)的权限:
aws lambda add-permission \
--function-name <mcp-function-name> \
--statement-id allow-mcp \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAM
将 <registration-function-name> 和 <mcp-function-name> 替换为实际的 Lambda 函数名称。
注册 API
使用以下端点管理 MCP 工具、资源和提示词:
注册新工具
awscurl -X POST ${REGISTRATION_URL}/register \
--region ap-southeast-2 \
--service lambda \
-H "Content-Type: application/json" \
-d '{
"type": "tool",
"name": "example",
"description": "Example tool",
"lambdaArn": "arn:aws:lambda:region:account:function:name",
"parameters": {
"input": "string"
}
}'
更新注册信息
awscurl -X PUT ${REGISTRATION_URL}/register/{id} \
--region ap-southeast-2 \
--service lambda \
-d '...'
删除注册信息
awscurl -X DELETE ${REGISTRATION_URL}/register/{id} \
--region ap-southeast-2 \
--service lambda
列出注册信息
awscurl ${REGISTRATION_URL}/register \
--region ap-southeast-2 \
--service lambda
所需的 IAM 权限
管理员
管理员需要以下权限来管理注册信息:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "lambda:InvokeFunctionUrl",
"Resource": "arn:aws:lambda:${region}:${account}:function:${stack-id}-mcp-registration",
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "AWS_IAM"
}
}
}]
}
系统使用指南(客户端)
本节适用于希望使用 MCP 服务的客户端。
所需的 IAM 权限
客户端需要以下权限才能使用 MCP 服务:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "lambda:InvokeFunctionUrl",
"Resource": [
"arn:aws:lambda:${region}:${account}:function:${stack-id}-mcp",
],
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "AWS_IAM"
}
}
}
]
}
连接到服务
- 建立 SSE 连接:
const sse = new EventSource(SSE_URL, {
headers: {
Authorization: 'AWS4-HMAC-SHA256 ...', // Must be AWS SigV4 signed
}
});
sse.onmessage = (event) => {
console.log(JSON.parse(event.data));
};
SSE 的 cURL 示例
awscurl -X GET "${MCP_URL}/sse" \
--region ap-southeast-2 \
--service lambda
第一个事件中会包含 sessionId。发送消息时请使用此 ID。
- 发送命令:
awscurl -X POST "${MCP_URL}/message?sessionId=session-123" \
--region ap-southeast-2 \
--service lambda \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "1",
"method": "example",
"params": {
"input": "hello"
}
}'
错误处理
常见客户端错误
401:AWS 凭证无效或缺失403:权限不足404:会话 ID 无效429:超出速率限制
故障排除
-
连接问题:
- 验证 AWS 凭证
- 检查 IAM 权限
- 确保网络连接正常
-
命令执行错误:
- 确认会话 ID 仍然有效
- 检查命令格式是否与工具注册信息匹配
- 确保参数符合架构
要求
- 已安装并配置 AWS CLI
- 已安装 AWS SAM CLI
- Node.js 20.x 或更高版本
- 拥有以下资源创建权限的 AWS 账户:
- Lambda 函数
- DynamoDB 表
- IAM 角色
- SQS 队列
AWS SAM CLI 设置
要使用 AWS SAM CLI 在本地或 AWS 上部署此应用程序:
- 安装 AWS SAM CLI:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
- 确保它位于 PATH 中:
sam --version - 构建并部署应用程序:
sam build sam deploy --guided - 按照提示配置堆栈名称、区域、功能和参数覆盖项。
你可以再次运行 sam deploy,无需添加 --guided,即可使用已保存的配置。
安装
你可以通过以下四种方式安装和部署此应用程序:
1. 使用 AWS Serverless Application Repository (SAR)
部署 MCP 服务最简单的方式是通过 AWS Serverless Application Repository (SAR):
- 前往 SAR 控制台
- 搜索 Mark Van Proctor 的 mcp-lambda-sam
- 点击 Deploy
- 设置参数:
StackIdentifier:此 MCP 服务实例的唯一 IDVpcEnabled:如果在 VPC 中部署,请设为trueVpcId和SubnetIds:仅当VpcEnabled为true时提供
- 按照提示完成部署
或者,你也可以通过 AWS CLI 部署:
aws serverlessrepo create-cloud-formation-change-set \
--application-id arn:aws:serverlessrepo:ap-southeast-2:522814717816:applications/mcp-lambda-sam \
--stack-name your-stack-name \
--capabilities CAPABILITY_IAM \
--parameter-overrides '[{"name":"StackIdentifier","value":"your-stack-id"}]'
2. 使用 npx(命令行)
npx @markvp/mcp-lambda-sam deploy
该命令会以交互方式提示你配置管理选项:
- 堆栈名称(用于多个实例)
- AWS 区域
- VPC 配置(可选)
3. 通过安装包以编程方式使用
安装软件包:
npm install @markvp/mcp-lambda-sam
安装软件包后,你可以通过编程方式使用它:
import { deploy } from '@markvp/mcp-lambda-sam';
// Usage example
deploy();
4. 本地开发和部署
安装软件包:
npm install @markvp/mcp-lambda-sam
完成开发更改后,你可以手动部署:
npm run deploy
开发
# Install dependencies
npm install
# Lint
npm run lint
# Run tests
npm test
# Build
npm run build
# Deploy
npm run deploy
发布到 SAR
如果你要为此项目做出贡献,并需要向 SAR 发布更新:
- 打包应用程序:
npm run package:sar
- 发布到 SAR:
npm run publish:sar
- 将应用程序设为公开(仅需设置一次):
- 前往 AWS 控制台 > Serverless Application Repository
- 选择应用程序
- 点击“Share”并选择“Public”
- 应用以下共享策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "serverlessrepo:CreateCloudFormationTemplate", "Resource": "arn:aws:serverlessrepo:${region}:${account-id}:applications/mcp-lambda-sam" } ] }
许可证
MIT
贡献
- Fork 此代码库
- 创建功能分支
- 提交更改
- 推送到分支
- 创建新的 Pull Request
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。