使用说明
结构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):工作区的IDlakehouse_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):工作区的IDlakehouse_id(str):湖畔小屋的IDtable_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):工作区的IDlakehouse_id(str):湖畔小屋的IDtable_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):工作区的IDlakehouse_id(str):湖畔小屋的IDquery(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扩展,建议使用)
- 这
mcp.json此目录中的文件已配置 - 如果您安装了VS Code MCP扩展,您应该在文件中看到“运行”按钮
- 点击“运行”启动服务器
- 服务器将自动与GitHub Copilot集成
方法2:手动VS代码设置配置
-
打开VS代码设置(JSON):
- 按
Ctrl+Shift+P(Windows)或Cmd+Shift+P(Mac) - 键入“首选项:打开用户设置(JSON)”
- 按Enter键
- 按
-
添加此配置:
{
"github.copilot.chat.mcp.enabled": true,
"github.copilot.chat.mcp.servers": {
"fabric": {
"command": "python",
"args": ["main.py"],
"cwd": "${workspaceFolder}"
}
}
}
- 重新加载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许可证获得许可-请参阅 许可证 文件以获取详细信息。
