hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
AWS Cost Explorer 和 Amazon Bedrock 模型调用日志 MCP 服务器和客户端
一个 MCP 服务器,用于通过 Cost Explorer 获取 AWS 支出数据,并通过Anthropic 的 MCP(模型控制协议)在 Amazon Cloud Watch 中通过Model invocation logs
获取 Amazon Bedrock 使用情况数据。请参阅“安全”远程 MCP 服务器部分,了解如何通过 HTTPS 运行 MCP 服务器。
您可以在本地运行 MCP 服务器并通过 Claude Desktop 访问它,或者您也可以在 Amazon EC2 上运行远程 MCP 服务器并通过 LangGraph Agent 内置的 MCP 客户端访问它。
🚨您还可以使用此 MCP 服务器从其他帐户获取 AWS 支出信息,只要 MCP 服务器使用的 IAM 角色可以承担其他帐户中的角色即可🚨
演示视频
概述
此工具使用 Anthropic 的 Claude 模型作为交互界面,提供了一种便捷的 AWS 云支出数据分析和可视化方法。它充当 MCP 服务器,将 AWS Cost Explorer API 功能公开给 Claude Desktop,让您能够使用自然语言咨询 AWS 支出相关问题。
特征
- Amazon EC2 支出分析:查看过去一天 EC2 支出的详细明细
- Amazon Bedrock 支出分析:查看过去 30 天内按地区、用户和型号细分的数据
- 服务支出报告:分析过去 30 天所有 AWS 服务的支出
- 详细成本明细:按天、区域、服务和实例类型获取详细成本数据
- 交互界面:使用 Claude 通过自然语言查询您的成本数据
要求
- Python 3.12
- 具有 Cost Explorer 访问权限的 AWS 凭证
- Anthropic API 访问(用于 Claude 集成)
- [可选] Amazon Bedrock 访问权限(用于 LangGraph Agent)
- [可选] 用于运行远程 MCP 服务器的 Amazon EC2
安装
- 安装
uv
:Copy其他安装选项请参见此处Copy - 克隆此存储库:(假设这将更新为指向 aws-samples?)Copy
- 设置Python虚拟环境并安装依赖项:Copy
- 配置您的 AWS 凭证:如果您使用 AWS IAM Identity Center,请按照文档配置您的短期凭证Copy
用法
先决条件
- 在 Amazon CloudWatch 中设置模型调用日志。
- 确保所使用的 IAM 用户/角色拥有对 Amazon Cost Explorer 和 Amazon CloudWatch 的完全只读访问权限,这是 MCP 服务器从这些服务检索数据所必需的。请参阅此处和此处的示例策略示例,您可以根据需求使用和修改这些示例。
- 为了允许您的 MCP 服务器访问其他帐户的 AWS 支出信息,请在启动服务器时设置
CROSS_ACCOUNT_ROLE_NAME
参数,现在您可以在与代理交互时为另一个帐户提供帐户 AWS 帐户 ID,然后代理将帐户 ID 传递给服务器。
本地设置
使用stdio
作为 MCP 的传输,MCP 服务器和客户端都在您的本地机器上运行。
启动服务器(本地)
使用以下命令运行服务器:
Claude桌面配置
有两种方法可以使用 Claude Desktop 配置此工具:
选项 1:使用 Docker
将以下内容添加到您的 Claude Desktop 配置文件中。该文件位于以下路径中,具体取决于您的操作系统。
- macOS:~/Library/Application Support/Claude/claude_desktop_config.json。
- Windows:%APPDATA%\Claude\claude_desktop_config.json。
- Linux:~/.config/Claude/claude_desktop_config.json。
重要提示:请将
YOUR_ACCESS_KEY_ID
和YOUR_SECRET_ACCESS_KEY
替换为您的实际 AWS 凭证。切勿将实际凭证提交到版本控制中。
选项 2:使用 UV(不使用 Docker)
如果您希望不使用 Docker 直接运行服务器,则可以使用 UV:
确保将目录路径替换为系统上存储库的实际路径。
远程设置
使用sse
作为 MCP 的传输协议,MCP 服务器位于 EC2 上,客户端则运行在您的本地计算机上。请注意,Claude Desktop 目前不支持远程 MCP 服务器(请参阅此GitHub 问题)。
启动服务器(远程)
您可以按照上述相同的步骤在 Amazon EC2 上启动远程 MCP 服务器。请确保将MCP_TRANSPORT
设置为sse
(服务器端事件),如下所示。请注意,MCP 使用 JSON-RPC 2.0 作为其传输格式,因此协议本身不包含授权和身份验证(请参阅此 GitHub 问题),请勿通过 MCP 发送或接收敏感数据。
使用以下命令运行服务器:
- MCP 服务器将开始监听 TCP 端口 8000。
- 在与您的 EC2 实例关联的安全组中配置入口规则,以允许从您的本地计算机(运行 MCP 客户端/基于 LangGraph 的应用程序的位置)访问您的 EC2 实例的 TCP 端口 8000。
另请参阅有关运行“安全”远程 MCP 服务器的部分,即您的 MCP 客户端可以通过 HTTPS 连接的服务器。
使用 CLI MCP 客户端进行测试
您可以使用mcp_sse_client.py
脚本测试您的远程 MCP 服务器。运行此脚本将打印 MCP 服务器中可用的工具列表以及get_bedrock_daily_usage_stats
工具的输出。
使用 Chainlit 应用程序进行测试
此代码库中的app.py
文件提供了一个 Chainlit 应用(聊天机器人),它创建了一个 LangGraph 代理,该代理使用LangChain MCP Adapter
将 MCP 服务器提供的工具导入到 LangGraph 代理中。然后,该代理可以使用 LLM 来回答用户问题,并根据需要使用可用的工具。因此,如果用户提出诸如“过去一周我的 Bedrock 使用情况如何? ”之类的问题,该代理将使用远程 MCP 服务器提供的工具来回答该问题。我们使用 Amazon Bedrock 提供的 Claude 3.5 Haiku 模型来支持该代理。
使用以下方式运行 Chainlit 应用程序:
浏览器窗口应该在localhost:8080
上打开,您应该能够使用聊天机器人获取有关您的 AWS 支出的详细信息。
可用工具
服务器公开了 Claude 可以使用的以下工具:
get_ec2_spend_last_day()
:检索前一天的 EC2 支出数据get_detailed_breakdown_by_day(days=7)
:提供按区域、服务和实例类型划分的全面成本分析get_bedrock_daily_usage_stats(days=7, region='us-east-1', log_group_name='BedrockModelInvocationLogGroup')
:提供按地区和用户划分的模型使用情况的每日明细。get_bedrock_hourly_usage_stats(days=7, region='us-east-1', log_group_name='BedrockModelInvocationLogGroup')
:提供按地区和用户划分的模型使用情况的每日每小时细分。
示例查询
一旦通过支持 MCP 的界面连接到 Claude,您就可以提出以下问题:
- “帮助我了解过去几周我的 Bedrock 支出情况”
- “我昨天的 EC2 支出是多少?”
- “按成本显示我上个月使用最多的 5 项 AWS 服务”
- “按地区分析我过去 14 天的支出”
- “哪些实例类型花费我最多的钱?”
- “哪些服务的月度成本增幅最高?”
Docker 支持
包含一个用于容器化部署的 Dockerfile:
发展
项目结构
server.py
:使用 MCP 工具实现的主服务器pyproject.toml
:项目依赖项和元数据Dockerfile
:部署的容器定义
添加新的成本分析工具
扩展功能:
- 向
server.py
添加新功能 - 使用
@mcp.tool()
注释它们 - 实施 AWS Cost Explorer API 调用
- 格式化结果以便于阅读
安全的“远程” MCP 服务器
我们可以使用nginx
作为反向代理,以便它能够提供用于连接到 MCP 服务器的 HTTPS 端点。远程 MCP 客户端可以通过 HTTPS 连接到nginx
,然后 nginx 可以将内部流量代理到http://localhost:8000
。以下步骤描述了如何操作。
- 在与您的 EC2 实例关联的安全组中的入站规则中,启用从 MCP 客户端(您的笔记本电脑或任何地方)的 IP 地址访问 TCP 端口 443。
- 您需要拥有 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 、 Let' Encrypt或其他类似服务生成 SSL 证书。将 SSL 证书和私钥文件分别放在 EC2 计算机上的/etc/ssl/certs
和/etc/ssl/privatekey
文件夹中。 - 使用以下命令在您的 EC2 机器上安装
nginx
。Copy - 获取您的 EC2 实例的主机名,这对于配置
nginx
反向代理是必需的。Copy - 将以下内容复制到新文件
/etc/nginx/conf.d/ec2.conf
中。将YOUR_EC2_HOSTNAME
、/etc/ssl/certs/cert.pem
和/etc/ssl/privatekey/privkey.pem
替换为适合您设置的值。Copy - 重新启动
nginx
。Copy - 按照远程设置部分所述,照常启动您的 MCP 服务器。
- 您的 MCP 服务器现在可以通过 HTTPS 访问,地址为
https://your-mcp-server-domain-name.com/sse
,供您的 MCP 客户端使用。 - 现在在客户端(比如在您的笔记本电脑或代理中)配置您的 MCP 客户端以便与您的 MCP 服务器进行通信,如下所示。类似地,您可以运行 chainlit 应用程序通过 HTTPS 与远程 MCP 服务器通信。Copy类似地,您可以运行 LangGraph Agent 通过 HTTPS 与远程 MCP 服务器通信。CopyCopy
执照
致谢
This server cannot be installed
命令行界面和 API 允许用户通过自然语言对话让 Claude 查询 AWS Cost Explorer 来分析和可视化 AWS 云支出数据。
- Demo video
- Overview
- Features
- Requirements
- Installation
- Usage
- Docker Support
- Development
- Secure "remote" MCP server
- License
- Acknowledgments