AWS Lambda上带有MCP服务器的AI代理,具有Auth0身份验证
此仓库包含在上运行的用户感知AI代理和MCP服务器的示例实现 AWS Lambda该示例为虚构的公司AcmeCorp实现了一个基于人工智能的旅行社。 身份验证0 用于用户身份验证和访问控制。

请参阅下面的两个工件,以更好地理解预期的代理行为。
- ./lambdas/旅行社/agent_builder.py 代理人的系统提示。
- ./lambdas/bookings mcp/tool-get-travel-policies.js 对于公司差旅政策,代理人受其约束。
(跳到 运行项目)

框架和服务
- AI Agent是通过以下方式实现的 Strands代理SDK
- 亚马逊API网关 用于前端AI Agent和MCP(参见架构图)。
- 亚马逊DynamoDB 用于持久化AI Agent会话状态。
- 亚马逊基岩 克劳德·海库3.5用于推理。
- 格拉迪奥 用于Web UI。
验证和授权
- 身份验证0 用于用户身份验证和授权。
- 在...期间
terraform apply/cdk deploy将在Auth0中创建两个用户-Alice和Bob.使用alice@example.com和bob@example.com登录,如下所述。密码设置为Passw0rd@. - AI代理和预订MCP域都需要JWT(承载令牌)授权,由API网关Lambda授权者强制执行。
- AI代理需要Auth0发出的JWT。本JWT的主题是用户。验证是在代理授权器中使用Auth0提供程序JWK完成的。
- 预订MCP期望由Strands Agent生成JWT。本JWT的主题是代理人
user_id这是一个额外的要求。此令牌由共享密钥签名。验证是在MCP授权器中使用共享密钥完成的。 - 明确声明——在任何时候,用户的身份都不会从LLM的响应中推断出来。它总是使用JWT传播。
用户意识和会话管理
- AI Agent和MCP Server都是完全无状态的,它们不维护任何内部状态。
- AI代理和MCP服务器都知道当前用户,并在用户授权上下文中处理请求。
- AI Agent将其状态外部化到DynamoDB,使用
user_id作为主键。 - 在每个状态属于当前用户的请求上创建新的Strands Agent实例。
- 连接到AI代理的MCP客户端是按用户创建的,持有用户特定的JWT与MCP服务器通信。
- MCP服务器将授权用户上下文传播到所有工具中,使MCP工具用户感知。
工具
在代理中实施
- 【代理人】
get-user-location将用户的IP地址解析为用户位置。 - 【代理人】
get-todays-date该工具返回今天的日期。
在MCP服务器中实现
- \[MCP\]
get-travel-policies返回AcmeCorp公司差旅政策。 - \[MCP\]
get-available-cars返回可出租汽车的列表和类别。 - \[MCP\]
book-car预订汽车租赁。 - \[MCP\]
book-hotel预订酒店。
运行项目
该项目默认使用arm64架构,以提高成本效益。如果要将IaC文件更改为x86,请更新它。
前提条件
- AWS CLI、Git、Docker
- 地形或CDK
- 已安装Node.js
- 访问
us.anthropic.claude-3-5-haiku-20241022-v1:0在……里面us-east-1。或更新 代理配置 使用不同的模型/区域。 - Auth0帐户
克隆项目
git clone https://github.com/aal80/strands-on-lambda-with-auth0安装依赖项
(cd lambdas/agent-authorizer && npm install)
(cd lambdas/mcp-authorizer && npm install)
(cd lambdas/bookings-mcp && npm install)使用Terraform部署到AWS
使用环境变量设置Auth0配置:
export TF_VAR_auth0_domain=your-auth0-domain
export TF_VAR_auth0_management_client_id=your-auth0-management-client-id
export TF_VAR_auth0_management_client_secret=your-auth0-management-client-secret地形:
cd terraform
terraform init
terraform plan
terraform apply始终确保仔细审查所需的IAM权限!
运行部署后脚本
地形:
# Make sure you're in the {project_root}/terraform directory
chmod +x prep-web.sh
./prep-web.sh
cd ..运行此脚本将 {project_root}/web/.env 包含运行Web UI所需配置的文件。
运行Web UI
cd web
python3 -m venv .venv # Create virtual environment
source .venv/bin/activate # Active virtual environment
pip install -r requirements.txt # Install dependencies
python app.py # Start Web UI app打开 http://localhost:8000/chat/ 在您的浏览器中
登录
您将被重定向到Auth0提供的登录屏幕。

- 电子邮件:
alice@example.com或bob@example.com - 密码:
Passw0rd@
登录后,开始向您的AI Agent询问有关公司旅行预订的问题,例如
- 我可以租什么车?
- 给我订一次巴黎之旅
- 我需要从下周一开始去达拉斯三天,我还需要一辆车
- 我可以租一辆奔驰吗?

清理
地形:
terraform destroy