Azure功能上的FabricOps远程MCP服务器
项目目标:通过托管在Azure Functions上的自定义远程MCP服务器,将Microsoft Fabric和Power BI操作暴露给AI代理。在中实施的工具 server.py 允许代理创建工作区、分析报告、执行DAX以及应用企业治理修复程序。
______________________________________________________________________
1.概述
- 远程MCP服务器:使用JSON RPC通过HTTPS传输模型上下文协议。AI主机内的MCP客户端(如VS Code中的GitHub Copilot或Azure AI Foundry代理服务)连接并调用您在中定义的工具
server.py. - 托管在Azure Functions上:MCP服务器在Azure Functions应用程序内运行。应用程序公开端点
/runtime/webhooks/mcp对于可流式传输的http或/runtime/webhooks/mcp/sse对于SSE。身份验证是通过使用Microsoft Entra ID的内置Azure Functions身份验证来处理的。 - 目标结构和Power BI:工具调用结构和Power BIREST API,用于工作区生命周期、项目元数据、语义模型发现和DAX执行。
2.数据架构概述
- MCP主机到功能应用程序MCP端点:HTTPS MCP JSON RPC。端点
/runtime/webhooks/mcp或/runtime/webhooks/mcp/sse身份验证入口ID或系统密钥。 - 功能应用程序MCP服务器到结构和Power BI:HTTPS REST OAuth承载。方法GET POST PUT PATCH DELETE。代表或服务负责人使用。
- Infra:Flex计划中具有专用端点和ExpressRoute集成的存储帐户。带有托管身份的密钥保管库。
3. server.py MCP工具和连接模型
server.py 是MCP服务器实现。它使用类型化的输入和输出模式注册工具,处理来自客户端的工具调用,并使用OAuth令牌调用Fabric和Power BI REST端点。它在Azure Functions下运行,因此MCP客户端可以在应用程序MCP端点访问它。
典型流程:
- MCP客户端连接到Function App MCP端点。
- 客户端列出工具并选择一个。
- 客户端调用带有参数的工具。
server.py对Fabric或Power BI执行REST调用,并返回结构化的JSON结果。
4.工具到API映射示例
| MCP工具 | 方法 | 示例端点 | 目的 |
|---|---|---|---|
| 创建工作区 | POST | /v1/workspaces | 为工作区提供元数据和权限 |
| 分析报告 | 获取 | /v1/items/{reportId} | 检索报表元数据和数据集绑定 |
| ExecuteDAX | POST | /v1/datasets/{datasetId}/executeQueries | 对语义模型运行DAX |
| FixReport | 补丁或PUT | /v1/items/{reportId} | 更新报告属性或绑定更正 |
5.代理如何连接
VS代码中的GitHub副本
添加指向Function App MCP端点的远程MCP服务器配置。
{
"servers": {
"fabricops-remote": {
"type": "http",
"url": "https:///runtime/webhooks/mcp",
"headers": { "Authorization": "Bearer ${input:entra_token}" }
}
},
"inputs": [
{ "type": "promptString", "id": "entra_token", "description": "Microsoft Entra access token", "password": true }
]
}Copilot内的MCP客户端通过HTTPS连接,并发现由 server.py.
Azure AI Foundry代理服务
将远程MCP端点注册为代理的工具。如果需要,您可以传递用于身份验证的标头,并使用API中心对工具进行编目。
6.安全和联网
- 内置身份验证:使用带有Entra ID的Azure Functions身份验证进行MCP端点质询和授权。
- Flex Consumption with Direct3D:启用ExpressRoute集成,以便Function应用程序可以使用专用端点访问存储帐户。将比例保持为零。
- 存储帐户:函数需要运行时状态、触发器和内容。锁定公共访问并使用专用终结点。
- 密钥保管库:使用托管身份检索机密,如服务主体凭据。密钥库不在MCP主机和服务器之间的数据路径中。
7.地方发展和部署
- 本地运行:使用Azure功能核心工具
func start.测试/runtime/webhooks/mcp或/runtime/webhooks/mcp/sse这取决于你的交通工具。 - 部署:使用Azure Developer CLI
azd up使用基础架构模板来配置Flex计划、存储专用端点、密钥库和应用程序设置。
8.存储库结构
fabric-custom-remote-mcp/
├─ server.py MCP tools for workspace operations, report analysis, DAX, and fixes
├─ requirements.txt Python dependencies for MCP, Azure auth, and REST clients
├─ host.json Functions configuration for the MCP endpoint and handler
├─ infra/ Infrastructure as code for Functions, Storage Private Endpoint, Key Vault, and networking9.代理提示示例
- 创建一个名为SalesOps的Fabric工作区并列出其项目。
- 对顶级产品的数据集Contoso Sales运行DAX查询。
- 分析ExecutionSummary报告,并对损坏的视觉效果提出修复建议。
10.参考文献
- 模型上下文协议架构和客户端-服务器消息传递
https://learn.microsoft.com/dotnet/ai/get-started-mcp
- 用于远程MCP服务器和端点的Azure Functions托管
https://learn.microsoft.com/azure/azure-functions/functions-mcp-tutorial
- 通过代理执行Power BI远程MCP服务器和DAX
https://learn.microsoft.com/power-bi/developer/mcp/remote-mcp-server-get-started
- API管理和API MCP管理和编目中心
https://learn.microsoft.com/azure/api-management/mcp-server-overview
- Flex消费计划,功能集成
https://learn.microsoft.com/azure/azure-functions/flex-consumption-plan
- 功能专用端点的安全存储帐户
https://learn.microsoft.com/azure/azure-functions/configure-networking-how-to
