Skip to main content
Glama
microsoft

Microsoft Fabric RTI MCP Server

Official
by microsoft

Install with UVX in VS Code PyPI Downloads

🎯 Overview

A comprehensive Model Context Protocol (MCP) server implementation for Microsoft Fabric Real-Time Intelligence (RTI). This server enables AI agents to interact with Fabric RTI services by providing tools through the MCP interface, allowing for seamless data querying, analysis, and streaming capabilities.

NOTE


This project is in Public Preview and implementation may significantly change prior to General Availability.

🔍 How It Works

The Fabric RTI MCP Server acts as a bridge between AI agents and Microsoft Fabric RTI services:

  • 🔄 MCP Protocol: Uses the Model Context Protocol to expose Fabric RTI capabilities as tools

  • 🏗️ Natural Language to KQL: AI agents can translate natural language requests into KQL queries and Eventstream management

  • 💡 Secure Authentication: Leverages Azure Identity for seamless, secure access to your resources

  • Real-time Data Access: Direct connection to Eventhouse and Eventstreams for live data analysis

  • 📊 Unified Interface: For both analytics and streaming workloads with intelligent parameter suggestions

✨ Supported Services

Eventhouse (Kusto): Execute KQL queries against Microsoft Fabric RTI Eventhouse and Azure Data Explorer (ADX).

Eventstreams: Manage Microsoft Fabric Eventstreams for real-time data processing:

  • List Eventstreams in workspaces

  • Get Eventstream details and definitions

  • Create new Eventstreams

  • Update existing Eventstreams

  • Delete Eventstreams

Activator: Create and manage Microsoft Fabric Activator triggers for real-time alerting:

  • Create new triggers with KQL source monitoring

  • Set up email and Teams notifications when a condition occurs

  • List Activator artifacts in workspaces

Map: Create and manage Microsoft Fabric Map to visualize geospatial data:

  • Create a new map from a provided configuration

  • Visualize data on maps

  • List Map items in workspaces

  • Delete Map items

🧠 Copilot Skills

This repository includes a KQL Copilot Skill (.github/skills/kql/) that gives AI agents deep KQL expertise when writing, debugging, or reviewing Kusto queries. The skill covers:

  • Syntax gotchas and self-correction patterns for common KQL errors

  • Dynamic type discipline, join patterns, datetime pitfalls

  • Memory-safe query patterns and result-size discipline

  • Advanced functions: graph queries, vector similarity, geospatial operations, time series

  • Query templates for deduplication, top-N, sessionization, pivoting, and more

  • Full error-to-fix mapping for rapid recovery

The skill references the Fabric RTI MCP tools (kusto_query, kusto_command, kusto_sample_entity, etc.) so agents know how to execute queries through this MCP server.

Related MCP server: Microsoft Fabric MCP Server

🚧 Coming soon

  • Other RTI items

🔍 Example Prompts

Eventhouse Analytics:

  • "Get databases in my Eventhouse"

  • "Sample 10 rows from table 'StormEvents' in Eventhouse"

  • "What can you tell me about StormEvents data?"

  • "Analyze the StormEvents to come up with trend analysis across past 10 years of data"

  • "Analyze the commands in 'CommandExecution' table and categorize them as low/medium/high risks"

  • "Before running this query, check the execution plan and tell me if it's expensive"

  • "Compare these two query approaches and tell me which is more efficient"

  • "Check the cluster health — do we have enough capacity for a heavy analytics job?"

Eventstream Management:

  • "List all Eventstreams in my workspace"

  • "Show me the details of my IoT data Eventstream"

  • "Create a new Eventstream for processing sensor data"

  • "Update my existing Eventstream to add a new destination"

Activator Alerts:

  • "Using the StormEvents table, notify me via email when there is a flood in Illinois"

  • "Create a teams alert to notify me when my success rate drops below 95%"

  • "List all Activator artifacts in my workspace"

Map Visualization:

  • "List all Map items in my workspace"

  • "Create a new Map and add LakeHouse with name 'MyLakeHouse' as a data source to Map item 'MyMap'"

  • "Delete a Map item with name 'MyMap' from my workspace"

Available tools

Eventhouse (Kusto) - 13 Tools + 1 Optional:

  • kusto_known_services - List all available Kusto services configured in the MCP

  • kusto_query - Execute KQL queries on the specified database

  • kusto_command - Execute Kusto management commands (.show, .create, .alter, .drop)

  • kusto_list_entities - List entities (databases, tables, external tables, materialized views, functions, graphs) in a cluster or database

  • kusto_describe_database - Get schema information for all entities in a database

  • kusto_describe_database_entity - Get detailed schema for a specific entity (table, external table, materialized view, function, graph)

  • kusto_graph_query - Execute graph queries using snapshots or transient graphs

  • kusto_sample_entity - Retrieve sample records from a table, external table, materialized view, or function

  • kusto_ingest_inline_into_table - Ingest inline CSV data into a specified table

  • kusto_get_shots (when KUSTO_SHOTS_TABLE is configured) - Find semantically similar saved KQL queries using local SLM or Azure OpenAI embeddings

  • kusto_deeplink_from_query - Generate a deeplink URL to open a KQL query in Azure Data Explorer Web Explorer or Microsoft Fabric query workbench

  • kusto_show_queryplan - Retrieve the execution plan for a KQL query without running it. Returns planning stats (PlanSize, RelopSize), the logical operator tree, and execution hints (estimated row counts, concurrency/spread hints, per-shard scan info with filter detection). Useful for comparing query approaches, catching expensive joins, and validating query syntax before execution.

  • kusto_diagnostics - Run a best-effort suite of cluster diagnostic commands and return a unified summary. Sections: capacity (resource slots), cluster (nodes/hardware), principal roles (caller permissions), internal diagnostics (health/utilization), workload groups, rowstores, and ingestion failures (last 24h). Each section runs independently — permission failures on one section don't block others.

Eventstreams - 17 Tools:

Core Operations (6 tools):

  • eventstream_list - List all Eventstreams in your Fabric workspace

  • eventstream_get - Get detailed information about a specific Eventstream

  • eventstream_get_definition - Retrieve complete JSON definition of an Eventstream

  • eventstream_create - Create new Eventstreams with custom configuration (auto-includes default stream)

  • eventstream_update - Modify existing Eventstream settings and destinations

  • eventstream_delete - Remove Eventstreams and associated resources

Builder Tools (11 tools):

  • Session Management: eventstream_start_definition, eventstream_get_current_definition, eventstream_clear_definition

  • Sources: eventstream_add_sample_data_source, eventstream_add_custom_endpoint_source

  • Streams: eventstream_add_derived_stream

  • Destinations: eventstream_add_eventhouse_destination, eventstream_add_custom_endpoint_destination

  • Validation: eventstream_validate_definition, eventstream_create_from_definition, eventstream_list_available_components

💡 Pro Tip: All tools work with natural language! Just describe what you want to do and the AI agent will use the appropriate tools automatically.

Activator - 2 Tools:

  • activator_list_artifacts - List all Activator artifacts in a Fabric workspace

  • activator_create_trigger - Create new Activator triggers with KQL source monitoring and email/Teams alerts

Map - 7 Tools:

  • map_list - List all Map items in your Fabric workspace

  • map_get - Get detailed information about a specific Map item

  • map_get_definition - Retrieve the full JSON definition of a Map item

  • map_create - Create a new Map item from a provided configuration

  • map_update_definition - Replace the full JSON definition of an existing Map item

  • map_update - Partially update properties of an existing Map item

  • map_delete - Delete a Map item and its associated configuration

Getting Started

Prerequisites

  1. Install either the stable or Insiders release of VS Code:

  2. Install the GitHub Copilot and GitHub Copilot Chat extensions

  3. Install uv

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

or, check here for other install options

  1. Open VS Code in an empty folder

Install from PyPI (Pip)

The Fabric RTI MCP Server is available on PyPI, so you can install it using pip. This is the easiest way to install the server.

From VS Code

1. Open the command palette (Ctrl+Shift+P) and run the command `MCP: Add Server`
2. Select install from Pip
3. When prompted, enter the package name `microsoft-fabric-rti-mcp`
4. Follow the prompts to install the package and add it to your settings.json or your mcp.json file

The process should end with the below settings in your settings.json or your mcp.json file.

settings.json

{
    "mcp": {
        "servers": {
            "fabric-rti-mcp": {
                "command": "uvx",
                "args": [
                    "microsoft-fabric-rti-mcp"
                ],
                "env": {
                    "KUSTO_SERVICE_URI": "https://help.kusto.windows.net/",
                    "KUSTO_SERVICE_DEFAULT_DB": "Samples",
                    "FABRIC_API_BASE": "https://api.fabric.microsoft.com/v1"
                }
            }
        }
    }
}

Note: All environment variables are optional. The KUSTO_SERVICE_URI and KUSTO_SERVICE_DEFAULT_DB provide default cluster and database settings. AZ_OPENAI_EMBEDDING_ENDPOINT configures the default AOAI embedding method used by kusto_get_shots.

From GitHub Copilot CLI

Use the interactive command within a GitHub Copilot CLI session:

/mcp add

Or manually add to your ~/.copilot/mcp-config.json:

{
    "mcpServers": {
        "fabric-rti-mcp": {
            "command": "uvx",
            "args": [
                "microsoft-fabric-rti-mcp"
            ],
            "env": {
                "KUSTO_SERVICE_URI": "https://help.kusto.windows.net/",
                "KUSTO_SERVICE_DEFAULT_DB": "Samples",
                "FABRIC_API_BASE": "https://api.fabric.microsoft.com/v1"
            }
        }
    }
}

For more information, see the GitHub Copilot CLI documentation.

🔧 Manual Install (Install from source)

  1. Make sure you have Python 3.10+ installed properly and added to your PATH.

  2. Clone the repository

  3. Install the dependencies (pip install . or uv tool install .)

  4. Add the settings below into your vscode settings.json or your mcp.json file.

  5. Modify the path to match the repo location on your machine.

  6. Modify the cluster uri in the settings to match your cluster.

  7. Modify the cluster default database in the settings to match your database.

  8. Modify the embeddings endpoint in the settings to match yours. This step is optional and needed only in case you supply a shots table

{
    "mcp": {
        "servers": {
            "fabric-rti-mcp": {
                "command": "uv",
                "args": [
                    "--directory",
                    "C:/path/to/fabric-rti-mcp/",
                    "run",
                    "-m",
                    "fabric_rti_mcp.server"
                ],
                "env": {
                    "KUSTO_SERVICE_URI": "https://help.kusto.windows.net/",
                    "KUSTO_SERVICE_DEFAULT_DB": "Samples",
                    "FABRIC_API_BASE": "https://api.fabric.microsoft.com/v1"
                }
            }
        }
    }
}

🐛 Debugging the MCP Server locally

Assuming you have python installed and the repo cloned:

Install locally

pip install -e ".[dev]"

Configure

Follow the Manual Install instructions.

Attach the debugger

Start the MCP server normally from the client that will invoke its tools, then set a breakpoint on an executable line. If you changed the Python source after the server started, restart the MCP server before attaching.

Option 1: Attach by process ID

Press F5 and select Python Debugger: Attach by Process ID. VS Code needs the PID of the Python process that is running -m fabric_rti_mcp.server. You can identify it in either of these ways:

  1. VS Code process picker: Select the matching Python process from the list. If several related processes are shown, select the deepest Python child running -m fabric_rti_mcp.server, not the uv wrapper.

  2. Manual PID lookup: If VS Code asks you to enter a PID instead of displaying the process list, find it with Task Manager or PowerShell:

    • In Task Manager, open Details, enable the PID and Command line columns, and locate the matching python.exe process.

    • In PowerShell, run:

      $servers = @(Get-CimInstance Win32_Process | Where-Object {
          $_.Name -eq "python.exe" -and
          $_.CommandLine -match "-m\s+fabric_rti_mcp\.server"
      })
      
      $servers |
          Where-Object { $_.ProcessId -notin $servers.ParentProcessId } |
          Sort-Object CreationDate -Descending |
          Select-Object -First 1 ProcessId, CommandLine

    Enter the returned ProcessId in the VS Code prompt.

On newer Windows versions, wmic.exe is disabled or removed. Some Python debugger versions still use it to populate the process picker, causing process enumeration to fail. The manual methods above do not require WMIC.

Option 2: Inject debugpy and attach on port 5678

This repository includes the Python Debugger: Attach to Fabric RTI MCP launch configuration and its Inject debugger into Fabric RTI MCP pre-launch task. This Windows-specific option uses PowerShell to find the deepest Fabric RTI MCP Python process, inject debugpy, and connect VS Code to 127.0.0.1:5678.

  1. Ensure the MCP server is already running.

  2. Press F5 and select Python Debugger: Attach to Fabric RTI MCP.

  3. Wait for the VS Code debug toolbar to appear.

  4. Invoke the target tool from the same MCP client session that started the attached server.

Do not add debugpy --listen to the MCP server command. Some clients may start or reconnect to the command more than once, which can cause port collisions. If multiple MCP client sessions are running, close the unrelated sessions first so the debugger attaches to the intended server process.

🧪 Test the MCP Server

Via GitHub Copilot

  1. Open GitHub Copilot in VS Code and switch to Agent mode

  2. You should see the Fabric RTI MCP Server in the list of tools

  3. Try prompts that tell the agent to use the RTI tools, such as:

    • Eventhouse: "List my Kusto tables" or "Show me a sample from the StormEvents table"

    • Eventstreams: "List all Eventstreams in my workspace" or "Show me details of my data processing Eventstream"

  4. The agent should be able to use the Fabric RTI MCP Server tools to complete your query

⚙️ Configuration

The MCP server can be configured using the following environment variables:

Required Environment Variables

None - the server will work with default settings for demo purposes.

Optional Environment Variables

Variable

Service

Description

Default

Example

KUSTO_SERVICE_URI

Kusto

Default Kusto cluster URI

None

https://mycluster.westus.kusto.windows.net

KUSTO_SERVICE_DEFAULT_DB

Kusto

Default database name for Kusto queries

NetDefaultDB

MyDatabase

AZ_OPENAI_EMBEDDING_ENDPOINT

Kusto

Azure OpenAI endpoint used when kusto_get_shots selects embedding_method="aoai"

None

https://your-resource.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate

KUSTO_KNOWN_SERVICES

Kusto

JSON array of preconfigured Kusto services

None

[{"service_uri":"https://cluster1.kusto.windows.net","default_database":"DB1","description":"Prod"}]

KUSTO_EAGER_CONNECT

Kusto

Whether to eagerly connect to default service on startup (not recommended)

false

true or false

KUSTO_ALLOW_UNKNOWN_SERVICES

Kusto

Security setting to allow connections to services not in KUSTO_KNOWN_SERVICES

true

true or false

KUSTO_SHOTS_TABLE

Kusto

Enable kusto_get_shots and set its default shots table

None

MyDatabase.ShotsTable

KUSTO_SHOTS_EMBEDDING_METHOD

Kusto

Default embedding method for kusto_get_shots

aoai

slm or aoai

KUSTO_SHOTS_SLM_MODEL

Kusto

Default SLM model for kusto_get_shots

harrier-v1-270m

harrier-v1-270m

FABRIC_API_BASE

Global

Base URL for Microsoft Fabric API

https://api.fabric.microsoft.com/v1

https://api.fabric.microsoft.com/v1

FABRIC_BASE_URL

Global

Base URL for Microsoft Fabric web interface

https://fabric.microsoft.com

https://fabric.microsoft.com

FABRIC_RTI_ALLOWED_TOOLS

Global

Comma-separated service names or full tool names to expose

All tools

kusto,map_get

FABRIC_RTI_KUSTO_DEEPLINK_STYLE

Kusto

Override auto-detection of deeplink style

None

adx or fabric

FABRIC_RTI_ALLOWED_TOOLS accepts service names derived from the registered *_tools modules and full tool names.

Shots Embedding Configuration

All supported AOAI and SLM embedding paths return L2-normalized vectors. kusto_get_shots uses their known unit magnitudes when calculating cosine similarity to avoid recalculating vector magnitudes for every shot. Custom or manually generated EmbeddingVector values must therefore also be L2-normalized.

SLM embeddings

kusto_get_shots defaults to Azure OpenAI embeddings for backward compatibility. To use local SLM embeddings, set embedding_method to slm for an individual call, or set KUSTO_SHOTS_EMBEDDING_METHOD=slm for the MCP server. Configure the server's default model with KUSTO_SHOTS_SLM_MODEL; it defaults to harrier-v1-270m. Explicit tool arguments override these server defaults. The queried database must contain a pre-deployed slm_embeddings_fl function. Follow the SLM embeddings function documentation and select either Azure Data Explorer or Microsoft Fabric from the Version selector in the left pane for the correct deployment instructions.

The documented slm_embeddings_fl implementation supports:

Model

Vector dimensions

jina-v2-small

512

e5-small-v2

384

harrier-v1-270m (default)

640

Example SLM arguments:

{
  "prompt": "Find a few storm events in Texas",
  "cluster_uri": "https://mycluster.westus.kusto.windows.net",
  "database": "MyDatabase",
  "shots_table_name": "Shots",
  "embedding_method": "slm",
  "slm_model_name": "harrier-v1-270m"
}

The SLM prompt is embedded with the query: prefix. The table's EmbeddingVector values must use the same model and vector dimension; for retrieval models, embed the stored EmbeddingText corpus with the corresponding passage: convention.

The MCP tool does not deploy the function or migrate existing shot vectors.

Azure OpenAI embeddings

AOAI is the default embedding method. Follow the AI embeddings plugin documentation and select either Azure Data Explorer or Microsoft Fabric from the Version selector in the left pane for the applicable setup instructions.

Example AOAI arguments:

{
  "prompt": "Find a few storm events in Texas",
  "cluster_uri": "https://mycluster.westus.kusto.windows.net",
  "database": "MyDatabase",
  "shots_table_name": "Shots",
  "embedding_method": "aoai",
  "embedding_endpoint": "https://your-resource.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2024-10-21;impersonate"
}

If embedding_endpoint isn't supplied, AOAI calls use AZ_OPENAI_EMBEDDING_ENDPOINT.

Format Requirements:

https://{your-openai-resource}.openai.azure.com/openai/deployments/{deployment-name}/embeddings?api-version={api-version};impersonate

Components:

  • {your-openai-resource}: Your Azure OpenAI resource name

  • {deployment-name}: Your text embedding deployment name (e.g., text-embedding-ada-002)

  • {api-version}: API version (e.g., 2024-10-21, 2023-05-15)

  • ;impersonate: Authentication method (you might use managed identity)

Authentication Requirements:

  • Your Azure identity must have access to the OpenAI resource

  • In case of using managed identity, the OpenAI resource must be configured to accept managed identity authentication

  • The deployment must exist and be accessible

Configuration of Shots Table

The kusto_get_shots tool retrieves shots that are most similar to your prompt from the shots table. This function requires configuration of:

  • Shots table: Should have an "EmbeddingText" (string) column containing the natural language prompt, "AugmentedText" (string) column containing the respective KQL, and "EmbeddingVector" (dynamic) column containing the embedding vector of the EmbeddingText.

  • Matching embeddings: The prompt and EmbeddingVector column must use the same provider, model, vector dimension, and compatible query/corpus conventions.

Existing AOAI calls remain backward compatible. When embedding_method="slm" is selected, embedding_endpoint is ignored.

🔑 Authentication

In stdio mode (local), the MCP Server integrates with your host operating system's authentication mechanisms. We use Azure Identity via DefaultAzureCredential, which tries these authentication methods in order:

  1. Environment Variables (EnvironmentCredential) - Perfect for CI/CD pipelines

  2. Visual Studio (VisualStudioCredential) - Uses your Visual Studio credentials

  3. Azure CLI (AzureCliCredential) - Uses your existing Azure CLI login

  4. Azure PowerShell (AzurePowerShellCredential) - Uses your Az PowerShell login

  5. Azure Developer CLI (AzureDeveloperCliCredential) - Uses your azd login

  6. Interactive Browser (InteractiveBrowserCredential) - Falls back to browser-based login if needed

If you're already logged in through any of these methods, the Fabric RTI MCP Server will automatically use those credentials in stdio mode.

This MCP server is not intended to be exposed directly as a production HTTP endpoint. If you choose to run it over HTTP, the deployment must provide its own security boundary before requests reach this server. For example, put any Entra-aware authentication layer in front of it. The HTTP configuration options below are guardrails and local-development conveniences; they are not a substitute for a production authentication boundary. By default, HTTP requests must provide an Authorization bearer token; the server performs deployment-agnostic bearer token shape screening and forwards the bearer to downstream Fabric/Kusto services, or exchanges it with OBO when OBO is enabled. It does not perform cryptographic Entra JWT signature, issuer, tenant, or audience validation.

HTTP Mode Configuration for MCP Server

When the MCP server is running locally to the agent in HTTP mode or is deployed to Azure, the following environment variables are used to define and enable HTTP mode. You can find practical examples of this setup in the tests/live/test_kusto_tools_live_http.py file:

Variable

Description

Default

Example

FABRIC_RTI_TRANSPORT

Transport mode for the server

stdio

http

FABRIC_RTI_HTTP_HOST

Host address for HTTP server

127.0.0.1

0.0.0.0

FABRIC_RTI_HTTP_PORT

Port for HTTP server

3000

8080

FABRIC_RTI_HTTP_PATH

HTTP path for MCP endpoint

/mcp

/mcp

FABRIC_RTI_STATELESS_HTTP

Whether to use stateless HTTP mode

false

true

FABRIC_RTI_HTTP_ALLOW_MI

Allow HTTP requests without a bearer to use Managed Identity

false

true

FABRIC_RTI_HTTP_DEBUG_MODE

Local HTTP testing mode that allows local process credentials and permissive CORS

false

true

FABRIC_RTI_HTTP_ALLOWED_HOSTS

Host allow-list for HTTP DNS-rebinding protection

empty

mcp.example.com:*,127.0.0.1:*

FABRIC_RTI_HTTP_ALLOWED_ORIGINS

Origin allow-list for HTTP DNS-rebinding protection

empty

https://mcp.example.com

FABRIC_RTI_CORS_ORIGINS

CORS origins. If unset, HTTP uses loopback origins; debug mode uses *

empty

https://mcp.example.com

FABRIC_RTI_KUSTO_KNOWN_SERVICES_PROBE

Filter kusto_known_services by probing configured services. Values: auto, always, never

auto

always

HTTP credential behavior:

Mode

Behavior

Default HTTP

Requires a bearer token. No local process credentials are used when the bearer is missing.

USE_OBO_FLOW=true

Exchanges the request bearer for the configured Fabric/Kusto audience. Forged tokens fail the OBO exchange.

FABRIC_RTI_HTTP_ALLOW_MI=true

Allows missing bearer tokens and uses ManagedIdentityCredential only. Use only behind a trusted hosting/network/auth boundary.

FABRIC_RTI_HTTP_DEBUG_MODE=true

Restores local HTTP testing convenience with local process credentials, permissive CORS, and unsafe non-loopback binds. Do not use in production.

Binding HTTP to a non-loopback address such as 0.0.0.0 exposes the MCP listener outside the local process boundary. Non-loopback HTTP without an explicit host allow-list is allowed only in FABRIC_RTI_HTTP_DEBUG_MODE. This exception is for local testing only; it does not make direct HTTP exposure production-safe.

HTTP clients connecting to the server need to include the appropriate authentication token in the request headers unless FABRIC_RTI_HTTP_ALLOW_MI or FABRIC_RTI_HTTP_DEBUG_MODE is explicitly enabled:

# Example from test_kusto_tools_live_http.py
auth_header = f"Bearer {token.token}"

headers = {
    "Content-Type": "application/json",
    "Accept": "application/json, text/event-stream",
    "Authorization": auth_header,
}

OBO Flow Authentication

If your scenario involves a user token with a non-Kusto audience and you need to exchange it for a Kusto audience token using the OBO flow, the Fabric RTI MCP Server can handle this exchange automatically by setting the following environment variables:

Variable

Description

Default

Example

USE_OBO_FLOW

Enable OBO flow for token exchange

false

true

FABRIC_RTI_MCP_AZURE_TENANT_ID

Azure AD tenant ID

72f988bf-86f1-41af-91ab-2d7cd011db47 (Microsoft)

72f988bf-86f1-41af-91ab-2d7cd011db47

FABRIC_RTI_MCP_ENTRA_APP_CLIENT_ID

Entra App (AAD) Client ID

Your client ID

FABRIC_RTI_MCP_USER_MANAGED_IDENTITY_CLIENT_ID

User Managed Identity Client ID

Your UMI client ID

This flow is typically used in OAuth scenarios where a gateway like Azure API Management (APIM) is involved (example: https://github.com/ai-microsoft/adsmcp-apim-dual-validation?tab=readme-ov-file). The user authenticates via Entra ID, and APIM forwards the token to the MCP server. The token audience is not Kusto, so the MCP server must perform an OBO token exchange to get a token with the Kusto audience. To support this setup, your Microsoft Entra App must be configured to use Federated Credentials following the official guide: https://learn.microsoft.com/en-us/entra/workload-id/workload-identity-federation. This enables the app to exchange tokens (OBO). Additionally, the Entra app must be granted Azure Data Explorer API permissions to successfully acquire an OBO token with the Kusto audience.

Remote Deployment

The MCP server can be deployed using the method of your choice. For example, you can follow the guide at https://github.com/Azure-Samples/mcp-sdk-functions-hosting-python/blob/main/ExistingServer.md to deploy the MCP server to an Azure Function App.

🛡️ Security Note

Your credentials are always handled securely through the official Azure Identity SDK - we never store or manage tokens directly.

MCP as a phenomenon is very novel and cutting-edge. As with all new technology standards, consider doing a security review to ensure any systems that integrate with MCP servers follow all regulations and standards your system is expected to adhere to. This includes not only the Azure MCP Server, but any MCP client/agent that you choose to implement down to the model provider.

You should follow Microsoft security guidance for MCP servers, including enabling Entra ID authentication, secure token management, and network isolation. Refer to Microsoft Security Documentation for details.

👥 Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

Permissions and Risk

MCP clients can invoke operations based on the user’s Fabric Role-Based Access Control (RBAC) permissions. Autonomous or misconfigured clients may perform destructive actions. You should review and apply least-privilege RBAC roles and implement safeguards before deployment. Certain safeguards, such as flags to prevent destructive operations, are not standardized in the MCP specification and may not be supported by all clients. 

Compliance Responsibility

This MCP server may be installed, used and share data with clients and services, such as third party LLMs, AI agents or services that operate outside Fabric’s compliance boundaries. You are responsible for ensuring that any integration complies with applicable organizational, regulatory, and contractual requirements.

Third Party Components

This MCP server may use or depend on third party components.  You are responsible for reviewing and complying with the licenses and security posture of any third-party components.

Export Control

Use of this software must comply with all applicable export laws and regulations, including U.S. Export Administration Regulations and local jurisdiction requirements.

No Warranty / Limitation of Liability

This software is provided “as is” without warranties or conditions of any kind, either express or implied. Microsoft shall not be liable for any damages arising from use, misuse, or misconfiguration of this software.

🤝 Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

📚 Documentation

Data Collection

The software may collect information about you and your use of the software and send it to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may turn off the telemetry as described in the repository. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with a copy of Microsoft’s privacy statement. Our privacy statement is located at https://go.microsoft.com/fwlink/?LinkID=824704. You can learn more about data collection and use in the help documentation and our privacy statement. Your use of the software operates as your consent to these practices.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

Available Tools

39 tools
activator_create_triggerA
Destructive
    Use this tool create an alert that will fire when the source generates data.

    :param workspace_id: The workspace ID (UUID)
    :param trigger_name: Name of the trigger
    :param kql_cluster_url: The KQL cluster URL
    :param kql_database: The KQL database name
    :param kql_query: The KQL query to monitor. The query MUST be appropriate for the schema of the underlying
        data, otherwise the alert will not function correctly
    :param alert_recipient: Email address of the alert recipient
    :param alert_message: Alert message for the trigger
    :param alert_headline: Alert headline for the trigger
    :param alert_type: Type of alert - "teams" or "email" (defaults to "teams")
    :param kql_polling_frequency_minutes: Polling frequency in minutes. Must be one of: 5, 15, 60, 180, 360, 720,
        1440 (defaults to 5)
    :param artifact_id: If specified, the trigger will be created in the specified Activator artifact.
        If left blank, a new Activator artifact will be created.
    :return: Created trigger details:
        * url: URL back to the trigger in Fabric UI for further management
        * id: Artifact ID if a new one was created
        * displayName: Name of newly created trigger

    Critical:
    * This API call will NOT tell the caller if a KQL query is used which does not match the source data schema,
    so any KQL query should be double-checked upfront.
    
ParametersJSON Schema
NameRequiredDescriptionDefault
kql_queryYes
alert_typeNoteams
artifact_idNo
kql_databaseYes
trigger_nameYes
workspace_idYes
alert_messageYes
alert_headlineYes
alert_recipientYes
kql_cluster_urlYes
kql_polling_frequency_minutesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true, but the description does not address destructiveness. However, it adds critical behavioral notes: the API does not validate whether the KQL query matches the data schema, and it warns about double-checking queries. It also describes output (URL, ID, displayName).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured as a docstring with parameter list and critical note. It is front-loaded with the purpose. While somewhat lengthy, every sentence provides value. Could be slightly more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the high parameter count (11) and lack of annotations, the description covers all parameters, includes return value details, and adds a critical caveat about query validation. This is sufficient for a correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining each of the 11 parameters, including types (UUID, email, integer), default values (alert_type, polling_frequency), and constraints (polling frequency must be one of 5,15,...). The KQL query parameter includes a critical warning about schema compatibility.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'create an alert that will fire when the source generates data.' It uses a specific verb ('create') and resource ('alert/trigger'), and distinguishes itself from siblings like 'activator_list_artifacts' which only lists artifacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (creating a trigger) but does not explicitly state when not to use it or provide alternatives. No guidance on prerequisites or comparisons with other tools, though the sibling list suggests it is the correct tool for creation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

activator_list_artifactsB
Read-only
    Use this tool to list all Activator artifacts in a workspace.

    :param workspace_id: The workspace ID (UUID)
    :return: List of activator artifacts
    
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds no additional behavioral context such as side effects, permissions, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise and front-loaded: two sentences with zero waste. Every sentence serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with output schema, the description is minimally adequate. It states the action and return type, but lacks context on filtering, ordering, or limits, which could be added.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It adds that workspace_id is a UUID, which is useful, but does not provide further details like format or source, missing an opportunity to fully compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all Activator artifacts in a workspace, using a specific verb and resource. It distinguishes from sibling tools like activator_create_trigger and map_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use vs alternatives or when not to use. It simply says 'use this to list', lacking explicit context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_add_custom_endpoint_destinationB
Add a custom endpoint destination to the eventstream definition.

:param session_id: Builder session ID
:param input_streams: List of stream names that feed this destination
:param destination_name: Name for the destination (auto-generated if not provided)
:param endpoint_url: Custom endpoint URL (deprecated - use data connections instead)
:param method: HTTP method (deprecated)
:param headers: Optional HTTP headers (deprecated)
:return: Updated definition summary
ParametersJSON Schema
NameRequiredDescriptionDefault
methodNoPOST
headersNo
session_idYes
endpoint_urlNo
input_streamsYes
destination_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds minimal behavioral context beyond the 'deprecated' labels on endpoint_url and method parameters. It does not disclose potential side effects, authentication requirements, or error consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear one-sentence purpose followed by a parameter list. It avoids unnecessary words, though the structure could be more streamlined. Overall, it is efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, many optional/deprecated) and the existence of an output schema, the description covers the main purpose and parameter meanings but lacks return value descriptions, error handling, or usage examples. It is adequate but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by listing each parameter and providing brief explanations (e.g., 'List of stream names that feed this destination'). However, it lacks format details, constraints, or examples for parameters like 'headers' and 'method'. It adds some value but not full clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Add a custom endpoint destination to the eventstream definition,' specifying the verb and resource. It distinguishes from sibling tools like 'eventstream_add_custom_endpoint_source' and 'eventstream_add_eventhouse_destination' by targeting a custom endpoint specifically.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like 'eventstream_add_eventhouse_destination'. It does not specify prerequisites, conditions, or exclusions, leaving the agent without context for appropriate invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_add_custom_endpoint_sourceA
Add a custom endpoint source to the eventstream definition.

:param session_id: Builder session ID
:param source_name: Name for the source (auto-generated if not provided)
:param endpoint_url: Custom endpoint URL (deprecated - use data connections instead)
:return: Updated definition summary
ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
source_nameNo
endpoint_urlNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate it's not read-only (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds value by noting that endpoint_url is deprecated and mentioning the return type 'Updated definition summary', giving context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and efficiently structured with docstring-style parameter explanations. No unnecessary sentences; each line adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters) and the existence of an output schema, the description covers the action, parameters, and return type adequately. Minor missing context about session prerequisites is not critical for this operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the schema has no descriptions. The description compensates fully by explaining all three parameters: session_id as 'Builder session ID', source_name as auto-generated, and endpoint_url as deprecated with an alternative.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a clear verb and resource: 'Add a custom endpoint source to the eventstream definition.' This distinguishes it from siblings like eventstream_add_custom_endpoint_destination and eventstream_add_sample_data_source by specifying 'custom endpoint source'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 such as adding a destination or derived stream. The description implies usage by describing the action, but lacks explicit context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_add_derived_streamA
Add a derived stream to the eventstream definition.

:param session_id: Builder session ID
:param stream_name: Name for the stream
:param input_nodes: List of node names (sources, operators, or other streams) that feed this stream.
                   If None and only one stream exists, automatically connects to that stream.
:return: Updated definition summary
ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
input_nodesNo
stream_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds behavioral context beyond annotations, such as the automatic connection logic for input_nodes when only one stream exists. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear front-loaded purpose followed by parameter details. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 3 parameters and an output schema, the description covers purpose, parameter semantics, and return value ('Updated definition summary'). No missing essential information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description explains all three parameters (session_id, stream_name, input_nodes) with clear semantics. It details the auto-connection behavior of input_nodes, adding value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Add a derived stream to the eventstream definition.' This is a specific verb+resource combination that clearly distinguishes it from sibling tools like eventstream_add_custom_endpoint_destination or eventstream_add_sample_data_source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance for the 'input_nodes' parameter (auto-connect behavior when None), but does not explicitly state when to use this tool versus alternatives or when not to use it. Usage context is implied but not definitive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_add_eventhouse_destinationB
Add an Eventhouse destination to the eventstream definition.

:param session_id: Builder session ID
:param workspace_id: Fabric workspace ID
:param item_id: Eventhouse item ID
:param database_name: Target database name
:param table_name: Target table name
:param input_streams: List of stream names that feed this destination
:param destination_name: Name for the destination (auto-generated if not provided)
:param data_ingestion_mode: Ingestion mode (ProcessedIngestion or DirectIngestion)
:param encoding: Input encoding
:return: Updated definition summary
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
encodingNoUTF8
session_idYes
table_nameYes
workspace_idYes
database_nameYes
input_streamsYes
destination_nameNo
data_ingestion_modeNoProcessedIngestion

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds no behavioral context beyond 'Add'. It does not disclose side effects, authorization needs, or the mutation's scope. With annotations already conveying mutability, the description offers minimal additional transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured as a docstring with a clear purpose sentence followed by parameter explanations. It is appropriately sized for 9 parameters—each line adds value without excessive verbosity. Front-loading the main action is effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the output schema is available (reducing need to explain return), the description lacks context about how this destination fits into the broader eventstream workflow (e.g., relationship to start_definition, validation). It also doesn't clarify when to choose Eventhouse over other destination types.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides one-line explanations for all 9 parameters (e.g., 'Builder session ID', 'Target database name'), which adds meaning beyond the schema's type/name-only info. It also notes optional parameters and defaults, significantly aiding parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Add an Eventhouse destination' and the target resource 'eventstream definition'. This verb+resource combination distinguishes it from sibling tools like eventstream_add_custom_endpoint_destination or eventstream_add_derived_stream.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., custom_endpoint or derived_stream). It lacks prerequisites, context, or any conditions under which this destination is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_add_sample_data_sourceA
Add a sample data source to the eventstream definition.

:param session_id: Builder session ID
:param sample_type: Type of sample data (Bicycles, Stock, etc.)
:param source_name: Name for the source (auto-generated if not provided)
:return: Updated definition summary
ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
sample_typeNoBicycles
source_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate it is not read-only and not destructive, but the description adds context by detailing parameters and the return value ('Updated definition summary'). It discloses the modification behavior and output, though it omits prerequisites or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: one sentence for purpose, followed by clear parameter docs using standard RST format. No extraneous text; every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, all parameters, and the return value. Coupled with an output schema (present but not shown), it provides sufficient context for a simple add tool. Missing are error conditions or prerequisites, but these are minor given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description's :param lines provide essential meaning: session_id is a builder session ID, sample_type lists examples, and source_name can be auto-generated. This compensates well, though more detail on sample_type options and validation would be beneficial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Add a sample data source') and the resource ('to the eventstream definition'), distinguishing it from sibling tools that add custom endpoints or derived streams.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., eventstream_add_custom_endpoint_source). The description only implies its function through the name 'sample', but does not provide context or exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_clear_definitionA
Destructive
Clear the current eventstream definition and start over.

:param session_id: Builder session ID
:return: Confirmation of clearing
ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, and the description confirms the destructive nature. However, it does not disclose potential side effects or irreversibility beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences with a clear purpose and parameter/return documentation. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and an output schema, the description is minimally complete. It lacks context about session requirements or what 'start over' entails, but suffices for basic understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds a brief explanation for 'session_id' as 'Builder session ID', which provides some meaning beyond the parameter name. However, with 0% schema description coverage, more detail would be beneficial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool clears the current eventstream definition and starts over, using a specific verb 'clear' and resource. It distinguishes from sibling tools like 'eventstream_delete' or 'eventstream_get_current_definition'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like 'eventstream_delete' or 'eventstream_start_definition'. The description does not mention preconditions or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_createA
Destructive
Create an Eventstream item in Microsoft Fabric.
Authentication is handled transparently using Azure Identity.

User-friendly options:
- Provide only eventstream_name: Auto-generates IDs and creates basic eventstream
- Provide only eventstream_id: Auto-generates name as "Eventstream_YYYYMMDD_HHMMSS"
- Provide both: Uses your specified values
- Provide full definition: Advanced users can specify complete eventstream config

:param workspace_id: The workspace ID (UUID)
:param eventstream_name: Name for the new eventstream (auto-generated if not provided)
:param eventstream_id: ID for the eventstream (auto-generated if not provided)
:param definition: Eventstream definition (auto-generated basic one if not provided)
:param description: Optional description for the eventstream
:return: Created eventstream details
ParametersJSON Schema
NameRequiredDescriptionDefault
definitionNo
descriptionNo
workspace_idYes
eventstream_idNo
eventstream_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already show destructiveHint=true; description adds context on transparent authentication via Azure Identity and auto-generation behavior for IDs and names. Does not cover failure modes or idempotency, but adds meaningful detail beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with bullet points and front-loaded purpose. Every sentence adds value, though slightly verbose with repeated option explanations. Could be more succinct but is clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 params, destructive action) and presence of an output schema, the description covers creation scenarios adequately. Missing details on error handling and parameter constraints, but sufficient for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully explains all 5 parameters including auto-generation rules for eventstream_name, eventstream_id, and definition. Provides clear, actionable semantics for each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Create an Eventstream item in Microsoft Fabric' with specific verb and resource. Distinguishes from sibling eventstream_create_from_definition by outlining auto-generation vs full definition options.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes four usage patterns (name only, ID only, both, full definition) but does not explicitly compare with sibling tools like eventstream_create_from_definition, leaving when-to-use somewhat implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_create_from_definitionC
Destructive
Create an eventstream in Fabric from the current definition.

:param session_id: Builder session ID
:param workspace_id: Target Fabric workspace ID
:return: Creation results
ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, indicating mutation. The description adds minimal extra behavioral context: it states the tool creates an eventstream, which is consistent with destructive behavior. However, it does not disclose side effects (e.g., overwriting existing eventstreams), required permissions, or behavior on failure. The return value is vaguely described as 'Creation results'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with no extraneous text. It uses a standard docstring format for parameters and return, making it easy to parse. Every line contributes necessary information. A slight improvement could integrate the param docs into a single flowing sentence, but current structure is clean and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having only 2 simple parameters and an output schema, the description lacks important context. It does not explain the concept of 'current definition' or indicate prerequisites (e.g., having built a definition via other tools like eventstream_validate_definition). The agent may not know how to obtain or prepare the definition, leading to potential misuse. The tool's destructive nature is acknowledged only through annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description bears full responsibility for parameter meaning. It provides brief descriptions for both parameters ('Builder session ID', 'Target Fabric workspace ID') and mentions a return value. These additions are adequate but not rich; they lack details on format, sources, or constraints. Given low schema coverage, the description just meets the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates an eventstream from a definition, specifying the verb 'Create', the resource 'eventstream', and the source 'from the current definition'. This distinguishes it from related tools like eventstream_create (which likely creates from scratch) and eventstream_validate_definition. However, it does not explain what 'the current definition' refers to (e.g., a builder session's loaded definition), leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no explicit guidance on when to use this tool versus alternatives. It does not state prerequisites (e.g., need for a loaded definition) or specify when not to use it (e.g., if creating from scratch). The qualifier 'from the current definition' offers only a weak implicit hint about context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_deleteA
Destructive
Delete an Eventstream item by workspace and item ID.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:param item_id: The eventstream item ID (UUID)
:return: Deletion confirmation
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint=true and readOnlyHint=false. Description adds that authentication is handled transparently and returns deletion confirmation, which provides context beyond annotations. However, it does not elaborate on the scope of deletion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences plus param docs. No redundant information; front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete tool with two params and an output schema, the description covers purpose, parameters, return, and auth. It could mention irreversibility but is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so description compensates by documenting both parameters as UUIDs and clarifying their roles. This adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Delete an Eventstream item by workspace and item ID', providing a specific verb and resource. It is distinct from sibling tools like eventstream_get or eventstream_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage from the verb and resource but does not explicitly state when to use this tool versus alternatives. No when-not or exclusion criteria provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_getA
Read-only
Get an Eventstream item by workspace and item ID.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:param item_id: The eventstream item ID (UUID)
:return: Eventstream item details
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, indicating a safe read operation. The description adds value by noting that authentication is handled transparently via Azure Identity. This extra context is beneficial beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences plus a docstring. Every sentence serves a purpose: stating the core function, mentioning authentication, and describing parameters. No extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-ID tool, the description covers the purpose and parameters adequately. The presence of an output schema means return values do not need explanation. Minor omission: no mention of error handling for invalid IDs, but this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description's docstring provides meaning for both parameters by specifying they are UUIDs. This adds semantic value beyond the schema's type and title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'Eventstream item' along with the specific identifiers (workspace ID and item ID). This distinguishes it from sibling tools that perform other operations like create, delete, or list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need to retrieve an eventstream item by its IDs, but it does not provide explicit guidance on when to use this tool over alternatives like eventstream_get_current_definition or eventstream_get_definition. No exclusion criteria are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_get_current_definitionC
Read-only
Get the current eventstream definition.

:param session_id: Builder session ID
:return: Current definition
ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds no additional behavioral context, such as session requirements or side effects. It merely restates the read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and to the point, with no superfluous words. It efficiently states purpose and parameter. However, it could benefit from a bit more structure or context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (one parameter, output schema exists), the description is minimally adequate. It covers the basic purpose and parameter but lacks context about the session and how this tool fits into the broader workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides a brief explanation for the parameter ':param session_id: Builder session ID', which adds some meaning beyond the schema's 'Session Id' title. However, it does not clarify what a Builder session is or how to obtain it, leaving ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the current eventstream definition. The verb 'Get' and noun 'current eventstream definition' are specific. However, it does not differentiate from sibling tools like eventstream_get_definition or eventstream_get, which may have similar purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 specify prerequisites, context, or when not to use it. Sibling tools exist but are not mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_get_definitionB
Read-only
Get the definition of an Eventstream item.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:param item_id: The eventstream item ID (UUID)
:return: Eventstream definition
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only and non-destructive. The description adds that 'Authentication is handled transparently using Azure Identity,' which is useful context beyond annotations. However, it does not disclose any other behavioral traits (e.g., caching, pagination, or error behavior), and annotations already cover the key safety aspects, so the incremental value is moderate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short (two sentences plus param docs) and front-loaded with the core purpose. It avoids unnecessary fluff. The param documentation follows a clear pattern. Slightly wordy due to Rust-style doc comment syntax, but still efficient. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 required params, output schema present, readOnlyHint in annotations), the description covers the essential purpose and authentication behavior. It could mention what 'definition' includes (e.g., JSON structure) or any limitations, but for a simple getter with an output schema, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description provides basic parameter documentation ('workspace_id: The workspace ID (UUID), item_id: The eventstream item ID (UUID)'). This adds meaning beyond the raw schema (which only has titles and types), but it is minimal—lacking format constraints, examples, or any deeper semantics about how IDs are used or validated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get the definition of an Eventstream item', which is a specific verb-resource combination. It effectively distinguishes from sibling tools like eventstream_get (likely retrieving metadata) and eventstream_get_current_definition (retrieving only current), providing unambiguous purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like eventstream_get or eventstream_get_current_definition. With 18+ eventstream-related siblings, explicit context about choosing this over others is missing, making it hard for an AI to select optimally.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_listA
Read-only
List all Eventstream items in a workspace.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:return: List of eventstream items
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and destructiveHint, so safety is clear. The description adds value by noting transparent Azure Identity authentication, but it does not disclose limitations like pagination or performance considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences plus docstring-like parameter/return notes. Every sentence earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one parameter and an output schema (not shown but present), the description covers purpose, parameter, and return. It could mention that it lists all items (no filtering), but it's mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (no parameter descriptions in schema), but the tool description compensates by explaining the workspace_id parameter as a UUID and its purpose. This adds meaningful semantics beyond the type-only schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all Eventstream items in a workspace. The verb 'List' and resource 'Eventstream items' are specific. It distinguishes from siblings like eventstream_get (retrieves single item) and eventstream_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., other listing tools or filtering options). The description lacks exclusions or context for appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_list_available_componentsB
Read-only
List available components for building eventstreams.

:return: Available components
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's lack of behavioral details is acceptable. The description does not add any context beyond the annotations, but also does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short at two sentences, but the second sentence ':return: Available components' is somewhat redundant given the first sentence. It could be more concise by removing this line.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and a likely simple output, the description is minimally sufficient. However, it does not clarify what 'components' are in this context, which might leave the agent uncertain about the return format without consulting the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and schema coverage is 100%. The description adds no parameter information, which is fine as none is needed. Baseline for 0 parameters is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List available components for building eventstreams', which matches the tool name. However, it does not explicitly differentiate from sibling tools like 'eventstream_list' or 'eventstream_add_sample_data_source', though the name itself suggests a distinct purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. There is no mention of prerequisites, context, or exclusions, leaving the agent without usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_start_definitionA
Start a new eventstream definition builder session.

:param name: Name of the eventstream to create
:param description: Optional description of the eventstream
:return: Session information and next steps
ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate the tool is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds that it starts a session but provides no details about side effects, state changes, or required permissions. With annotations carrying the safety profile, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: three sentences with no redundancy. The docstring-style format clearly separates purpose, parameters, and return value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present (not shown), the description doesn't need to detail return values, but it still gives a vague summary. The tool has only 2 parameters and few complexities, so the description is adequate but lacks depth for a complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It explains the 'name' parameter as 'Name of the eventstream to create' and 'description' as 'Optional description', adding meaning beyond the schema's type-only definitions. However, it could be more detailed (e.g., constraints on name format).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: starting a new eventstream definition builder session. The verb 'start' and resource 'eventstream definition builder session' are specific, and the tool is distinct from siblings like eventstream_create and eventstream_get_definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. The description does not mention prerequisites, when to start a session, or when other tools like eventstream_create_from_definition 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.

eventstream_updateA
Destructive
Update an Eventstream item by workspace and item ID.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:param item_id: The eventstream item ID (UUID)
:param definition: Updated eventstream definition
:return: Updated eventstream details
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
definitionYes
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true and readOnlyHint=false, which align with 'Update.' The description adds value by noting that 'Authentication is handled transparently using Azure Identity,' providing context beyond annotations. However, it does not detail side effects or return format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with a clear docstring format. It includes essential information (purpose, auth, param docs) without extraneous content. The structure is front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 simple parameters and an output schema (not described), the description covers purpose, auth, and param meanings. It lacks explanation of the output structure and potential partial updates, but is otherwise sufficient for a simple update operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description includes a docstring explaining each parameter: workspace_id (UUID), item_id (UUID), and definition (updated eventstream definition). This adds meaning beyond the schema's types and titles. The return value is mentioned but not parameter-specific.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Update an Eventstream item by workspace and item ID,' clearly specifying the verb (update), resource (Eventstream item), and identifiers (workspace and item ID). Among sibling tools, this distinguishes it from create, delete, and get operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when updating an existing eventstream item but does not provide explicit guidance on when to use versus alternatives (e.g., create, delete), nor does it state prerequisites or exclusion conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

eventstream_validate_definitionC
Read-only
Validate the current eventstream definition.

:param session_id: Builder session ID
:return: Validation results
ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description adds no new behavioral context. It fails to disclose what happens on validation failure, whether it returns error messages, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, containing one line and a docstring. While it is concise, it sacrifices necessary detail, making it minimally acceptable. Extra sentences could improve clarity without significant bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (validation) and the existence of an output schema, the description should provide at least a high-level overview of what validation entails. It does not address common questions like what happens on success/failure or typical response structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%. The description only notes 'Builder session ID' for session_id, which adds no meaningful value beyond the parameter name. The description fails to explain the purpose or format of the session_id, leaving the agent with no additional context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Validate the current eventstream definition' which clearly identifies the action (validate) and resource (eventstream definition). It distinguishes from sibling tools like eventstream_create or eventstream_get_definition, though it does not specify what aspects are validated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 vs alternatives. There is no mention of prerequisites, context, or situations where validation is appropriate versus getting the definition or starting it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_commandB
Destructive
Executes a kusto management command on the specified database. If no database is provided,
it will use the default database.

:param command: The kusto management command to execute.
:param cluster_uri: The URI of the Kusto cluster.
:param database: Optional database name. If not provided, uses the default database.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: The result of the command execution as a list of dictionaries (json).
ParametersJSON Schema
NameRequiredDescriptionDefault
commandYes
databaseNo
cluster_uriYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, and the description confirms it executes management commands. However, it adds no further behavioral details like required permissions or effect on data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise: two sentences plus a param listing. Front-loaded with purpose, no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Provides basic purpose and parameters but lacks context on prerequisites, errors, or when to use over similar tools. Output schema exists but description doesn't complement it with additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but description only restates parameter names and optionality. Does not explain what constitutes a valid command, URI format, or client request properties structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it executes a Kusto management command on a specified database. The use of 'management command' distinguishes it from 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. Doesn't explain that management commands differ from queries, nor provides context about when a management command is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_describe_databaseA
Read-only
Retrieves schema information for all entities (tables, external tables, materialized views,
functions, graphs) in the specified database.

In most cases, it would be useful to call kusto_sample_entity() to see *actual* data samples,
since schema information alone may not provide a complete picture of the data (e.g. dynamic columns, etc...)

:param cluster_uri: The URI of the Kusto cluster.
:param database: The name of the database to get schema for.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: List of dictionaries containing entity schema information.
ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYes
cluster_uriYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate a safe read operation. The description adds context about the limitations of schema information (e.g., dynamic columns). It also notes the return type. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening sentence, a useful recommendation note, and parameter documentation. No redundant information, though slightly lengthy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description adequately covers the tool's purpose, parameter details, and a complementary tool recommendation. It is complete for the task of describing database schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by documenting all three parameters: cluster_uri, database, and client_request_properties with clarifications. The optional nature and default of client_request_properties are explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves schema information for all entities in a database. The verb 'retrieves' and resource 'schema information for all entities' are specific. It distinguishes from sibling tools like kusto_describe_database_entity and kusto_list_entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly recommends using kusto_sample_entity() for actual data samples when schema alone is insufficient. It provides a clear usage alternative, though it does not specify other when-not scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_describe_database_entityA
Read-only
Retrieves the schema information for a specific entity (table, external table,
materialized view, function, graph) in the specified database.
If no database is provided, uses the default database.

:param entity_name: Name of the entity to get schema for.
:param entity_type: Type of the entity (table, external-table, materialized-view, function, graph).
:param cluster_uri: The URI of the Kusto cluster.
:param database: Optional database name. If not provided, uses the default database.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: List of dictionaries containing entity schema information.
ParametersJSON Schema
NameRequiredDescriptionDefault
databaseNo
cluster_uriYes
entity_nameYes
entity_typeYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds only the return type (list of dicts) and a basic parameter description, but no extra behavioral context such as permissions, side effects, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph with a clear purpose statement followed by parameter documentation. It is relatively concise but could benefit from more structured formatting (e.g., separate sections).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema, the description's mention of return type (list of dicts) is sufficient. It covers all parameters and the default database behavior. For a read-only tool with good annotations, it is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description compensates by explaining each parameter (entity_name, entity_type, cluster_uri, database, client_request_properties) and their optionality. This adds meaning beyond the schema's title-only definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves schema information for a specific entity in a Kusto database. The verb 'retrieves' and resource 'entity' are specific, and it distinguishes from siblings like kusto_describe_database (describes database itself) and kusto_list_entities (lists entities).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains optional database usage but does not provide explicit guidance on when to use this tool versus related tools like kusto_describe_database or kusto_list_entities. No alternatives or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_diagnosticsA
Read-only
Runs a suite of diagnostic commands and returns a JSON summary of the cluster's
current state. Each section runs independently — if a command fails (e.g., due to
permissions or unsupported features), that section returns an error while others
continue normally.

:param cluster_uri: The URI of the Kusto cluster.
:param database: Optional database name. If not provided, uses the default database.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: A dictionary with keys for each diagnostic area. Each value is either a list
         of row-dicts or {"error": "<message>"} if that command failed.

Sections returned:
* capacity — resource utilization limits (total, consumed, remaining per resource)
* cluster — cluster node info and state
* principal_roles — caller's permission scope and role
* diagnostics — internal cluster diagnostics (health, latency, utilization)
* workload_groups — configured workload groups and their policies
* rowstores — rowstore state and memory usage
* ingestion_failures — ingestion failures from the last 24 hours
ParametersJSON Schema
NameRequiredDescriptionDefault
databaseNo
cluster_uriYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description reinforces this by explaining the diagnostic (read-only) nature and adds transparency about partial failure behavior: each section returns errors independently without affecting others.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured: first sentence states purpose, then a second paragraph explains error handling, parameter details in param/return format, and a list of sections. It's slightly verbose but every sentence adds value, and front-loading is effective.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has multiple diagnostic sections and an output schema (though not shown), the description completes the picture by listing the sections and explaining the return format (dictionary with lists or error dicts). It adequately covers behavior, parameters, and return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 0%, the description carries the full burden. It explains cluster_uri, database, and client_request_properties in the docstring, providing meaning beyond the schema's type definitions. However, it does not give examples or constraints for client_request_properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs a suite of diagnostic commands and returns a JSON summary of the cluster's current state. It uses specific verbs ('runs', 'returns') and identifies the resource ('Kusto cluster'). Among siblings like kusto_query and kusto_command, this tool is distinct as a comprehensive diagnostics suite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes that sections run independently and handle errors gracefully, but it does not explicitly state when to use this tool versus alternatives like kusto_query or kusto_command. The context implies it's for overall health checks, but clear usage boundaries are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_graph_queryA
Read-only
Intelligently executes a graph query using snapshots if they exist,
otherwise falls back to transient graphs.
If no database is provided, uses the default database.

:param graph_name: Name of the graph to query.
:param query: The KQL query to execute after the graph() function.
Must include proper project clause for graph-match queries.
:param cluster_uri: The URI of the Kusto cluster.
:param database: Optional database name. If not provided, uses the default database.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: List of dictionaries containing query results.

Critical:
* Graph queries must have a graph-match clause and a projection clause.
Optionally they may contain a where clause.
* Graph entities are only accessible in the graph-match scope.
    When leaving that scope (sub-sequent '|'), the data is treated as a table,
    and graph-specific functions (like labels()) will not be available.
* Always prefer expressing everything with graph patterns.
  Avoid using graph-to-table operator unless you have no other way around it.
* There is no id() function on graph entities. If you need a unique identifier,
  make sure to check the schema and use an appropriate property.
* There is no `type` property on graph entities.
  Use `labels()` function to get the list of labels for a node or edge.
* Properties that are used outside the graph-match context are renamed to `_` instead of `.`.
  For example, `node.name` becomes `node_name`.
* For variable length paths, you can use `all` or `any` to enforce conditions on all/any edges
  in variable path length elements (e.g. `()-[e*1..3]->() where all(e, labels() has 'Label')`).

Examples:

# Basic node counting with graph-match (MUST include project clause):
kusto_graph_query(
    "MyGraph",
    "| graph-match (node) project labels=labels(node)
     | mv-expand label = labels
     | summarize count() by tostring(label)",
    cluster_uri
)

# Relationship matching:
kusto_graph_query(
    "MyGraph",
    "| graph-match (house)-[relationship]->(character)
        where labels(house) has 'House' and labels(character) has 'Character'
        project house.name, character.firstName, character.lastName
    | project house_name=house_name, character_full_name=character_firstName + ' ' + character_lastName
    | limit 10",
    cluster_uri
)

# Variable length path matching:
kusto_graph_query(
    "MyGraph",
    "| graph-match (source)-[path*1..3]->(m)-[e]->(target)
        where all(path, labels() has 'Label')
        project source, destination, path, m, e, target
    | take 100",
    cluster_uri
)
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
databaseYes
graph_nameYes
cluster_uriYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, ensuring the agent knows it's safe. The description adds detailed behavioral insights: snapshot fallback, default database behavior, graph-match query constraints (e.g., required project clause, property renaming), and the absence of id() and type functions. These exceed what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with an overview, parameter docs, critical notes, and three examples. While lengthy, each section is valuable and the critical notes are essential for correct usage. It is front-loaded with the purpose and param docs before details, but could potentially condense examples to one or two.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (graph queries with special constraints), zero schema parameter descriptions, and the existence of an output schema, the description fully covers: snapshot behavior, default database, all parameter meanings, critical constraints (no id(), no type, property renaming, variable-length path syntax), and return format. Multiple examples further clarify usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description includes a parameter documentation section with 'param' lines explaining each parameter's purpose and constraints. It clarifies 'graph_name' as the graph name, 'query' as KQL query with project clause requirement, 'database' as optional default, and 'client_request_properties' as optional dictionary. This adds essential meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it 'Intelligently executes a graph query using snapshots if they exist, otherwise falls back to transient graphs,' specifying the verb 'executes', the resource 'graph query', and the scope of snapshot usage. This distinguishes it from sibling tools like kusto_query which handle regular Kusto queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context for graph queries with critical notes and examples, but does not explicitly contrast with alternative tools such as kusto_query or provide when-not-to-use guidance. The examples demonstrate usage but lack comparative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_ingest_inline_into_tableB
Ingests inline CSV data into a specified table. The data should be provided as a comma-separated string.
If no database is provided, uses the default database.

:param table_name: Name of the table to ingest data into.
:param data_comma_separator: Comma-separated data string to ingest.
:param cluster_uri: The URI of the Kusto cluster.
:param database: Optional database name. If not provided, uses the default database.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: List of dictionaries containing the ingestion result.
ParametersJSON Schema
NameRequiredDescriptionDefault
databaseNo
table_nameYes
cluster_uriYes
data_comma_separatorYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are readOnlyHint=false and destructiveHint=false, but the description does not elaborate on behavioral traits beyond noting optional parameters. It fails to disclose potential side effects, failure handling, or state changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is reasonably front-loaded with the main action but includes a verbose parameter list in docstring style. Some redundancy exists (e.g., repeating parameter names).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers core functionality and mentions the return type, but given the tool's complexity (5 parameters, ingestion operation), it omits details like data size limits, error handling, and output schema specifics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description partially compensates by explaining each parameter (e.g., 'Comma-separated data string to ingest'). However, it lacks details on constraints, formats, or allowed values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the action ('Ingests inline CSV data into a specified table') with clear verb and resource. It distinguishes from sibling tools like kusto_query and kusto_command by focusing on data ingestion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides basic usage (data as comma-separated string, optional database) but lacks guidance on when to use this tool versus alternatives, prerequisites, or limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_known_servicesA
Read-only
Retrieves a list of all Kusto services known to the MCP.
Could be null if no services are configured.

:return: List of objects, {"service": str, "description": str, "default_database": str}
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true. The description adds that the result could be null if no services are configured, and details the return object structure, providing useful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences plus a return type note. No wasted words, front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and an output schema described in text, the description is adequate. It lacks error handling or permission notes, but for a simple read-only list tool, this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, and schema coverage is 100% (empty). Baseline score of 4 applies as the description does not need to add parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Retrieves' and the resource 'list of all Kusto services known to the MCP', which distinguishes it from sibling tools like kusto_query or kusto_command. The return type is also specified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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, but the purpose is straightforward. For a simple retrieval tool with clear context, a moderate score is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_list_entitiesA
Read-only
Retrieves a list of all entities (databases, tables, external tables, materialized views,
functions, graphs) in the Kusto cluster.

:param entity_type: Type of entities to list: "databases", "tables", "external-tables",
"materialized-views", "functions", "graphs".
:param database: The name of the database to list entities from.
Required for all types except "databases" (which are top-level).
:param cluster_uri: The URI of the Kusto cluster.
:param client_request_properties: Optional dictionary of additional client request properties.

:return: List of dictionaries containing entity information.
ParametersJSON Schema
NameRequiredDescriptionDefault
databaseNo
cluster_uriYes
entity_typeYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds minimal behavioral context beyond listing the return type. It does not discuss pagination, limits, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a clear purpose then parameter details. However, the docstring format (':param' and ':return') is slightly verbose. It could be more concise without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a listing tool with multiple entity types, the description covers the core functionality and dependencies adequately. It lacks edge-case context like handling of missing required database or system entities, but an output schema exists to specify return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates by clearly defining each parameter, including valid entity_type values, when 'database' is required, and the purpose of client_request_properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (Retrieves), the resource (list of all entities), and the scope (in the Kusto cluster). It enumerates specific entity types, distinguishing it from sibling tools like kusto_query or kusto_describe_database_entity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the role of the 'database' parameter for different entity types but does not provide when-to-use or when-not-to-use guidance relative to other tools. No explicit alternatives or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_queryA
Read-only
Executes a KQL query on the specified database. If no database is provided,
it will use the default database.

:param query: The KQL query to execute.
:param cluster_uri: The URI of the Kusto cluster.
:param database: Optional database name. If not provided, uses the default database.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: The result of the query execution as a list of dictionaries (json).
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
databaseNo
cluster_uriYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that it returns results as a list of dictionaries, which is basic. No additional behavioral traits (e.g., rate limits, error behavior) are disclosed, but nothing contradicts annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear purpose statement followed by a structured docstring listing parameters. It avoids extraneous text, though the docstring format is slightly redundant with the input schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that annotations cover safety and output schema exists, the description adequately explains the core purpose and key parameters. It does not address edge cases like timeouts or authentication, but for a straightforward query tool, it's reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It provides brief meanings for each parameter (e.g., 'The KQL query to execute'), which adds value over bare names. However, it lacks format details or constraints, making it merely adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Executes a KQL query on the specified database,' which provides a specific verb (Executes) and resource (KQL query on database). This distinguishes it from siblings like 'kusto_command' (admin commands) and 'kusto_describe_database' (describing metadata).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 mentions fallback to default database but does not contrast with other query or data tools, leaving the agent without decision context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_sample_entityA
Read-only
Retrieves a data sample from the specified entity.
If no database is provided, uses the default database.

:param entity_name: Name of the entity to sample data from.
:param entity_type: Type of the entity (table, external-table, materialized-view, function, graph).
:param cluster_uri: The URI of the Kusto cluster.
:param sample_size: Number of records to sample. Defaults to 10.
:param database: Optional database name. If not provided, uses the default database.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: List of dictionaries containing sampled records.
ParametersJSON Schema
NameRequiredDescriptionDefault
databaseNo
cluster_uriYes
entity_nameYes
entity_typeYes
sample_sizeNo
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds context: default database handling, parameter descriptions, return type (list of dicts). No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single paragraph clearly front-loaded with purpose. Parameter descriptions are compact and informative. Slightly verbose with :param notation, but efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers all parameters, defaults, and return type. Output schema exists, so return description is supplementary. Lacks error conditions or edge cases, but adequate for a read-only sample tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, description fully compensates: explains each parameter's purpose, default values, and optionality. Adds meaning beyond schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Precisely states action: 'Retrieves a data sample from the specified entity.' Includes contextual detail about default database. Distinct from siblings like kusto_query and kusto_list_entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions database fallback behavior but does not explicitly state when to use this tool over alternatives (e.g., kusto_query or kusto_list_entities). No when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_show_commandA
Read-only
Executes a Kusto .show management command on the specified database.
If no database is provided, it will use the default database.

Only .show commands are accepted.

:param command: The .show command to execute.
:param cluster_uri: The URI of the Kusto cluster.
:param database: Optional database name. If not provided, uses the default database.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: The result of the command execution as a list of dictionaries (json).
ParametersJSON Schema
NameRequiredDescriptionDefault
commandYes
databaseNo
cluster_uriYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and non-destructive nature. The description adds value by detailing default database behavior and return format (list of dictionaries as JSON), going beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficient, starting with purpose and constraints, then parameter details. Some redundancy exists (default database mentioned twice), but overall it's well-organized and not overly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's core functionality, constraints, and parameters adequately. For a simple read-only tool with an output schema, missing elements like error handling or sibling differentiation are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining each parameter: command, cluster_uri, database (including default behavior), and client_request_properties. This adds essential meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Executes a Kusto .show management command' with a specific verb and resource. It further distinguishes by limiting to .show commands, which differentiates it from sibling tools like kusto_command 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Only .show commands are accepted,' providing a clear constraint. However, it does not mention alternatives like kusto_command for other commands, so it lacks explicit when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kusto_show_queryplanA
Read-only
Retrieves the query execution plan without actually running the query.
This is significantly lighter than execution and useful for understanding
performance characteristics and estimating query impact.

:param query: The KQL query to get the execution plan for.
:param cluster_uri: The URI of the Kusto cluster.
:param database: Optional database name. If not provided, uses the default database.
:param client_request_properties: Optional dictionary of additional client request properties.
:return: A compact dictionary with the following keys:
    * query_text — the query as received by the engine
    * stats — planning statistics: Duration, PlanSize (bytes), RelopSize (bytes)
    * relop_tree — the logical operator tree (compact JSON)
    * execution_hints — extracted from the physical plan:
        * estimated_rows — total row count the engine expects to process
        * concurrency — parallelism hint (-1 = auto, 1 = parallel partitions)
        * spread — node spread hint (-1 = auto, 1 = distributed)
        * shard_scans — per-shard info: total_rows and has_selection (filter applied)
    * error — if the query has semantic errors (e.g., bad column name), this contains
        the error message. The query is NOT executed.

Critical:
* This does NOT execute the query — it only generates the plan.
* The plan shows the logical operators the engine would use.
* Use this to estimate cost and understand performance before running expensive queries.
* PlanSize indicates the overall plan complexity; RelopSize indicates the logical tree size.
* execution_hints.estimated_rows and shard_scans reveal the data volume the engine expects to scan.
* has_selection=true in shard_scans means a filter narrows the scan (extent pruning applies).
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
databaseNo
cluster_uriYes
client_request_propertiesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that the tool does not execute the query, only generates the plan, and describes the return structure including error handling. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections (param, return, critical), uses bullet points for return keys, and is appropriately sized. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complexity is moderate with 4 params and a detailed return object. The description fully covers the purpose, parameters, return structure, and usage context. With an output schema present, the return documentation is sufficient. It clearly differentiates from siblings like kusto_query.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description manually documents each parameter (query, cluster_uri, database, client_request_properties) and the return value with detailed keys, adding significant meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Retrieves the query execution plan without actually running the query', specifying the verb and resource. It distinguishes from execution by emphasizing that no query is run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'This is significantly lighter than execution and useful for understanding performance characteristics and estimating query impact' and 'Critical: This does NOT execute the query'. This tells when to use (estimation) and when not (actual execution).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_createA
Destructive
Create a Map item in Microsoft Fabric.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:param map_name: Name for the new map item
:param definition: Map item definition (auto-generated basic one if not provided)
:param description: Optional description for the map
:param folder_id: Optional folder ID (UUID) to place the map in.
If not specified, the Map is created with the workspace root folder.
:return: Created map details
ParametersJSON Schema
NameRequiredDescriptionDefault
map_nameYes
folder_idNo
definitionNo
descriptionNo
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as not read-only (readOnlyHint=false) and destructive (destructiveHint=true). The description adds minimal behavioral context beyond stating it creates an item and that authentication is transparent. It does not detail side effects, permissions, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a concise docstring with parameter list and purpose. It is front-loaded with the action and includes a return statement. It is efficient but could be slightly more concise by removing the param details if schema descriptions existed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema exists (not shown), the return value line is acceptable. The description covers key parameters but lacks details on constraints (e.g., map_name uniqueness, definition structure). It is minimally adequate for a create tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description provides meaningful parameter explanations: workspace_id (UUID), map_name, definition (auto-generated if not provided), description (optional), folder_id (defaults to root folder). This adds significant value beyond the property types and names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates a Map item in Microsoft Fabric. The verb 'Create' and resource 'Map item' are specific and distinct from sibling tools like map_delete, map_get, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for creating a map but lacks explicit guidance on when to use this tool versus alternatives, or conditions for use. It mentions authentication handling but does not specify prerequisites or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_deleteA
Destructive
Delete a Map item by workspace and item ID.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:param item_id: The map item ID (UUID)
:return: Error details or empty response on success
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true (destructive) and readOnlyHint=false (not readonly). The description adds that authentication is 'handled transparently using Azure Identity' and mentions return type (error details or empty response). This provides some context beyond annotations, but not deeply detailed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct (two sentences plus parameter list) and front-loaded with the core action. No unnecessary words. Could be slightly more structured, but efficient overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with two required parameters and an output schema (not shown), the description covers essential aspects: purpose, parameters, auth handling, and return. Adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates by indicating both parameters are UUIDs. However, it does not specify format constraints or expected values beyond the type, leaving gaps in semantic meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete'), the resource ('Map item'), and the required identifiers ('workspace and item ID'). It unambiguously distinguishes from sibling tools like map_create, map_get, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 (e.g., map_update or map_get). Does not mention prerequisites or scenarios for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_getA
Read-only
Get a Map item by workspace and item ID.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID) of the Map item
:param item_id: The map item ID (UUID)
:return: Map item details
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that authentication uses Azure Identity, which provides context beyond annotations. However, it does not elaborate on other behaviors like error handling or response details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with only three short sentences, front-loading the main purpose. The parameter documentation is structured and every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description's minimal return statement is acceptable. However, it could mention what the Map item details include or error cases, making it only moderately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but the description explains that workspace_id and item_id are UUIDs and identifies their roles. This adds meaningful context beyond the schema's type definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves a Map item by workspace and item ID, using a specific verb and resource. It distinguishes from sibling tools like map_create, map_delete, and map_list, which have different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 such as map_list for listing or map_get_definition for getting definition. The description lacks explicit conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_get_definitionA
Read-only
Get the definition of a Map item.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:param item_id: The map item ID (UUID)
:return: Map definition
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that authentication is handled transparently via Azure Identity, which is useful context beyond the annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at four sentences, covering purpose, auth, and both parameters with no unnecessary words. Every sentence serves a clear function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 required string params, read-only, output schema present), the description covers purpose, auth, parameters, and return value. It could mention what a 'map definition' contains, but the output schema handles that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description compensates by adding the UUID format for both parameters and explicitly stating they are required. This adds significant meaning beyond the bare schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get the definition of a Map item,' using a specific verb and resource. It distinguishes from sibling tools like map_get (which retrieves the map object) and map_update_definition.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions transparent authentication but does not provide explicit guidance on when to use this tool versus alternatives (e.g., map_get). Usage context is implied but not clearly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_listA
Read-only
List all Map items in a workspace.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:return: The list of map items in the specified workspace or error details
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds that authentication is handled transparently via Azure Identity and specifies return type (list or error details), providing additional behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is two concise sentences plus standard param/return documentation lines with no wasted words. Purpose is front-loaded, making it efficient for the agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one parameter and an output schema, the description covers purpose, authentication, parameter meaning, and return type. It is complete and leaves no gaps for the agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description includes a clear parameter documentation line ':param workspace_id: The workspace ID (UUID)', which adds meaningful guidance about the parameter's purpose and expected format beyond just the schema's type string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'List all Map items in a workspace', using specific verb 'list' and resource 'Map items'. It distinguishes from siblings like map_get (single item) and map_create (create).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description indicates when to use (to list all Map items in a workspace). It does not explicitly state when not to use or mention alternatives, but the sibling tools context provides that implicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_updateA
Destructive
Update a Map item's display name and description by workspace and item ID.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:param item_id: The Map item ID (UUID)
:param display_name: The Map display name. The display name must follow naming rules according to item type.
:param description: The Map description. Maximum length is 256 characters.
:return: Updated map details
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
descriptionNo
display_nameNo
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, so the description adds some value by specifying parameter constraints (naming rules, max length). However, it does not elaborate on what 'destructive' entails or any side effects beyond the update.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the purpose. Every sentence adds value: purpose, auth, parameter docs. No wasted words, though the param list could be integrated more succinctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update tool with 4 parameters (2 required) and an output schema, the description covers purpose, auth, and parameter constraints. However, it omits that display_name and description are optional (can be null), and does not mention what the output contains beyond 'updated map details'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description compensates by specifying that workspace_id and item_id are UUIDs, and adding constraints for display_name and description (naming rules, max 256 chars). This adds meaning beyond the schema's type definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Update a Map item's display name and description' with specific verb and resource. It distinguishes from sibling tools like map_create, map_delete, and especially map_update_definition, which updates a different aspect.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 like map_update_definition. The description only mentions authentication handling, which is not a usage guideline. Missing context on prerequisites or scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_update_definitionB
Destructive
Update a Map item's definition by workspace and item ID.
Authentication is handled transparently using Azure Identity.

:param workspace_id: The workspace ID (UUID)
:param item_id: The map item ID (UUID)
:param definition: Updated map definition
:return: Updated map details
ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
definitionYes
workspace_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate destructiveHint=true, but the description does not elaborate on destructive behavior. It only states 'Update' which is consistent with readOnlyHint=false, so no contradiction, but no added context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short but includes a docstring that repeats the purpose. It is adequately front-loaded but could be more concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the destructive hint and lack of parameter details, the description is incomplete. It does not explain the impact of updating the definition or any constraints on the definition object.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description merely lists parameter names with types already in the schema. No extra meaning or constraints are provided for the 'definition' object.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update a Map item's definition by workspace and item ID', providing a specific verb and resource. It distinguishes from siblings like map_create and map_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions authentication but lacks explicit guidance on when to use this tool versus alternatives like map_update. No when-not conditions are provided.

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. Dates show when Glama detected each change.

  1. 1 tool updatev0.6.2
    • Removedkusto_get_shots
  2. 1 tool updatev0.1.1
    • Addedkusto_show_command
  3. 39 tool updatesv0.1.0
    • First observedactivator_create_trigger
    • First observedactivator_list_artifacts
    • First observedeventstream_add_custom_endpoint_destination
    • First observedeventstream_add_custom_endpoint_source
    • First observedeventstream_add_derived_stream
    • First observedeventstream_add_eventhouse_destination
    • First observedeventstream_add_sample_data_source
    • First observedeventstream_clear_definition
    • First observedeventstream_create
    • First observedeventstream_create_from_definition
    • First observedeventstream_delete
    • First observedeventstream_get
    • First observedeventstream_get_current_definition
    • First observedeventstream_get_definition
    • First observedeventstream_list
    • First observedeventstream_list_available_components
    • First observedeventstream_start_definition
    • First observedeventstream_update
    • First observedeventstream_validate_definition
    • First observedkusto_command
    • First observedkusto_deeplink_from_query
    • First observedkusto_describe_database
    • First observedkusto_describe_database_entity
    • First observedkusto_diagnostics
    • First observedkusto_get_shots
    • First observedkusto_graph_query
    • First observedkusto_ingest_inline_into_table
    • First observedkusto_known_services
    • First observedkusto_list_entities
    • First observedkusto_query
    • First observedkusto_sample_entity
    • First observedkusto_show_queryplan
    • First observedmap_create
    • First observedmap_delete
    • First observedmap_get
    • First observedmap_get_definition
    • First observedmap_list
    • First observedmap_update
    • First observedmap_update_definition

TDQS

B3.4/5.0
Disambiguation5/5

Tools are clearly separated by domain prefixes (activator_, eventstream_, kusto_, map_), and within each prefix, tools have distinct purposes (e.g., create vs. list vs. get). No overlapping functionality between tools from different domains, and within each domain, operations are uniquely named.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern, prefixed by domain (e.g., eventstream_add_sample_data_source, kusto_query). The naming is descriptive and predictable across all 39 tools, with no mixing of conventions or ambiguous verbs.

Tool Count3/5

39 tools is on the high side for a single server, but it covers multiple distinct Fabric services (Activator, Eventstream, Kusto, Map). The count is borderline; it could be split into separate servers, but the grouping is logical and each tool serves a clear purpose.

Completeness3/5

Kusto tools are very comprehensive (query, schema, diagnostics, graph, ingestion), and Eventstream tools provide a full builder workflow (create, add components, validate). However, Activator is thin (only create_trigger and list_artifacts), missing update/delete, and Map tools lack advanced operations. Overall, some areas are undercovered.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI agents to interact with Microsoft Fabric by exposing tools for managing workspaces, notebooks, SQL queries, pipelines, and Livy Spark sessions. It provides a comprehensive set of operations for data engineering and analytics tasks using standard Azure authentication.
    37
    4
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to interact with Microsoft Fabric and Power BI services through the Model Context Protocol. Users can manage workspaces, execute DAX queries, refresh datasets, and create Fabric notebooks using natural language.
    6
    22
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to query and explore schemas in Microsoft Fabric lakehouses, warehouses, and SQL databases using natural language, with tools for executing read-only SQL queries and searching tables, columns, and query patterns.
    3
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/microsoft/fabric-rti-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server