Token导航 LogoToken导航TokenDH.com
Frugalia MCP logo
运维云端stdio官方级别未说明来源级核验

Frugalia MCP

MCP Server

Frugalia是一款基于GKE的FinOps MCP服务器,通过AI代理自动识别并执行Kubernetes成本优化机会,包括资源调整、僵尸资源检测和Spot实例迁移。

工具数

8

提示词数

0

GitHub Stars

2

资源数

0
成本优化资源管理PythonAI代理

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

salvador-arreola

提供方

salvador-arreola

最后核验

2026/5/17 20:21

运行时

Python

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

uv run python src/main.py

详细介绍

节俭MCP

弗鲁加利亚 是一个GKE FinOps MCP(模型上下文协议)服务器,使AI代理能够自动识别和执行Kubernetes成本优化机会。

概述

建筑

%%{init: {'theme':'base', 'themeVariables': { 'background':'#ffffff', 'mainBkg':'#ffffff', 'secondBkg':'#ffffff', 'tertiaryBkg':'#ffffff', 'primaryColor':'#e1f5ff', 'primaryTextColor':'#000', 'primaryBorderColor':'#0288d1', 'lineColor':'#666', 'secondaryColor':'#fff3e0', 'tertiaryColor':'#f3e5f5', 'clusterBkg':'#e1f5ff', 'clusterBorder':'#0288d1', 'edgeLabelBackground':'#ffffff' }}}%%
flowchart BT
 subgraph ns_monitoring["Namespace: monitoring"]
        AlertRule["PrometheusRule
(e.g., frugalia-zombie-pv)"]
        PromManager["Prometheus / AlertManager"]
  end
 subgraph MCP_Servers["MCP Servers"]
        FrugaliaMCP["MCPServer
frugalia-mcp"]
        GenAIMCP["MCPServer
genai-toolbox-mcp"]
        SlackMCP["MCPServer
slack-mcp"]
  end
 subgraph ns_kagent["Namespace: kagent"]
        CronJobs["CronJobs
(e.g., zombie-resources)"]
        Webhook["Deployment/Service
alert-webhook"]
        Agent["Agent
frugalia-agent"]
        RemoteMCP["RemoteMCPServer
agw-mcp-servers"]
        Gateway["kgateway
(mcp-gateway + mcp-route)"]
        MCP_Servers
  end
 subgraph GKE["GKE Cluster"]
        ns_monitoring
        ns_kagent
  end
    AlertRule -- Triggers --> PromManager
    Webhook -- kagent invoke
(Event-Driven) --> Agent
    CronJobs -- kagent invoke
(Scheduled Tasks) --> Agent
    Agent -- Requests Tools --> RemoteMCP
    RemoteMCP -- Routes secure traffic --> Gateway
    Gateway -- Routes to tool --> FrugaliaMCP & GenAIMCP & SlackMCP
    PromManager -- Webhook Payload
POST /webhook/alertmanager --> Webhook
    FrugaliaMCP -. Queries P99 Metrics .-> PromManager
    FrugaliaMCP -. Read/Patch Resources .-> K8sAPI[("Kubernetes API")]
    GenAIMCP -. Queries Billing Data .-> BigQuery[("GCP BigQuery")]
    SlackMCP -. Sends Final Report .-> SlackAPI[("Slack API")]

     FrugaliaMCP:::mcp
     GenAIMCP:::mcp
     SlackMCP:::mcp
     Webhook:::webhook
     CronJobs:::cronjob
     Agent:::agent
     K8sAPI:::external
     BigQuery:::external
     SlackAPI:::external

    classDef k8s fill:#326ce5,stroke:#fff,stroke-width:2px,color:#fff
    classDef agent fill:#10b981,stroke:#fff,stroke-width:2px,color:#fff
    classDef mcp fill:#8b5cf6,stroke:#fff,stroke-width:2px,color:#fff
    classDef webhook fill:#f59e0b,stroke:#fff,stroke-width:2px,color:#fff
    classDef cronjob fill:#eab308,stroke:#fff,stroke-width:2px,color:#fff
    classDef external fill:#475569,stroke:#fff,stroke-width:2px,color:#fff

Frugalia为AI代理提供了支持(与 智能体)分析GKE集群并推荐成本节约措施:

  1. 合理精简:减少过度配置工作负载的CPU/内存请求
  2. 僵尸检测:识别并删除未使用的资源(PVC、PV、负载均衡器)
  3. 定点迁移:将无状态工作负载移动到Spot实例,可节省60-70%的成本

特性

  • 实时Kubernetes API集成和Prometheus P99使用指标
  • 安全第一:Spot迁移前的PodDisruption预算验证
  • 具有genai工具箱(BigQuery计费)和Slack的双MCP架构
  • 8个MCP工具+4个定时CronJobs+事件驱动的Prometheus AlertManager webhook

项目结构

frugalia-mcp/
├── src/
│   ├── tools/               # 8 MCP tools (analyze_rightsizing, detect_zombie_resources, etc.)
│   └── core/                # FastMCP server + Prometheus utils
├── kubernetes/
│   ├── cronjobs/            # 4 scheduled CronJobs (nightly FinOps workflows)
│   ├── prometheus-alerts/   # AlertManager PrometheusRules + alertmanager-values
│   ├── frugalia-agent.yaml  # kagent Agent definition
│   ├── frugalia-mcp.yaml    # MCPServer (frugalia-mcp)
│   ├── genai-toolbox-mcp.yaml # MCPServer (BigQuery billing) + ConfigMap/Secret
│   ├── slack-mcp.yaml       # MCPServer (Slack)
│   ├── rbac.yaml            # ClusterRole + ServiceAccount
│   ├── remotemcp.yaml       # RemoteMCPServer (agw-mcp-servers)
│   ├── gateway.yaml         # kgateway + MCPRoute
│   ├── backend.yaml         # Backend resources
│   ├── httproute.yaml       # HTTPRoute
│   └── trafficpolicy.yaml   # TrafficPolicy
├── event-driven-webhook/    # FastAPI webhook receiver for AlertManager
│   ├── main.py              # POST /webhook/alertmanager → kagent invoke
│   ├── Dockerfile           # Python 3.10 + kagent CLI
│   ├── requirements.txt
│   └── even-driver-webhook-deployment.yaml
├── kagent-cmd/              # Minimal image for CronJob invocations
│   └── Dockerfile           # Debian + kubectl + kagent CLI
├── .github/workflows/
│   └── docker-build.yaml    # CI/CD: build, scan (Trivy), push to Docker Hub
└── kmcp.yaml                # MCP configuration

Docker镜像

CI/CD管道构建并推送到Docker Hub的三个映像:

图片来源描述
salvadorarreola/frugalia-mcpDockerfileFastMCP服务器:8个K8s/Prometheus工具
salvadorarreola/kagent-cmdkagent-cmd/DockerfileCronJob调用的最小运行器
salvadorarreola/event-driven-webhookevent-driven-webhook/DockerfileAlertManager webhook接收器

CI/CD管道

GitHub操作工作流(.github/workflows/docker-build.yaml)在版本标签上运行(v*.*.*, b*.*.*)或手动调度:

build (matrix: 3 images)
  └── scan (Trivy: filesystem vulns, misconfigs, secrets + image CRITICAL scan)
        └── push-dockerhub (matrix: 3 images) ← only on tags or main branch
  • 构建通过GitHub Actions Cache缓存(每个映像范围)
  • 图像作为工件在作业之间传递
  • 推步需要 DOCKERHUB_USERNAMEDOCKERHUB_TOKEN 存储库机密

快速开始

本地开发

# Install dependencies
uv sync

# Configure Prometheus
export PROMETHEUS_URL="http://localhost:9090"

# Run server
uv run python src/main.py

Kubernetes部署

# Core components
kubectl apply -f kubernetes/rbac.yaml
kubectl apply -f kubernetes/frugalia-mcp.yaml
kubectl apply -f kubernetes/genai-toolbox-mcp.yaml
kubectl apply -f kubernetes/slack-mcp.yaml
kubectl apply -f kubernetes/remotemcp.yaml
kubectl apply -f kubernetes/gateway.yaml
kubectl apply -f kubernetes/frugalia-agent.yaml

# Scheduled CronJobs
kubectl apply -f kubernetes/cronjobs/

# Event-driven webhook
kubectl apply -f event-driven-webhook/even-driver-webhook-deployment.yaml

# Prometheus alerts
kubectl apply -f kubernetes/prometheus-alerts/

# Verify
kubectl get agent frugalia-agent -n kagent
kubectl get cronjobs -n kagent
kubectl get deployment alert-webhook -n kagent
kubectl logs -n kagent -l app=frugalia -f

MCP工具

8核心工具:

  1. analyze_rightsizing:分析CPU/内存使用情况与请求(P99超过7天)
  2. detect_zombie_resources:查找未使用的PVC、PV和负载平衡器
  3. identify_spot_candidates:标识可安全进行Spot迁移的无状态工作负载
  4. check_nodepool_types:验证Spot节点池的可用性
  5. check_node_utilization:检测未充分利用的节点以优化装箱
  6. get_kubernetes_resources:查询K8s资源(Pod、部署、PDB等)
  7. get_prometheus_metrics:执行PromQL查询
  8. apply_resource_patch:应用K8s补丁(需要批准)

计划的CronJobs

四个CronJobs每晚在 kagent 命名空间使用 salvadorarreola/kagent-cmd 图像。所有时间都是 美国/墨西哥城.

CronJob计划工作流
frugalia-node-utilization0 20 * * * (晚上8点)节点利用率:装箱、未充分利用的节点检测
frugalia-rightsizing-audit0 21 * * * (晚上9点)调整规模:过度配置部署,节省CPU/内存
frugalia-spot-migration0 22 * * * (晚上10点)现场迁移:现场候选、PDB安全、成本节约
frugalia-zombie-resources0 23 * * * (晚上11点)僵尸检测:未使用的PVC、PV、负载均衡器、清理

每个CronJob都会调用 frugalia-agent 通过 kagent invoke 代理向Slack发送最终报告。

事件驱动的Webhook

alert-webhook 部署(event-driven-webhook/)从Prometheus AlertManager接收POST请求 /webhook/alertmanager.对于每一个 解雇 包含以下内容的警报 action 注释,它调用 kagent invoke 触发 frugalia-agent.

环境变量:

  • KAGENT_URL:kagent控制器终结点(默认值: http://kagent-controller.kagent.svc:8083)
  • AGENT_NAME:目标代理名称(默认值: frugalia-agent)

Prometheus警报管理器配置(alertmanager-values.yaml): 将接收器URL指向 http://alert-webhook.kagent.svc/webhook/alertmanager.

AI代理工作流

工作流程A:定点迁移:识别无状态工作负载并迁移到Spot节点(节省60-70%)。验证PDB安全性和节点池可用性。

工作流程B:僵尸检测:查找未使用的资源(PVC、PV、LoadBalancer),计算成本,建议清理并获得批准。

工作流C:节点优化:检测未充分利用的节点,分析装箱机会,瞄准 kube:unallocated BigQuery计费中的成本。

所有工作流都与BigQuery(genai工具箱)集成,用于成本分析并将报告发送到Slack。

配置

环境变量:

  • PROMETHEUS_URL:Prometheus服务器端点(默认值: http://prometheus-kube-prometheus-prometheus.monitoring:9090)

RBAC权限 (参见 kubernetes/rbac.yaml):

  • 阅读:Pod、部署、服务、PVC/PV、节点、PDB、事件、命名空间
  • 写入:部署(补丁/更新/扩展)、服务/PVC/PV(删除)

所需的秘密:

  • DOCKERHUB_USERNAME/DOCKERHUB_TOKEN:Docker Hub推送凭据(GitHub操作)
  • genai-toolbox-variables:BigQuery项目/数据集/表配置(Kubernetes Secret)

添加自定义工具

kmcp add-tool my_custom_tool
# Edit src/tools/my_custom_tool.py with @mcp.tool() decorator
uv run pytest tests/
kmcp build && kubectl apply -f kubernetes/frugalia-mcp.yaml

发展

# Local testing
kubectl port-forward -n monitoring svc/prometheus-kube-prometheus-prometheus 9090:9090
export PROMETHEUS_URL="http://localhost:9090"
uv run python src/main.py

# Build and deploy
docker build -t salvadorarreola/frugalia-mcp:latest .
docker build -t salvadorarreola/kagent-cmd:latest kagent-cmd/
docker build -t salvadorarreola/event-driven-webhook:latest event-driven-webhook/

故障排除

  • RBAC问题: kubectl get clusterrolebinding frugalia-mcp 并检查服务帐户
  • 普罗米修斯失败: 验证 PROMETHEUS_URL 吊舱环境和测试连接性
  • 工具未加载: 检查 kubectl logs -n kagent -l app=frugalia-mcp
  • Webhook未触发: 检查 kubectl logs -n kagent -l app=alert-webhook 并验证AlertManager接收器URL
  • CronJob未运行: 检查 kubectl get jobs -n kagentkubectl describe cronjob -n kagent

许可证

麻省理工学院

目录标签

目录标签

成本优化资源管理PythonAI代理Kubernetes本地部署FinOps

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

8

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP