Storage Intelligence MCP
Storage Intelligence MCP/A2A 代理
生产级、只读的 Azure 存储智能试点项目,包含 2,500 个账户的合成资产,覆盖 Dev、QA、Perf 和 Prod 环境中的 339 个订阅,提供确定性分析、私有 Foundry 工具以及受 Entra 保护的 Web 应用程序。
同一确定性代理可通过 REST、官方 MCP Streamable HTTP 服务器以及 A2A v1 JSON-RPC/HTTP+JSON 端点使用。有关客户端配置、身份验证、发现和请求示例,请参阅 MCP 和 A2A 集成。
实时 MCP 和 A2A 端点
瑞典中部部署使用以下受 Entra 保护的基础 URL:
https://ca-storage-intel-kxlgam3w.wittyforest-55ec85c1.swedencentral.azurecontainerapps.io
协议 | 端点 |
MCP Streamable HTTP |
|
A2A 代理卡片 |
|
A2A JSON-RPC |
|
A2A HTTP+JSON |
|
外部客户端必须为 Web 应用程序的 api://<WEB_AUTH_CLIENT_ID> 受众请求 Microsoft Entra 令牌,并将其作为持有者令牌发送。使用 /mcp/ 作为规范的 MCP URL;/mcp 会重定向到挂载的传输路径。
Related MCP server: azure-compliance-mcp
产品体验
百事可乐品牌响应式仪表板,带有固定的本地服务 React 资产。
右上角标题中提供持久的英语/西班牙语语言切换,适用于海得拉巴、巴塞罗那、墨西哥、美国和英国的全球分布式团队。导航、表单、状态、无障碍标签、动态计数、风险因素、内置问题和确定性答案摘要均以所选语言呈现,而无需更改 API 标识符或资源名称。
手动试点引导,按存储账户名称、租户 ID、管理组、订阅、环境、子公司/业务部门、区域和访问层级进行。
经过身份验证的选择列表管理,用于添加租户、管理组、订阅、子公司/业务部门,以及每个区域选择器中的完整面向客户的 Azure 公共区域目录。
批量 XLSX/CSV 引导,避免重复手动输入。导入经过原子验证,拒绝重复项,并且仅更新内存中的试点清单。
仅限管理员执行的租户发现,在所有授权订阅中运行只读 Azure CLI 命令,并导入租户、管理组、子公司/业务部门、环境、存储账户、区域、层级、SKU、访问/网络态势和项目治理标签。
在关联的存储账户上显示小型 Databricks、Fabric Lakehouse、SAP、Azure Data Factory、SFTP 和 Application Insights 徽章。合成资产确定性地随机化这些关系;发现会读取原生
isSftpEnabled/isHnsEnabled属性以及ApplicationInsights/AppInsights标签别名。确定性容量、成本、风险、Databricks、预测、异常、层级节省、证据、置信度和新鲜度调查。
风险集中度列表涵盖增长、成本、新鲜度、运营、Databricks、配置、安全和治理类别,采用平静的低饱和度调色板。安全明确地对 SAS/共享密钥、公共访问、缺少私有端点、NSG/ASG 链接和缺少服务主体访问进行评分。治理使用项目、业务部门、最后访问和废弃标签。环形饼图总结了主导风险分布,而每个得分至少为 20 的范围内账户仍保留在排名、可垂直滚动的列表中。悬停饼图扇区会显示风险描述、账户数量和百分比;键盘焦点显示最大的扇区。
可操作的数据健康态势磁贴: 过期账户、缺少生命周期、SAS 密钥、公共访问、无私有端点、无服务主体、无 GRS/GZRS、NSG/ASG 已链接和废弃项目以及SFTP 已启用和AppInsights 数据均为按钮。选择其中一个会立即将活动范围内的每个匹配账户加载到数据健康页面上磁贴正下方的按风险排序、可垂直滚动的面板中。概览仍专注于资产容量、成本、节省、风险集中度和引导。原先独立的过期账户详细信息面板已移除,因为过期账户现在使用此通用下钻。
优先级发现解释了增长和运营组件得分。运营是 0–100 的节流/延迟子得分;右侧值是总体加权账户风险得分(满分 100)。
手动和电子表格引导绝不会创建或更改 Azure 存储资源。
Container Apps Web 工作负载使用一个始终就绪的 Consumption 副本,配备 1 个 vCPU 和 2 GiB 内存。这使 A2A 任务查找和取消与 SDK 的进程本地任务处理程序保持一致。入口目标端口为 8000,与 Uvicorn 和 Dockerfile 匹配,探针允许 10 秒的瞬时负载。私有 Function 部署和 Foundry 冒烟测试有意与 Web 启动解耦,以便公共受 Entra 保护的 UI 不会被私有依赖阻塞。应用程序版本 0.1.0 保持不变。
功能视图
代理调查 运行范围内的确定性工具,显示完整的信任边界和结构化结果,解释每个返回账户被标记的原因,保持证据引用与所有唯一返回账户对齐,提供广泛可重用的运营/财务/平台问题目录,保存新的经过身份验证的问题以供未来会话使用,并在会话中保留最近八次调查。
节省模拟器 模拟 1-100% 的层级采用,比较 10/25/50% 的基线,对前 20 个候选进行排名,并保留检索/保留注意事项。
发现 将风险、稳健增长异常、数据新鲜度和节省操作合并为按严重性排序的收件箱。总发现、数据新鲜度、增长异常、风险和节省操作是可点击的摘要磁贴;选择其中一个会立即过滤下方的可滚动结果面板。原先重复的筛选按钮行已移除。
数据健康 显示新鲜度覆盖、连接器/源状态、生命周期和假定层级差距,以及可滚动的过期账户修复列表。对于管理员,可见的已禁用状态是一个按钮:单击它会启用该连接器,将状态更改为已启用,并显示可点击的运行操作。完成的试点夹具运行会将状态更改为健康,并显示同步/符合条件的计数和上次运行时间。安全态势卡片暴露 SAS/共享密钥、公共访问、缺少私有端点、缺少服务主体访问、非 GRS/GZRS 复制、NSG/ASG 链接、废弃项目、缺少最后访问标签、SFTP 启用端点和 Application Insights 关联存储。
数据健康将合成试点、Azure CLI 发现、Azure Resource Graph、Blob 清单、Azure Monitor 指标、成本管理导出和Databricks 系统表紧跟在全局筛选器/重置行之后。
租户级管理员发现
管理员在左侧导航中看到专用的管理项。其拉取租户级存储账户详细信息操作使用 Azure CLI 参数数组(绝不是 shell 命令字符串)来枚举经过身份验证的身份可见的每个已启用订阅,并为每个订阅运行 az storage account list。结果以幂等方式摄取到试点清单中,并 upsert 到私有 Cosmos DB storage-intelligence/storage-accounts 容器中。
使用以下配置运行时:
变量 | 用途 | 默认值 |
| 管理端点所需的 Entra 应用角色 |
|
| 可选的逗号分隔租户 ID;为空表示 CLI 账户缓存中可见的每个租户 | 空 |
| 使用 |
|
| 初始五字段发现计划 |
|
| 持久化的管理员计划配置 |
|
| 计划的 CLI 快照路径 |
|
| Azure CLI 可执行文件 |
|
| 将手动和计划发现结果持久化到 Cosmos DB | 本地为 |
| 私有 Cosmos DB 账户端点 | 启用持久化时必需 |
| 清单数据库名称 |
|
| 存储账户容器名称 |
|
| 当 Cosmos 禁用时的原子本地主机问题库文件 |
|
托管身份或自动化主体必须在每个目标订阅/租户中被授予只读访问权限。本项目有意不分配租户级 Reader 角色。跨租户发现仅在身份在每个租户中被明确授权后才有效。
直接运行发现:
.\scripts\run-storage-discovery.ps1管理员可以直接在仪表板中编辑五字段 cron 表达式。计划使用 croniter 验证,原子持久化,并在重启后由进程内调度器使用。下次执行时间和常见 UTC cron 示例显示在角色门控的管理视图中。预配会创建 StorageIntelligence.Admin Entra 应用角色并将其分配给部署用户。每次完成的拉取都会报告 Cosmos DB upsert 的数量。Cosmos 使用 Web 应用的托管身份、数据库范围的內建数据贡献者分配、/subscription_id 分区,并且不使用账户密钥。
对于外部自动化主机,请安装提供的六小时回退 cron:
crontab config/storage-discovery.cron外部计划任务会写入一份原子 JSON 快照。应用内调度器会将相同的账户详细信息更新到 Cosmos DB。两条路径都不会请求存储密钥,也不会变更资产资源。
Discovery 可识别 Databricks、Fabric Lakehouse、SAP、Azure Data Factory 和 Application Insights 的标签别名,以及原生 SFTP/HNS 状态。
它还会读取 Project/ProjectName、BusinessUnit、LastAccessedDate、ProjectStatus/ProjectDefunct、UsesSASKeys、ServicePrincipalAccess、NetworkSecurityGroup/NSG 和 ApplicationSecurityGroup/ASG。Azure 资源属性提供共享密钥访问、公共网络/Blob 访问、专用终结点状态和复制 SKU。关联账户显示在专用仪表板分区中,并带有紧凑的无障碍徽章。
导航页脚显示 © 2026 PepsiCo. All rights reserved.,后跟微小的无障碍 Microsoft、Azure 以及所提供的 Azure AI Foundry 图片标记。Foundry PNG 已提交到 src/web/static/assets 下,并带有 SHA-256 清单。
电子表格格式
上传包含标题行和以下列的 .xlsx 工作簿或 UTF-8 .csv 文件:
列 | 示例 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
导入器每个文件最多接受 10,000 行或 5 MB。友好的标题别名(如 storage_account_name、tenant、managementgroup、subscription_name、environment/stage/env、Business unit、azure_region 和 access_tier)会自动规范化。
business_unit 是 subsidiary 的兼容别名。每个层级值都必须存在于试点目录中;已知的合成订阅会根据其租户、管理组、环境和子公司进行验证。区域可以使用完整 Azure 公共区域选择器中的任何代码;层级必须使用可用的访问层级。
带版本号的合成目录恰好包含 339 个订阅。每个订阅都有确定性的 UUID、租户、管理组、子公司,以及 Dev、QA、Perf 或 Prod 之一。全部 339 个名称都出现在全局订阅选择器中。
调查问题库
GET /api/questions 返回内置和已保存的问题目录。
POST /api/questions 接受新的 3-500 字符问题,规范化空白字符,拒绝不区分大小写的重复项,并将共享库上限设为 100 个自定义问题。Azure 将自定义问题存储为现有私有 Cosmos 容器中 __agent_questions__ 分区下的 saved-agent-question 文档。本地主机使用上述原子 JSON 路径。保存问题不会执行它,也不会变更 Azure 资源。
本地运行
需要 Python 3.13。不使用 Node.js 和 npm。
python -m venv .venv
.\.venv\Scripts\python -m pip install -e ".[test]"
$env:AUTH_DISABLED = "true"
.\.venv\Scripts\python -m uvicorn web.app:app --host 127.0.0.1 --port 8000打开 http://127.0.0.1:8000。运行验收测试:
.\.venv\Scripts\python -m pytest语言偏好存储在浏览器 localStorage 的 storage-intelligence-language 键下。英语(en)为默认语言;西班牙语(es)会更新文档语言和标题。内置西班牙语问题在 API 提交前会被规范化回其英语确定性意图,而后端也会识别新编写问题的常见西班牙语意图短语。
架构
src/storage_intelligence:合成生成器、连接器、分析、查询路由器。src/protocols/service.py:协议无关的只读代理门面。src/protocols/mcp_server.py:MCP 工具、资源、提示、HTTP 挂载和 stdio 入口点。src/protocols/a2a_server.py:A2A Agent Card、JSON-RPC/REST 路由、任务执行器和工件。src/protocols/README.md:与代码相邻的 MCP/A2A 终结点、身份验证和使用参考。src/web:FastAPI 和内置的 React 18.3.1 浏览器 UI。src/function_app.py:私有 OpenAPI 工具和持久化扇出/扇入收集。src/agent:Foundry 指令、OpenAPI 契约、部署/调用脚本和评估。infra/foundry:官方模板 19 基线和未修改的支持模块。infra/functions-base:保留的官方 Flex Consumption 基础模块。infra:组合的工作负载 Bicep 和 AZD 参数。
Azure 工作流
已批准的 .azure/deployment-plan.md 是事实来源。部署使用:
azd env new storage-intel-pilot
azd env set AZURE_LOCATION swedencentral
azd env set AZURE_SUBSCRIPTION_ID c82406dd-f84c-42df-9586-c6f02abda6df
azd provision --preview --no-prompt
azd provision --no-prompt
azd deploy --no-prompt部署脚本会创建或复用无密钥的 Entra 应用程序注册,为 Container Apps Easy Auth 启用 ID 令牌签发,部署 Web 镜像和 Functions 包,然后创建 Foundry 提示代理版本。Easy Auth 同时接受应用程序客户端 ID 及其 api:// 标识符 URI 作为令牌受众。
除非配置了显式标志和最低权限角色,否则生产连接器保持禁用状态。
成本注意事项
私有 Foundry Standard 需要固定成本的 AI Search Standard 和 Premium ACR。Cosmos DB、监控引入、模型令牌、专用终结点和 Container Apps 会增加基于使用量的成本。试点通过使用合成数据避免资产 API 和 Databricks 查询费用。
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP server for AWS cloud spend: service breakdowns, anomalies, savings and forecasts.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Read-only MCP server for AIStatusDashboard status, incidents, metrics, and fallback recommendations.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes core Azure services as read-mostly tools any MCP client can call, including Blob Storage, Key Vault, Service Bus, and Resource Manager.1MIT
- AlicenseAqualityDmaintenanceEnables natural-language queries about Azure resource compliance, including VM compliance, patch status, orphaned RBAC, and infrastructure health, through read-only MCP tools.3MIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server for exploring on-premises, multi-instance Microsoft SQL Server estates from AI clients, with read-only enforcement and Windows authentication support.Apache 2.0
- FlicenseNot gradedqualityCmaintenanceA read-only MCP server for inspecting AWS resources, detecting misconfigurations, and estimating costs across EC2, S3, and IAM, enabling agents to safely query and analyze cloud infrastructure.-