dax-formatter-mcp
If you are the rightful owner of dax-formatter-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The DAX Formatter MCP Server is a specialized server that provides DAX code formatting services to AI assistants and other MCP clients, leveraging the official DAX Formatter service by SQLBI.
DAX Formatter MCP Server
A Model Context Protocol (MCP) server that provides DAX (Data Analysis Expressions) formatting capabilities to AI assistants and other MCP clients. This server integrates with the official DAX Formatter service by SQLBI to deliver professional-grade DAX code formatting.
🚀 Features
- Single DAX Expression Formatting: Format individual DAX expressions with professional standards
- Batch Processing: Format multiple DAX expressions in a single efficient request
- Comprehensive Formatting Options: Control line length, spacing, separators, and more
- Error Handling: Robust error handling with detailed error messages
- Fallback Mechanisms: Automatic fallback to individual formatting if batch processing fails
- Database Context: Support for database and server context (anonymized for privacy)
📋 Prerequisites
- .NET 8.0 Runtime or higher
- Internet connection (communicates with daxformatter.com)
- MCP-compatible client (Claude Desktop, Continue, or custom MCP client)
🛠️ Installation
Option 1: Download Release (Recommended)
- Download the latest release from the Releases page
- Extract the archive to your preferred location
- Note the path to the executable for configuration
Option 2: Build from Source
# Clone the repository
git clone https://github.com/EmanueleMeazzo/dax-formatter-mcp.git
cd dax-formatter-mcp
# Build the project
dotnet build --configuration Release
# The executable will be in bin/Release/net8.0/
⚙️ Configuration
Claude Desktop
Add the following to your Claude Desktop configuration file:
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 Extension
Add to your Continue configuration:
{
"mcpServers": [
{
"name": "dax-formatter",
"command": "path/to/dax-formatter-mcp.exe",
"args": []
}
]
}
Generic MCP Client
For any MCP client supporting the MCP 2024-11-05 protocol:
{
"servers": [
{
"name": "dax-formatter",
"transport": {
"type": "stdio",
"command": "path/to/dax-formatter-mcp.exe",
"args": []
}
}
]
}
Using with .NET Runtime
If you prefer to use the DLL with the .NET runtime:
{
"mcpServers": {
"dax-formatter": {
"command": "dotnet",
"args": ["path/to/dax-formatter-mcp.dll"]
}
}
}
📖 Usage
Once configured, you can use the DAX formatter through your MCP client:
Basic Usage
Format this DAX expression:
CALCULATE(SUM(Sales[Amount]),FILTER(Products,Products[Category]="Electronics"))
Multiple Expressions
Format these DAX measures:
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])
With Formatting Options
Format this DAX with short lines and specific separators:
CALCULATE(SUM(Sales[Amount]),FILTER(Products,Products[Category]="Electronics"))
Options:
- Line length: ShortLine
- List separator: ;
- Decimal separator: ,
🔧 Available Tools
format_dax
Formats a single DAX expression.
Parameters:
dax
(required): The DAX expression to formatoptions
(optional): Formatting options object
Example:
{
"dax": "CALCULATE(SUM(Sales[Amount]),FILTER(Products,Products[Category]=\"Electronics\"))",
"options": {
"maxLineLength": "LongLine",
"skipSpaceAfterFunctionName": "BestPractice"
}
}
format_dax_multiple
Formats multiple DAX expressions in a single request.
Parameters:
expressions
(required): Array of DAX expressions to formatoptions
(optional): Formatting options object
Example:
{
"expressions": [
"CALCULATE(SUM(Sales[Amount]),FILTER(Products,Products[Category]=\"Electronics\"))",
"[Total Sales] := SUM(Sales[Amount])"
],
"options": {
"maxLineLength": "LongLine",
"databaseName": "SalesDB",
"serverName": "ProductionServer"
}
}
🎛️ Formatting Options
All formatting options are optional and have sensible defaults:
Option | Values | Default | Description |
---|---|---|---|
maxLineLength | ShortLine , LongLine , VeryLongLine | LongLine | Maximum line length for formatted code |
skipSpaceAfterFunctionName | BestPractice , False | BestPractice | Spacing after function names |
listSeparator | Any character | , | Character used as list separator |
decimalSeparator | Any character | . | Character used as decimal separator |
databaseName | String | - | Database name for context (anonymized) |
serverName | String | - | Server name for context (anonymized) |
📝 Example DAX Expressions
Here are some example DAX expressions you can test with:
Basic Measures
[Total Sales] := SUM(Sales[Amount])
Complex Calculations
CALCULATE(SUM(Sales[Amount]),FILTER(ALL(Products),Products[Category]="Electronics"),USERELATIONSHIP(Sales[OrderDate],'Calendar'[Date]))
Time Intelligence
[Sales YTD] := TOTALYTD(SUM(Sales[Amount]),'Calendar'[Date])
Table Expressions
EVALUATE FILTER(Customer, Customer[Country] = "USA")
🔍 Troubleshooting
Common Issues
Server fails to start:
- Ensure .NET 8.0 runtime is installed
- Check that the executable path is correct in your configuration
- Verify you have internet connectivity (required for DAX Formatter service)
Formatting requests fail:
- Check your internet connection
- Verify the DAX syntax is valid
- Try with simpler expressions first
MCP client doesn't recognize the server:
- Restart your MCP client after adding the configuration
- Check the JSON configuration syntax
- Verify the executable path is absolute and correct
Debug Mode
To enable debug logging, you can run the server manually to see detailed logs:
# Run the server directly to see debug output
./dax-formatter-mcp.exe
Then send JSON-RPC messages manually to test functionality.
🏗️ Architecture
The MCP server is built with:
- .NET 9.0: Modern, cross-platform runtime
- DAX Formatter Client: Official NuGet package from SQLBI
- JSON-RPC 2.0: Standard protocol for MCP communication
- Async/Await: Non-blocking I/O for better performance
Flow Diagram
MCP Client → JSON-RPC → DAX Formatter MCP Server → DAX Formatter API → Formatted DAX
🤝 Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Make your changes
- Add tests if applicable
- Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
Development Setup
# Clone the repository
git clone https://github.com/EmanueleMeazzo/dax-formatter-mcp.git
cd dax-formatter-mcp
# Restore dependencies
dotnet restore
# Build the project
dotnet build
# Run tests
dotnet test
🔒 Privacy & Security
- All DAX expressions are sent to the official DAX Formatter service at daxformatter.com
- Database and server names are anonymized by the DAX Formatter client
- No DAX expressions are stored locally
- No personal information is collected or transmitted
📜 License
This project is licensed under the MIT License - see the file for details.
🙏 Acknowledgments
- SQLBI for the excellent DAX Formatter service
- Anthropic for the Model Context Protocol specification
- Microsoft for the DAX language