ADF成本情报MCP
询问你的AI助手哪个ADF管道正在消耗你的Azure预算,以及确切的原因。
Azure数据工厂的企业FinOps智能系统,通过模型上下文协议(MCP)公开。将原始ADF消耗指标(DIU小时、vCore小时、活动运行)转换为美元估算,检测浪费,识别成本峰值,并推荐具有量化节省的具体修复方案。定价是从Azure零售价格API实时获取的,而不是硬编码常量。
使用 Claude Desktop、Claude Code、GitHub Copilot、Cursor、Windsurf或任何兼容MCP的客户端。
______________________________________________________________________
你可以问什么
Which ADF pipeline cost the most this month?
Why did my ADF bill spike last week?
Are any of my pipelines running wastefully?
Give me your top recommendations to cut my ADF spend.
Break down the cost of my IngestSalesData pipeline.示例响应:
本月最昂贵的三大管道: 1. 摄取销售数据 -142.30美元(司机:从复印活动开始计算DIU小时数) 1. 转换客户数据 -87.50美元(驱动程序:数据流vCore小时数) 1. 加载每日报告 -$34.20-每小时运行一次,处理的行数为零 建议:将LoadDailyReports切换到基于事件的触发器。预计节省: 34.20美元/月(410美元/年).
______________________________________________________________________
5工具
| 工具 | 它做什么 |
|---|---|
get_top_costly_pipelines | 根据估计的月度成本对所有管道进行排名,并与上一时期进行趋势对比 |
get_pipeline_cost_breakdown | 特定管道按活动类型逐项列出的成本 |
get_wasteful_pipelines | 标记生产中的零行运行、非活动管道和调试运行 |
get_cost_spike_analysis | 比较当期与上期,解释成本突然增加的原因 |
get_optimization_recommendations | 7规则引擎,具有特定修复和估计的年度节省 |
______________________________________________________________________
5分钟后开始
新用户?沿着这条路走:
Step 1 - Clone and install (~1 min)
Step 2 - Try with mock data (~1 min) no Azure needed
Step 3 - Connect your Azure ADF (~10 min) one-time setup
Step 4 - Add to your MCP client (~2 min)跳转到 快速开始 下面是完整的步骤。
已经有Python和ADF实例了吗? 通往真实数据的最短路径:
git clone https://github.com/harinarayn/adf-cost-intelligence-mcp
cd adf-cost-intelligence-mcp
pip install -r requirements.txt
# Create a service principal (one-time)
az ad sp create-for-rbac --name adf-cost-mcp-sp --role Reader \
--scopes /subscriptions/{YOUR_SUB_ID}
# Grant it ADF read access (one-time)
az role assignment create --assignee {APP_ID} \
--role "Data Factory Contributor" \
--scope /subscriptions/{SUB}/resourceGroups/{RG}/providers/Microsoft.DataFactory/factories/{ADF}
# Configure credentials
cp .env.example .env
# Edit .env with your values
# Add to your MCP client config (see Connect Your MCP Client below)
# Then ask: "Which ADF pipeline cost the most this month?"______________________________________________________________________
安全与隐私
此服务器完全在您自己的环境中运行。任何数据都不会离开您的基础设施。
- 在本地或您自己的云中运行,而不是我们的服务器
- 仅读取ADF运行元数据(管道名称、持续时间、状态、DIU计数),从不读取管道数据或业务内容
- 服务主体需要只读访问权限(请参阅下面的设置)
- 没有遥测,没有回调,除了公共之外没有第三方依赖关系 Azure零售价格API (未经验证的只读定价数据)
- 完全开源-每一行代码都是可审计的
看 安全.md 为了全面的安全态势。
______________________________________________________________________
先决条件
| 要求 | 如何检查 |
|---|---|
| Python 3.11+ | python --version |
| Azure订阅 | 至少有一个ADF实例 |
| ADF运行历史 | 至少7天的管道运行才能获得有意义的结果 |
| MCP兼容客户端 | Claude Desktop、Copilot、Cursor、Windsurf或任何MCP客户端 |
______________________________________________________________________
快速开始
步骤1-克隆并安装
git clone https://github.com/harinarayn/adf-cost-intelligence-mcp
cd adf-cost-intelligence-mcp
pip install -r requirements.txt
cp .env.example .env步骤2-立即使用模拟数据进行尝试(不需要Azure)
USE_MOCK_DATA=true python server.py打开MCP客户端并询问: “本月哪个ADF管道成本最高?”
您将看到使用涵盖10个模拟管道的真实合成数据的响应,包括浪费运行、成本飙升和非活动管道。
步骤3-连接您的真实Azure ADF(约10分钟,一次性)
3a。登录并查找您的订阅ID
az login
az account show --query id -o tsv3b。创建具有最小权限的服务主体
az ad sp create-for-rbac \
--name adf-cost-mcp-sp \
--role Reader \
--scopes /subscriptions/{YOUR_SUBSCRIPTION_ID}
# Save the output - you need: appId, password, tenant3c。授予对ADF实例的读取权限
az role assignment create \
--assignee {APP_ID_FROM_ABOVE} \
--role "Data Factory Contributor" \
--scope /subscriptions/{SUB_ID}/resourceGroups/{RG}/providers/Microsoft.DataFactory/factories/{ADF_NAME}最小权限: 服务主体只需要读取管道运行和活动运行。Data Factory Contributor是最接近的内置角色。为了加强安全性,请使用以下命令创建自定义角色Microsoft.DataFactory/factories/read,Microsoft.DataFactory/factories/pipelineruns/read,以及Microsoft.DataFactory/factories/activityruns/read.
3d。在ADF中启用按管道计费(重要)
- 打开 ADF工作室
- 首选 管理 > 出厂设置
- 集 按管道计费 到 开 并保存
没有这一点,成本数据仅在工厂层面,而不是每个管道。
步骤4-配置.env
AZURE_TENANT_ID=paste-from-step-3b
AZURE_CLIENT_ID=paste-appId-from-step-3b
AZURE_CLIENT_SECRET=paste-password-from-step-3b
AZURE_SUBSCRIPTION_ID=paste-from-step-3a
AZURE_RESOURCE_GROUP=your-resource-group-name
AZURE_DATA_FACTORY_NAME=your-adf-factory-name
USE_MOCK_DATA=false______________________________________________________________________
连接您的MCP客户端
克劳德桌面
Mac/Linux: ~/.claude/claude_desktop_config.json 窗户: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"adf-cost-intelligence": {
"command": "python",
"args": ["/absolute/path/to/adf-cost-intelligence-mcp/server.py"],
"env": {
"AZURE_TENANT_ID": "your-tenant-id",
"AZURE_CLIENT_ID": "your-app-id",
"AZURE_CLIENT_SECRET": "your-secret",
"AZURE_SUBSCRIPTION_ID": "your-subscription-id",
"AZURE_RESOURCE_GROUP": "your-resource-group",
"AZURE_DATA_FACTORY_NAME": "your-adf-name",
"USE_MOCK_DATA": "false"
}
}
}
}重新启动克劳德桌面。工具会自动显示。
克劳德代码(CLI)
claude mcp add adf-cost-intelligence python /path/to/server.py或者添加一个 .mcp.json 到您的项目根目录(可以安全提交,使用env-var引用):
{
"servers": {
"adf-cost-intelligence": {
"type": "stdio",
"command": "python",
"args": ["server.py"],
"env": {
"AZURE_TENANT_ID": "${AZURE_TENANT_ID}",
"AZURE_CLIENT_ID": "${AZURE_CLIENT_ID}",
"AZURE_CLIENT_SECRET": "${AZURE_CLIENT_SECRET}",
"AZURE_SUBSCRIPTION_ID": "${AZURE_SUBSCRIPTION_ID}",
"AZURE_RESOURCE_GROUP": "${AZURE_RESOURCE_GROUP}",
"AZURE_DATA_FACTORY_NAME": "${AZURE_DATA_FACTORY_NAME}",
"USE_MOCK_DATA": "false"
}
}
}
}GitHub副本(VS代码)
添加 .vscode/mcp.json 在您的工作空间中:
{
"servers": {
"adf-cost-intelligence": {
"type": "stdio",
"command": "python",
"args": ["/absolute/path/to/server.py"],
"env": {
"AZURE_TENANT_ID": "${env:AZURE_TENANT_ID}",
"AZURE_CLIENT_ID": "${env:AZURE_CLIENT_ID}",
"AZURE_CLIENT_SECRET": "${env:AZURE_CLIENT_SECRET}",
"AZURE_SUBSCRIPTION_ID": "${env:AZURE_SUBSCRIPTION_ID}",
"AZURE_RESOURCE_GROUP": "${env:AZURE_RESOURCE_GROUP}",
"AZURE_DATA_FACTORY_NAME": "${env:AZURE_DATA_FACTORY_NAME}",
"USE_MOCK_DATA": "false"
}
}
}
}光标/风帆
两者都通过以下方式支持MCP ~/.cursor/mcp.json 或 ~/.windsurf/mcp.json 使用与上述Claude Desktop配置相同的格式。
MCP检查员(用于测试和演示)
npx @modelcontextprotocol/inspector python server.py打开浏览器UI,单独调用每个工具并检查原始JSON响应。可用于测试您的设置或运行演示。
______________________________________________________________________
MCP检验员测试
MCP Inspector允许您在浏览器UI中直接调用每个工具并检查原始JSON响应,而不需要AI客户端。非常适合测试您的设置、调试或演示。
MCP Inspector showing all 5 tools connected and returning real Azure data
启动(Windows)
scripts\inspect.cmd这将从您的 .env 文件并自动打开检查器。
启动(Mac/Linux)
source .env && npx @modelcontextprotocol/inspector python server.py你会看到什么
- 浏览器在以下位置打开
http://localhost:6274 - 绿色 连接 指示器-服务器已启动
- 工具 选项卡列出了所有5个工具及其说明
- 点击任意工具,输入参数,点击 运行工具,并查看您的AI客户端收到的确切JSON
示例-测试成本排名工具
点击 get_top_costly_pipelines,输入:
{ "days": 30, "top_n": 8 }击打 运行工具。您将看到您的实际ADF管道按估计的每月成本、废物百分比和趋势数据进行排名。
______________________________________________________________________
运行测试
# All tests - no Azure credentials required (uses mock data)
USE_MOCK_DATA=true python -m pytest tests/ -v
# Specific modules
python -m pytest tests/test_cost_calculator.py -v
python -m pytest tests/test_pricing_client.py -v
python -m pytest tests/test_recommendations.py -v
python -m pytest tests/test_tools.py -v______________________________________________________________________
如何计算成本
使用与Azure相同的计费模型,根据ADF活动运行元数据估算成本:
| 活动类型 | 计费模型 |
|---|---|
| 复制(Azure IR) | DIU小时x$0.25/DIU小时(每次运行最少4分钟) |
| 复制(自托管IR) | DIU小时x$0.10/DIU小时 |
| 映射数据流 | vCore小时x按计算类型划分的速率(最小1分钟) |
| 管道/查找/ForEach | 活动执行小时x 0.005美元/小时 |
| 外部(copula等) | 活动执行时间x 0.00025美元/小时 |
| 非活动管道 | 每月0.80美元固定费用 |
当可用时, 实际计费DIU小时数直接从以下网址读取 billingReference ADF活动输出,不是根据持续时间估算的。实时定价从 Azure零售价格API 启动时缓存24小时。
______________________________________________________________________
优化规则
推荐引擎在您的流程历史中应用了7条规则:
| # | 条件 | 修复 | 典型保存 |
|---|---|---|---|
| 1 | 计划触发器+>20%零行运行 | 切换到基于事件的触发器 | 20-80%的浪费运行成本 |
| 2 | 复制DIU计数>4,数据\10 | 启用并行性(isSequential=false) | 管道持续时间的30% |
| 4 | DataFlow不带IR集群TTL | 设置集成运行时的生存时间 | DataFlow成本的15% |
| 5 | 30天内零运行的管道 | 退役(每月节省0.80美元) | 9.60美元/管道/年 |
| 6 | 每日满表加载,大数据集 | 实现水印增量加载 | 70%的数据移动成本 |
| 7 | 生产工厂调试运行 | 强制开发/测试工厂分离 | 每月管道成本的约8% |
______________________________________________________________________
这与azure mcp和azure Advisor有何不同
| azure mcp(官方) | azure顾问 | 此工具 | |
|---|---|---|---|
| ADF管道运行数据 | 否 | 否 | 是-每次运行,30天历史 |
| 每条管道的成本 | 否 | 否 | 是-估计到小数点后4位 |
| 废物检测 | 否 | 否 | 是-零行运行,非活动管道 |
| 成本飙升分析 | 否 | 否 | 是-本期与上期 |
| 具体的$节省估算 | 否 | 通用 | 是-根据建议 |
| 不使用日志分析 | N/A | N/A | 是-直接读取ADF API |
azure mcp给你的AI助手一把锤子。这给了它一把手术刀。
______________________________________________________________________
成本免责声明
成本估算基于Azure现收现付定价。实际成本因Azure协议类型(企业协议、CSP、PAYG)、保留容量、地区和货币而异。始终与Azure成本管理部门交叉检查重大决策,以获得准确的计费数据。
______________________________________________________________________
V2路线图
- 用代码进行补救:生成ADF JSON管道/触发器配置作为修复,而不仅仅是建议
- 多工厂支持:在一个对话中跨多个ADF实例进行查询
- 趋势分析:通过异常检测进行每周成本趋势分析
- copula集成:将copula作业成本作为ADF外部活动成本的一部分
- 预算警报:设置阈值并获得主动警告
- 远程MCP(企业):在具有托管身份、无本地凭据、完整审计跟踪的Azure容器应用程序上部署为远程MCP服务器
______________________________________________________________________
贡献
欢迎捐款。关键领域:
- 附加推荐规则(提出问题)
- 定价分析器中的新Azure区域
- Synapse分析支持
- 与真实ADF实例的集成测试
# Dev setup
pip install -r requirements.txt
USE_MOCK_DATA=true python -m pytest tests/ -v许可证: 麻省理工学院
