MCP Lambda SAM
使用AWS Lambda和SAM实现模型上下文协议(MCP)。
概述
该项目提供了模型上下文协议的无服务器实现,具有两个不同的接口:
- 系统配置 (行政):
- 注册MCP工具、资源和提示 - IAM权限管理 - 基础设施设置和配置
- 系统使用 (客户):
- 建立SSE连接 - 发送命令 - 接收流媒体响应
建筑
美人鱼图
您可以使用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 在启动和处理请求时从注册表中读取注册信息。
- 它使用会话表来持久化会话状态。
- 它 调用已注册的Lambda工具 动态地使用存储在注册表中的ARN。
系统配置指南(管理员)
本节面向需要配置和管理MCP服务器的系统管理员。
部署
npx @markvp/mcp-lambda-sam deploy该命令将以交互方式提示进行管理配置:
- 堆栈名称(适用于多个实例)
- AWS区域
- VPC配置(可选)
权限概述
要访问MCP端点,用户和客户端必须具有IAM权限才能调用相关功能URL。
- 管理员:必须允许调用
mcp-registration函数URL - 客户:必须允许调用
mcp函数URL
您可以使用IAM策略或 aws lambda add-permission (见下文)。
通过AWS CLI分配权限
授予调用的权限 注册函数URL:
aws lambda add-permission \
--function-name \
--statement-id allow-registration \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAM授予调用的权限 MCP功能URL (SSE和消息):
aws lambda add-permission \
--function-name \
--statement-id allow-mcp \
--action lambda:InvokeFunctionUrl \
--principal "*" \
--function-url-auth-type IAM替换 ` 和 ` 使用实际的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:超出费率限制
故障排除
- 连接问题:
- 验证AWS凭据 - 检查IAM权限 - 确保网络连接
- 命令执行错误:
- 验证会话ID是否处于活动状态 - 检查命令格式是否与工具注册匹配 - 确保参数与架构匹配
需求
- 已安装并配置AWS CLI
- 已安装AWS SAM CLI
- Node.js 20.x或更高版本
- 具有创建权限的AWS帐户:
- 匿名函数 - 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无服务器应用程序存储库(SAR)
部署MCP服务器的最简单方法是通过AWS无服务器应用程序存储库(SAR):
- 转到 SAR控制台
- 搜索 mcp lambda sam 马克·范·普罗克特
- 点击 部署
- 设置参数:
- StackIdentifier:此MCP服务器实例的唯一ID - VpcEnabled:设置为 true 如果部署在VPC中 - VpcId 和 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(CLI)
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控制台>无服务器应用程序存储库 - 选择应用程序 - 点击“分享”并选择“公开” - 应用以下共享策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "serverlessrepo:CreateCloudFormationTemplate",
"Resource": "arn:aws:serverlessrepo:${region}:${account-id}:applications/mcp-lambda-sam"
}
]
}许可证
麻省理工学院
贡献
- 分叉存储库
- 创建功能分支
- 提交您的更改
- 推到分支
- 创建新的Pull请求
