FOCUS MCP Server
FOCUS MCP Server
Спросите своего ИИ-ассистента, сколько на самом деле стоят ваши облачные ресурсы. Этот MCP-сервер (Model Context Protocol) подключает Claude или любого другого MCP-клиента к вашим данным о выставлении счетов в формате FOCUS, превращая такие вопросы в однострочные запросы вместо SQL, написанного вручную:
«Какие сервисы обходятся мне дороже всего по регионам в этом месяце?»
«Покажи тенденции использования скидок за обязательства (commitment discount)».
«У каких аккаунтов наблюдаются необычные паттерны расходов?»
«Объясни разницу между BilledCost и EffectiveCost».
Под капотом DuckDB напрямую запрашивает ваши Parquet-экспорты — независимо от того, лежат ли они на локальном диске, в S3 или GCS. Никакого хранилища данных поднимать не нужно. Сервер включает 254 запроса, отобранных из официального каталога вариантов использования FOCUS, в виде отдельной коллекции для каждой версии спецификации (36 для v1.0, 41 для v1.1, 53 для v1.2, 58 для v1.3, 66 для v1.4), и каждый запрос содержит ссылку на страницу, с которой он взят.
Что такое FOCUS?
FOCUS (FinOps Open Cost & Usage Specification) — это открытый стандарт для данных о выставлении счетов в облаке. AWS, Microsoft и Google Cloud экспортируют его нативно, поэтому одна схема и один набор запросов работают у всех провайдеров.
Related MCP server: AWS FinOps MCP Server
Быстрый старт
1. Получите данные FOCUS
У каждого провайдера есть официальный путь экспорта:
AWS: руководство по настройке FOCUS для AWS (Data Exports → FOCUS 1.0 или 1.2)
Microsoft Azure: руководство по настройке FOCUS для Microsoft
Google Cloud: руководство по настройке FOCUS для Google Cloud, или см. GCS + BigQuery ниже
Другие провайдеры: все руководства по настройке FOCUS
Сервер читает Parquet с Hive-партиционированием:
/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"
}
}
}
}Для чтения GCS с Application Default Credentials требуется дополнительный пакет 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 по вашим данным |
Схема и спецификация:
Инструмент | Что делает |
| Все колонки FOCUS с типом и уровнем обязательности |
| Полное определение одной колонки |
| Стандарты и соглашения форматирования FOCUS |
| Полные требования к одному атрибуту |
Инструменты схемы отвечают на основе самой спецификации 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 Data Export (aws s3 sync, смонтированный том) загружается через манифесты, с которыми она была скопирована, точно так же, как загружался бы сам бакет — см. ниже.
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/, и сервер загружает эти файлы, когда манифесты на месте: заменённые чанки и повторно доставленные периоды, оставшиеся на префиксе, игнорируются, чтобы не было двойного подсчёта. Расположения без манифестов — экспорт 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 (экспорт FOCUS через GCS + BigQuery)
Google Cloud экспортирует данные о выставлении счетов нативно в формате FOCUS: Billing → Billing export → FOCUS usage cost (Preview) записывает таблицу FOCUS в BigQuery. Экспортируйте её в Parquet в бакет GCS:
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, чтобы бакет оставался свежим; это также архивирует ваши данные за пределами 2-летнего TTL экспорта FOCUS. Затем:
export FOCUS_DATA_LOCATION="gs://your-bucket/focus-export"Аутентификация пробуется в таком порядке:
Ключи HMAC: задайте
GCS_HMAC_KEY_IDиGCS_HMAC_SECRET(создаются командойgcloud storage hmac create <service-account-email>). Этот путь использует встроенную поддержку GCS в DuckDB через API совместимости с S3 и не требует дополнительных зависимостей.Application Default Credentials: включены в Docker-образ; из исходников установите дополнительный пакет командой
uv sync --extra gcs. Затем аутентифицируйтесь как обычно:gcloud auth application-default login, JSON-файл сервисного аккаунта черезGOOGLE_APPLICATION_CREDENTIALSили workload identity на GCE/GKE.Без учётных данных: только публичные бакеты.
Два метода существуют потому, что встроенная поддержка GCS в DuckDB работает только с HMAC; ADC обеспечивается опциональной зависимостью gcsfs. Учётные данные читаются только внутри процесса сервера и никогда не раскрываются MCP-клиентам.
Конфигурация
Переменная | По умолчанию | Описание |
|
| Где лежит Parquet: локальный путь, |
|
| Версия спецификации FOCUS: |
|
| Регион для доступа к S3 |
| (не задан) | Профиль AWS для аутентификации в S3 |
| (не задан) | Статические учётные данные AWS, если не используется роль или профиль |
| (не задан) | Учётные данные HMAC для GCS |
| (не задан) | JSON сервисного аккаунта для GCS через ADC |
Разработка
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 о правилах и проверках перед открытием pull request.
Дорожная карта
Автоматическая синхронизация запросов из спецификации FOCUS, чтобы новые страницы вариантов использования попадали сюда без ручного извлечения
Более богатое форматирование ответов: ссылки и обучающий контекст прямо в результатах запросов
Проверка каждого запроса варианта использования на реальных экспортах провайдеров (AWS поставляет FOCUS 1.0 и 1.2 сегодня; 1.3+ — по мере внедрения провайдерами)
Оценка переноса определений колонок и атрибутов в ресурсы MCP
Отображение примечаний о несоответствиях из спецификации в ответах инструментов
Безопасность
Сообщайте об уязвимостях по адресу из SECURITY.md, а не в трекер задач. Понимайте модель доверия: execute_query выполняет 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