Kusto MCP Server
Enables GitHub Copilot in VS Code to interact with Azure Data Explorer through KQL queries and schema exploration.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Kusto MCP Servershow top 10 states from StormEvents"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Kusto MCP Server
An MCP (Model Context Protocol) server that provides tools for interacting with Azure Data Explorer (Kusto) clusters. Query, manage connections, and explore schemas using AI assistants like Claude and GitHub Copilot.
Features
Execute KQL queries and scripts
Manage multiple cluster connections
Explore database schemas
Full Azure authentication support
Works with Claude Desktop, Claude Code CLI, and VS Code with GitHub Copilot
Related MCP server: Kusto MCP Server
Prerequisites
Node.js 18+
.NET 8 Runtime
Kusto CLI (
microsoft.azure.kusto.toolsNuGet package)Azure CLI (for authentication)
Install Kusto CLI
dotnet tool install -g Microsoft.Azure.Kusto.ToolsOr via NuGet:
nuget install microsoft.azure.kusto.tools -Version 14.0.3Installation
Via npm (recommended)
npm install -g kusto-mcp-serverVia npx (no installation required)
npx kusto-mcp-serverUsage with AI Assistants
Claude Desktop
Add to your Claude Desktop configuration:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/claude/claude_desktop_config.json
{
"mcpServers": {
"kusto": {
"command": "npx",
"args": ["-y", "kusto-mcp-server"],
"env": {
"KUSTO_CLI_PATH": "~/.nuget/packages/microsoft.azure.kusto.tools/14.0.3/tools/net8.0/Kusto.Cli.dll"
}
}
}
}Claude Code (CLI)
claude mcp add kusto -- npx -y kusto-mcp-serverVerify it's connected:
claude mcp listVS Code with GitHub Copilot
Add to your VS Code settings.json (or .vscode/mcp.json in your workspace):
{
"mcp": {
"servers": {
"kusto": {
"command": "npx",
"args": ["-y", "kusto-mcp-server"],
"env": {
"KUSTO_CLI_PATH": "~/.nuget/packages/microsoft.azure.kusto.tools/14.0.3/tools/net8.0/Kusto.Cli.dll"
}
}
}
}
}Or use the VS Code command palette:
Open Command Palette (
Ctrl+Shift+P/Cmd+Shift+P)Run "MCP: Add Server"
Select "Command (stdio)"
Enter command:
npx -y kusto-mcp-serverEnter server ID:
kusto
Authentication
Before using the server, authenticate with Azure:
az loginAvailable Tools
Query Tools
Tool | Description |
| Execute KQL queries (primary tool) |
| Advanced execution with full CLI options |
| Execute script files |
Connection Management
Tool | Description |
| Add/update a named connection |
| List all configured connections |
| Test connectivity |
| Remove a connection |
| Set the default connection |
Schema & Help
Tool | Description |
| Get database schema information |
| Get help and CLI options |
Usage Examples
Add a Connection
kusto_connection_add({
name: "my-cluster",
cluster: "https://mycluster.kusto.windows.net",
database: "MyDatabase",
authMethod: "azcli",
isDefault: true
})Execute a Query
kusto_query({
query: "StormEvents | summarize count() by State | top 10 by count_",
connectionName: "my-cluster"
})Get Schema
kusto_schema({
scope: "tables",
connectionName: "my-cluster"
})Execute Multiple Commands
kusto_execute({
commands: [
".show tables",
"StormEvents | count"
],
connectionName: "my-cluster"
})Configuration
Environment variables:
Variable | Description | Default |
| Path to Kusto.Cli.dll | Auto-detected |
| Default query timeout (ms) | 60000 |
| Default max rows | 10000 |
Development
# Clone the repository
git clone https://github.com/yeshsurya/kusto-mcp-server.git
cd kusto-mcp-server
# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run dev
# Run tests
npm testLicense
MIT
Available Tools
10 toolskusto_connection_addB
Add or update a named connection configuration for Azure Data Explorer.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Unique name for this connection | |
| cluster | Yes | Cluster URL (e.g., https://mycluster.kusto.windows.net) | |
| database | Yes | Default database name | |
| authMethod | No | Authentication method. azcli uses Azure CLI credentials, managedIdentity uses Azure Managed Identity. | |
| managedIdentityId | No | Client ID for managed identity (optional, uses system-assigned if not specified) | |
| isDefault | No | Set this as the default connection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It states the tool adds or updates a configuration, implying mutation, but does not disclose behavior on conflict (e.g., whether updating a non-existent connection creates it or errors), persistence details, or side effects. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is front-loaded with the key purpose. However, it could be slightly more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, 3 required, and siblings, the description is minimally complete. It covers the basic purpose but does not explain update semantics (e.g., which fields are updatable), default behavior for optional fields like managedIdentityId, or output expectations. For a configuration tool, more context would be helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds minimal extra meaning beyond the schema; it does not elaborate on parameter interactions or provide examples. The schema itself already explains each parameter concisely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add or update') and the resource ('named connection configuration for Azure Data Explorer'). It effectively distinguishes this tool from siblings like kusto_connection_list and kusto_connection_remove, which handle listing and removal respectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. It does not mention when to use kusto_connection_set_default or kusto_connection_test instead. The description lacks both positive usage context and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_connection_listA
List all configured Kusto connections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It states the tool lists connections but does not disclose if it is read-only or any side effects. Given the tool's simplicity, the minimal description is acceptable but lacks behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 5 words, which is highly concise for the tool's simple functionality. Every word is necessary and no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (no parameters, no output schema), the description is complete enough. It clearly states the tool lists all configured connections, which covers its essential purpose.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and the schema coverage is 100%. The description adds no parameter-specific meaning, but the baseline for zero parameters is 4. No additional details are necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear action ('List') and resource ('configured Kusto connections'). It effectively distinguishes this tool from siblings like 'add', 'remove', and 'set_default', which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description states what the tool does, it does not provide explicit guidance on when to use it versus alternatives. Sibling names imply usage context, but no when-not-to or alternative tool recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_connection_removeB
Remove a saved connection configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the connection to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states the action without disclosing any behavioral traits. It does not mention side effects, permissions needed, or what happens if the connection is in use. For a removal tool, basic behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded. It includes the essential information without any filler, though it lacks structure like command-action phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one required parameter, no output schema), the description is minimally complete. However, it could be improved by noting that it only removes saved configurations and does not affect active connections, but it is still adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter 'name', and the description adds no extra meaning beyond the schema. Baseline 3 is appropriate as the schema already explains the parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: remove a saved connection configuration. It uses a specific verb (Remove) and resource (connection configuration), and effectively distinguishes from sibling tools like kusto_connection_add and kusto_connection_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. The usage is implied by the name and description, but there is no mention of prerequisites, when not to use, or how it relates to other connection tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_connection_set_defaultC
Set a connection as the default.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the connection to set as default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the action but does not explain whether the change is persisted, if it affects future queries, or any side effects. This is a mutation tool, yet no details on reversibility or permissions are given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no fluff. It is front-loaded with the action and resource. However, it could be restructured to include more context without adding significant length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and lack of output schema, the description should provide more context about what setting a connection as default entails. It misses key details like impact on queries, persistence, and constraints, leaving the agent with insufficient understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter 'name' already described. The tool description does not add any additional meaning beyond what the schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Set a connection as the default' clearly states the action and resource. Among siblings like kusto_connection_add and kusto_connection_list, this tool is distinct for modifying default status. However, it lacks specificity on what 'default' means in this context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It fails to mention prerequisites (e.g., connection must exist) or situations where setting a default is appropriate. The sibling tools include add, list, remove, test, but no comparative usage advice is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_connection_testB
Test connectivity to a Kusto cluster using a saved connection.
| Name | Required | Description | Default |
|---|---|---|---|
| connectionName | No | Name of the connection to test. Uses default if not specified. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only says 'test connectivity' but does not describe what happens on success/failure (e.g., returns boolean, throws exception) or whether it modifies state. For a testing tool, this lack of transparency is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that efficiently communicates the core function. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional parameter, no output schema), but the description lacks details on return values, failure modes, and side effects. It could be more complete by stating what 'test connectivity' returns or implies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already includes the description 'Name of the connection to test. Uses default if not specified.' The tool description repeats this, adding no new information. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Test connectivity to a Kusto cluster using a saved connection.' It uses specific verb+resource ('test connectivity') and distinguishes from sibling tools like kusto_connection_add or kusto_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, it doesn't suggest using this before executing queries, nor does it mention that kusto_connection_add might be needed if the test fails. Sibling tools exist for connection management and execution, but the description provides no differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_executeA
Execute advanced Kusto commands with full CLI options. Use this for control commands, multiple statements, or when you need fine-grained control.
| Name | Required | Description | Default |
|---|---|---|---|
| commands | Yes | Array of KQL commands/queries to execute in sequence | |
| connectionName | No | Name of a saved connection to use | |
| connectionString | No | Direct connection string (overrides connectionName). Format: Data Source=https://cluster.kusto.windows.net;Initial Catalog=database | |
| database | No | Database name (overrides connection default) | |
| authMethod | No | Authentication method when using connectionString directly | |
| managedIdentityId | No | Client ID for managed identity authentication | |
| timeout | No | Execution timeout in milliseconds | |
| quitOnError | No | Stop execution on first error | |
| format | No | Output format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure. It only states it executes advanced commands with CLI options, but does not mention any behavioral traits such as destructiveness, rate limits, or authentication needs, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences. The first sentence clearly states the purpose, and the second provides usage guidance. No redundant words or phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 9 parameters and no output schema or annotations, the description is insufficient. It does not explain return values, error handling, or authentication details, which are critical for a tool with many options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 9 parameters have descriptions in the schema (100% coverage), so the baseline is 3. The description does not add any additional meaning beyond what the schema provides, thus the score remains 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes advanced Kusto commands with full CLI options, and distinguishes it from siblings like kusto_query (likely simpler queries) and kusto_script (script files) by mentioning control commands, multiple statements, and fine-grained control.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use the tool (for control commands, multiple statements, fine-grained control), implying alternatives like kusto_query for simpler cases. It lacks explicit when-not guidance but is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_helpB
Get help information about the Kusto CLI and available options.
| Name | Required | Description | Default |
|---|---|---|---|
| verbose | No | Include full CLI help output and all options | |
| category | No | Filter options by category |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only says 'Get help information,' implying a read operation, but does not disclose any behavioral traits such as whether it modifies state, requires authentication, or has rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded. Every word serves a purpose, though it lacks structure for more detailed information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has two optional parameters and no output schema, the description is incomplete. It does not explain what the help output looks like, how categories filter options, or any expected behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3 is appropriate. The description does not add any meaning beyond the schema; it omits mentioning the 'verbose' and 'category' parameters or their effects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get help information about the Kusto CLI and available options,' which is a specific verb+resource combination. It distinguishes this tool from sibling tools like kusto_query and kusto_execute, which perform other actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention context, exclusions, or when not to use it. Usage is only implied by the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_queryC
Execute a KQL (Kusto Query Language) query against an Azure Data Explorer cluster. This is the primary tool for running queries.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The KQL query to execute | |
| connectionName | No | Name of a saved connection to use. If not specified, uses the default connection. | |
| database | No | Database name to query. Overrides the database in the connection. | |
| maxRows | No | Maximum number of rows to return (default: 10000) | |
| timeout | No | Query timeout in milliseconds (default: 60000) | |
| format | No | Output format: json (structured), table (formatted text), or raw (CSV) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits such as whether queries are read-only, or any side effects, authorization needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise single sentence; effectively communicates the core purpose without unnecessary words, though could be slightly more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, and no annotations, the description is too sparse; lacks details on return format, error handling, or query characteristics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description does not need to add parameter details; it correctly relies on the schema for parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it executes KQL queries and calls itself the 'primary tool', but does not differentiate from siblings like kusto_execute or kusto_script, missing a clear distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or when not to use, no mention of alternatives or prerequisites; 'primary tool' implies general use but no exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_schemaA
Get database schema information including tables, columns, and their types.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | Yes | Scope of schema to retrieve. "databases" lists all databases, "tables" lists all tables, "table" gets schema for specific table, "functions" lists functions. | |
| tableName | No | Table name (required when scope is "table") | |
| connectionName | No | Name of a saved connection to use | |
| database | No | Database name (overrides connection default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It indicates a read-only operation ('Get database schema information'), but does not disclose authentication requirements, permissions, or potential side effects. This is adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no extraneous information. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and no output schema, the description is minimal. It does not explain the return format or provide context about different scope values. While the schema covers parameter details, the description lacks overall completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not add extra meaning beyond the parameter descriptions in the schema. It mentions 'tables, columns, and their types' but doesn't elaborate on how parameters affect output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves database schema information, specifically tables, columns, and types. This distinguishes it from siblings like kusto_query (used for querying data) and kusto_execute (for executing scripts), but does not explicitly differentiate between schema-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It implies usage for schema exploration but does not specify when to avoid it or mention context where other tools would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_scriptC
Execute a Kusto script file containing multiple KQL statements. Useful for running saved queries or batch operations.
| Name | Required | Description | Default |
|---|---|---|---|
| scriptPath | Yes | Path to the script file containing KQL statements | |
| connectionName | No | Name of a saved connection to use | |
| database | No | Database name (overrides connection default) | |
| multiLine | No | Enable multi-line mode for statements spanning multiple lines | |
| quitOnError | No | Stop execution on first error | |
| timeout | No | Execution timeout in milliseconds | |
| format | No | Output format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose whether the tool is read-only, destructive, or requires authentication. The term 'Execute' is ambiguous, and there is no mention of side effects or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with two front-loaded sentences that state the purpose and typical usage. No redundant or unnecessary information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the high schema coverage, the description lacks any details about return values, error handling, permissions, or how execution behaves (e.g., output format). Given the tool has 7 parameters and no output schema, the description is insufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 7 parameters, so baseline is 3. The description adds minimal value beyond the schema, only noting that the script contains multiple KQL statements and is for saved queries or batch operations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Execute' and the resource 'a Kusto script file', and specifies that it handles multiple KQL statements for saved queries or batch operations, which implicitly distinguishes it from single-query siblings like kusto_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only says 'Useful for running saved queries or batch operations', implying usage context but providing no explicit when-to-use or when-not-to-use guidance, nor any reference to alternatives like kusto_execute or kusto_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v1.0.0- First observed
kusto_connection_add - First observed
kusto_connection_list - First observed
kusto_connection_remove - First observed
kusto_connection_set_default - First observed
kusto_connection_test - First observed
kusto_execute - First observed
kusto_help - First observed
kusto_query - First observed
kusto_schema - First observed
kusto_script
TDQS
Scored across 10 tools
All tools are clearly distinct: connection management (add, list, remove, set_default, test), query execution (query, execute, script), schema retrieval, and help. No overlapping purposes.
All tools follow a consistent 'kusto_verb_noun' pattern using snake_case, making it easy to predict tool names and understand their roles.
10 tools is appropriate for a database query server, covering connection management, query execution, scripting, schema, and help without being excessive or insufficient.
Core workflows are covered (connection CRUD, query, script, schema, help). Missing explicit update for connections (though add serves upsert) and possibly a dedicated list-databases tool, but schema provides that info.
Maintenance
Related MCP Connectors
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for Klever blockchain smart contract development.
MCP Server for JFrog, providing tools for development and artifact management.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP Server for interacting with Cube semantic layers that provides tools for querying and describing data from Cube deployments.15GPL 3.0
- AlicenseBqualityDmaintenanceAn MCP server that provides access to Azure Data Explorer (ADX) clusters, allowing users to list tables, execute queries, and retrieve schema information.71MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for executing Kusto Query Language (KQL) queries against Azure Data Explorer clusters, integrating with Claude Desktop and VS Code via Azure CLI authentication.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes core Azure services as read-mostly tools any MCP client can call, including Blob Storage, Key Vault, Service Bus, and Resource Manager.1MIT