MCP Lambda SAM
使用 AWS Lambda 和 SAM 实现模型上下文协议 (MCP)。
概述
该项目提供了模型上下文协议的无服务器实现,具有两个不同的接口:
系统配置(管理):
MCP 工具、资源和提示的注册
IAM权限管理
基础设施设置和配置
系统使用情况(客户端):
Related MCP server: Node Omnibus MCP Server
建筑学
美人鱼图
您可以使用以下 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 服务器的系统管理员。
部署
npx @markvp/mcp-lambda-sam deploy
该命令将以交互方式提示管理配置:
堆栈名称(用于多个实例)
AWS 区域
VPC 配置(可选)
权限概述
要访问 MCP 端点,用户和客户端必须具有 IAM 权限才能调用相关的函数 URL。
您可以使用 IAM 策略或aws lambda add-permission授予访问权限(见下文)。
通过 AWS CLI 分配权限
授予调用注册功能 URL 的权限:
aws lambda add-permission \
--function-name <registration-function-name> \
--statement-id allow-registration \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAM
要授予调用MCP 函数 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 。发送消息时请使用它。
发送命令:
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 :超出速率限制
故障排除
连接问题:
命令执行错误:
验证会话 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 build
sam deploy --guided
按照提示配置堆栈名称、区域、功能和参数覆盖。
您可以重新运行sam deploy而不使用--guided来使用已保存的配置。
安装
您可以通过四种方式安装和部署此应用程序:
1.使用 AWS 无服务器应用程序存储库 (SAR)
部署 MCP 服务器最简单的方法是通过 AWS 无服务器应用程序存储库 (SAR):
或者,您可以从 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(CLI)
npx @markvp/mcp-lambda-sam deploy
该命令将以交互方式提示管理配置:
堆栈名称(用于多个实例)
AWS 区域
VPC 配置(可选)
3. 通过 Install 进行编程使用
安装软件包:
npm install @markvp/mcp-lambda-sam
安装该包后,您可以以编程方式使用它:
import { deploy } from '@markvp/mcp-lambda-sam';
// Usage example
deploy();
4. 本地开发与部署
安装软件包:
npm install @markvp/mcp-lambda-sam
进行开发更改后,您可以手动部署它:
发展
# Install dependencies
npm install
# Lint
npm run lint
# Run tests
npm test
# Build
npm run build
# Deploy
npm run deploy
发布到 SAR
如果您正在为此项目做出贡献并需要向 SAR 发布更新:
打包应用程序:
发布到 SAR:
将应用程序公开(一次性设置):
转到 AWS 控制台 > 无服务器应用程序存储库
选择应用程序
点击“共享”,并选择“公开”
应用以下共享策略:GXP25
执照
麻省理工学院
贡献
分叉存储库
创建你的功能分支
提交你的更改
推送到分支
创建新的 Pull 请求