list_internal_tablesLABSCO SUMMARY
Schema first, then the query that matches it.
The reason generated KQL fails is almost always a column that does not exist. Listing and schema are separate tools here, so an assistant can look before it writes — and external tables, which behave differently, have their own query path rather than being lumped in.
What it is
An MCP server for Azure Data Explorer (Kusto) clusters, exposing discovery, schema and query as separate tools across internal tables, external tables and materialized views.
What you get
- Everything in the cluster enumerated: internal tables, external tables and materialized views, each listed separately
- Column-level schema for an internal table, a materialized view or an external table, before a query is written
- Query execution against internal tables and materialized views
- Query execution against external tables, which take their own code path
- A local path for development: the Azure Data Explorer emulator needs only a cluster URL
Requirements
uv, plus your cluster URL passed on the launch command. Against a real cluster you also pass the tenant, the application id and the secret for the Entra application it authenticates as. Against the local Azure Data Explorer emulator, the cluster URL alone is enough.
Setup effort
Build from source — git clone https://github.com/ZZZHDW/mcp-server-kusto.git
USE CASES
Getting oriented in a cluster you did not build
List internal tables, external tables and materialized views to see what is actually available before asking a question of it.
Making generated KQL match the real columns
Read the table's schema first, so the query is written against the columns that exist rather than plausible-sounding ones.
Answering a question from log data
Run the KQL against an internal table or materialized view and get the result back in the conversation.
Querying data that lives outside the cluster
External tables have their own schema and query tools, so data left in storage is reachable on the same terms.
Developing against the emulator first
Point it at a local emulator with just the cluster URL and no application credentials, then move the same queries to the real cluster.
7 tools
Listed in project docs. Your client may show a different list.
list_external_tableslist_materialized_viewsexecute_query_internal_tableexecute_query_external_tableget_internal_table_schemaget_external_table_schemaBEFORE YOU INSTALL
What to know first
Tools you get
7 tools named in the project's documentation.
Requires
- uv on PATH
- Tenant id, client id and client secret passed as --authority_id, --client_id and --client_secret on the launch command (not needed against the local Azure Data Explorer emulator)
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
This one is built from source rather than installed with a single command.
Server setup
git clone https://github.com/ZZZHDW/mcp-server-kusto.git
cd mcp-server-kustoMCP Clients
Claude Desktop
{
"mcpServers": {
"kusto": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_PROJECT>\\mcp-server-kusto\\src\\mcp_server_kusto",
"run",
"mcp-server-kusto",
"--cluster",
"<YOUR_ADX_CLUSTER_URL>",
"--authority_id",
"<YOUR_TENANT_ID>",
"--client_id",
"<YOUR_CLIENT_ID>",
"--client_secret",
"<YOUR_CLIENT_SECRET>"
]
}
}
}<YOUR_PATH_TO_PROJECT> is the folder you ran git clone in, so the path ends in mcp-server-kusto\src\mcp_server_kusto (the README writes it Windows-style; on macOS or Linux use forward slashes). <YOUR_ADX_CLUSTER_URL> is your Azure Data Explorer cluster URL, and <YOUR_TENANT_ID>, <YOUR_CLIENT_ID> and <YOUR_CLIENT_SECRET> are the tenant id, client id and client secret of your Azure app registration. Against the local Azure Data Explorer emulator, use a cluster URL like https://localhost:8082 and delete the --authority_id, --client_id and --client_secret lines and their values.