MCP Lambda Server

by markvp
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Adapts the MCP TypeScript SDK to work with AWS Lambda functions, supporting Server-Sent Events through Lambda response streaming and function URLs

  • Provides MCP server infrastructure specifically designed for Node.js runtime in AWS Lambda, with official support for response streaming

  • Offers full TypeScript support for implementing MCP servers with type definitions and interfaces

MCP Lambda SAM

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

概述

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

  1. 系统配置(管理):
    • MCP 工具、资源和提示的注册
    • IAM权限管理
    • 基础设施设置和配置
  2. 系统使用情况(客户端):
    • 建立 SSE 连接
    • 发送命令
    • 接收流式响应

建筑学

美人鱼图

您可以使用以下 Mermaid 语法来可视化系统:

  • 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 请求
ID: ptzby1d8b2