Microsoft Fabric RTI MCP Server
OfficialThis server enables AI agents to interact with Microsoft Fabric Real-Time Intelligence (RTI) services — including Eventhouse, Eventstreams, Activator, and Maps — for data querying, stream management, alerting, and geospatial visualization via the Model Context Protocol (MCP).
Eventhouse (Kusto) — Query & Analytics
Execute KQL queries and management commands (
.show,.create,.alter,.drop)List and describe entities: databases, tables, external tables, materialized views, functions, graphs
Execute graph queries; sample data from tables, views, or functions
Ingest inline CSV data into a specified table
Semantically search for similar KQL query examples using Azure OpenAI embeddings
Generate deep-link URLs to open queries in ADX or Fabric query workbench
Retrieve query execution plans and run cluster diagnostics
List all known/configured Kusto services
Eventstreams — Real-Time Stream Management
List, get, create, update, and delete Eventstreams
Build Eventstreams interactively via a session-based builder:
Add sample data or custom endpoint sources
Add derived streams and Eventhouse/custom endpoint destinations
Validate definitions before deployment and create from completed definitions
List available Eventstream components
Activator — Real-Time Alerting
List existing Activator artifacts in a workspace
Create triggers that monitor KQL queries and send email or Microsoft Teams notifications with configurable polling frequency
Maps — Geospatial Visualization
List, get, create, update (partial or full definition), and delete Map items
Authentication & Configuration
Integrates with Azure Identity via
DefaultAzureCredential(supports environment variables, Azure CLI, Visual Studio, interactive browser, OBO token exchange, and more)Highly configurable via environment variables (Kusto cluster defaults, Fabric API URLs, allowed tools, embedding endpoints, KQL shots table, etc.)
Supports a KQL Copilot Skill providing AI agents with deep KQL expertise for writing, debugging, and reviewing queries
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Microsoft Fabric RTI MCP ServerAnalyze the StormEvents table for trends over the past year"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🎯 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.
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 MCPkusto_query- Execute KQL queries on the specified databasekusto_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 databasekusto_describe_database- Get schema information for all entities in a databasekusto_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 graphskusto_sample_entity- Retrieve sample records from a table, external table, materialized view, or functionkusto_ingest_inline_into_table- Ingest inline CSV data into a specified tablekusto_get_shots(whenKUSTO_SHOTS_TABLEis configured) - Find semantically similar saved KQL queries using local SLM or Azure OpenAI embeddingskusto_deeplink_from_query- Generate a deeplink URL to open a KQL query in Azure Data Explorer Web Explorer or Microsoft Fabric query workbenchkusto_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 workspaceeventstream_get- Get detailed information about a specific Eventstreameventstream_get_definition- Retrieve complete JSON definition of an Eventstreameventstream_create- Create new Eventstreams with custom configuration (auto-includes default stream)eventstream_update- Modify existing Eventstream settings and destinationseventstream_delete- Remove Eventstreams and associated resources
Builder Tools (11 tools):
Session Management:
eventstream_start_definition,eventstream_get_current_definition,eventstream_clear_definitionSources:
eventstream_add_sample_data_source,eventstream_add_custom_endpoint_sourceStreams:
eventstream_add_derived_streamDestinations:
eventstream_add_eventhouse_destination,eventstream_add_custom_endpoint_destinationValidation:
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 workspaceactivator_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 workspacemap_get- Get detailed information about a specific Map itemmap_get_definition- Retrieve the full JSON definition of a Map itemmap_create- Create a new Map item from a provided configurationmap_update_definition- Replace the full JSON definition of an existing Map itemmap_update- Partially update properties of an existing Map itemmap_delete- Delete a Map item and its associated configuration
Getting Started
Prerequisites
Install either the stable or Insiders release of VS Code:
Install the GitHub Copilot and GitHub Copilot Chat extensions
Install
uv
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"or, check here for other install options
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 fileThe 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_URIandKUSTO_SERVICE_DEFAULT_DBprovide default cluster and database settings.AZ_OPENAI_EMBEDDING_ENDPOINTconfigures the default AOAI embedding method used bykusto_get_shots.
From GitHub Copilot CLI
Use the interactive command within a GitHub Copilot CLI session:
/mcp addOr 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)
Make sure you have Python 3.10+ installed properly and added to your PATH.
Clone the repository
Install the dependencies (
pip install .oruv tool install .)Add the settings below into your vscode
settings.jsonor yourmcp.jsonfile.Modify the path to match the repo location on your machine.
Modify the cluster uri in the settings to match your cluster.
Modify the cluster default database in the settings to match your database.
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:
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 theuvwrapper.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.exeprocess.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
ProcessIdin 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.
Ensure the MCP server is already running.
Press F5 and select
Python Debugger: Attach to Fabric RTI MCP.Wait for the VS Code debug toolbar to appear.
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
Open GitHub Copilot in VS Code and switch to Agent mode
You should see the Fabric RTI MCP Server in the list of tools
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"
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 | Default Kusto cluster URI | None |
|
| Kusto | Default database name for Kusto queries |
|
|
| Kusto | Azure OpenAI endpoint used when | None |
|
| Kusto | JSON array of preconfigured Kusto services | None |
|
| Kusto | Whether to eagerly connect to default service on startup (not recommended) |
|
|
| Kusto | Security setting to allow connections to services not in |
|
|
| Kusto | Enable | None |
|
| Kusto | Default embedding method for |
|
|
| Kusto | Default SLM model for |
|
|
| Global | Base URL for Microsoft Fabric API |
|
|
| Global | Base URL for Microsoft Fabric web interface |
|
|
| Global | Comma-separated service names or full tool names to expose | All tools |
|
| Kusto | Override auto-detection of deeplink style | None |
|
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 |
| 512 |
| 384 |
| 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};impersonateComponents:
{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
EmbeddingVectorcolumn 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:
Environment Variables (
EnvironmentCredential) - Perfect for CI/CD pipelinesVisual Studio (
VisualStudioCredential) - Uses your Visual Studio credentialsAzure CLI (
AzureCliCredential) - Uses your existing Azure CLI loginAzure PowerShell (
AzurePowerShellCredential) - Uses your Az PowerShell loginAzure Developer CLI (
AzureDeveloperCliCredential) - Uses your azd loginInteractive 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 |
| Transport mode for the server |
|
|
| Host address for HTTP server |
|
|
| Port for HTTP server |
|
|
| HTTP path for MCP endpoint |
|
|
| Whether to use stateless HTTP mode |
|
|
| Allow HTTP requests without a bearer to use Managed Identity |
|
|
| Local HTTP testing mode that allows local process credentials and permissive CORS |
|
|
| Host allow-list for HTTP DNS-rebinding protection | empty |
|
| Origin allow-list for HTTP DNS-rebinding protection | empty |
|
| CORS origins. If unset, HTTP uses loopback origins; debug mode uses | empty |
|
| Filter |
|
|
HTTP credential behavior:
Mode | Behavior |
Default HTTP | Requires a bearer token. No local process credentials are used when the bearer is missing. |
| Exchanges the request bearer for the configured Fabric/Kusto audience. Forged tokens fail the OBO exchange. |
| Allows missing bearer tokens and uses |
| 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 |
| Enable OBO flow for token exchange |
|
|
| Azure AD tenant ID |
|
|
| Entra App (AAD) Client ID | Your 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
Changelog - Release history and breaking changes
Contributing - Contribution guidelines
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 toolsactivator_create_triggerADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kql_query | Yes | ||
| alert_type | No | teams | |
| artifact_id | No | ||
| kql_database | Yes | ||
| trigger_name | Yes | ||
| workspace_id | Yes | ||
| alert_message | Yes | ||
| alert_headline | Yes | ||
| alert_recipient | Yes | ||
| kql_cluster_url | Yes | ||
| kql_polling_frequency_minutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_artifactsBRead-only
Use this tool to list all Activator artifacts in a workspace.
:param workspace_id: The workspace ID (UUID)
:return: List of activator artifacts
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| method | No | POST | |
| headers | No | ||
| session_id | Yes | ||
| endpoint_url | No | ||
| input_streams | Yes | ||
| destination_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| source_name | No | ||
| endpoint_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| input_nodes | No | ||
| stream_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| encoding | No | UTF8 | |
| session_id | Yes | ||
| table_name | Yes | ||
| workspace_id | Yes | ||
| database_name | Yes | ||
| input_streams | Yes | ||
| destination_name | No | ||
| data_ingestion_mode | No | ProcessedIngestion |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| sample_type | No | Bicycles | |
| source_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_definitionADestructive
Clear the current eventstream definition and start over.
:param session_id: Builder session ID
:return: Confirmation of clearing
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_createADestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| definition | No | ||
| description | No | ||
| workspace_id | Yes | ||
| eventstream_id | No | ||
| eventstream_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_definitionCDestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_deleteADestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_getARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_definitionCRead-only
Get the current eventstream definition.
:param session_id: Builder session ID
:return: Current definition
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_definitionBRead-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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_listARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_componentsBRead-only
List available components for building eventstreams.
:return: Available components
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_updateADestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| definition | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_definitionCRead-only
Validate the current eventstream definition.
:param session_id: Builder session ID
:return: Validation results
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_commandBDestructive
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).
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| database | No | ||
| cluster_uri | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_deeplink_from_queryARead-only
Build a deeplink URL that opens the given KQL query in the appropriate web explorer UI.
For Azure Data Explorer clusters, opens in Kusto Web Explorer (dataexplorer.azure.com).
For Microsoft Fabric Eventhouse clusters, opens in the Fabric query workbench.
The cluster type is auto-detected from the URI. If detection fails,
falls back to querying the cluster with `.show version`.
:param cluster_uri: The URI of the Kusto cluster.
:param database: The database name.
:param query: The KQL query text.
:return: A deeplink URL string, or None if the cluster type could not be determined.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| database | Yes | ||
| cluster_uri | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 behavioral details: cluster type auto-detection, fallback to .show version, and that it returns None on failure. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is clear and front-loaded with purpose. Parameter docs are structured but could be integrated more compactly. Still concise overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, cluster detection, fallback, parameters, and return. For a simple URL-building tool with an output schema, this is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides only titles. Description adds parameter descriptions (cluster_uri, database, query) and return value. This adds significant meaning beyond the schema, though could include format or encoding details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it builds a deeplink URL for a KQL query, specifying different target UIs for Azure Data Explorer and Fabric. This clearly distinguishes it from sibling tools like kusto_query that execute queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (to open a query in a web UI) and the auto-detection fallback behavior. It does not explicitly list alternatives, but the context from sibling tools makes it clear when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kusto_describe_databaseARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| database | Yes | ||
| cluster_uri | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_entityARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| cluster_uri | Yes | ||
| entity_name | Yes | ||
| entity_type | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_diagnosticsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| cluster_uri | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_queryARead-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
)
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| database | Yes | ||
| graph_name | Yes | ||
| cluster_uri | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| table_name | Yes | ||
| cluster_uri | Yes | ||
| data_comma_separator | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_servicesARead-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}
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_entitiesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| cluster_uri | Yes | ||
| entity_type | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_queryARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| database | No | ||
| cluster_uri | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_entityARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | ||
| cluster_uri | Yes | ||
| entity_name | Yes | ||
| entity_type | Yes | ||
| sample_size | No | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_commandARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| database | No | ||
| cluster_uri | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_queryplanARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| database | No | ||
| cluster_uri | Yes | ||
| client_request_properties | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_createADestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| map_name | Yes | ||
| folder_id | No | ||
| definition | No | ||
| description | No | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_deleteADestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_getARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_definitionARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_listARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_updateADestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| description | No | ||
| display_name | No | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_definitionBDestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | ||
| definition | Yes | ||
| workspace_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 tool update
v0.6.2- Removed
kusto_get_shots
1 tool update
v0.1.1- Added
kusto_show_command
39 tool updates
v0.1.0- First observed
activator_create_trigger - First observed
activator_list_artifacts - First observed
eventstream_add_custom_endpoint_destination - First observed
eventstream_add_custom_endpoint_source - First observed
eventstream_add_derived_stream - First observed
eventstream_add_eventhouse_destination - First observed
eventstream_add_sample_data_source - First observed
eventstream_clear_definition - First observed
eventstream_create - First observed
eventstream_create_from_definition - First observed
eventstream_delete - First observed
eventstream_get - First observed
eventstream_get_current_definition - First observed
eventstream_get_definition - First observed
eventstream_list - First observed
eventstream_list_available_components - First observed
eventstream_start_definition - First observed
eventstream_update - First observed
eventstream_validate_definition - First observed
kusto_command - First observed
kusto_deeplink_from_query - First observed
kusto_describe_database - First observed
kusto_describe_database_entity - First observed
kusto_diagnostics - First observed
kusto_get_shots - First observed
kusto_graph_query - First observed
kusto_ingest_inline_into_table - First observed
kusto_known_services - First observed
kusto_list_entities - First observed
kusto_query - First observed
kusto_sample_entity - First observed
kusto_show_queryplan - First observed
map_create - First observed
map_delete - First observed
map_get - First observed
map_get_definition - First observed
map_list - First observed
map_update - First observed
map_update_definition
TDQS
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.
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.
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.
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
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
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Provide real-time data querying and visualization by integrating Tako with your agents. Generate o…
- SkilderOAuthai.skilder
One place to build, share, and govern the skills and tools your AI agents use at work.
Let AI agents query data and act across all your business apps via MCP.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables 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.374MIT
- AlicenseBqualityDmaintenanceEnables 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.6222MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.3MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to query PowerBI workspaces, datasets, and execute DAX queries through the PowerBI REST API.7MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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