MCP服务器部署工具

一个用于将MCP服务器部署到AWS AgentCore运行时的工具,支持快速部署和测试。

  • by WayneGreeley
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 WayneGreeley/aws-mcp-demo

使用说明

MCP服务器部署到AWS AgentCore运行时

按照教程: 通过两个命令从本地MCP服务器到AWS部署

备注:此实现使用 aws login 凭证,而不是传统的长期AWS凭证。还包括一些额外的步骤来处理AgentCore工具包的凭据兼容性要求。

备注:替换 <your-profile> 在运行命令之前,请使用您的实际AWS配置文件名。

🚀 快速入门(如果您克隆了此Repo)

如果您克隆了此存储库,只想部署MCP服务器,请按照以下最小步骤操作:

先决条件

  • AWS-CLI 2.32.0+
  • Python 3.10+与uv包管理器
  • 通过以下方式获得有效的AWS凭据 aws login

分6步部署

  1. 设置进程凭据 (一次性设置):

    aws configure set credential_process "aws configure export-credentials --profile <your-profile> --format process" --profile process-<your-profile>
    aws sts get-caller-identity --profile process-<your-profile>  # verify it works
    
  2. 安装依赖项:

    cd mcp-server
    uv add fastmcp
    uv tool install bedrock-agentcore-starter-toolkit
    
  3. 配置和部署:

    export AWS_PROFILE=process-<your-profile>
    agentcore configure --create --entrypoint server.py --name dice_mcp_server --deployment-type container --protocol MCP --non-interactive
    
  4. 修复ECR配置: 步骤3创建 .bedrock_agentcore.yaml.打开 .bedrock_agentcore.yaml 和改变 ecr_auto_create 到 true。这允许AgentCore在部署过程中自动创建Docker镜像存储库。

  5. 部署:

    export AWS_PROFILE=process-<your-profile>
    agentcore deploy
    
  6. 测试 (验证MCP服务器功能):

    export AWS_PROFILE=process-<your-profile>
    # 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]

  7. 完成后进行清理:

    export AWS_PROFILE=process-<your-profile>
    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 <your-profile> --format process" --profile process-<your-profile>

# Step 2: Verify it works
aws sts get-caller-identity --profile process-<your-profile>

# Step 3: Use this profile for all agentcore commands
export AWS_PROFILE=process-<your-profile>

这有什么作用:

  • process-<your-profile> 是一个包装器配置文件,它将您的登录凭据转换为agentcore可以理解的格式
  • 这 credential_process 跑 aws configure export-credentials 以正确的格式获取您的登录凭据
  • export AWS_PROFILE=process-<your-profile> 告诉该终端中的所有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模式。您可以跳过此步骤。

如果你想在本地测试:

  1. 修改server.py以使用HTTP模式: mcp.run(transport="http", port=8000)
  2. 运行: uv run python server.py
  3. 使用curl命令进行测试
  4. 重要:更改回 mcp.run() 部署到AgentCore之前

步骤3:安装AgentCore工具包

uv tool install bedrock-agentcore-starter-toolkit

步骤4:配置AgentCore运行时

export AWS_PROFILE=process-<your-profile>

使用正确的参数配置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-<your-profile>
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-<your-profile>

# 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-<your-profile>
agentcore destroy

被删除的内容:

  • AgentCore运行时
  • ECR存储库和映像
  • CodeBuild项目
  • S3工件
  • 内存资源
  • IAM角色
  • 配置文件

故障排除

常见问题:

  1. “agentcore配置需要有效的aws凭据”

    • 解决方案:使用进程凭据解决方法(请参阅先决条件)
  2. “未配置ECR存储库,也未启用自动创建”

    • 解决方案:编辑 .bedrock_agentcore.yaml 并设置 ecr_auto_create: true
  3. Docker构建失败,显示“在uv.lock处找不到锁文件”

    • 解决方案:使用 uv sync 不 uv sync --frozen 在Dockerfile中
  4. 测试MCP调用时出现内部错误

    • 固定的:使用正确的FastMCP配置更新了服务器实施
    • 使用 host="0.0.0.0", stateless_http=True,以及 transport="streamable-http"
    • MCP协议调用现在工作正常
    • 基于提示的调用可能仍会显示错误,但核心功能正常工作