FOCUS MCP Server
FOCUS MCP 服务器
让您的 AI 助手告诉您云服务的真实成本。这个 MCP(模型上下文协议)服务器将 Claude 或任何其他 MCP 客户端连接到您的 FOCUS 账单数据,使以下这类问题变成一行提示词,而无需手写 SQL:
"本月按区域划分,成本最高的服务是哪些?"
"展示承诺折扣利用率趋势。"
"哪些账户存在异常消费模式?"
"解释 BilledCost 和 EffectiveCost 之间的区别。"
在底层,DuckDB 直接查询您的 Parquet 导出文件,无论它们位于本地磁盘、S3 还是 GCS。无需搭建数据仓库。服务器内置了从官方 FOCUS 用例目录精选的 254 个查询,按规范版本分别打包为独立集合(v1.0 有 36 个,v1.1 有 41 个,v1.2 有 53 个,v1.3 有 58 个,v1.4 有 66 个),每个查询都标注了其来源页面。
什么是 FOCUS?
FOCUS(FinOps 开放成本与用量规范)是云账单数据的开放标准。AWS、Microsoft 和 Google Cloud 均原生导出该格式,因此一套 schema 和一组查询即可跨云厂商使用。
Related MCP server: AWS FinOps MCP Server
快速开始
1. 获取 FOCUS 数据
每个云厂商都有官方的导出路径:
AWS:AWS 的 FOCUS 设置指南(Data Exports → FOCUS 1.0 或 1.2)
Microsoft Azure:Microsoft 的 FOCUS 设置指南
Google Cloud:Google Cloud 的 FOCUS 设置指南,或参阅下方 GCS + BigQuery
其他云厂商:所有 FOCUS 设置指南
服务器读取带 Hive 分区的 Parquet 文件:
/path/to/your/focus/data/
├── billing_period=2025-05/
│ ├── file1.parquet
│ └── file2.parquet
├── billing_period=2025-06/
│ └── ...2. 运行服务器
最快的路径无需容器。uvx 一步即可获取并运行已发布的包:
claude mcp add focus -e FOCUS_DATA_LOCATION=/path/to/your/focus/data -- uvx focus-mcp对于 Claude Desktop,请将其添加到 claude_desktop_config.json:
{
"mcpServers": {
"focus": {
"command": "uvx",
"args": ["focus-mcp"],
"env": {
"FOCUS_DATA_LOCATION": "/path/to/your/focus/data",
"FOCUS_VERSION": "1.0"
}
}
}
}使用 Application Default Credentials 读取 GCS 需要 gcs 附加依赖,在 uvx 中指定名称即可安装:
claude mcp add focus -e FOCUS_DATA_LOCATION=gs://your-bucket/focus \
-- uvx --from 'focus-mcp[gcs]' focus-mcpDocker 仍然可用,并且在您需要固定版本、经过认证的镜像时是更好的选择:
镜像在每次发布时都会发布到 Docker Hub 和 GitHub Container Registry:
docker pull glassity/focus-mcp:latest # Docker Hub
docker pull ghcr.io/glassity/focus-mcp:latest # GHCR对于 Claude Code,一条命令即可:
claude mcp add focus -- docker run -i --rm \
-v /path/to/your/focus/data:/data:ro \
-e FOCUS_DATA_LOCATION=/data \
glassity/focus-mcp:latest对于 Claude Desktop,请将其添加到 claude_desktop_config.json:
{
"mcpServers": {
"focus": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/path/to/your/focus/data:/data:ro",
"-e", "FOCUS_DATA_LOCATION=/data",
"-e", "FOCUS_VERSION=1.0",
"glassity/focus-mcp:latest"
]
}
}
}对于 S3 或 GCS 数据,去掉卷挂载并将 FOCUS_DATA_LOCATION 指向存储桶。有关凭据选项,请参阅数据位置。
3. 提出查询
启动您的客户端并尝试:
Show me what FOCUS data is loaded.助手会调用 get_data_info 并报告行数、日期范围和云厂商。然后,用自然语言提问:
Run the service costs by region analysis for the last 3 months.
Show me the top 10 most expensive services across all accounts.
Find unused capacity reservations I can optimize.
Compare costs across providers and regions.
What columns are available in FOCUS v1.4?工具
八个工具,分为两组。
数据与查询:
工具 | 功能 |
| 检查已加载的数据:行数、日期范围、云厂商 |
| 浏览针对您的 FOCUS 版本的预定义分析查询 |
| 查看单个查询的详细信息:SQL、参数、规范引用 |
| 针对您的数据运行预定义查询或自定义 SQL |
Schema 与规范:
工具 | 功能 |
| 所有 FOCUS 列及其类型和必需级别 |
| 单个列的完整定义 |
| FOCUS 格式标准和约定 |
| 单个属性的完整要求 |
Schema 工具直接依据 FOCUS 规范本身作答,因此助手既能解释列的含义,也能查询它。
查询库
每个查询都提取自官方 FOCUS 用例目录,并带有指向其来源页面的引用:
FOCUS v1.0:36 个查询
FOCUS v1.1:41 个查询
FOCUS v1.2:53 个查询
FOCUS v1.3:58 个查询
FOCUS v1.4:66 个查询
覆盖范围包括成本分摊、承诺折扣跟踪、异常检测、预算对账和云厂商比较。FOCUS_VERSION 用于选择激活哪套查询;请将其与您的云厂商导出的版本匹配。规范的发展领先于导出功能——AWS Data Exports 目前提供 FOCUS 1.0 和 1.2——因此 1.3 和 1.4 的查询集合已为云厂商推出相应版本的那一天做好准备。
数据位置
本地文件
export FOCUS_DATA_LOCATION="/path/to/your/focus/data"通过 aws s3 sync 或挂载卷下载的 AWS Data Export 副本,会按照其复制时携带的 manifest 加载,与直接读取存储桶的方式完全相同——见下文。
Amazon S3
export FOCUS_DATA_LOCATION="s3://your-bucket/focus-exports"
export AWS_REGION="us-west-2" # defaults to us-east-1将位置指向导出根目录,即同时包含 data/ 和 metadata/ 的前缀。AWS Data Exports 会在 metadata/ 下按计费周期列出其最新交付的每个文件,当 manifest 存在时,服务器会加载这些文件:前缀上遗留的已取代分块和重新交付的周期会被忽略,而不会重复计数。没有 manifest 的位置——例如 BigQuery 导出或 Parquet 文件目录——则通过递归匹配其下所有 Parquet 文件来读取。get_data_info 会报告使用了哪种方式,文件列表每隔几分钟刷新一次,因此新的交付无需重启即可生效。
身份验证使用标准的 AWS 凭据链,按顺序依次为:IAM 角色(在 EC2/ECS/Lambda 上自动获取)、AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY 环境变量、AWS_PROFILE,然后是 ~/.aws/credentials。
export AWS_PROFILE="billing-reader" # use a specific profile某些存储桶的键带有前导斜杠;如果列出失败,请尝试在存储桶名称后使用双斜杠:s3://your-bucket//focus/path。
在 Docker 中运行时,请通过 -e 变量传入凭据,或以只读方式挂载配置文件:
docker run -i --rm \
-v "$HOME/.aws:/home/mcp/.aws:ro" \
-e FOCUS_DATA_LOCATION="s3://your-bucket/focus-exports" \
-e AWS_REGION="us-west-2" \
-e AWS_PROFILE="billing-reader" \
glassity/focus-mcp:latestGoogle Cloud(GCS + BigQuery FOCUS 导出)
Google Cloud 以 FOCUS 格式原生导出账单:Billing → Billing export → FOCUS usage cost(预览版)会将 FOCUS 表写入 BigQuery。将其导出为 GCS 存储桶中的 Parquet 文件:
EXPORT DATA OPTIONS (
uri = 'gs://your-bucket/focus-export/*.parquet',
format = 'PARQUET',
overwrite = true
) AS
SELECT * FROM `your-project.your_focus_dataset.your_focus_table`;将该语句安排为 BigQuery 定时查询以保持存储桶更新;这同时会将您的数据归档,超过 FOCUS 导出的 2 年 TTL。然后:
export FOCUS_DATA_LOCATION="gs://your-bucket/focus-export"身份验证按以下顺序尝试:
HMAC 密钥:设置
GCS_HMAC_KEY_ID和GCS_HMAC_SECRET(使用gcloud storage hmac create <service-account-email>创建)。此路径使用 DuckDB 通过 S3 互操作 API 提供的原生 GCS 支持,无需额外依赖。Application Default Credentials:已包含在 Docker 镜像中;从源码检出时,使用
uv sync --extra gcs安装附加依赖。然后按您通常的方式完成身份验证:gcloud auth application-default login、通过GOOGLE_APPLICATION_CREDENTIALS指定服务账号 JSON,或在 GCE/GKE 上使用工作负载身份。无凭据:仅限公共存储桶。
存在两种方法是因为 DuckDB 内置的 GCS 支持仅支持 HMAC;ADC 来自可选的 gcsfs 依赖。凭据只在服务器进程内部读取,绝不会暴露给 MCP 客户端。
配置
变量 | 默认值 | 描述 |
|
| Parquet 文件所在位置:本地路径、 |
|
| FOCUS 规范版本: |
|
| S3 访问区域 |
| (未设置) | 用于 S3 身份验证的 AWS 配置文件 |
| (未设置) | 静态 AWS 凭据(如果不使用角色或配置文件) |
| (未设置) | 用于 GCS 的 HMAC 凭据 |
| (未设置) | 通过 ADC 访问 GCS 的服务账号 JSON |
开发
git clone https://github.com/glassity/focus-mcp.git
cd focus-mcp
uv sync # install, including dev tools
uv sync --extra gcs # + GCS ADC support
export FOCUS_DATA_LOCATION="/path/to/your/focus/data"
uv run focus-mcp将客户端指向源码检出目录,而不是 Docker 镜像:
{
"mcpServers": {
"focus": {
"command": "uv",
"args": ["run", "--directory", "/path/to/focus-mcp", "focus-mcp"],
"env": {
"FOCUS_DATA_LOCATION": "/path/to/your/focus/data",
"FOCUS_VERSION": "1.0"
}
}
}
}构建并运行您自己的镜像:
docker build -t focus-mcp:custom .
docker run -i --rm \
-v "/path/to/your/focus/data:/data:ro" \
-e FOCUS_DATA_LOCATION=/data \
focus-mcp:custom在提交拉取请求之前,请参阅 CONTRIBUTING.md 了解约定和检查项。
路线图
从 FOCUS 规范自动同步查询,使新的用例页面无需手动提取即可落地
更丰富的响应格式:在查询结果中内联提供引用和教育性上下文
针对真实云厂商导出验证每个用例查询(AWS 目前提供 FOCUS 1.0 和 1.2;1.3+ 待云厂商采用)
评估将列和属性定义迁移到 MCP resources
在工具响应中呈现规范中的一致性差距说明
安全
请将漏洞报告发送至 SECURITY.md 中列出的地址,而不是问题跟踪器。请了解信任模型:execute_query 会在服务器进程内运行 AI 助手编写的 SQL。您的 Parquet 文件是查询源,而不是可写数据库,本文中的所有示例均以 :ro 方式挂载它们;请保持这一点。如果您想要一个硬边界,请运行 Docker 镜像而不是裸进程,并且只授予服务器所需的对象存储凭据,范围限定在账单存储桶内。
许可证
Apache-2.0。版权所有 Glassity。参见 LICENSE。
This server cannot be deployed
Maintenance
Related MCP Connectors
Query cloud, AI and SaaS spend across 25+ providers: costs, budgets, anomalies, unit economics.
Ask about AWS, Azure, GCP, OpenAI, Anthropic and Snowflake costs, budgets, and anomalies.
Query OneLens cloud-cost data in natural language: breakdowns, trends, cost centers. Read-only.
Ask your AI assistant a cost question. Get allocation, correlation, and explanation in one response. Costory connects Claude, Codex, or Cursor to normalized cost data across AWS, GCP, Azure, Datadog, OpenAI, and Anthropic. https://costory.io Free trial 14 days, 250 USD / month up to 10M Spend
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables cost optimization and financial operations for Google BigQuery through natural language interactions. Provides insights into BigQuery spending, usage patterns, and cost management recommendations.-
- AlicenseBqualityDmaintenanceProvides a comprehensive suite of 76 tools for AWS cloud resource optimization, cost management, and infrastructure monitoring. It enables users to identify unused resources, analyze cost trends, right-size capacity, and maintain security compliance through natural language.76MIT
- AlicenseNot gradedqualityCmaintenanceEnables natural language analysis of AWS costs, automated FinOps waste audits, and budget monitoring across multiple profiles and regions while keeping credentials secure locally.183MIT
- AlicenseAqualityCmaintenanceEnables analyzing AWS cloud costs through natural language queries, providing cost summaries, anomaly detection, idle resource identification, rightsizing recommendations, and tagging compliance via Claude.1022 npmMIT