AWS Cost Explorer and Amazon Bedrock Model Invocation Logs MCP Server & Client

AWS Cost Explorer and Amazon Bedrock Model Invocation Logs MCP Server & Client

镜子 (jìng zi)

MCP-Mirror

研究与数据
访问服务器

README

AWS 成本分析器和 Amazon Bedrock 模型调用日志 MCP 服务器 & 客户端

一个 MCP 服务器,用于通过 Cost Explorer 获取 AWS 支出数据,并通过 Amazon Cloud Watch 中的 模型调用日志 获取 Amazon Bedrock 使用数据,通过 Anthropic 的 MCP (模型控制协议)。 请参阅 "安全"远程 MCP 服务器 部分,了解如何通过 HTTPS 运行 MCP 服务器。

flowchart LR
    User([用户]) --> UserApp[用户应用程序]
    UserApp --> |查询| Host[主机]
    
    subgraph "Claude 桌面"
        Host --> MCPClient[MCP 客户端]
    end
    
    MCPClient --> |HTTPS 上的 MCP 协议| MCPServer[AWS 成本分析器 MCP 服务器]
    
    subgraph "AWS 服务"
        MCPServer --> |API 调用| CostExplorer[(AWS 成本分析器)]
        MCPServer --> |API 调用| CloudWatchLogs[(AWS CloudWatch Logs)]
    end

您可以在本地运行 MCP 服务器,并通过 Claude 桌面访问它,或者您也可以在 Amazon EC2 上运行远程 MCP 服务器,并通过构建到 LangGraph Agent 中的 MCP 客户端访问它。

演示视频

AWS 成本分析器 MCP 服务器深度剖析

概述

此工具提供了一种方便的方式来分析和可视化 AWS 云支出数据,使用 Anthropic 的 Claude 模型作为交互式界面。 它充当 MCP 服务器,将 AWS Cost Explorer API 功能暴露给 Claude,允许您用自然语言提问有关 AWS 成本的问题。

特性

  • Amazon EC2 支出分析:查看过去一天的 EC2 支出的详细分类
  • Amazon Bedrock 支出分析:查看过去 30 天按区域、用户和模型的分类
  • 服务支出报告:分析过去 30 天所有 AWS 服务的支出
  • 详细的成本分解:获取按天、区域、服务和实例类型的精细成本数据
  • 交互式界面:使用 Claude 通过自然语言查询您的成本数据

要求

  • Python 3.12
  • 具有 Cost Explorer 访问权限的 AWS 凭证
  • Anthropic API 访问权限(用于 Claude 集成)
  • [可选] Amazon Bedrock 访问权限(用于 LangGraph Agent)
  • [可选] Amazon EC2 用于运行远程 MCP 服务器

安装

  1. 安装 uv:

    # 在 macOS 和 Linux 上
    curl -LsSf https://astral.sh/uv/install.sh | sh
    
    # 在 Windows 上
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
    
  2. 克隆此存储库:

    git clone https://github.com/aarora79/aws-cost-explorer-mcp.git
    cd aws-cost-explorer-mcp
    
  3. 设置 Python 虚拟环境并安装依赖项:

    uv venv --python 3.12 && source .venv/bin/activate && uv pip install --requirement pyproject.toml
    
  4. 配置您的 AWS 凭证:

    mkdir -p ~/.aws
    # 在 ~/.aws/credentials 和 ~/.aws/config 中设置您的凭证
    

用法

前提条件

  1. 在 Amazon CloudWatch 中设置模型调用日志
  2. 确保正在使用的 IAM 用户/角色具有对 Amazon Cost Explorer 和 Amazon CloudWatch 的完全只读访问权限,这是 MCP 服务器从这些服务检索数据所必需的。

本地设置

使用 stdio 作为 MCP 的传输方式,MCP 服务器和客户端都在您的本地机器上运行。

启动服务器(本地)

使用以下命令运行服务器:

export MCP_TRANSPORT=stdio
export BEDROCK_LOG_GROUP_NAME=YOUR_BEDROCK_CW_LOG_GROUP_NAME
python server.py

Claude 桌面配置

有两种方法可以将此工具与 Claude 桌面配置:

选项 1:使用 Docker

将以下内容添加到您的 Claude 桌面配置文件。 该文件可以在以下路径中找到,具体取决于您的操作系统。

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json.
  • Windows: %APPDATA%\Claude\claude_desktop_config.json.
  • Linux: ~/.config/Claude/claude_desktop_config.json.
{
  "mcpServers": {
    "aws-cost-explorer": {
      "command": "docker",
      "args": [ "run", "-i", "--rm", "-e", "AWS_ACCESS_KEY_ID", "-e", "AWS_SECRET_ACCESS_KEY", "-e", "AWS_REGION", "-e", "BEDROCK_LOG_GROUP_NAME", "-e", "MCP_TRANSPORT", "aws-cost-explorer-mcp:latest" ],
      "env": {
        "AWS_ACCESS_KEY_ID": "YOUR_ACCESS_KEY_ID",
        "AWS_SECRET_ACCESS_KEY": "YOUR_SECRET_ACCESS_KEY",
        "AWS_REGION": "us-east-1",
        "BEDROCK_LOG_GROUP_NAME": "YOUR_CLOUDWATCH_BEDROCK_MODEL_INVOCATION_LOG_GROUP_NAME",
        "MCP_TRANSPORT": "stdio"
      }
    }
  }
}

重要提示:将 YOUR_ACCESS_KEY_IDYOUR_SECRET_ACCESS_KEY 替换为您的实际 AWS 凭证。 永远不要将实际凭证提交到版本控制。

选项 2:使用 UV(不使用 Docker)

如果您希望直接运行服务器而不使用 Docker,则可以使用 UV:

{
  "mcpServers": {
    "aws_cost_explorer": {
      "command": "uv",
      "args": [
          "--directory",
          "/path/to/aws-cost-explorer-mcp-server",
          "run",
          "server.py"
      ],
      "env": {
        "AWS_ACCESS_KEY_ID": "YOUR_ACCESS_KEY_ID",
        "AWS_SECRET_ACCESS_KEY": "YOUR_SECRET_ACCESS_KEY",
        "AWS_REGION": "us-east-1",
        "BEDROCK_LOG_GROUP_NAME": "YOUR_CLOUDWATCH_BEDROCK_MODEL_INVOCATION_LOG_GROUP_NAME",
        "MCP_TRANSPORT": "stdio"
      }
    }
  }
}

确保将目录路径替换为您系统上存储库的实际路径。

远程设置

使用 sse 作为 MCP 的传输方式,EC2 上的 MCP 服务器和客户端都在您的本地机器上运行。 请注意,Claude 桌面目前不支持远程 MCP 服务器(请参阅 GitHub 问题)。

启动服务器(远程)

您可以按照与上述相同的说明在 Amazon EC2 上启动远程 MCP 服务器。 确保将 MCP_TRANSPORT 设置为 sse(服务器发送事件),如下所示。 请注意,MCP 使用 JSON-RPC 2.0 作为其线路格式,因此协议本身不包括授权和身份验证(请参阅 此 GitHub 问题),请勿通过 MCP 发送或接收敏感数据

使用以下命令运行服务器:

export MCP_TRANSPORT=sse
export BEDROCK_LOG_GROUP_NAME=YOUR_BEDROCK_CW_LOG_GROUP_NAME
python server.py
  1. MCP 服务器将开始侦听 TCP 端口 8000。
  2. 在与您的 EC2 实例关联的安全组中配置一个入站规则,以允许从您的本地机器(您在其中运行 MCP 客户端/基于 LangGraph 的应用程序)访问 EC2 实例的 TCP 端口 8000。

另请参阅有关运行 "安全"远程 MCP 服务器 的部分,即您的 MCP 客户端可以通过 HTTPS 连接到的服务器。

使用 CLI MCP 客户端进行测试

您可以使用 mcp_sse_client.py 脚本测试您的远程 MCP 服务器。 运行此脚本将打印 MCP 服务器提供的工具列表以及 get_bedrock_daily_usage_stats 工具的输出。

MCP_SERVER_HOSTNAME=YOUR_MCP_SERVER_EC2_HOSTNAME
python mcp_sse_client.py --host $MCP_SERVER_HOSTNAME

使用 Chainlit 应用程序进行测试

此存储库中的 app.py 文件提供了一个 Chainlit 应用程序(聊天机器人),它创建了一个 LangGraph 代理,该代理使用 LangChain MCP 适配器 将 MCP 服务器提供的工具作为 LangGraph 代理中的工具导入。 然后,代理能够使用 LLM 来响应用户问题,并根据需要使用可用的工具。 因此,如果用户提出诸如“过去一周我的 Bedrock 使用情况如何?”之类的问题,则代理将使用通过远程 MCP 服务器提供的工具来回答该问题。 我们使用通过 Amazon Bedrock 提供的 Claude 3.5 Haiku 模型来支持此代理。

使用以下命令运行 Chainlit 应用程序:

chainlit run app.py --port 8080 

浏览器窗口应在 localhost:8080 上打开,您应该能够使用聊天机器人来获取有关您的 AWS 支出的详细信息。

可用工具

服务器公开了以下 Claude 可以使用的工具:

  1. get_ec2_spend_last_day():检索前一天的 EC2 支出数据
  2. get_detailed_breakdown_by_day(days=7):提供按区域、服务和实例类型对成本的全面分析
  3. get_bedrock_daily_usage_stats(days=7, region='us-east-1', log_group_name='BedrockModelInvocationLogGroup'):提供按区域和用户对模型使用情况的每日细分。
  4. get_bedrock_hourly_usage_stats(days=7, region='us-east-1', log_group_name='BedrockModelInvocationLogGroup'):提供按区域和用户对模型使用情况的每日每小时细分。

示例查询

通过启用 MCP 的界面连接到 Claude 后,您可以提出如下问题:

  • "帮我了解过去几周我的 Bedrock 支出"
  • "昨天我的 EC2 支出是多少?"
  • "显示我上个月成本最高的 5 个 AWS 服务"
  • "分析过去 14 天我的区域支出"
  • "哪些实例类型花费我最多的钱?"

Docker 支持

包含一个 Dockerfile 用于容器化部署:

docker build -t aws-cost-explorer-mcp .
docker run -v ~/.aws:/root/.aws aws-cost-explorer-mcp

开发

项目结构

  • server.py:具有 MCP 工具的主服务器实现
  • pyproject.toml:项目依赖项和元数据
  • Dockerfile:用于部署的容器定义

添加新的成本分析工具

要扩展功能:

  1. 将新函数添加到 server.py
  2. 使用 @mcp.tool() 注释它们
  3. 实现 AWS Cost Explorer API 调用
  4. 格式化结果以方便阅读

安全的“远程”MCP 服务器

我们可以使用 nginx 作为反向代理,以便它可以为连接到 MCP 服务器提供 HTTPS 端点。 远程 MCP 客户端可以通过 HTTPS 连接到 nginx,然后它可以将流量内部代理到 http://localhost:8000。 以下步骤描述了如何执行此操作。

  1. 在与您的 EC2 实例关联的安全组的入站规则中,允许从您的 MCP 客户端(您的笔记本电脑或任何位置)的 IP 地址访问 TCP 端口 443。

  2. 您需要拥有 HTTPS 证书和私钥才能继续。 假设您使用 your-mcp-server-domain-name.com 作为 MCP 服务器的域名,那么您将需要一个用于 your-mcp-server-domain-name.com 的 SSL 证书,并且 MCP 客户端可以将其作为 https://your-mcp-server-domain-name.com/sse 访问。 虽然您可以使用自签名证书,但这需要在 MCP 客户端上禁用 SSL 验证,我们不建议您这样做。 如果您将 MCP 服务器托管在 EC2 上,则可以使用 no-ip 或其他类似服务生成 SSL 证书。 将 SSL 证书和私钥文件分别放置在 EC2 机器上的 /etc/ssl/certs/etc/ssl/privatekey 文件夹中。

  3. 使用以下命令在您的 EC2 机器上安装 nginx

    sudo apt-get install nginx
    sudo nginx -t
    sudo systemctl reload nginx
    
  4. 获取您的 EC2 实例的主机名,这将用于配置 nginx 反向代理。

    TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600") && curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/public-hostname
    
  5. 将以下内容复制到新文件 /etc/nginx/conf.d/ec2.conf 中。 将 YOUR_EC2_HOSTNAME/etc/ssl/certs/cert.pem/etc/ssl/privatekey/privkey.pem 替换为适合您设置的值。

    server {
     listen 80;
     server_name YOUR_EC2_HOSTNAME;
    
     # Optional: Redirect HTTP to HTTPS
     return 301 https://$host$request_uri;
     }
    
     server {
         listen 443 ssl;
         server_name YOUR_EC2_HOSTNAME;
    
         # Self-signed certificate paths
         ssl_certificate     /etc/ssl/certs/cert.pem;
         ssl_certificate_key /etc/ssl/privatekey/privkey.pem; 
    
         # Optional: Good practice
         ssl_protocols       TLSv1.2 TLSv1.3;
         ssl_ciphers         HIGH:!aNULL:!MD5;
    
         location / {
             # Reverse proxy to your local app (e.g., port 8000)
             proxy_pass http://127.0.0.1:8000;
             proxy_http_version 1.1;
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         }
     }
    
    
  6. 重新启动 nginx

    sudo systemctl start nginx
    
  7. 按照 远程设置 部分中的描述,照常启动您的 MCP 服务器。

  8. 您的 MCP 服务器现在可以通过 HTTPS 作为 https://your-mcp-server-domain-name.com/sse 访问您的 MCP 客户端。

  9. 现在在客户端(例如在您的笔记本电脑或您的代理中)配置您的 MCP 客户端,以按如下方式与您的 MCP 服务器通信。

    MCP_SERVER_HOSTNAME=YOUR_MCP_SERVER_DOMAIN_NAME
    python mcp_sse_client.py --host $MCP_SERVER_HOSTNAME --port 443
    

    同样,您可以运行 chainlit 应用程序以通过 HTTPS 与远程 MCP 服务器通信。

    export MCP_SERVER_URL=YOUR_MCP_SERVER_DOMAIN_NAME
    export MCP_SERVER_PORT=443
    chainlit run app.py --port 8080
    

    同样,您可以运行 LangGraph 代理以通过 HTTPS 与远程 MCP 服务器通信。

    python langgraph_agent_mcp_sse_client.py --host YOUR_MCP_SERVER_DOMAIN_NAME --port 443 
    

许可证

MIT 许可证

致谢

  • 此工具使用 Anthropic 的 MCP 框架
  • 由 AWS Cost Explorer API 提供支持
  • 使用 FastMCP 构建,用于服务器实现
  • README 是通过 GitIngest 向 Claude 提供存储库的文本转储生成的

推荐服务器

Crypto Price & Market Analysis MCP Server

Crypto Price & Market Analysis MCP Server

一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。

精选
TypeScript
MCP PubMed Search

MCP PubMed Search

用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的服务器。

精选
Python
mixpanel

mixpanel

连接到您的 Mixpanel 数据。 从 Mixpanel 分析查询事件、留存和漏斗数据。

精选
TypeScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Nefino MCP Server

Nefino MCP Server

为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。

官方
Python
Vectorize

Vectorize

将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。

官方
JavaScript
Mathematica Documentation MCP server

Mathematica Documentation MCP server

一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。

本地
Python
kb-mcp-server

kb-mcp-server

一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。

本地
Python
Research MCP Server

Research MCP Server

这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

本地
Python
Cryo MCP Server

Cryo MCP Server

一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取,允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。

本地
Python