项目简介

'mcp-proxy-for-aws' 是一个关键的桥接工具,它允许标准 Model Context Protocol (MCP) 客户端(如 Claude Desktop 或 Amazon Q Developer CLI)和流行的 AI 代理框架(如 LangChain、LlamaIndex)连接到需要 AWS IAM SigV4 身份验证的 Amazon Web Services (AWS) 上的 MCP 服务器。它通过自动处理 SigV4 签名,解决了原生 MCP 客户端不直接支持 AWS 认证的问题,提供了一个轻量级的客户端侧代理或一个可编程的库。

主要功能点

  • 自动处理 AWS SigV4 认证: 无需手动编写复杂的认证逻辑,代理会自动使用您的本地 AWS 凭证(通过 AWS CLI、环境变量或 IAM 角色配置)对所有 MCP 请求进行 SigV4 签名。
  • 作为客户端代理运行: 作为一个命令行工具运行,充当您本地 MCP 客户端与 AWS 上受 IAM 保护的 MCP 服务器之间的桥梁。
  • 作为 Python 库集成: 提供编程接口,使 LangChain、LlamaIndex 等 AI 代理框架能够直接集成并连接到 AWS IAM 保护的 MCP 服务器。
  • 动态工具发现与过滤: 支持工具的动态发现,并可选择启用只读模式,过滤掉需要写入权限的工具。
  • 可配置的重试机制: 支持配置对上游服务的请求重试次数。
  • 元数据注入: 自动将 AWS 区域等信息注入到 MCP 请求的 '_meta' 字段中,也可支持自定义元数据。

安装步骤

  1. 安装 Python: 确保您的系统已安装 Python 3.10 或更高版本。
  2. 安装 uv 包管理器 (推荐):
    pip install uv
  3. 配置 AWS 凭证: 通过 AWS CLI (运行 'aws configure')、设置环境变量 ('AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_SESSION_TOKEN') 或使用 IAM 角色配置您的 AWS 凭证。
  4. 安装 'mcp-proxy-for-aws':
    pip install mcp-proxy-for-aws
    或者,如果您从本地仓库运行:
    git clone https://github.com/aws/mcp-proxy-for-aws.git
    cd mcp-proxy-for-aws
    uv sync

服务器配置(供 MCP 客户端使用)

要将您的 MCP 客户端(如 Amazon Q Developer CLI 或 Claude Desktop)连接到此代理服务器,您需要在客户端的配置文件中添加以下类型的配置。此配置指示客户端启动 'mcp-proxy-for-aws' 作为其本地 MCP 服务器,并由该代理负责与远程的 AWS MCP 服务器进行实际通信。

配置信息通常为 JSON 格式,包含以下关键字段:

  • 服务器名称 ('mcpServers.<server name>'): 您为这个 MCP 服务器连接定义的名称,例如 "my-aws-mcp"。
  • 禁用状态 ('disabled'): 一个布尔值,'false' 表示启用此服务器。
  • 连接类型 ('type'): 连接 MCP 服务器的协议类型,通常设置为 '"stdio"',表示通过标准输入输出进行通信。
  • 命令 ('command'): 用于启动 'mcp-proxy-for-aws' 代理服务器的程序或脚本。
    • 如果您通过 'pip install' 并使用 'uvx' 运行:此值通常是 '"uvx mcp-proxy-for-aws@latest"'。
    • 如果您从本地仓库使用 'uv' 运行:此值通常是 '"uv"'。
    • 如果您使用 Docker 运行:此值通常是 '"docker"'。
  • 参数 ('args'): 一个字符串数组,包含传递给 'command' 的命令行参数。
    • '<SigV4 MCP endpoint URL>' (必需): 您实际的 AWS MCP 服务器的 URL 地址。
    • '--service <your service code>' (可选): 指定 AWS 服务名称,例如 '"bedrock-agentcore"'。如果未提供,代理会尝试从 endpoint URL 中推断。
    • '--profile <your aws profile>' (可选): 指定用于 AWS 凭证的配置文件名,例如 '"default"'。如果未提供,将使用 'AWS_PROFILE' 环境变量。
    • '--region <aws region>' (可选): 指定 AWS 区域,例如 '"us-east-1"'。如果未提供,将尝试从 endpoint URL 或 'AWS_REGION' 环境变量中获取。
    • '--metadata KEY=value KEY2=value2' (可选): 以键值对形式注入到 MCP 请求的 '_meta' 字段中的自定义元数据。
    • '--read-only' (可选): 如果存在此参数,代理将禁用所有可能需要写入权限的工具。
    • '--retries <number>' (可选): 配置调用上游服务时的重试次数(0-10 之间,默认 0)。
    • '--log-level <level>' (可选): 设置代理的日志级别,例如 '"INFO"' 或 '"DEBUG"' (默认 'ERROR')。
    • '--timeout <seconds>' (可选): 设置所有操作的总超时时间(秒)。
    • '--connect-timeout <seconds>' (可选): 设置连接超时时间(秒)。
    • '--read-timeout <seconds>' (可选): 设置读取超时时间(秒)。
    • '--write-timeout <seconds>' (可选): 设置写入超时时间(秒)。
  • 环境变量 ('env'): 一个 JSON 对象,包含传递给代理服务器的环境变量。通常用于直接提供 AWS 凭证('AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', 'AWS_SESSION_TOKEN')和 AWS 区域 ('AWS_REGION')。

基本使用方法

  1. 作为代理运行 (命令行): 打开终端,运行 'mcp-proxy-for-aws' 命令,指向您的 AWS MCP 服务器端点。例如:

    uvx mcp-proxy-for-aws@latest https://your-mcp-server-endpoint.us-east-1.amazonaws.com/mcp --service bedrock-agentcore --region us-east-1

    此命令会启动代理服务。然后,您需要将您的 MCP 客户端(如 Amazon Q Developer CLI 或 Claude Desktop)配置为连接到此本地运行的代理。代理会自动处理与 AWS MCP 服务器的认证和通信。

  2. 作为库集成 (Python 代码): 在您的 Python AI 代理框架(如 LangChain、LlamaIndex、Strands Agents)代码中,使用 'mcp_proxy_for_aws.client.aws_iam_streamablehttp_client' 函数来创建经过 SigV4 认证的 MCP 客户端实例,直接连接到 AWS 上的 MCP 服务器。以下是一个示例代码片段:

    from mcp_proxy_for_aws.client import aws_iam_streamablehttp_client
    from mcp.client.session import ClientSession # 如果您的框架需要直接的 MCP 会话
    
    async def connect_to_aws_mcp():
        mcp_client_transport = aws_iam_streamablehttp_client(
            endpoint="https://your-mcp-server-endpoint.us-east-1.amazonaws.com/mcp",
            aws_region="us-east-1",
            aws_service="bedrock-agentcore"
        )
        async with mcp_client_transport as (read_stream, write_stream, get_session_id):
            async with ClientSession(read_stream, write_stream) as session:
                # 现在您可以使用 'session' 对象来调用工具、获取资源等
                print("成功连接到 AWS MCP 服务器!")
                # 例如: tools = await session.list_tools_async()
                # 您的 AI 框架将使用这个 'session' 或 'mcp_client_transport' 来集成。

    更多完整的框架集成示例,请参考 GitHub 仓库中的 'examples/mcp-client' 目录。

信息

分类

开发者工具