使用 Anthropic 的 Model Context Protocol (MCP),无需更改代码即可运行任何 AWS Lambda 函数作为大型语言模型 (LLM) 的工具。
graph LR
A[模型] <--> B[MCP 客户端]
B <--> C["MCP2Lambda<br>(MCP 服务器)"]
C <--> D[Lambda 函数]
D <--> E[其他 AWS 服务]
D <--> F[互联网]
D <--> G[VPC]
style A fill:#f9f,stroke:#333,stroke-width:2px
style B fill:#bbf,stroke:#333,stroke-width:2px
style C fill:#bfb,stroke:#333,stroke-width:4px
style D fill:#fbb,stroke:#333,stroke-width:2px
style E fill:#fbf,stroke:#333,stroke-width:2px
style F fill:#dff,stroke:#333,stroke-width:2px
style G fill:#ffd,stroke:#333,stroke-width:2px
此 MCP 服务器充当 MCP 客户端与 AWS Lambda 函数之间的桥梁,使生成式 AI 模型能够访问并运行 Lambda 函数作为工具。例如,可以访问私有资源,如内部应用程序和数据库,而无需提供公共网络访问。这种方法允许模型使用其他 AWS 服务、私有网络和公共互联网。
从安全角度来看,这种方法通过允许模型调用 Lambda 函数但不直接访问其他 AWS 服务来实现职责分离。客户端只需要 AWS 凭据来调用 Lambda 函数。然后,Lambda 函数可以使用函数角色与其他 AWS 服务交互,并访问公共或私有网络。
MCP 服务器提供了两种工具:
第一个工具可以自动发现账户中匹配前缀或允许名单的所有 Lambda 函数。该工具与模型共享函数名称及其描述。
第二个工具允许按名称调用这些 Lambda 函数,并传递所需参数。
无需更改代码。您可以通过更改以下配置来改进结果:
网关支持处理 Lambda 函数的两种不同策略:
预发现模式(默认:启用):在启动时注册每个 Lambda 函数作为独立工具。这提供了一个更直观的界面,其中每个函数都作为一个单独命名的工具出现。
通用模式:使用两个通用工具(list_lambda_functions 和 invoke_lambda_function)与 Lambda 函数交互。
您可以通过以下方式控制此行为:
PRE_DISCOVERY=true|false--no-pre-discovery(禁用预发现模式)示例:
# 禁用预发现模式
export PRE_DISCOVERY=false
python main.py
# 或使用命令行标志禁用预发现
python main.py --no-pre-discovery
为了向 MCP 客户端提供使用 Lambda 函数的知识,Lambda 函数的描述应指示该函数的功能及使用的参数。参见示例函数以快速演示和更多细节。
为了帮助模型使用通过 AWS Lambda 提供的工具,您可以在您的系统提示中添加类似以下内容:
使用 AWS Lambda 工具来提高您的答案质量。
MCP2Lambda 允许 LLM 与 AWS Lambda 函数作为工具进行交互,扩展其功能,超越文本生成。这使得模型能够:
服务器使用 MCP 协议,该协议标准化了 AI 模型访问外部工具的方式。
默认情况下,只有名称以 mcp2lambda- 开头的函数对模型可用。
要通过 Smithery 自动安装 MCP2Lambda 到 Claude Desktop:
npx -y @smithery/cli install @danilop/MCP2Lambda --client claude
克隆仓库:
git clone https://github.com/yourusername/mcp2lambda.git
cd mcp2lambda
配置 AWS 凭据。例如,使用 AWS CLI:
aws configure
此仓库包括三个示例 Lambda 函数,展示了不同的使用案例。这些函数具有基本权限,只能写入 CloudWatch 日志。
根据电子邮件地址检索客户 ID。此函数接受电子邮件参数并返回关联的客户 ID,展示如何构建简单的查找工具。该函数硬编码为回复 user@example.com 邮件地址。例如,您可以请求模型获取邮件 user@example.com 的客户 ID。
根据客户 ID 检索详细的客户信息。此函数返回客户详情,如姓名、电子邮件和状态,展示 Lambda 如何提供上下文特定的数据。该函数硬编码为回复由前一个函数返回的客户 ID。例如,您可以请求模型“获取邮件 user@example.com 的客户状态”。这将使用两个函数来获得结果。
在 Lambda 沙箱环境中执行任意 Python 代码。此强大功能允许 Claude 编写并运行 Python 代码以执行计算、数据处理或其他未内置到模型中的操作。例如,您可以请求模型“计算 1 到 10、1 到 100 等直到 1M 的质数数量”。
仓库中的示例 Lambda 函数位于 sample_functions 目录下。
安装 AWS SAM CLI:https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html
部署示例函数:
cd sample_functions
sam build
sam deploy
示例函数将以 mcp2lambda- 前缀部署。
MCP2Lambda 还可用于 Amazon Bedrock 的 Converse API,允许您使用 Bedrock 支持的任何模型使用 MCP 协议。
mcp_client_bedrock 目录包含一个客户端实现,用于连接 MCP2Lambda 到 Amazon Bedrock 模型。
更多信息请参阅:https://github.com/mikegc-aws/amazon-bedrock-mcp
导航至 mcp_client_bedrock 目录:
cd mcp_client_bedrock
安装依赖项:
uv pip install -e .
运行客户端:
python main.py
客户端默认使用 Anthropic 的 Claude 3.7 Sonnet,但您可以在 main.py 中修改 model_id 来使用其他 Bedrock 模型:
# 支持的模型示例:
model_id = "us.anthropic.claude-3-7-sonnet-20250219-v1:0"
#model_id = "us.amazon.nova-pro-v1:0"
您还可以在同一文件中自定义系统提示以改变模型的行为。
在一个终端中启动 MCP2Lambda 服务器:
cd mcp2lambda
uv run main.py
在另一个终端中运行 Bedrock 客户端:
cd mcp_client_bedrock
python main.py
通过命令行界面与模型互动。模型将有权访问之前部署的 Lambda 函数。
在您的 Claude Desktop 配置文件中添加以下内容:
{
"mcpServers": {
"mcp2lambda": {
"command": "uv",
"args": [
"--directory",
"<完整路径到 mcp2lambda 目录>",
"run",
"main.py"
]
}
}
}
为了帮助模型通过 AWS Lambda 使用工具,在您的设置配置文件中,您可以在个人偏好中添加类似以下内容:
使用 AWS Lambda 工具来提高您的答案质量。
本地启动 MCP 服务器:
cd mcp2lambda
uv run main.py