返回市场
dax-格式化-MCP

dax-格式化-MCP

作者:EmanueleMeazzo33 星标更新:2025-05-23

项目介绍

DAX 格式化器 MCP 服务器

一个提供 DAX(数据分析表达式)格式化功能的模型上下文协议(MCP)服务器,用于 AI 助手和其他 MCP 客户端。此服务器集成了 SQLBI 的官方 DAX 格式化器 服务,以提供专业级别的 DAX 代码格式化。

.NET License MCP

🚀 功能

  • 单个 DAX 表达式格式化:按照专业标准格式化单个 DAX 表达式
  • 批量处理:在一次高效请求中格式化多个 DAX 表达式
  • 全面的格式化选项:控制行长度、间距、分隔符等
  • 错误处理:强大的错误处理机制,提供详细的错误信息
  • 回退机制:如果批量处理失败,自动回退到单独格式化
  • 数据库上下文:支持数据库和服务器上下文(为了隐私进行匿名化)

📋 前提条件

  • .NET 8.0 运行时 或更高版本
  • 互联网连接(与 daxformatter.com 通信)
  • MCP 兼容客户端(Claude Desktop、Continue 或自定义 MCP 客户端)

🛠️ 安装

选项 1:下载发行版(推荐)

  1. 发行版 页面下载最新版本
  2. 将压缩包解压到您选择的位置
  3. 记下可执行文件的路径以进行配置

选项 2:从源代码构建

# 克隆仓库
git clone https://github.com/EmanueleMeazzo/dax-formatter-mcp.git
cd dax-formatter-mcp

# 构建项目
dotnet build --configuration Release

# 可执行文件将在 bin/Release/net8.0/ 目录下

⚙️ 配置

Claude Desktop

将以下内容添加到您的 Claude Desktop 配置文件中:

Windows%APPDATA%\Claude\claude_desktop_config.json
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Linux~/.config/claude/claude_desktop_config.json

{
  "mcpServers": {
    "dax-formatter": {
      "command": "path/to/dax-formatter-mcp.exe",
      "args": []
    }
  }
}

Continue IDE 扩展

将以下内容添加到您的 Continue 配置中:

{
  "mcpServers": [
    {
      "name": "dax-formatter",
      "command": "path/to/dax-formatter-mcp.exe",
      "args": []
    }
  ]
}

通用 MCP 客户端

对于支持 MCP 2024-11-05 协议的任何 MCP 客户端:

{
  "servers": [
    {
      "name": "dax-formatter",
      "transport": {
        "type": "stdio",
        "command": "path/to/dax-formatter-mcp.exe",
        "args": []
      }
    }
  ]
}

使用 .NET 运行时

如果您希望使用 DLL 和 .NET 运行时:

{
  "mcpServers": {
    "dax-formatter": {
      "command": "dotnet",
      "args": ["path/to/dax-formatter-mcp.dll"]
    }
  }
}

📖 使用方法

配置完成后,您可以通过您的 MCP 客户端使用 DAX 格式化器:

基本用法

格式化此 DAX 表达式:
CALCULATE(SUM(Sales[Amount]),FILTER(Products,Products[Category]="Electronics"))

多个表达式

格式化这些 DAX 度量值:
1. [Total Sales] := SUM(Sales[Amount])
2. [Electronics Sales] := CALCULATE(SUM(Sales[Amount]),Products[Category]="Electronics")
3. [Sales YTD] := TOTALYTD(SUM(Sales[Amount]),'Calendar'[Date])

带格式化选项

使用短行和特定分隔符格式化此 DAX:
CALCULATE(SUM(Sales[Amount]),FILTER(Products,Products[Category]="Electronics"))

选项:
- 行长度:ShortLine
- 列表分隔符:;
- 小数分隔符:,

🔧 可用工具

format_dax

格式化单个 DAX 表达式。

参数:

  • dax(必需):要格式化的 DAX 表达式
  • options(可选):格式化选项对象

示例:

{
  "dax": "CALCULATE(SUM(Sales[Amount]),FILTER(Products,Products[Category]=\"Electronics\"))",
  "options": {
    "maxLineLength": "LongLine",
    "skipSpaceAfterFunctionName": "BestPractice"
  }
}

format_dax_multiple

在一次请求中格式化多个 DAX 表达式。

参数:

  • expressions(必需):要格式化的 DAX 表达式数组
  • options(可选):格式化选项对象

示例:

{
  "expressions": [
    "CALCULATE(SUM(Sales[Amount]),FILTER(Products,Products[Category]=\"Electronics\"))",
    "[Total Sales] := SUM(Sales[Amount])"
  ],
  "options": {
    "maxLineLength": "LongLine",
    "databaseName": "SalesDB",
    "serverName": "ProductionServer"
  }
}

🎛️ 格式化选项

所有格式化选项都是可选的,并且有合理的默认值:

选项默认值描述
maxLineLengthShortLine, LongLine, VeryLongLineLongLine格式化代码的最大行长度
skipSpaceAfterFunctionNameBestPractice, FalseBestPractice函数名称后的空格
listSeparator任意字符,列表分隔符
decimalSeparator任意字符.小数分隔符
databaseName字符串-数据库名称(匿名化)
serverName字符串-服务器名称(匿名化)

📝 示例 DAX 表达式

以下是一些您可以测试的示例 DAX 表达式:

基本度量值

[Total Sales] := SUM(Sales[Amount])

复杂计算

CALCULATE(SUM(Sales[Amount]),FILTER(ALL(Products),Products[Category]="Electronics"),USERELATIONSHIP(Sales[OrderDate],'Calendar'[Date]))

时间智能

[Sales YTD] := TOTALYTD(SUM(Sales[Amount]),'Calendar'[Date])

表达式

EVALUATE FILTER(Customer, Customer[Country] = "USA")

🔍 故障排除

常见问题

服务器无法启动:

  • 确保已安装 .NET 8.0 运行时
  • 检查配置中的可执行文件路径是否正确
  • 确认您有互联网连接(DAX 格式化器服务需要)

格式化请求失败:

  • 检查您的互联网连接
  • 验证 DAX 语法是否正确
  • 尝试先使用更简单的表达式

MCP 客户端不识别服务器:

  • 在添加配置后重启您的 MCP 客户端
  • 检查 JSON 配置语法
  • 确认可执行文件路径是绝对路径且正确

调试模式

要启用调试日志,您可以手动运行服务器以查看详细日志:

# 直接运行服务器以查看调试输出
./dax-formatter-mcp.exe

然后手动发送 JSON-RPC 消息以测试功能。

🏗️ 架构

MCP 服务器构建于:

  • .NET 9.0:现代、跨平台运行时
  • DAX 格式化器客户端:来自 SQLBI 的官方 NuGet 包
  • JSON-RPC 2.0:MCP 通信的标准协议
  • Async/Await:非阻塞 I/O 以提高性能

流程图

MCP 客户端 → JSON-RPC → DAX 格式化器 MCP 服务器 → DAX 格式化器 API → 格式化后的 DAX

🤝 贡献

欢迎贡献!请遵循以下步骤:

  1. 叉仓库
  2. 创建功能分支(git checkout -b feature/amazing-feature
  3. 进行更改
  4. 添加测试(如适用)
  5. 提交更改(git commit -m 'Add amazing feature'
  6. 推送到分支(git push origin feature/amazing-feature
  7. 开启 Pull Request

开发设置

# 克隆仓库
git clone https://github.com/EmanueleMeazzo/dax-formatter-mcp.git
cd dax-formatter-mcp

# 恢复依赖
dotnet restore

# 构建项目
dotnet build

# 运行测试
dotnet test

🔒 隐私与安全

  • 所有的 DAX 表达式都会发送到官方 DAX 格式化器服务 daxformatter.com
  • 数据库和服务器名称由 DAX 格式化器客户端匿名化
  • 不会在本地存储任何 DAX 表达式
  • 不会收集或传输任何个人身份信息

📜 许可证

本项目采用 MIT 许可证 - 详情请参阅 LICENSE 文件。

🙏 致谢

  • SQLBI 提供了优秀的 DAX 格式化器服务
  • Anthropic 提供了模型上下文协议规范
  • Microsoft 提供了 DAX 语言

📚 相关资源