mcpField
M
MCP Lambda Server

MCP Lambda Server

本地服务
github.com/markvp云与基础设施1281 周前更新

关于 MCP Lambda Server

MCP Lambda Server 是基于 AWS Lambda 和 SAM 的无服务器 MCP 实现,适用于在 AWS 上部署 MCP 服务的团队。管理员可注册工具、资源和提示词,客户端通过 SSE 连接并接收流式响应。

主要功能

  1. 01注册工具、资源和提示词
  2. 02通过 API 管理注册项
  3. 03调用已注册的 Lambda 工具
  4. 04持久化客户端会话状态
  5. 05通过 SSE 连接并发送消息

适用场景

  1. 01使用 AWS SAM 部署 MCP 服务
  2. 02注册由 Lambda 支持的 MCP 工具
  3. 03使用 AWS SigV4 连接客户端
  4. 04管理 MCP 注册项和权限

MCP 相关

它使用 AWS Lambda 实现 MCP 服务,并向客户端提供已注册的工具、资源和提示词。客户端建立 SSE 会话并发送命令,以调用已注册的 Lambda 工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"lambda-layer": {
"command": "npx",
"args": [
"-y",
"@markvp/mcp-lambda-sam"
]
}
}
}
启动命令npx -y @markvp/mcp-lambda-sam

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@markvp/mcp-lambda-sam

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

MCP Lambda SAM

使用 AWS Lambda 和 SAM 实现的模型上下文协议(Model Context Protocol,MCP)。

概览

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

  1. 系统配置(管理):

    • 注册 MCP 工具、资源和提示词
    • 管理 IAM 权限
    • 设置和配置基础设施
  2. 系统使用(客户端):

    • 建立 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-registration Function URL
  • 客户端:必须获准调用 mcp Function 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"
                }
            }
        }
    ]
}
连接到服务
  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。发送消息时请使用此 ID。

  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 Serverless Application Repository (SAR)

部署 MCP 服务最简单的方式是通过 AWS Serverless Application Repository (SAR):

  • 前往 SAR 控制台
  • 搜索 Mark Van Proctor 的 mcp-lambda-sam
  • 点击 Deploy
  • 设置参数:
    • StackIdentifier:此 MCP 服务实例的唯一 ID
    • VpcEnabled:如果在 VPC 中部署,请设为 true
    • 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(命令行)
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 发布更新:

  1. 打包应用程序:
npm run package:sar
  1. 发布到 SAR:
npm run publish:sar
  1. 将应用程序设为公开(仅需设置一次):
    • 前往 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

贡献

  1. Fork 此代码库
  2. 创建功能分支
  3. 提交更改
  4. 推送到分支
  5. 创建新的 Pull Request

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。