Skip to main content
Glama

MCP Lambda SAM

使用 AWS Lambda 和 SAM 实现模型上下文协议 (MCP)。

概述

该项目提供了模型上下文协议的无服务器实现,具有两个不同的接口:

  1. 系统配置(管理):

    • MCP 工具、资源和提示的注册

    • IAM权限管理

    • 基础设施设置和配置

  2. 系统使用情况(客户端):

    • 建立 SSE 连接

    • 发送命令

    • 接收流式响应

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 Lambda在启动和处理请求时从注册表读取注册信息。

  • 它使用会话表来保存会话状态。

  • 它使用注册表中存储的 ARN 动态调用已注册的 Lambda 工具

系统配置指南(管理员)

本节适用于需要配置和管理 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 <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" } } } ] }

连接到服务器

  1. 建立 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 。发送消息时请使用它。

  1. 发送命令

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 :超出速率限制

故障排除

  1. 连接问题

    • 验证 AWS 凭证

    • 检查 IAM 权限

    • 确保网络连接

  2. 命令执行错误

    • 验证会话 ID 是否处于活动状态

    • 检查命令格式是否与工具注册相符

    • 确保参数与架构匹配

要求

  • 已安装并配置 AWS CLI

  • 已安装 AWS SAM CLI

  • Node.js 20.x 或更高版本

  • 具有以下权限的 AWS 账户:

    • Lambda 函数

    • DynamoDB 表

    • IAM 角色

    • SQS 队列

AWS SAM CLI 设置

要使用 AWS SAM CLI 在本地部署此应用程序或将其部署到 AWS:

  1. 安装 AWS SAM CLI: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html

  2. 确保它在你的 PATH 中可用:

    sam --version
  3. 构建并部署应用程序:

    sam build sam deploy --guided
  4. 按照提示配置堆栈名称、区域、功能和参数覆盖。

您可以重新运行sam deploy而不使用--guided来使用已保存的配置。

安装

您可以通过四种方式安装和部署此应用程序:

1.使用 AWS 无服务器应用程序存储库 (SAR)

部署 MCP 服务器最简单的方法是通过 AWS 无服务器应用程序存储库 (SAR):

  • 转至SAR 控制台

  • 搜索 Mark Van Proctor 的mcp-lambda-sam

  • 单击部署

  • 设置参数:

    • StackIdentifier :此 MCP 服务器实例的唯一 ID

    • VpcEnabled :如果在 VPC 中部署,则设置为true

    • VpcIdSubnetIds :仅当VpcEnabledtrue时提供

  • 按照提示进行部署

或者,您可以从 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

进行开发更改后,您可以手动部署它:

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 发布更新:

  1. 打包应用程序:

npm run package:sar
  1. 发布到 SAR:

npm run publish:sar
  1. 将应用程序公开(一次性设置):

    • 转到 AWS 控制台 > 无服务器应用程序存储库

    • 选择应用程序

    • 点击“共享”,并选择“公开”

    • 应用以下共享策略:GXP25

执照

麻省理工学院

贡献

  1. 分叉存储库

  2. 创建你的功能分支

  3. 提交你的更改

  4. 推送到分支

  5. 创建新的 Pull 请求

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/markvp/mcp-lambda-sam'

If you have feedback or need assistance with the MCP directory API, please join our Discord server