一个基于Python的MCP(模型上下文协议)服务器,用于与Microsoft Fabric API交互,具有高级PySpark笔记本开发、测试和优化功能,并集成了大型语言模型(LLM)。
graph TB
subgraph "开发者环境"
IDE[IDE/VSCode]
DEV[开发者]
PROJ[项目文件]
end
subgraph "AI层"
LLM[大型语言模型<br/>Claude/GPT等]
CONTEXT[对话上下文]
REASONING[AI推理引擎]
end
subgraph "MCP层"
MCP[MCP服务器]
TOOLS[PySpark工具]
HELPERS[PySpark助手]
TEMPLATES[模板管理器]
VALIDATORS[代码验证器]
GENERATORS[代码生成器]
end
subgraph "Microsoft Fabric"
API[Fabric API]
WS[工作区]
LH[湖库]
NB[笔记本]
TABLES[Delta表]
SPARK[Spark集群]
end
subgraph "操作流程"
CREATE[创建笔记本]
VALIDATE[验证代码]
GENERATE[生成代码]
ANALYZE[分析性能]
DEPLOY[部署到Fabric]
end
%% 开发者交互
DEV --> IDE
IDE --> PROJ
%% LLM交互
IDE <--> LLM
LLM <--> CONTEXT
LLM --> REASONING
%% MCP交互
LLM <--> MCP
MCP --> TOOLS
TOOLS --> HELPERS
TOOLS --> TEMPLATES
TOOLS --> VALIDATORS
TOOLS --> GENERATORS
%% Fabric交互
MCP <--> API
API --> WS
WS --> LH
WS --> NB
LH --> TABLES
NB --> SPARK
%% 操作流程
TOOLS --> CREATE
TOOLS --> VALIDATE
TOOLS --> GENERATE
TOOLS --> ANALYZE
CREATE --> DEPLOY
%% 数据流箭头
REASONING -.->|"智能决策"| TOOLS
CONTEXT -.->|"项目意识"| VALIDATORS
%% 样式
classDef devEnv fill:#e1f5fe
classDef aiLayer fill:#fff9c4
classDef mcpLayer fill:#f3e5f5
classDef fabricLayer fill:#e8f5e8
classDef operations fill:#fff3e0
class IDE,DEV,PROJ devEnv
class LLM,CONTEXT,REASONING aiLayer
class MCP,TOOLS,HELPERS,TEMPLATES,VALIDATORS,GENERATORS mcpLayer
class API,WS,LH,NB,TABLES,SPARK fabricLayer
class CREATE,VALIDATE,GENERATE,ANALYZE,DEPLOY operations
克隆仓库:
git clone https://github.com/your-repo/fabric-mcp.git
cd fabric-mcp
设置虚拟环境:
uv sync
安装依赖项:
pip install -r requirements.txt
az login --scope https://api.fabric.microsoft.com/.default
uv run --with mcp mcp dev fabric_mcp.py
这将在http://localhost:6274启动服务器并附带检查器。
添加到你的launch.json:
{
"mcp": {
"servers": {
"ms-fabric-mcp": {
"type": "stdio",
"command": "<项目文件夹完整路径>\\.venv\\Scripts\\python.exe",
"args": ["<项目文件夹完整路径>\\fabric_mcp.py"]
}
}
}
}
uv run python .\fabric_mcp.py --port 8081
添加到你的launch.json:
{
"mcp": {
"servers": {
"ms-fabric-mcp": {
"type": "http",
"url": "http://<localhost或远程IP>:8081/mcp/",
"headers": {
"Accept": "application/json,text/event-stream",
}
}
}
}
}
list_workspaces列出所有可用的Fabric工作区。
# 在LLM中的使用:"列出我的所有Fabric工作区"
set_workspace设置当前会话的工作区上下文。
set_workspace(workspace="Analytics-Workspace")
list_lakehouses列出工作区中的所有湖库。
list_lakehouses(workspace="Analytics-Workspace")
create_lakehouse创建新的湖库。
create_lakehouse(
name="Sales-Data-Lake",
workspace="Analytics-Workspace",
description="销售数据湖库"
)
set_lakehouse设置当前湖库上下文。
set_lakehouse(lakehouse="Sales-Data-Lake")
list_warehouses列出工作区中的所有仓库。
list_warehouses(workspace="Analytics-Workspace")
create_warehouse创建新的仓库。
create__warehouse(
name="Sales-DW",
workspace="Analytics-Workspace",
description="销售数据仓库"
)
set_warehouse设置当前仓库上下文。
set_warehouse(warehouse="Sales-DW")
list_tables列出湖库中的所有表。
list_tables(workspace="Analytics-Workspace", lakehouse="Sales-Data-Lake")
get_lakehouse_table_schema获取特定表的模式。
get_lakehouse_table_schema(
workspace="Analytics-Workspace",
lakehouse="Sales-Data-Lake",
table_name="transactions"
)
get_all_lakehouse_schemas获取湖库中所有表的模式。
get_all_lakehouse_schemas(
workspace="Analytics-Workspace",
lakehouse="Sales-Data-Lake"
)
set_table设置当前表上下文。
set_table(table_name="transactions")
get_sql_endpoint获取湖库或仓库的SQL端点。
get_sql_endpoint(
workspace="Analytics-Workspace",
lakehouse="Sales-Data-Lake",
type="lakehouse"
)
run_query执行SQL查询。
run_query(
workspace="Analytics-Workspace",
lakehouse="Sales-Data-Lake",
query="SELECT COUNT(*) FROM transactions",
type="lakehouse"
)
load_data_from_url从URL加载数据到表中。
load_data_from_url(
url="https://example.com/data.csv",
destination_table="new_data",
workspace="Analytics-Workspace",
lakehouse="Sales-Data-Lake"
)
list_reports列出工作区中的所有报告。
list_reports(workspace="Analytics-Workspace")
get_report获取特定报告的详细信息。
get_report(workspace="Analytics-Workspace", report_id="report-id")
list_semantic_models列出工作区中的语义模型。
list_semantic_models(workspace="Analytics-Workspace")
get_semantic_model获取特定语义模型。
get_semantic_model(workspace="Analytics-Workspace", model_id="model-id")
list_notebooks列出工作区中的所有笔记本。
list_notebooks(workspace="Analytics-Workspace")
get_notebook_content获取笔记本内容。
get_notebook_content(
workspace="Analytics-Workspace",
notebook_id="notebook-id"
)
update_notebook_cell更新特定笔记本单元格。
update_notebook_cell(
workspace="Analytics-Workspace",
notebook_id="notebook-id",
cell_index=0,
cell_content="print('Hello, Fabric!')",
cell_type="code"
)
create_pyspark_notebook从基本模板创建笔记本。
create_pyspark_notebook(
workspace="Analytics-Workspace",
notebook_name="Data-Analysis",
template_type="analytics" # 选项:basic, etl, analytics, ml
)
create_fabric_notebook创建优化过的Fabric笔记本。
create_fabric_notebook(
workspace="Analytics-Workspace",
notebook_name="Fabric-Pipeline",
template_type="fabric_integration" # 选项:fabric_integration, streaming
)
generate_pyspark_code为常见操作生成代码。
generate_pyspark_code(
operation="read_table",
source_table="sales.transactions",
columns="id,amount,date"
)
# 可用操作:
# - read_table, write_table, transform, join, aggregate
# - schema_inference, data_quality, performance_optimization
generate_fabric_code生成特定于Fabric的代码。
generate_fabric_code(
operation="read_lakehouse",
lakehouse_name="Sales-Data-Lake",
table_name="transactions"
)
# 可用操作:
# - read_lakehouse, write_lakehouse, merge_delta, performance_monitor
validate_pyspark_code验证PySpark代码的语法和最佳实践。
validate_pyspark_code(code="""
df = spark.table('transactions')
df.show()
""")
validate_fabric_code验证Fabric兼容性。
validate_fabric_code(code="""
df = spark.table('lakehouse.transactions')
df.write.format('delta').saveAsTable('summary')
""")
analyze_notebook_performance全面性能分析。
analyze_notebook_performance(
workspace="Analytics-Workspace",
notebook_id="notebook-id"
)
clear_context清除当前会话上下文。
clear_context()
# ✅ 使用托管表
df = spark.table("lakehouse.my_table")
# ✅ 使用Delta Lake格式
df.write.format("delta").mode("overwrite").saveAsTable("my_table")
# ✅ 利用notebookutils
import notebookutils as nbu
workspace_id = nbu.runtime.context.workspaceId
# ✅ 缓存频繁使用的DataFrame
df.cache()
# ✅ 对小表使用广播
from pyspark.sql.functions import broadcast
result = large_df.join(broadcast(small_df), "key")
# ✅ 分区大数据集
df.write.partitionBy("year", "month").saveAsTable("partitioned_table")
# ✅ 定义明确的模式
schema = StructType([
StructField("id", IntegerType(), True),
StructField("name", StringType(), True)
])
# ✅ 处理空值
df.filter(col("column").isNotNull())
Human: "创建一个PySpark笔记本,读取销售数据,清理它,并优化性能"
LLM Response:
1. 创建优化过的Fabric笔记本,使用ETL模板
2. 生成读取湖库的代码
3. 添加数据清洗转换
4. 包括性能优化模式
5. 验证代码的最佳实践
Human: "我的PySpark笔记本很慢。帮我优化它。"
LLM Response:
1. 分析笔记本性能(评分0-100)
2. 识别反模式和瓶颈
3. 提供具体的优化建议
4. 生成优化代码替代方案
5. 提供前后比较
az login使用正确的范围clear_context()重置会话状态分析工具提供:
欢迎贡献!请参阅我们的贡献指南了解详情。
该项目采用MIT许可。详见LICENSE文件。
灵感来源:https://github.com/Augustab/microsoft_fabric_mcp/tree/main
准备好使用智能PySpark辅助来加速您的Microsoft Fabric开发! 🚀