AWS Cost Explorer MCP Server
一个命令行界面和 API,允许用户通过启用 Claude 以自然语言对话查询 AWS Cost Explorer,从而分析和可视化 AWS 云支出数据。
README
AWS Cost Explorer 和 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 Cost Explorer MCP 服务器]
subgraph "AWS 服务"
MCPServer --> |API 调用| CostExplorer[(AWS Cost Explorer)]
MCPServer --> |API 调用| CloudWatchLogs[(AWS CloudWatch Logs)]
end
您可以在本地运行 MCP 服务器,并通过 Claude 桌面访问它,或者您也可以在 Amazon EC2 上运行远程 MCP 服务器,并通过构建到 LangGraph Agent 中的 MCP 客户端访问它。
演示视频
概述
此工具提供了一种使用 Anthropic 的 Claude 模型作为交互式界面来分析和可视化 AWS 云支出数据的便捷方法。 它充当 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 服务器
安装
-
安装
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" -
克隆此存储库:
git clone https://github.com/aarora79/aws-cost-explorer-mcp.git cd aws-cost-explorer-mcp -
设置 Python 虚拟环境并安装依赖项:
uv venv --python 3.12 && source .venv/bin/activate && uv pip install --requirement pyproject.toml -
配置您的 AWS 凭证:
mkdir -p ~/.aws # 在 ~/.aws/credentials 和 ~/.aws/config 中设置您的凭证
用法
前提条件
- 在 Amazon CloudWatch 中设置模型调用日志。
- 确保使用的 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_ID和YOUR_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
- 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 工具的输出。
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 可以使用的以下工具:
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 用于容器化部署:
docker build -t aws-cost-explorer-mcp .
docker run -v ~/.aws:/root/.aws aws-cost-explorer-mcp
开发
项目结构
server.py:具有 MCP 工具的主服务器实现pyproject.toml:项目依赖项和元数据Dockerfile:用于部署的容器定义
添加新的成本分析工具
要扩展功能:
- 将新函数添加到
server.py - 使用
@mcp.tool()注释它们 - 实现 AWS Cost Explorer API 调用
- 格式化结果以方便阅读
安全的“远程”MCP 服务器
我们可以使用 nginx 作为反向代理,以便它可以为连接到 MCP 服务器提供 HTTPS 端点。 远程 MCP 客户端可以通过 HTTPS 连接到 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 或其他类似服务生成 SSL 证书。 将 SSL 证书和私钥文件分别放置在 EC2 机器上的/etc/ssl/certs和/etc/ssl/privatekey文件夹中。 -
使用以下命令在您的 EC2 机器上安装
nginx。sudo apt-get install nginx sudo nginx -t sudo systemctl reload nginx -
获取 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 -
将以下内容复制到新文件
/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; } } -
重新启动
nginx。sudo systemctl start nginx -
按照 远程设置 部分中的描述,照常启动 MCP 服务器。
-
您的 MCP 服务器现在可以通过 HTTPS 作为
https://your-mcp-server-domain-name.com/sse访问到您的 MCP 客户端。 -
现在在客户端(例如在您的笔记本电脑或代理中)配置您的 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
许可证
致谢
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。
