Fabric MCP服务器

一个基于Python的模型上下文协议(MCP)服务器,用于通过GitHub Copilot在VS Code中与Microsoft Fabric API交互。

  • by aturlov-alta
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 aturlov-alta/fabric-mcp

使用说明

结构MCP服务器

基于Python的模型上下文协议(MCP)服务器,用于通过VS Code中的GitHub Copilot与Microsoft Fabric API进行交互。

概述

此MCP服务器公开了允许GitHub Copilot执行以下操作的工具:

  • 列出Microsoft Fabric工作区
  • 列出工作区中的湖畔小屋
  • (可以为管道、GraphQL查询等添加更多工具。)

先决条件

  • Python 3.12+
  • Conda(推荐)或Python虚拟环境
  • SQL Server的ODBC驱动程序17(或18)
  • VS代码中的GitHub副本
  • (可选)用于服务主体身份验证的Microsoft Entra ID应用程序注册

设置

1.创建并激活conda环境

conda create -p ./env python=3.12 -y
conda activate ./env

2.安装依赖项

pip install fastmcp python-dotenv msal httpx pyodbc
pip freeze > requirements.txt

3.配置身份验证

服务器支持两种身份验证模式:

选项1:交互式身份验证(建议个人用户使用)

无需配置! 默认情况下,服务器使用设备代码流。

第一次运行时,您将在MCP服务器输出中看到一个提示:

  • 要访问的URL(https://microsoft.com/devicelogin)
  • 输入代码
  • 使用Microsoft帐户登录的说明

令牌缓存在 ~/.fabric_mcp_token_cache.json 并将自动刷新。

选项2:服务主体身份验证(用于自动化)

复制 .env.example 到 .env 并配置服务主体凭据:

cp .env.example .env

编辑 .env:

FABRIC_CLIENT_ID=your_client_id_here
FABRIC_CLIENT_SECRET=your_client_secret_here
FABRIC_TENANT_ID=your_tenant_id_here

……的出席 FABRIC_CLIENT_SECRET 触发服务主体身份验证。

4.运行MCP服务器

对于stdio传输(建议用于VS Code):

python main.py

对于交互式模式的开发/测试:

fastmcp dev main:mcp

或者简单地说:

python main.py

可用工具

list_workspaces()

列出经过身份验证的用户可访问的所有Microsoft Fabric工作区。

退货:

{
  "workspaces": [
    {"id": "workspace-id", "name": "Workspace Name"}
  ]
}

list_lakehouses(workspace_id: str)

列出特定工作区中的所有湖畔小屋。

参数:

  • workspace_id (str):工作区的ID

退货:

{
  "lakehouses": [
    {"id": "lakehouse-id", "name": "Lakehouse Name"}
  ]
}

get_lakehouse_tables(workspace_id: str, lakehouse_id: str)

把所有的桌子都搬到湖边小屋。使用基于SQL的发现,可以与启用模式和无模式的湖屋配合使用。

参数:

  • workspace_id (str):工作区的ID
  • lakehouse_id (str):湖畔小屋的ID

退货:

{
  "tables": [
    {
      "schema": "bronze",
      "name": "Customer",
      "type": "BASE TABLE",
      "full_name": "bronze.Customer"
    }
  ]
}

get_table_schema(workspace_id: str, lakehouse_id: str, table_name: str)

获取表的详细架构信息,包括列定义。

参数:

  • workspace_id (str):工作区的ID
  • lakehouse_id (str):湖畔小屋的ID
  • table_name (str):表的名称

退货:

{
  "table_name": "Customer",
  "columns": [
    {
      "name": "CustomerID",
      "data_type": "int",
      "is_nullable": false,
      "position": 1
    }
  ]
}

get_table_sample_data(workspace_id: str, lakehouse_id: str, table_name: str, limit: int = 10)

从表中获取示例数据。

参数:

  • workspace_id (str):工作区的ID
  • lakehouse_id (str):湖畔小屋的ID
  • table_name (str):表的名称
  • limit (int):要返回的行数(默认值:10)

退货:

{
  "table_name": "Customer",
  "sample_rows": [{"CustomerID": 1, "Name": "John"}],
  "row_count": 10
}

execute_custom_sql_query(workspace_id: str, lakehouse_id: str, query: str)

对lakehouse执行自定义SQL查询。

参数:

  • workspace_id (str):工作区的ID
  • lakehouse_id (str):湖畔小屋的ID
  • query (str):要执行的SQL查询

退货:

{
  "query": "SELECT * FROM bronze.Customer",
  "success": true,
  "row_count": 100,
  "results": [{"CustomerID": 1, "Name": "John"}]
}

sign_out()

注销并清除缓存的身份验证令牌(仅限交互式身份验证)。

退货:

{
  "status": "success",
  "message": "Signed out successfully."
}

与GitHub Copilot集成

方法1:使用mcp.json(如果您有mcp扩展,建议使用)

  1. 这 mcp.json 此目录中的文件已配置
  2. 如果您安装了VS Code MCP扩展,您应该在文件中看到“运行”按钮
  3. 点击“运行”启动服务器
  4. 服务器将自动与GitHub Copilot集成

方法2:手动VS代码设置配置

  1. 打开VS代码设置(JSON):

    • 按 Ctrl+Shift+P (Windows)或 Cmd+Shift+P (Mac)
    • 键入“首选项:打开用户设置(JSON)”
    • 按Enter键
  2. 添加此配置:

{
  "github.copilot.chat.mcp.enabled": true,
  "github.copilot.chat.mcp.servers": {
    "fabric": {
      "command": "python",
      "args": ["main.py"],
      "cwd": "${workspaceFolder}"
    }
  }
}
  1. 重新加载VS代码:
    • 按 Ctrl+Shift+P
    • 键入“开发人员:重新加载窗口”
    • 按Enter键

测试集成

配置后,打开GitHub Copilot Chat并提出以下问题:

  • “列出我的所有Fabric工作区”
  • “显示XYZ工作区中的湖畔小屋”
  • “我可以访问哪些Microsoft Fabric资源?”

Copilot将自动使用您的MCP工具来回答这些问题。

发展

本地测试工具

您可以通过运行以下命令在本地测试MCP服务器:

python main.py

或者使用FastMCP CLI进行交互式测试:

fastmcp dev main:mcp

这将启动一个交互式会话,您可以在其中直接调用工具。

添加新工具

要添加新工具,请使用 @mcp.tool() 装饰师:

@mcp.tool()
async def my_new_tool(param: str) -> dict:
    """
    Tool description for Copilot.
    
    Args:
        param: Parameter description
    
    Returns:
        dict: Response data
    """
    # Implementation
    return {"result": "data"}

安全说明

  • 永不承诺 .env 文件到版本控制
  • 使用具有最低所需权限的服务主体身份验证
  • 定期轮换机密
  • 考虑将Azure密钥库用于生产部署

故障排除

令牌获取失败

  • 验证您的应用注册是否具有正确的API权限
  • 确保对应用程序权限授予管理员同意
  • 检查服务主体是否具有必要的结构角色

工具未出现在Copilot中

  • 验证MCP服务器是否在VS代码设置中正确配置
  • 检查VS Code输出面板是否存在与MCP相关的错误
  • 配置更改后重新启动VS代码

贡献

欢迎投稿!请看 贡献.md 作为指导方针。

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。