MCP服务器部署到AWS AgentCore运行时
按照教程: 通过两个命令从本地MCP服务器到AWS部署
备注:此实现使用 aws login 凭证,而不是传统的长期AWS凭证。还包括一些额外的步骤来处理AgentCore工具包的凭据兼容性要求。备注:替换 `` 在运行命令之前,请使用您的实际AWS配置文件名。
🚀 快速入门(如果您克隆了此Repo)
如果您克隆了此存储库,只想部署MCP服务器,请按照以下最小步骤操作:
先决条件
- AWS-CLI 2.32.0+
- Python 3.10+与uv包管理器
- 通过以下方式获得有效的AWS凭据
aws login
分6步部署
- 设置进程凭据 (一次性设置):
aws configure set credential_process "aws configure export-credentials --profile --format process" --profile process-
aws sts get-caller-identity --profile process- # verify it works- 安装依赖项:
cd mcp-server
uv add fastmcp
uv tool install bedrock-agentcore-starter-toolkit- 配置和部署:
export AWS_PROFILE=process-
agentcore configure --create --entrypoint server.py --name dice_mcp_server --deployment-type container --protocol MCP --non-interactive- 修复ECR配置:
步骤3创建 .bedrock_agentcore.yaml.打开 .bedrock_agentcore.yaml 和改变 ecr_auto_create 到 true。这允许AgentCore在部署过程中自动创建Docker镜像存储库。
- 部署:
export AWS_PROFILE=process-
agentcore deploy- 测试 (验证MCP服务器功能):
export AWS_PROFILE=process-
# List available tools
agentcore invoke '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# Call the roll_d20 tool
agentcore invoke '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"roll_d20","arguments":{"number_of_dice":3}}}'预期: tools/list 显示 roll_d20 工具, tools/call 返回骰子结果,如下所示 [10, 20, 8]
- 完成后进行清理:
export AWS_PROFILE=process-
agentcore destroy备注:您可能需要手动删除剩余的ECR存储库和CloudWatch日志组。
______________________________________________________________________
📖 完整教程(从头开始构建)
如果您想了解完整的过程或从头开始构建,请按照以下详细步骤操作:
先决条件
- AWS-CLI 2.32.0+
- Python 3.10+与uv包管理器
- 通过以下方式获得有效的AWS凭据
aws login
重要提示:用于AgentCore兼容性的凭据设置
问题:AgentCore工具包不能直接使用 aws login 凭据,即使AWS CLI工作正常。
解决方案:创建一个充当“桥梁”的流程凭据配置文件:
# Step 1: Create process credentials profile (one-time setup)
aws configure set credential_process "aws configure export-credentials --profile --format process" --profile process-
# Step 2: Verify it works
aws sts get-caller-identity --profile process-
# Step 3: Use this profile for all agentcore commands
export AWS_PROFILE=process-这有什么作用:
process-是一个包装器配置文件,它将您的登录凭据转换为agentcore可以理解的格式- 这
credential_process跑aws configure export-credentials以正确的格式获取您的登录凭据 export AWS_PROFILE=process-告诉该终端中的所有AWS工具使用包装器配置文件
为什么需要这样做:
aws login使用较新的凭据提供程序创建临时凭据- 一些工具(如agentcore)尚不支持此提供程序
- 进程凭据是AWS针对此兼容性问题推荐的解决方法
- 这记录在 AWS CLI文档
步骤1:创建MCP服务器
创建项目结构:
uv init --bare mcp-server
cd mcp-server
uv add fastmcp创建server.py
创建 mcp-server/server.py 具体内容如下:
import random
from fastmcp import FastMCP
# Create the MCP server with AgentCore Runtime configuration
mcp = FastMCP("Dice Rolling Server", host="0.0.0.0", stateless_http=True)
@mcp.tool()
def roll_d20(number_of_dice: int = 1) -> list[int]:
"""Roll a 20-sided die multiple times.
Args:
number_of_dice: Number of dice to roll (default: 1)
Returns:
List of dice roll results
"""
return [random.randint(1, 20) for _ in range(number_of_dice)]
if __name__ == "__main__":
mcp.run(transport="streamable-http")步骤2:本地测试(可选)
备注:本地测试需要HTTP模式,但AgentCore使用stdio模式。您可以跳过此步骤。
如果你想在本地测试:
- 修改server.py以使用HTTP模式:
mcp.run(transport="http", port=8000) - 运行:
uv run python server.py - 使用curl命令进行测试
- 重要:更改回
mcp.run()部署到AgentCore之前
步骤3:安装AgentCore工具包
uv tool install bedrock-agentcore-starter-toolkit步骤4:配置AgentCore运行时
export AWS_PROFILE=process-使用正确的参数配置AgentCore:
agentcore configure --create --entrypoint server.py --name dice_mcp_server --deployment-type container --protocol MCP --non-interactive步骤5:为容器构建创建Dockerfile
对于容器部署,创建一个Dockerfile:
创建 mcp-server/Dockerfile:
FROM python:3.12-slim
WORKDIR /app
# Copy project files
COPY pyproject.toml ./
COPY server.py ./
# Install uv and dependencies
RUN pip install uv
RUN uv sync
# Expose port (though AgentCore uses stdio)
EXPOSE 8000
# Run the MCP server
CMD ["uv", "run", "python", "server.py"]重要:使用 uv sync 非 uv sync --frozen (冻结标志需要一个不存在的锁文件)
步骤6:修复ECR配置
该配置可能无法启用ECR自动创建。编辑 .bedrock_agentcore.yaml 并更改:
ecr_auto_create: false致:
ecr_auto_create: true步骤7:部署到AgentCore运行时
export AWS_PROFILE=process-
agentcore deploy发生了什么:
- 创建内存资源(需要2-3分钟)
- 在CodeBuild中构建容器(需要1-2分钟)
- 部署到AgentCore运行时
- 设置可观察性(CloudWatch日志+X射线)
预期产量:
🎉 CodeBuild completed successfully
Agent created/updated: arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/dice_mcp_server-XXXXX
✅ Deployment Success步骤8:测试部署的服务器
export AWS_PROFILE=process-
# List available tools
agentcore invoke '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# Call roll_d20 tool
agentcore invoke '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"roll_d20","arguments":{"number_of_dice":3}}}'预期结果:
tools/list返回roll_d20工具及其描述和模式tools/call返回实际掷骰子结果,如[10, 20, 8]
第9步:清理(重要!)
始终清理资源以避免收费:
export AWS_PROFILE=process-
agentcore destroy被删除的内容:
- AgentCore运行时
- ECR存储库和映像
- CodeBuild项目
- S3工件
- 内存资源
- IAM角色
- 配置文件
故障排除
常见问题:
- “agentcore配置需要有效的aws凭据”
- 解决方案:使用进程凭据解决方法(请参阅先决条件)
- “未配置ECR存储库,也未启用自动创建”
- 解决方案:编辑 .bedrock_agentcore.yaml 并设置 ecr_auto_create: true
- Docker构建失败,显示“在uv.lock处找不到锁文件”
- 解决方案:使用 uv sync 不 uv sync --frozen 在Dockerfile中
- 测试MCP调用时出现内部错误
- 固定的:使用正确的FastMCP配置更新了服务器实施 - 使用 host="0.0.0.0", stateless_http=True,以及 transport="streamable-http" - MCP协议调用现在工作正常 - 基于提示的调用可能仍会显示错误,但核心功能正常工作
