Skip to main content

AI-Powered MCP server for KQL query execution with intelligent schema memory and context assistance

Project description

MCP KQL Server

AI-Powered KQL Query Execution with Intelligent Schema Memory

A Model Context Protocol (MCP) server that provides intelligent KQL (Kusto Query Language) query execution with AI-powered schema caching and context assistance for Azure Data Explorer clusters.

PyPI version Python Downloads

CI/CD Pipeline codecov Security Rating Code Quality

FastMCP Azure Data Explorer MCP Protocol Maintenance

๐Ÿš€ Features

  • ๐ŸŽฏ Intelligent KQL Execution: Execute KQL queries against any Azure Data Explorer cluster
  • ๐Ÿง  AI Schema Memory: Automatic schema discovery and intelligent caching
  • ๐Ÿ“Š Rich Visualizations: Markdown table output with configurable formatting
  • โšก Performance Optimized: Smart caching reduces cluster API calls
  • ๐Ÿ” Azure Authentication: Seamless Azure CLI integration
  • ๐ŸŽจ Context-Aware: AI-powered query assistance and error suggestions

๐Ÿ“‹ Prerequisites

  • Python 3.8 or higher
  • Azure CLI installed and authenticated (az login)
  • Access to Azure Data Explorer cluster(s)

๐Ÿš€ One-Command Installation

Quick Install (Recommended)

pip install mcp-kql-server

That's it! The server automatically:

  • โœ… Sets up memory directories in %APPDATA%\KQL_MCP (Windows) or ~/.local/share/KQL_MCP (Linux/Mac)
  • โœ… Configures optimal defaults for production use
  • โœ… Suppresses verbose Azure SDK logs
  • โœ… No environment variables required

Alternative Installation Methods

From Source

git clone https://github.com/4R9UN/mcp-kql-server.git
cd mcp-kql-server
pip install -e .

Development Setup

git clone https://github.com/4R9UN/mcp-kql-server.git
cd mcp-kql-server
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
pip install -e ".[dev]"

Verify Installation

python -c "from mcp_kql_server import __version__; print(f'MCP KQL Server v{__version__} installed successfully! ๐ŸŽ‰')"

๐Ÿ”ง Quick Start

1. Authenticate with Azure (One-time setup)

az login

2. Start the MCP Server (Zero configuration)

python -m mcp_kql_server.mcp_server

The server starts immediately with:

  • ๐Ÿ“ Auto-created memory path: %APPDATA%\KQL_MCP\cluster_memory
  • ๐Ÿ”ง Optimized defaults: No configuration files needed
  • ๐Ÿ” Secure setup: Uses your existing Azure CLI credentials

3. Use via MCP Client

The server provides two main tools:

kql_execute - Execute KQL Queries with AI Context

kql_schema_memory - Discover and Cache Cluster Schemas

๐Ÿ“Š Tool Execution Flow

KQL Query Execution Flow

graph TD
    A[๐Ÿ‘ค User Submits KQL Query] --> B{๐Ÿ” Query Validation}
    B -->|โŒ Invalid| C[๐Ÿ“ Syntax Error Response]
    B -->|โœ… Valid| D[๐Ÿง  Load Schema Context]
    
    D --> E{๐Ÿ’พ Schema Cache Available?}
    E -->|โœ… Yes| F[โšก Load from Memory]
    E -->|โŒ No| G[๐Ÿ” Discover Schema]
    
    F --> H[๐ŸŽฏ Execute Query]
    G --> I[๐Ÿ’พ Cache Schema + AI Context]
    I --> H
    
    H --> J{๐ŸŽฏ Query Success?}
    J -->|โŒ Error| K[๐Ÿšจ Enhanced Error Message]
    J -->|โœ… Success| L[๐Ÿ“Š Process Results]
    
    L --> M[๐ŸŽจ Generate Visualization]
    M --> N[๐Ÿ“ค Return Results + Context]
    
    K --> O[๐Ÿ’ก AI Suggestions]
    O --> N
    
    style A fill:#e1f5fe
    style N fill:#e8f5e8
    style K fill:#ffebee

Schema Memory Discovery Flow

graph TD
    A[๐Ÿ‘ค User Requests Schema Discovery] --> B[๐Ÿ”— Connect to Cluster]
    B --> C[๐Ÿ“‚ Enumerate Databases]
    C --> D[๐Ÿ“‹ Discover Tables]
    
    D --> E[๐Ÿ” Get Table Schemas]
    E --> F[๐Ÿค– AI Analysis]
    F --> G[๐Ÿ“ Generate Descriptions]
    
    G --> H[๐Ÿ’พ Store in Memory]
    H --> I[๐Ÿ“Š Update Statistics]
    I --> J[โœ… Return Summary]
    
    style A fill:#e1f5fe
    style J fill:#e8f5e8

๐Ÿ’ก Usage Examples

Example 1: Basic KQL Query

# Execute a simple query with visualization
{
    "tool": "kql_execute",
    "input": {
        "query": "cluster('help.kusto.windows.net').database('Samples').StormEvents | take 10",
        "visualize": true,
        "use_schema_context": true
    }
}

Response:

{
    "status": "success",
    "result": {
        "columns": ["StartTime", "EndTime", "State", "EventType"],
        "rows": [
            ["2007-01-01T00:00:00Z", "2007-01-01T05:00:00Z", "FLORIDA", "Waterspout"],
            ...
        ],
        "row_count": 10,
        "visualization": "| StartTime | EndTime | State | EventType |\n|---|---|---|---|\n...",
        "schema_context": ["Table: StormEvents - Weather event data...", ...]
    }
}

Example 2: Complex Query with JSON Processing

# Query with JSON extraction and filtering
{
    "tool": "kql_execute", 
    "input": {
        "query": """
        cluster('mycluster.kusto.windows.net').database('mydb').Events
        | where Timestamp >= ago(1d)
        | extend Properties = parse_json(PropertiesJson)
        | extend UserId = tostring(Properties.userId)
        | where isnotempty(UserId)
        | summarize Count=count() by UserId
        | top 10 by Count desc
        """,
        "visualize": true
    }
}

Example 3: Schema Discovery

# Discover and cache cluster schema
{
    "tool": "kql_schema_memory",
    "input": {
        "cluster_uri": "https://mycluster.kusto.windows.net",
        "force_refresh": false
    }
}

Response:

{
    "status": "success",
    "result": {
        "cluster_uri": "https://mycluster.kusto.windows.net",
        "database_count": 5,
        "total_tables": 23,
        "memory_file_path": "C:/Users/user/AppData/Roaming/KQL_MCP/schema_memory.json",
        "discovery_summary": {
            "databases": ["Events", "Logs", "Metrics"],
            "tables_discovered": ["Events.UserActivity", "Logs.ApplicationLogs", ...],
            "message": "Successfully discovered 23 tables across 5 databases"
        }
    }
}

๐ŸŽฏ Key Benefits

For Data Analysts

  • โšก Faster Query Development: AI-powered autocomplete and suggestions
  • ๐ŸŽจ Rich Visualizations: Instant markdown tables for data exploration
  • ๐Ÿง  Context Awareness: Understand your data structure without documentation

For DevOps Teams

  • ๐Ÿ”„ Automated Schema Discovery: Keep schema information up-to-date
  • ๐Ÿ’พ Smart Caching: Reduce API calls and improve performance
  • ๐Ÿ” Secure Authentication: Leverage existing Azure CLI credentials

For AI Applications

  • ๐Ÿค– Intelligent Query Assistance: AI-generated table descriptions and suggestions
  • ๐Ÿ“Š Structured Data Access: Clean, typed responses for downstream processing
  • ๐ŸŽฏ Context-Aware Responses: Rich metadata for better AI decision making

๐Ÿ—๏ธ Architecture

graph TD
    A[MCP Client<br/>Claude/AI/Custom] <--> B[MCP KQL Server<br/>FastMCP Framework]
    B <--> C[Azure Data Explorer<br/>Kusto Clusters]
    B <--> D[Schema Memory<br/>Local AI Cache]
    
    style A fill:#e1f5fe
    style B fill:#f3e5f5
    style C fill:#fff3e0
    style D fill:#e8f5e8

๐Ÿ“ Project Structure

mcp-kql-server/
โ”œโ”€โ”€ mcp_kql_server/
โ”‚   โ”œโ”€โ”€ __init__.py          # Package initialization
โ”‚   โ”œโ”€โ”€ mcp_server.py        # Main MCP server implementation
โ”‚   โ”œโ”€โ”€ execute_kql.py       # KQL query execution logic
โ”‚   โ”œโ”€โ”€ schema_memory.py     # Schema caching and discovery
โ”‚   โ”œโ”€โ”€ unified_memory.py    # Advanced memory management
โ”‚   โ”œโ”€โ”€ kql_auth.py          # Azure authentication
โ”‚   โ”œโ”€โ”€ utils.py             # Utility functions
โ”‚   โ””โ”€โ”€ constants.py         # Configuration constants
โ”œโ”€โ”€ docs/                    # Documentation
โ”œโ”€โ”€ Example/                 # Usage examples
โ”œโ”€โ”€ pyproject.toml          # Project configuration
โ””โ”€โ”€ README.md               # This file

โš™๏ธ Configuration

Zero-Configuration Setup

The server works out-of-the-box with sensible defaults:

  • Memory Path: Automatically created at:
    • Windows: %APPDATA%\KQL_MCP\cluster_memory\
    • macOS/Linux: ~/.local/share/KQL_MCP/cluster_memory/
  • Authentication: Uses your existing Azure CLI credentials
  • Logging: Optimized for production (minimal Azure SDK logs)
  • Timeouts: Connection (60s), Query (10min) - suitable for most workloads

Optional Environment Variables

# Optional: Enable debug mode (only if needed)
export KQL_DEBUG=true

Memory Management

Schema intelligence is automatically stored in:

  • Schema Memory: {memory_path}/schema_memory.json
  • Table Cache: {memory_path}/clusters/{cluster}/databases/{db}/tables/
  • Auto-cleanup: Stale cache entries removed automatically

๐Ÿš€ Advanced Usage

Custom Memory Path

{
    "tool": "kql_execute",
    "input": {
        "query": "...",
        "cluster_memory_path": "/custom/memory/path"
    }
}

Force Schema Refresh

{
    "tool": "kql_schema_memory",
    "input": {
        "cluster_uri": "mycluster",
        "force_refresh": true
    }
}

Performance Optimization

{
    "tool": "kql_execute",
    "input": {
        "query": "...",
        "use_schema_context": false,  # Disable for faster execution
        "visualize": false           # Disable for minimal response
    }
}

๐Ÿ”’ Security

  • Azure CLI Authentication: Leverages your existing Azure credentials
  • No Credential Storage: Server doesn't store authentication tokens
  • Query Validation: Built-in protection against malicious queries
  • Local Memory: Schema cache stored locally, not transmitted

๐Ÿ› Troubleshooting

Common Issues

  1. Authentication Errors

    # Re-authenticate with Azure CLI
    az login --tenant your-tenant-id
    
  2. Memory Issues

    # Clear schema cache if corrupted (automatic backup created)
    # Windows:
    del "%APPDATA%\KQL_MCP\schema_memory.json"
    
    # macOS/Linux:
    rm ~/.local/share/KQL_MCP/schema_memory.json
    
  3. Connection Timeouts

    • Check cluster URI format
    • Verify network connectivity
    • Confirm Azure permissions
  4. Memory Path Issues

    • Server automatically creates fallback directory in ~/.kql_mcp_memory if default path fails
    • Check logs for memory path initialization messages

Debug Mode (Optional)

# Enable debug logging if needed
set KQL_DEBUG=true  # Windows
export KQL_DEBUG=true  # macOS/Linux

python -m mcp_kql_server.mcp_server

๐Ÿค Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

git clone https://github.com/4R9UN/mcp-kql-server.git
cd mcp-kql-server
python -m venv venv
source venv/bin/activate
pip install -e ".[dev]"

๐Ÿ™ Acknowledgments

๐Ÿ“ž Support

๐ŸŒŸ Star History

Star History Chart


Happy Querying! ๐ŸŽ‰

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_kql_server-2.0.1.tar.gz (480.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_kql_server-2.0.1-py3-none-any.whl (33.2 kB view details)

Uploaded Python 3

File details

Details for the file mcp_kql_server-2.0.1.tar.gz.

File metadata

  • Download URL: mcp_kql_server-2.0.1.tar.gz
  • Upload date:
  • Size: 480.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for mcp_kql_server-2.0.1.tar.gz
Algorithm Hash digest
SHA256 5657feac92f53c8a4de4f258a9192f422ec80be8fd508231f726be4e16e4edbb
MD5 7c79cc6b72311257ee02cb77f6609be9
BLAKE2b-256 e904b9927c7f3ae452e189b1e8d39d1345b23f5de729262218114d651557ccf1

See more details on using hashes here.

File details

Details for the file mcp_kql_server-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: mcp_kql_server-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 33.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for mcp_kql_server-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c0c517f254b76dbf8443b9e8e154e65ab275b032213cbabf231f1f436ca62fc2
MD5 ce7ca13cab0fdb90e907004aedf9aa6a
BLAKE2b-256 9571e8a1af9b109f44295445059fe299e5db780c0c608c7a03f89bb335ce67c6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page