Skip to main content
Glama

ms-fabric-mcp-server

PyPI version Python License: MIT Tests

A Model Context Protocol (MCP) server for Microsoft Fabric. Exposes Fabric operations (workspaces, notebooks, SQL, Livy, pipelines, jobs) as MCP tools that AI agents can invoke.

⚠️ Warning: This package is intended for development environments only and should not be used in production. It includes tools that can perform destructive operations (e.g., delete_item, delete_lakehouse_file, delete_activity_from_pipeline) and execute arbitrary code via Livy Spark sessions. Always review AI-generated tool calls before execution.

Quick Start

The fastest way to use this MCP server is with uvx:

uvx ms-fabric-mcp-server

Related MCP server: ms_fabric_mcp

Installation

# Using uv (recommended)
uv pip install ms-fabric-mcp-server

# Using pip
pip install ms-fabric-mcp-server

# With SQL support (requires pyodbc)
pip install ms-fabric-mcp-server[sql]

# With OpenTelemetry tracing
pip install ms-fabric-mcp-server[sql,telemetry]

Authentication

Uses DefaultAzureCredential from azure-identity - no explicit credential configuration needed. This automatically tries multiple authentication methods:

  1. Environment credentials (AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET)

  2. Managed Identity (when running on Azure)

  3. Azure CLI credentials (az login)

  4. VS Code credentials

  5. Azure PowerShell credentials

No Fabric-specific auth environment variables are needed - it just works if you're authenticated via any of the above methods.

Usage

VS Code Integration

Add to your VS Code MCP settings (.vscode/mcp.json or User settings):

{
  "servers": {
    "MS Fabric MCP Server": {
      "type": "stdio",
      "command": "uvx",
      "args": ["ms-fabric-mcp-server"]
    }
  }
}

Claude Desktop Integration

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "fabric": {
      "command": "uvx",
      "args": ["ms-fabric-mcp-server"]
    }
  }
}

Codex Integration

Add to your Codex config.toml:

[mcp_servers.ms_fabric_mcp]
command = "uvx"
args = ["ms-fabric-mcp-server"]

Running Standalone

# Using uvx (no installation needed)
uvx ms-fabric-mcp-server

# Direct execution (if installed)
ms-fabric-mcp-server

# Via Python module
python -m ms_fabric_mcp_server

# With MCP Inspector (development)
npx @modelcontextprotocol/inspector uvx ms-fabric-mcp-server

Logging & Debugging (optional)

MCP stdio servers must keep protocol traffic on stdout, so redirect stderr to capture logs. Giving the agent read access to the log file is a powerful way to debug failures. You can also set AZURE_LOG_LEVEL (Azure SDK) and MCP_LOG_LEVEL (server) to control verbosity.

VS Code (Bash):

{
  "servers": {
    "MS Fabric MCP Server": {
      "type": "stdio",
      "command": "bash",
      "args": [
        "-lc",
        "LOG_DIR=\"$HOME/mcp_logs\"; LOG_FILE=\"$LOG_DIR/ms-fabric-mcp-$(date +%Y%m%d_%H%M%S).log\"; uvx ms-fabric-mcp-server 2> \"$LOG_FILE\""
      ],
      "env": {
        "AZURE_LOG_LEVEL": "info",
        "MCP_LOG_LEVEL": "INFO"
      }
    }
  }
}

VS Code (PowerShell):

{
  "servers": {
    "MS Fabric MCP Server": {
      "type": "stdio",
      "command": "powershell",
      "args": [
        "-NoProfile",
        "-Command",
        "$logDir=\"$env:USERPROFILE\\mcp_logs\"; New-Item -ItemType Directory -Force -Path $logDir | Out-Null; $ts=Get-Date -Format yyyyMMdd_HHmmss; $logFile=\"$logDir\\ms-fabric-mcp-$ts.log\"; uvx ms-fabric-mcp-server 2> $logFile"
      ],
      "env": {
        "AZURE_LOG_LEVEL": "info",
        "MCP_LOG_LEVEL": "INFO"
      }
    }
  }
}

Programmatic Usage (Library Mode)

from fastmcp import FastMCP
from ms_fabric_mcp_server import register_fabric_tools

# Create your own server
mcp = FastMCP("my-custom-server")

# Register all Fabric tools
register_fabric_tools(mcp)

# Add your own customizations...

mcp.run()

Configuration

Environment variables (all optional with sensible defaults):

Variable

Default

Description

FABRIC_BASE_URL

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

Fabric API base URL

FABRIC_SCOPES

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

OAuth scopes

FABRIC_API_CALL_TIMEOUT

30

API timeout (seconds)

FABRIC_MAX_RETRIES

3

Max retry attempts

FABRIC_RETRY_BACKOFF

2.0

Backoff factor

LIVY_API_CALL_TIMEOUT

120

Livy timeout (seconds)

LIVY_POLL_INTERVAL

2.0

Livy polling interval

LIVY_STATEMENT_WAIT_TIMEOUT

10

Livy statement wait timeout

LIVY_SESSION_WAIT_TIMEOUT

240

Livy session wait timeout

MCP_SERVER_NAME

ms-fabric-mcp-server

Server name for MCP

MCP_LOG_LEVEL

INFO

Logging level

AZURE_LOG_LEVEL

info

Azure SDK logging level

Copy .env.example to .env and customize as needed.

Available Tools

The server provides 57 core tools, with 3 additional SQL tools when installed with [sql] extras (60 total).

Tool Group

Count

Tools

Workspace

1

list_workspaces

Item

9

list_items, get_item, list_folders, create_folder, move_folder, delete_folder, delete_item, rename_item, move_item_to_folder

Lakehouse

4

create_lakehouse, list_lakehouse_files, upload_lakehouse_file, delete_lakehouse_file

Notebook

6

create_notebook, get_notebook_definition, update_notebook_definition, get_notebook_run_details, list_notebook_runs, get_notebook_driver_logs

Job

4

run_on_demand_job, get_job_status, get_job_status_by_url, get_operation_result

Livy

8

livy_create_session, livy_list_sessions, livy_get_session_status, livy_close_session, livy_run_statement, livy_get_statement_status, livy_cancel_statement, livy_get_session_log

Pipeline

11

create_pipeline, add_copy_activity_to_pipeline, add_notebook_activity_to_pipeline, add_dataflow_activity_to_pipeline, add_activity_to_pipeline, delete_activity_from_pipeline, remove_activity_dependency, add_activity_dependency, get_pipeline_definition, update_pipeline_definition, get_pipeline_activity_runs

Dataflow

3

create_dataflow, get_dataflow_definition, run_dataflow

Semantic Model

9

create_semantic_model, add_table_to_semantic_model, add_relationship_to_semantic_model, get_semantic_model_details, get_semantic_model_definition, add_measures_to_semantic_model, delete_measures_from_semantic_model, delete_table_from_semantic_model, delete_relationship_from_semantic_model

Power BI

2

refresh_semantic_model, execute_dax_query

SQL (optional)

3

get_sql_endpoint, execute_sql_query, execute_sql_statement

SQL Tools (Optional)

SQL tools require pyodbc and the Microsoft ODBC Driver for SQL Server (Driver 18 or 17 — the service auto-detects which is installed and prefers Driver 18; set FABRIC_ODBC_DRIVER to override):

# Install with SQL support
pip install ms-fabric-mcp-server[sql]

# On Ubuntu/Debian, install the ODBC driver first:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18  # or msodbcsql17

If pyodbc is not available, the server starts with 57 tools (SQL tools disabled).

Development

# Clone and install with dev dependencies
git clone https://github.com/your-org/ms-fabric-mcp-server.git
cd ms-fabric-mcp-server
pip install -e ".[dev,sql,telemetry]"

# Run tests
pytest

# Run with coverage
pytest --cov

# Format code
black src tests
isort src tests

# Type checking
mypy src

Integration tests

Integration tests run against live Fabric resources and are opt-in. They require a pre-provisioned Fabric workspace, Lakehouse, Warehouse, and (for Copy Activity tests) at least one external-source connection. See Setup prerequisites below before your first run.

To get started locally, copy the example env file:

cp .env.integration.example .env.integration

Then fill in values matching your provisioned resources. The full set of variables (with inline comments grouping by purpose) lives in .env.integration.example; this list is for orientation:

Required for all integration tests:

  • FABRIC_INTEGRATION_TESTS=1

  • FABRIC_TEST_WORKSPACE_NAME — display name of the test workspace

  • FABRIC_TEST_LAKEHOUSE_NAME — Lakehouse item in the workspace (used as the destination for Copy Activities)

  • FABRIC_TEST_LAKEHOUSE_SQL_DATABASE — the Lakehouse's SQL endpoint database name (typically same as the Lakehouse name)

  • FABRIC_TEST_WAREHOUSE_NAME — Warehouse item in the workspace (used by SQL DML tests)

Required for Copy Activity tests (Pipeline Flow):

  • FABRIC_TEST_DEST_CONNECTION_ID — Fabric connection ID for the destination Lakehouse (used by all Copy Activity tests)

Per-engine source inputs — set all 5 vars of a block to enable that block's Copy Activity test; the test skips with a logged reason if any value is missing.

PostgreSQL source (e.g., VM-hosted Postgres reachable via a gateway):

  • FABRIC_TEST_POSTGRES_CONNECTION_ID

  • FABRIC_TEST_POSTGRES_SOURCE_TYPE (default PostgreSqlSource)

  • FABRIC_TEST_POSTGRES_SCHEMA

  • FABRIC_TEST_POSTGRES_TABLE

  • FABRIC_TEST_POSTGRES_DEST_TABLE_NAME

SQL Server source (e.g., VM-hosted SQL Server, Azure SQL DB):

  • FABRIC_TEST_SQLSERVER_CONNECTION_ID

  • FABRIC_TEST_SQLSERVER_SOURCE_TYPE (default SqlServerSource)

  • FABRIC_TEST_SQLSERVER_SCHEMA

  • FABRIC_TEST_SQLSERVER_TABLE

  • FABRIC_TEST_SQLSERVER_DEST_TABLE_NAME

Optional inputs (other flows skip cleanly when absent):

  • Semantic Model: FABRIC_TEST_SEMANTIC_MODEL_TABLE, FABRIC_TEST_SEMANTIC_MODEL_COLUMNS, FABRIC_TEST_SEMANTIC_MODEL_TABLE_2, FABRIC_TEST_SEMANTIC_MODEL_COLUMNS_2, FABRIC_TEST_SEMANTIC_MODEL_SCHEMA

  • Dataflow: FABRIC_TEST_DATAFLOW_NAME

  • Azure SPN auth (when not using az login): AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET

  • Power BI tuning: POWERBI_BASE_URL, POWERBI_SCOPES, POWERBI_API_CALL_TIMEOUT, POWERBI_REFRESH_POLL_INTERVAL, POWERBI_REFRESH_WAIT_TIMEOUT

Run integration tests:

FABRIC_INTEGRATION_TESTS=1 pytest -m integration

Or filter to a specific test:

FABRIC_INTEGRATION_TESTS=1 pytest -m integration -k "copy_activity"

Notes:

  • SQL tests require pyodbc and a SQL Server ODBC driver (Microsoft msodbcsql18 recommended). The CI workflow installs it via apt-get install msodbcsql18.

  • Tests may skip when optional dependencies or environment variables are missing — this is intentional, not a failure.

  • These tests use live Fabric resources and may incur capacity-usage and storage costs. Run against a non-production workspace.

Setup prerequisites for integration tests

The tests assume the following Fabric / Azure infrastructure is already in place. This setup is one-time per environment and is not part of the test run itself:

  1. A dedicated Fabric workspace on an active capacity. Do not use a production workspace — the tests create, modify, and delete items.

  2. A Lakehouse and a Warehouse in that workspace, with display names matching FABRIC_TEST_LAKEHOUSE_NAME and FABRIC_TEST_WAREHOUSE_NAME. The Lakehouse's SQL endpoint database name (which usually matches the Lakehouse name) goes in FABRIC_TEST_LAKEHOUSE_SQL_DATABASE.

  3. Source databases reachable from Fabric (for Copy Activity tests). Options:

    • Azure-managed services (Azure SQL DB, Azure Database for PostgreSQL): create directly; Fabric reaches them over the public Azure backbone.

    • VM-hosted or on-premises databases: require an on-premises data gateway installed on a Windows host that can reach both the source database (on the source network) and Fabric (over the public internet).

  4. Fabric connections to those source databases (one per source-engine you want to test). Create via Fabric portal → Settings → Manage connections and gateways → New connection. Use the Fabric REST API to read back the GUID for FABRIC_TEST_*_CONNECTION_ID:

    TOKEN=$(az account get-access-token --resource https://api.fabric.microsoft.com --query accessToken -o tsv)
    curl -sS -H "Authorization: Bearer $TOKEN" https://api.fabric.microsoft.com/v1/connections \
      | python3 -c "import json,sys
    for c in json.load(sys.stdin).get('value',[]):
        print(f\"{c['displayName']:40s} {c['id']}\")"
  5. A Lakehouse-destination Fabric connection (Cloud > Lakehouse). Used for FABRIC_TEST_DEST_CONNECTION_ID. Pipeline Copy Activities target this connection when writing to the destination Lakehouse.

  6. Auth:

    • Local development: az login as a Fabric workspace member is sufficient (the server uses DefaultAzureCredential).

    • CI / unattended: create an Azure service principal, add it to the test workspace as Member (Fabric portal → workspace → Manage access), grant it "Can use" on each Fabric connection (Settings → Manage connections → select connection → Share → add SP), and provide its credentials via AZURE_TENANT_ID / AZURE_CLIENT_ID / AZURE_CLIENT_SECRET. Both ACL grants (workspace member + per-connection "Can use") are required — connection access does not inherit from workspace membership.

  7. GitHub Actions (if running the bundled workflows): create an environment named Integration in your fork's repository settings and add every FABRIC_TEST_* and AZURE_* variable above as an environment secret with the same name. .github/workflows/integration-tests.yml lists the canonical secret-name set.

License

MIT

Available Tools

37 tools
add_activity_to_pipelineAdd Activity to Pipeline from JSONA

Add a generic activity to an existing Fabric pipeline from a JSON template.

Retrieves an existing pipeline, adds an activity from the provided JSON template, and updates the pipeline definition. This is a more general-purpose tool compared to add_copy_activity_to_pipeline, allowing you to add any type of Fabric pipeline activity by providing its complete JSON definition.

Use this tool when:

  • You have a custom activity JSON template to add

  • You want to add activity types beyond Copy (e.g., Notebook, Script, Web, etc.)

  • You need full control over the activity definition

  • You're working with complex activity configurations

Activity JSON Requirements:

  • Must be a valid dictionary/object

  • Must include a "name" field (string)

  • Must include a "type" field (e.g., "Copy", "Notebook", "Script", "Web", etc.)

  • Should include all required properties for the specific activity type

  • Common fields: "dependsOn", "policy", "typeProperties"

Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. activity_json: Complete JSON dictionary representing the activity definition. Must include "name", "type", and all required properties.

Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, activity_type, workspace_name, and message.

Example: ```python # Example 1: Add a Copy Activity from JSON template copy_activity = { "name": "CopyCustomData", "type": "Copy", "dependsOn": [], "policy": { "timeout": "0.12:00:00", "retry": 0, "retryIntervalInSeconds": 30, "secureOutput": False, "secureInput": False }, "typeProperties": { "source": { "type": "AzurePostgreSqlSource", "partitionOption": "None", "queryTimeout": "02:00:00", "datasetSettings": { "type": "AzurePostgreSqlTable", "schema": [], "typeProperties": { "schema": "public", "table": "products" }, "externalReferences": { "connection": "12345678-1234-1234-1234-123456789abc" } } }, "sink": { "type": "LakehouseTableSink", "tableActionOption": "Overwrite", "applyVOrder": True, "datasetSettings": { "type": "LakehouseTable", "typeProperties": { "table": "products" } } } } }

result = add_activity_to_pipeline(
    workspace_name="Analytics Workspace",
    pipeline_name="My_Pipeline",
    activity_json=copy_activity
)

# Example 2: Add a Notebook Activity
notebook_activity = {
    "name": "RunTransformation",
    "type": "Notebook",
    "dependsOn": [
        {
            "activity": "CopyCustomData",
            "dependencyConditions": ["Succeeded"]
        }
    ],
    "policy": {
        "timeout": "1.00:00:00",
        "retry": 0
    },
    "typeProperties": {
        "notebookPath": "/Notebooks/TransformData",
        "parameters": {
            "table_name": "products"
        }
    }
}

result = add_activity_to_pipeline(
    workspace_name="Analytics Workspace",
    pipeline_name="My_Pipeline",
    activity_json=notebook_activity
)
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
pipeline_nameYes
activity_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by explaining the tool's behavior: it 'retrieves an existing pipeline, adds an activity... and updates the pipeline definition.' It also details the JSON requirements and return structure. However, it lacks information on error handling, permissions needed, or idempotency, leaving some behavioral aspects unclear.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, usage guidelines, requirements, parameters, returns, examples) and front-loads key information. However, the lengthy code examples (while helpful) make it somewhat verbose, and some sentences could be tightened (e.g., 'This is a more general-purpose tool...' is slightly redundant).

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

Completeness5/5

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

Given the tool's complexity (mutation operation, JSON-heavy input, sibling alternatives) and lack of annotations, the description provides comprehensive context: purpose, usage guidelines, parameter details, return values, and extensive examples. The output schema exists, so return values need not be explained in depth, and the description covers all critical aspects for effective use.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It provides detailed semantics for all three parameters: 'workspace_name' and 'pipeline_name' are clearly explained, and 'activity_json' gets extensive documentation including required fields, examples, and validation rules. This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the verb ('Add'), resource ('generic activity'), and target ('existing Fabric pipeline') with specific differentiation from sibling tools. It explicitly contrasts with 'add_copy_activity_to_pipeline' as a 'more general-purpose tool' for 'any type of Fabric pipeline activity,' making the purpose distinct and unambiguous.

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

Usage Guidelines5/5

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

The description includes a dedicated 'Use this tool when:' section with four explicit scenarios, including when to use alternatives ('beyond Copy'), prerequisites ('custom activity JSON template'), and context ('full control over activity definition,' 'complex activity configurations'). This provides clear, actionable guidance for tool selection.

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

add_copy_activity_to_pipelineAdd Copy Activity to PipelineA

Add a Copy Activity to an existing Fabric pipeline.

Retrieves an existing pipeline, adds a Copy Activity to it, and updates the pipeline definition. The Copy Activity will be appended to any existing activities in the pipeline.

Use this tool when:

  • You have an existing pipeline and want to add a new Copy Activity

  • You're building complex pipelines with multiple data copy operations

  • You want to incrementally build a pipeline

Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. source_type: Type of source (e.g., "AzurePostgreSqlSource", "AzureSqlSource", "SqlServerSource"). source_connection_id: Fabric workspace connection ID for source database. source_table_schema: Schema name of the source table (e.g., "public", "dbo"). source_table_name: Name of the source table (e.g., "movie"). destination_lakehouse_id: Workspace artifact ID of the destination Lakehouse. destination_connection_id: Fabric workspace connection ID for destination Lakehouse. destination_table_name: Name for the destination table in Lakehouse. activity_name: Optional custom name for the activity (default: auto-generated). source_access_mode: Source access mode ("direct" or "sql"). Default is "direct". source_sql_query: Optional SQL query for sql access mode. table_action_option: Table action option (default: "Append", options: "Append", "Overwrite"). apply_v_order: Apply V-Order optimization (default: True). timeout: Activity timeout (default: "0.12:00:00"). retry: Number of retry attempts (default: 0). retry_interval_seconds: Retry interval in seconds (default: 30).

Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, workspace_name, and message.

Example: ```python # First, get the lakehouse and connection IDs lakehouses = list_items(workspace_name="Analytics", item_type="Lakehouse") lakehouse_id = lakehouses["items"][0]["id"] lakehouse_conn_id = "a216973e-47d7-4224-bb56-2c053bac6831"

# Add a Copy Activity to an existing pipeline
result = add_copy_activity_to_pipeline(
    workspace_name="Analytics Workspace",
    pipeline_name="My_Existing_Pipeline",
    source_type="AzurePostgreSqlSource",
    source_connection_id="12345678-1234-1234-1234-123456789abc",
    source_table_schema="public",
    source_table_name="orders",
    destination_lakehouse_id=lakehouse_id,
    destination_connection_id=lakehouse_conn_id,
    destination_table_name="orders",
    activity_name="CopyOrdersData",
    table_action_option="Overwrite"
)

# Add another Copy Activity to the same pipeline
result = add_copy_activity_to_pipeline(
    workspace_name="Analytics Workspace",
    pipeline_name="My_Existing_Pipeline",
    source_type="AzurePostgreSqlSource",
    source_connection_id="12345678-1234-1234-1234-123456789abc",
    source_table_schema="public",
    source_table_name="customers",
    destination_lakehouse_id=lakehouse_id,
    destination_connection_id=lakehouse_conn_id,
    destination_table_name="customers",
    activity_name="CopyCustomersData"
)

# SQL fallback mode (use when direct Lakehouse copy fails with
# "datasource type Lakehouse is invalid" error):
result = add_copy_activity_to_pipeline(
    workspace_name="Analytics Workspace",
    pipeline_name="My_Existing_Pipeline",
    source_type="LakehouseTableSource",
    source_connection_id=sql_endpoint_conn_id,  # SQL analytics endpoint connection
    source_table_schema="dbo",
    source_table_name="fact_sale",
    destination_lakehouse_id=lakehouse_id,
    destination_connection_id=lakehouse_conn_id,
    destination_table_name="fact_sale_copy",
    source_access_mode="sql",
    source_sql_query="SELECT * FROM dbo.fact_sale"  # optional
)
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
pipeline_nameYes
source_typeYes
source_connection_idYes
source_table_schemaYes
source_table_nameYes
destination_lakehouse_idYes
destination_connection_idYes
destination_table_nameYes
activity_nameNo
source_access_modeNodirect
source_sql_queryNo
table_action_optionNoAppend
apply_v_orderNo
timeoutNo0.12:00:00
retryNo
retry_interval_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it retrieves and updates an existing pipeline, appends activities, includes default values for parameters, and describes return values. However, it lacks details on permissions, error handling, or rate limits, which are important for a mutation tool.

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

Conciseness4/5

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

The description is well-structured with a clear purpose statement, usage guidelines, parameter details, return values, and examples, but it is lengthy due to the extensive parameter list and examples. Every section adds value, but it could be more front-loaded; the examples are helpful but contribute to verbosity.

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

Completeness5/5

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

Given the complexity (17 parameters, mutation tool, no annotations) and the presence of an output schema, the description is highly complete. It covers purpose, usage, parameters, returns, and provides practical examples, making it sufficient for an agent to understand and use the tool effectively without gaps.

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

Parameters5/5

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

Given 0% schema description coverage, the description compensates fully by listing all 17 parameters with clear explanations, examples, and default values, adding significant meaning beyond the bare schema. It clarifies parameter roles, options, and practical usage, which is essential for the agent to invoke the tool correctly.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Add a Copy Activity to an existing Fabric pipeline') and distinguishes it from siblings by specifying it's for 'Copy Activity' operations, unlike other pipeline tools like 'add_dataflow_activity_to_pipeline' or 'add_notebook_activity_to_pipeline'.

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

Usage Guidelines5/5

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

The description provides explicit usage guidelines with a bulleted list ('Use this tool when:') that includes specific scenarios (e.g., adding to existing pipelines, building complex pipelines, incremental building) and distinguishes it from alternatives by focusing on Copy Activities, though it doesn't explicitly name when not to use it or list all sibling alternatives.

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

add_dataflow_activity_to_pipelineAdd Dataflow Activity to PipelineA

Add a Dataflow Activity to an existing Fabric pipeline.

Retrieves an existing pipeline, adds a Dataflow Activity to it, and updates the pipeline definition. The Dataflow Activity will be appended to any existing activities in the pipeline.

Use this tool when:

  • You have an existing pipeline and want to add a new Dataflow Activity

  • You're building complex pipelines with multiple activities

  • You want to incrementally build a pipeline

Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. dataflow_name: Name of the Dataflow to run. dataflow_workspace_name: Optional name of the workspace containing the Dataflow. activity_name: Optional custom name for the activity (default: auto-generated). depends_on_activity_name: Optional name of an existing activity this one depends on. timeout: Activity timeout (default: "0.12:00:00"). retry: Number of retry attempts (default: 0). retry_interval_seconds: Retry interval in seconds (default: 30).

Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, workspace_name, and message.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
pipeline_nameYes
dataflow_nameYes
dataflow_workspace_nameNo
activity_nameNo
depends_on_activity_nameNo
timeoutNo0.12:00:00
retryNo
retry_interval_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

Since no annotations are provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: retrieving an existing pipeline, adding a Dataflow Activity, updating the pipeline definition, and appending to existing activities. It also mentions default values for parameters like timeout and retry settings. However, it doesn't cover potential side effects, error conditions, or authentication requirements.

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

Conciseness5/5

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

The description is well-structured with clear sections: purpose statement, behavioral explanation, usage guidelines, parameter details, and return values. Every sentence adds value - the first paragraph explains what the tool does, the bullet points provide usage context, and the parameter section adds crucial information missing from the schema.

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

Completeness5/5

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

Given the complexity of a 9-parameter mutation tool with no annotations and 0% schema description coverage, the description provides comprehensive coverage. It explains the tool's purpose, when to use it, detailed parameter semantics, and includes return value information. With an output schema present, the description appropriately focuses on the tool's behavior and inputs rather than output details.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed explanations for all 9 parameters. It clarifies optional vs. required parameters, explains what each parameter represents (e.g., 'display name of the workspace,' 'name of the existing pipeline'), and provides default values for optional parameters like timeout and retry settings.

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

Purpose5/5

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

The description clearly states the specific action ('Add a Dataflow Activity to an existing Fabric pipeline') and distinguishes it from sibling tools like 'add_copy_activity_to_pipeline' and 'add_notebook_activity_to_pipeline' by specifying it's for Dataflow Activities. It explicitly mentions the resource ('existing Fabric pipeline') and the verb ('add').

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

Usage Guidelines5/5

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

The description includes an explicit 'Use this tool when:' section with three bullet points that clearly define the appropriate contexts for using this tool, such as when you have an existing pipeline, are building complex pipelines, or want incremental pipeline building. This provides clear guidance on when to select this tool over alternatives.

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

add_measures_to_semantic_modelAdd Measures to Semantic ModelC

Add measures to a table in an existing semantic model.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
table_nameYes
measuresYes
semantic_model_nameNo
semantic_model_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states this is an 'Add' operation (implying mutation) but doesn't mention permissions needed, whether changes are reversible, rate limits, or what happens if measures already exist. For a mutation tool with 5 parameters and no annotation coverage, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for the tool's complexity and front-loads the essential information.

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

Completeness2/5

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

Given this is a mutation tool with 5 parameters (3 required), 0% schema description coverage, no annotations, but with an output schema, the description is inadequate. While the output schema may help with return values, the description fails to explain parameter meanings, usage context, or behavioral implications, leaving critical gaps for the agent.

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

Parameters1/5

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

The schema description coverage is 0%, meaning none of the 5 parameters have descriptions in the schema. The tool description provides no additional information about what 'workspace_name', 'table_name', 'measures', 'semantic_model_name', or 'semantic_model_id' mean or how they should be used. This leaves all parameters completely undocumented.

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

Purpose4/5

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

The description clearly states the action ('Add measures') and target ('to a table in an existing semantic model'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'add_relationship_to_semantic_model' or 'add_table_to_semantic_model', which would require a 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'create_semantic_model' or 'delete_measures_from_semantic_model'. It mentions 'existing semantic model' but doesn't clarify prerequisites or exclusions, leaving the agent with minimal context for decision-making.

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

add_notebook_activity_to_pipelineAdd Notebook Activity to PipelineA

Add a Notebook Activity to an existing Fabric pipeline.

Retrieves an existing pipeline, adds a Notebook Activity to it, and updates the pipeline definition. The Notebook Activity will be appended to any existing activities in the pipeline.

Use this tool when:

  • You have an existing pipeline and want to add a new Notebook Activity

  • You're building complex pipelines with multiple activities

  • You want to incrementally build a pipeline

Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. notebook_name: Name of the notebook to run. notebook_workspace_name: Optional name of the workspace containing the notebook. activity_name: Optional custom name for the activity (default: auto-generated). depends_on_activity_name: Optional name of an existing activity this one depends on. session_tag: Optional session tag for the notebook execution. parameters: Optional parameters to pass to the notebook. timeout: Activity timeout (default: "0.12:00:00"). retry: Number of retry attempts (default: 0). retry_interval_seconds: Retry interval in seconds (default: 30).

Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, workspace_name, and message.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
pipeline_nameYes
notebook_nameYes
notebook_workspace_nameNo
activity_nameNo
depends_on_activity_nameNo
session_tagNo
parametersNo
timeoutNo0.12:00:00
retryNo
retry_interval_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It explains the tool's behavior ('Retrieves an existing pipeline, adds a Notebook Activity to it, and updates the pipeline definition') and mentions default values for some parameters. However, it doesn't disclose important behavioral aspects like error handling, permission requirements, rate limits, or whether the operation is idempotent, which are significant gaps for a mutation tool.

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

Conciseness5/5

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

The description is well-structured with clear sections: purpose statement, usage guidelines, parameter list, and return value. Every sentence adds value, with no redundancy. The parameter explanations are terse but informative, and the 'Use this tool when:' section is front-loaded for quick decision-making.

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

Completeness4/5

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

Given the tool's complexity (11 parameters, mutation operation) and no annotations, the description does a good job explaining purpose, usage, parameters, and return values. The output schema exists, so the description doesn't need to detail return values. However, for a mutation tool with no annotations, it could better address behavioral aspects like error conditions or side effects.

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

Parameters4/5

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

With 0% schema description coverage, the description provides substantial parameter information beyond the bare schema. It lists all 11 parameters with brief explanations of their purpose, including which are optional and default values for timeout, retry, and retry_interval_seconds. While it doesn't provide exhaustive details like format constraints, it compensates well for the schema's lack of descriptions.

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

Purpose5/5

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

The description clearly states the specific action ('Add a Notebook Activity'), target resource ('to an existing Fabric pipeline'), and mechanism ('appended to any existing activities'). It distinguishes from sibling tools like 'add_copy_activity_to_pipeline' by specifying the activity type (Notebook) rather than generic or other activity types.

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

Usage Guidelines5/5

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

The description includes an explicit 'Use this tool when:' section with three bullet points that clearly outline appropriate scenarios: when you have an existing pipeline, are building complex pipelines, or want incremental pipeline building. This provides clear guidance on when to select this tool over alternatives.

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

add_relationship_to_semantic_modelAdd Relationship to Semantic ModelC

Add a relationship between two tables in an existing semantic model.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
semantic_model_nameYes
from_tableYes
from_columnYes
to_tableYes
to_columnYes
cardinalityNomanyToOne
cross_filter_directionNooneDirection
is_activeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states 'Add a relationship' which implies a write/mutation operation, but doesn't describe permissions needed, whether changes are reversible, error conditions, or what the output contains. The description lacks critical behavioral context for a mutation tool.

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

Conciseness5/5

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

The description is a single, efficient sentence that states the core purpose without unnecessary words. It's appropriately sized and front-loaded with the essential information.

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

Completeness2/5

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

For a 9-parameter mutation tool with no annotations and 0% schema description coverage, the description is insufficient. While an output schema exists (which helps with return values), the description lacks critical context about behavioral traits, parameter meanings, and usage guidelines needed for proper tool invocation.

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

Parameters2/5

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

With 0% schema description coverage for all 9 parameters, the description provides no parameter semantics beyond what's implied by parameter names. It mentions 'relationship between two tables' which hints at from_table/to_table parameters, but doesn't explain workspace_name, semantic_model_name, cardinality, cross_filter_direction, or is_active parameters.

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

Purpose4/5

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

The description clearly states the action ('Add a relationship') and target resource ('between two tables in an existing semantic model'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'add_table_to_semantic_model' or 'add_measures_to_semantic_model', which target different aspects of semantic models.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, prerequisites (e.g., existing tables/semantic model), or exclusions. It mentions 'existing semantic model' but doesn't clarify if this is a requirement or just context.

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

add_table_to_semantic_modelAdd Table to Semantic ModelC

Add a table from a lakehouse to an existing semantic model.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
semantic_model_nameYes
lakehouse_nameYes
table_nameYes
columnsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a write operation ('Add') but does not specify permissions required, whether the addition is reversible, potential side effects on the semantic model, or any rate limits. This leaves significant gaps in understanding the tool's behavior and safety.

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

Conciseness5/5

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

The description is a single, direct sentence that efficiently conveys the core action without unnecessary words. It is front-loaded with the main purpose, making it easy to grasp quickly, and every part of the sentence serves to clarify the tool's function.

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

Completeness3/5

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

Given the tool's complexity (5 required parameters, no annotations, 0% schema coverage) and the presence of an output schema, the description is minimally adequate. It states what the tool does but lacks details on behavior, parameter meanings, and usage context, which are crucial for a mutation tool with multiple inputs. The output schema helps, but the description itself is incomplete.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema provides no parameter descriptions. The description mentions 'table from a lakehouse' and 'existing semantic model,' hinting at some parameters, but it does not explain the purpose of 'workspace_name,' 'columns,' or the structure of 'SemanticModelColumn.' This fails to compensate for the lack of schema documentation, leaving key parameters unclear.

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

Purpose4/5

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

The description clearly states the action ('Add a table') and the target resources ('from a lakehouse to an existing semantic model'), which is specific and understandable. However, it does not explicitly differentiate from sibling tools like 'add_measures_to_semantic_model' or 'add_relationship_to_semantic_model', which handle different aspects of semantic models, so it misses full sibling differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as 'create_semantic_model' for initial setup or other 'add_' tools for different model components. It lacks context on prerequisites, exclusions, or typical scenarios, offering only a basic statement of function without usage direction.

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

attach_lakehouse_to_notebookAttach Default Lakehouse to NotebookA

Attach a default lakehouse to a notebook in Microsoft Fabric.

Updates the notebook definition to set a default lakehouse. This lakehouse will be automatically mounted when the notebook runs, providing seamless access to the lakehouse tables and files without additional configuration.

Use this tool when:

  • Setting up a new notebook with a lakehouse connection

  • Changing the default lakehouse for an existing notebook

  • Ensuring notebook code can access lakehouse tables via spark.read

Parameters: workspace_name: The display name of the workspace containing the notebook. notebook_name: Name of the notebook to update. lakehouse_name: Name of the lakehouse to attach as default. lakehouse_workspace_name: Optional workspace name for the lakehouse. If not provided, uses the same workspace as the notebook.

Returns: Dictionary with status, message, notebook_id, notebook_name, lakehouse_id, lakehouse_name, and workspace_id.

Example: ```python # Attach lakehouse in same workspace result = attach_lakehouse_to_notebook( workspace_name="Analytics Workspace", notebook_name="Data_Processing", lakehouse_name="Bronze_Lakehouse" )

# Attach lakehouse from different workspace
result = attach_lakehouse_to_notebook(
    workspace_name="Analytics Workspace",
    notebook_name="Data_Processing",
    lakehouse_name="Shared_Lakehouse",
    lakehouse_workspace_name="Shared Resources"
)

if result["status"] == "success":
    print(f"Lakehouse {result['lakehouse_name']} attached successfully!")
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
notebook_nameYes
lakehouse_nameYes
lakehouse_workspace_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it 'Updates the notebook definition' (indicating a mutation), explains the outcome ('lakehouse will be automatically mounted when the notebook runs'), and mentions the benefit ('seamless access without additional configuration'). However, it lacks details on permissions, error handling, or side effects, which would be needed for a perfect score.

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

Conciseness5/5

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

The description is well-structured and front-loaded: the first sentence states the purpose, followed by elaboration, usage guidelines, parameter details, return values, and examples. Each section adds value without redundancy, and the example code is directly illustrative of the tool's use. No sentences are wasted.

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

Completeness5/5

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

For a mutation tool with 4 parameters, 0% schema coverage, no annotations, and an output schema present, the description is complete. It covers purpose, usage, parameters, return values (though the output schema handles details), and includes practical examples. The presence of an output schema means the description doesn't need to detail return structure, and it adequately addresses the complexity of the tool.

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

Parameters5/5

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

Given 0% schema description coverage, the description fully compensates by providing clear parameter explanations. It defines all four parameters, specifies which are required, explains the optional nature of 'lakehouse_workspace_name' with its default behavior ('If not provided, uses the same workspace as the notebook'), and includes examples that illustrate usage with and without the optional parameter.

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

Purpose5/5

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

The description clearly states the specific action ('Attach a default lakehouse to a notebook'), the resource involved ('notebook in Microsoft Fabric'), and distinguishes this from sibling tools like 'import_notebook_to_fabric' or 'get_notebook_content' by focusing on configuration rather than creation or retrieval. It goes beyond the title by explaining the functional outcome ('automatically mounted when the notebook runs, providing seamless access').

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

Usage Guidelines5/5

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

The description includes an explicit 'Use this tool when:' section with three specific scenarios: setting up a new notebook, changing an existing notebook's default lakehouse, and ensuring code access to lakehouse tables. This provides clear guidance on when to use this tool versus alternatives like 'import_notebook_to_fabric' for creation or 'get_notebook_content' for reading, though it doesn't explicitly name exclusions.

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

create_blank_pipelineCreate Blank PipelineA

Create a blank Fabric pipeline with no activities.

Creates a Data Pipeline in the specified workspace with an empty activities array, ready to be populated with activities later using the add_copy_activity_to_pipeline tool.

Parameters: workspace_name: The display name of the workspace where the pipeline will be created. pipeline_name: Name for the new pipeline (must be unique in workspace). description: Optional description for the pipeline.

Returns: Dictionary with status, pipeline_id, pipeline_name, workspace_name, and message.

Example: ```python # Create a blank pipeline result = create_blank_pipeline( workspace_name="Analytics Workspace", pipeline_name="My_Data_Integration_Pipeline", description="Pipeline for data integration workflows" )

# Later, add activities to it
add_copy_activity_to_pipeline(
    workspace_name="Analytics Workspace",
    pipeline_name="My_Data_Integration_Pipeline",
    source_type="AzurePostgreSqlSource",
    source_connection_id=conn_id,
    source_table_schema="public",
    source_table_name="customers",
    destination_lakehouse_id=lakehouse_id,
    destination_connection_id=lakehouse_conn_id,
    destination_table_name="customers"
)
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
pipeline_nameYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It clearly indicates this is a creation/mutation operation and mentions the pipeline starts with 'an empty activities array.' However, it doesn't disclose important behavioral aspects like required permissions, whether the operation is idempotent, error conditions, or rate limits that would be crucial for a creation tool.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, parameters, returns, example) and front-loads the core functionality. The example is helpful but lengthy; some sentences could be more concise. Overall, most content earns its place by providing necessary guidance.

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

Completeness4/5

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

Given this is a creation tool with no annotations but with output schema (returns dictionary with specific fields), the description provides good context. It explains the purpose, parameters, return structure, and usage sequence. The main gap is lack of behavioral details like permissions or error handling that would be important for a creation operation.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed parameter documentation. It explains workspace_name as 'display name of the workspace,' pipeline_name as 'must be unique in workspace,' and description as 'optional description for the pipeline.' This adds substantial meaning beyond what the bare schema provides.

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

Purpose5/5

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

The description clearly states the specific action ('Create a blank Fabric pipeline with no activities') and resource ('Data Pipeline in the specified workspace'), distinguishing it from sibling tools like add_copy_activity_to_pipeline by emphasizing it creates an empty pipeline ready for later population. This provides explicit differentiation from related tools.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('ready to be populated with activities later using the add_copy_activity_to_pipeline tool') and provides a clear alternative workflow. The example further reinforces this guidance by showing the sequence of create_blank_pipeline followed by add_copy_activity_to_pipeline.

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

create_semantic_modelCreate Semantic ModelB

Create an empty Fabric semantic model.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
semantic_model_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the action ('Create') without disclosing behavioral traits. It doesn't mention permissions required, whether the creation is idempotent, potential side effects, or response format, which are critical for a creation tool.

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

Conciseness5/5

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

The description is a single, efficient sentence with no wasted words, front-loading the key action. It's appropriately sized for the tool's complexity, earning full marks for conciseness.

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

Completeness3/5

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

Given the tool has an output schema (which handles return values) but no annotations and 0% schema coverage, the description is incomplete. It lacks behavioral context and parameter semantics, making it adequate only because the output schema mitigates some gaps, but it doesn't fully compensate for the missing information.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate, but it adds no parameter information. It doesn't explain what 'workspace_name' or 'semantic_model_name' represent, their formats, or constraints. Baseline is 3 due to 0% coverage, but the description fails to enhance understanding beyond the bare schema.

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

Purpose4/5

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

The description clearly states the verb ('Create') and resource ('empty Fabric semantic model'), making the purpose evident. However, it doesn't differentiate from sibling tools like 'add_table_to_semantic_model' or 'add_measures_to_semantic_model', which modify existing models rather than creating new ones, so it misses full sibling differentiation.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. For instance, it doesn't mention prerequisites (e.g., needing an existing workspace) or compare to tools like 'get_semantic_model_definition' for retrieval, leaving the agent without context for selection.

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

delete_activity_from_pipelineDelete Activity from PipelineA

Delete an activity from an existing Fabric pipeline.

Removes the specified activity from the pipeline definition. This will fail if any other activity depends on it. Use remove_activity_dependency to remove dependencies first.

Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. activity_name: Name of the activity to delete.

Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, workspace_name, and message.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
pipeline_nameYes
activity_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and effectively discloses key behavioral traits: it's a destructive operation ('Removes'), has a failure condition ('fail if any other activity depends on it'), and specifies a prerequisite action. It doesn't cover aspects like authentication needs or rate limits, but provides sufficient context for safe use.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by critical behavioral notes and parameter/return sections. Every sentence adds value—no redundancy or fluff—and it's structured for quick scanning with clear headings.

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

Completeness5/5

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

Given the tool's complexity (destructive operation with dependencies), no annotations, and an output schema that covers return values, the description is complete enough. It explains the action, failure conditions, prerequisites, parameters, and return structure, leaving no critical gaps for an agent to invoke it correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It lists all three parameters with brief explanations (e.g., 'display name of the workspace', 'existing pipeline to update'), adding meaningful context beyond the bare schema. However, it doesn't detail format constraints or examples, leaving some ambiguity.

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

Purpose5/5

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

The description clearly states the specific action ('Delete an activity from an existing Fabric pipeline') with the resource specified ('activity', 'pipeline'), and distinguishes it from siblings like 'remove_activity_dependency' by mentioning that tool as a prerequisite for handling dependencies.

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

Usage Guidelines5/5

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

It explicitly states when to use this tool ('Delete an activity from an existing Fabric pipeline') and when not to use it ('This will fail if any other activity depends on it'), with a clear alternative named ('Use remove_activity_dependency to remove dependencies first'), providing comprehensive guidance.

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

delete_itemDelete Item from WorkspaceB

Delete an item from a Fabric workspace.

Deletes the specified item from the workspace. The item is identified by its display name and type. Common item types include: Notebook, Lakehouse, Warehouse, Pipeline, Report, SemanticModel, Dashboard, etc.

Parameters: workspace_name: The display name of the workspace. item_display_name: Name of the item to delete. item_type: Type of the item to delete (e.g., "Notebook", "Lakehouse"). Supported types: Notebook, Lakehouse, Warehouse, Pipeline, DataPipeline, Report, SemanticModel, Dashboard, Dataflow, Dataset.

Returns: Dictionary with status and success/error message.

Example: python result = delete_item( workspace_name="My Workspace", item_display_name="Old Notebook", item_type="Notebook" )

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
item_display_nameYes
item_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool deletes items but doesn't mention critical behavioral aspects like whether deletion is permanent, requires specific permissions, has confirmation prompts, or affects dependencies. The example shows a basic call but lacks context about consequences or error handling.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, parameters, returns, example) and uses bullet points for readability. While somewhat verbose, each sentence adds value. The example is helpful but could be more concise.

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

Completeness3/5

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

For a destructive mutation tool with no annotations, the description is moderately complete. It explains parameters and return format, and an output schema exists. However, it lacks crucial behavioral context about deletion consequences, permissions, and error conditions that would be essential for safe usage.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates well by explaining all three parameters: workspace_name, item_display_name, and item_type. It provides examples of item types and lists supported values, adding meaningful context beyond the bare schema. However, it doesn't specify format constraints or validation rules.

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

Purpose5/5

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

The description clearly states the specific action ('Delete') and resource ('item from a Fabric workspace'), distinguishing it from sibling tools like 'list_items' or 'create_semantic_model'. It explicitly mentions the item is identified by display name and type, providing clear differentiation.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. While sibling tools like 'delete_activity_from_pipeline' or 'delete_measures_from_semantic_model' exist for specific item types, the description doesn't mention these alternatives or provide context for choosing between them.

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

delete_measures_from_semantic_modelDelete Measures from Semantic ModelC

Delete measures from a table in an existing semantic model.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
table_nameYes
measure_namesYes
semantic_model_nameNo
semantic_model_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the destructive action ('Delete') but doesn't mention permissions required, whether deletion is permanent/reversible, rate limits, error conditions, or what happens to dependent objects. For a destructive operation with zero annotation coverage, this is inadequate transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and target, making it immediately understandable. Every word earns its place in conveying the essential purpose.

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

Completeness2/5

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

For a destructive mutation tool with 5 parameters (0% schema coverage), no annotations, and complex sibling relationships, the description is incomplete. It doesn't address behavioral risks, parameter meanings, or usage context. While an output schema exists (which helps with return values), the description lacks crucial information for safe and correct tool invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate but adds no parameter information. It doesn't explain what 'workspace_name', 'table_name', 'measure_names', or the optional semantic model identifiers mean, their formats, or relationships. With 5 parameters completely undocumented in schema, the description fails to provide needed semantic context.

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

Purpose4/5

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

The description clearly states the action ('Delete measures') and target ('from a table in an existing semantic model'), providing a specific verb+resource combination. It distinguishes from sibling tools like 'add_measures_to_semantic_model' by specifying deletion rather than addition, though it doesn't explicitly contrast with other deletion tools like 'delete_item'.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., semantic model must exist), exclusions, or comparisons to sibling tools like 'delete_item' which might handle similar deletions. Usage context is implied but not explicit.

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

execute_dax_queryExecute DAX QueryC

Execute a DAX query and return the raw Power BI response.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
queryYes
semantic_model_nameNo
semantic_model_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions executing a query and returning a raw response, but lacks critical behavioral details: whether this is read-only or mutating, authentication requirements, rate limits, error handling, or what 'raw Power BI response' entails (e.g., format, size limits). This is inadequate for a tool with potential data access implications.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core action and outcome with zero wasted words. It's appropriately sized for a straightforward tool, though its brevity contributes to gaps in other dimensions.

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

Completeness3/5

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

Given 4 parameters with 0% schema coverage, no annotations, and an output schema (which mitigates need to describe return values), the description is incomplete. It covers the basic purpose but misses parameter semantics, behavioral context, and usage guidelines. It's minimally viable but has clear gaps for a tool that interacts with data systems.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It adds no information about parameters beyond what the schema names imply. For example, it doesn't explain what 'workspace_name' refers to, the format of the 'query' (DAX syntax), or when to use 'semantic_model_name' vs 'semantic_model_id'. This leaves key usage details undocumented.

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

Purpose4/5

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

The description clearly states the action ('Execute a DAX query') and the outcome ('return the raw Power BI response'), which is specific and unambiguous. It distinguishes this as a query execution tool rather than data manipulation or management, though it doesn't explicitly differentiate from potential query-related siblings (none are listed).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a workspace or semantic model), exclusions, or comparisons to other tools like 'get_semantic_model_definition' for metadata queries. Usage is implied only by the tool name and parameters.

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

get_job_statusGet Job StatusA

Get status of a specific job instance.

Retrieves the current status and details of a running or completed job. The job state includes: NotStarted, InProgress, Completed, Failed, Cancelled.

Parameters: workspace_name: The display name of the workspace. item_name: Name of the item. item_type: Type of the item (Notebook, Pipeline, etc.). job_instance_id: ID of the job instance to check.

Returns: Dictionary with status, message, and job details including: - job_instance_id, item_id, job_type, job_status - invoke_type, root_activity_id, start_time_utc, end_time_utc - failure_reason (if failed) - is_terminal, is_successful, is_failed, is_running flags

Example: ```python result = get_job_status( workspace_name="My Workspace", item_name="analysis_notebook", item_type="Notebook", job_instance_id="12345678-1234-1234-1234-123456789abc" )

if result["job"]["is_terminal"]:
    if result["job"]["is_successful"]:
        print("Job completed successfully!")
    else:
        print(f"Job failed: {result['job']['failure_reason']}")
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
item_nameYes
item_typeYes
job_instance_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it retrieves current status and details, lists possible job states, and describes the return structure including flags like 'is_terminal'. It does not mention rate limits, authentication needs, or error handling, leaving some gaps.

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

Conciseness4/5

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

The description is appropriately sized and front-loaded with the core purpose, followed by details and an example. Some sentences could be more concise (e.g., the parameter list is verbose), but overall it's well-structured with no wasted content.

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

Completeness5/5

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

Given the tool's moderate complexity, no annotations, 0% schema coverage, but with an output schema (implied by 'Returns' section), the description is complete. It covers purpose, parameters, return values, and includes an example, providing all necessary context for an agent to use the tool effectively.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It does so by listing all 4 parameters with clear explanations (e.g., 'ID of the job instance to check') and providing an example that demonstrates usage. This adds significant meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verb ('Get status') and resource ('job instance'), and distinguishes it from siblings like 'get_job_status_by_url' by specifying it retrieves status for a specific job instance. The title and name align perfectly with the described functionality.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('to check' a job instance), but does not explicitly mention when not to use it or name alternatives like 'get_job_status_by_url' from the sibling list. The example implies usage for monitoring job completion, which is helpful but not exhaustive.

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

get_job_status_by_urlGet Job Status by URLA

Get job status using the location URL from run_on_demand_job.

Retrieves job status using the location URL returned when the job was created. This is convenient when you have the location URL but not the individual workspace/item/job identifiers.

Parameters: location_url: The location URL returned from job creation.

Returns: Dictionary with status, message, and job details (same structure as get_job_status).

Example: ```python # Start a job start_result = run_on_demand_job(...)

# Check status using the location URL
status_result = get_job_status_by_url(start_result["location_url"])
```
ParametersJSON Schema
NameRequiredDescriptionDefault
location_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It describes the tool's behavior as retrieving status and mentions the return structure, but lacks details on error handling, rate limits, authentication needs, or side effects. For a tool with no annotations, this leaves gaps in behavioral understanding.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by parameter and return explanations, and an example. Every sentence adds value without redundancy, making it efficient and easy to parse.

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

Completeness4/5

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

Given the tool has an output schema (so return values are documented elsewhere) and low complexity, the description covers purpose, usage, parameters, and returns adequately. However, with no annotations, it could benefit from more behavioral details like error cases or performance hints to be fully complete.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates by explaining that 'location_url' is 'The location URL returned from job creation' and ties it to run_on_demand_job. This adds meaningful context beyond the bare schema, though it doesn't detail format or validation rules. With 1 parameter, this is sufficient for a high score.

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

Purpose5/5

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

The description clearly states the specific action ('Get job status') and resource ('using the location URL from run_on_demand_job'), distinguishing it from sibling tools like get_job_status. It explicitly explains this tool is for when you have the location URL but not other identifiers, making the purpose distinct and well-defined.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool ('when you have the location URL but not the individual workspace/item/job identifiers') and references the alternative ('same structure as get_job_status'), clearly differentiating it from the sibling tool get_job_status. The example further illustrates the usage context.

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

get_notebook_contentGet Notebook ContentA

Get the content and definition of a notebook.

Retrieves the full notebook definition including all cells, metadata, and configuration from a Fabric workspace. The content is returned as a dictionary matching the Jupyter notebook format.

Parameters: workspace_name: The display name of the workspace. notebook_display_name: The name of the notebook.

Returns: Dictionary with status, workspace_name, notebook_name, and notebook definition. The definition contains the full notebook structure including cells, metadata, etc.

Example: ```python result = get_notebook_content( workspace_name="My Workspace", notebook_display_name="analysis/customer_analysis" )

if result["status"] == "success":
    definition = result["definition"]
    # Access notebook cells, metadata, etc.
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
notebook_display_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adequately describes the read-only nature ('Retrieves') and output format ('dictionary matching the Jupyter notebook format'), but lacks details on error handling, permissions required, rate limits, or whether the operation is idempotent. The example adds some context but doesn't fully compensate for missing behavioral traits.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, parameters, returns, example) and uses bullet points effectively. It is appropriately sized but includes some redundancy (e.g., repeating 'notebook definition' concepts). Every sentence adds value, though minor trimming could improve conciseness.

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

Completeness4/5

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

Given the tool's moderate complexity, no annotations, and the presence of an output schema, the description provides sufficient context. It covers purpose, parameters, return structure, and includes a practical example. The output schema handles return value details, so the description doesn't need to explain those extensively, making it reasonably complete for agent use.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explicitly lists both parameters ('workspace_name', 'notebook_display_name') and provides an example with concrete values, adding meaningful context beyond the bare schema. However, it doesn't explain parameter constraints (e.g., format of 'notebook_display_name') or dependencies, leaving minor gaps.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Get', 'Retrieves') and resources ('notebook content and definition', 'full notebook definition including all cells, metadata, and configuration'). It distinguishes from sibling tools like 'get_notebook_execution_details' or 'get_notebook_driver_logs' by focusing on content retrieval rather than execution status or logs.

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

Usage Guidelines3/5

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

The description implies usage context ('from a Fabric workspace') but does not explicitly state when to use this tool versus alternatives. No guidance is provided on prerequisites, exclusions, or comparisons with sibling tools like 'get_semantic_model_definition' or 'list_items', leaving the agent to infer appropriate usage scenarios.

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

get_notebook_driver_logsGet Notebook Driver LogsA

Get Spark driver logs for a notebook execution.

Retrieves the driver logs (stdout or stderr) from a completed notebook run. This is particularly useful for getting detailed error messages and Python tracebacks when a notebook fails.

Important Notes:

  • Python exceptions and tracebacks appear in stdout, not stderr

  • stderr contains Spark/system logs (typically larger)

  • For failed notebooks, check stdout first for the Python error

  • Look for "Error", "Exception", "Traceback" in the output

Use this tool when:

  • A notebook execution failed and you need to see the Python error

  • You want to debug notebook issues by examining driver logs

  • You need to analyze Spark driver behavior (stderr)

Parameters: workspace_name: The display name of the workspace containing the notebook. notebook_name: Name of the notebook. job_instance_id: The job instance ID from execute_notebook or run_on_demand_job result. log_type: Type of log to retrieve - "stdout" (default) or "stderr". Use "stdout" for Python errors and print statements. Use "stderr" for Spark/system logs. max_lines: Maximum number of lines to return (default: 500, None for all). Returns the last N lines (most recent, where errors typically are).

Returns: Dictionary with: - status: "success" or "error" - message: Description of the result - log_type: Type of log retrieved - log_content: The actual log content as a string - log_size_bytes: Total size of the log file - truncated: Whether the log was truncated - spark_application_id: The Spark application ID - livy_id: The Livy session ID

Example: ```python # Get Python error from a failed notebook result = get_notebook_driver_logs( workspace_name="Analytics", notebook_name="ETL_Pipeline", job_instance_id="12345678-1234-1234-1234-123456789abc", log_type="stdout" # Python errors are in stdout! )

if result["status"] == "success":
    print(result["log_content"])
    # Output will include Python traceback like:
    # ZeroDivisionError: division by zero
    # Traceback (most recent call last):
    #   Cell In[11], line 2
    #     result = x / 0
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
notebook_nameYes
job_instance_idYes
log_typeNostdout
max_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure and excels at this. It explains critical behavioral details: that Python exceptions appear in stdout (not stderr), that stderr contains Spark/system logs, how max_lines works (returns last N lines), and what the return dictionary contains. This provides comprehensive context beyond basic functionality.

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

Conciseness5/5

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

The description is well-structured with clear sections (purpose, important notes, usage guidelines, parameters, returns, example) and every sentence earns its place. The information is front-loaded with the core purpose first, followed by critical behavioral details. No wasted words while maintaining excellent clarity.

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

Completeness5/5

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

For a tool with 5 parameters, 0% schema coverage, no annotations, but with an output schema, the description provides exceptional completeness. It covers all parameters thoroughly, explains behavioral nuances, provides usage scenarios, documents the return structure, and includes a practical example. The output schema existence means the description doesn't need to explain return values in detail, but it still provides helpful context about what information is returned.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing detailed semantic explanations for all 5 parameters. Each parameter gets clear guidance: workspace_name and notebook_name identify the resource, job_instance_id specifies which execution, log_type explains the stdout/stderr distinction with usage advice, and max_lines describes the truncation behavior and default.

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

Purpose5/5

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

The description clearly states the specific action ('Get Spark driver logs') and resource ('for a notebook execution'), distinguishing it from siblings like get_notebook_content or get_notebook_execution_details. It explicitly identifies the logs as driver logs from completed notebook runs, which is precise and avoids confusion with other log-related tools.

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

Usage Guidelines5/5

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

The description includes an explicit 'Use this tool when:' section that lists three specific scenarios (notebook execution failed, debugging notebook issues, analyzing Spark driver behavior). It also provides important notes on when to use stdout vs. stderr, offering clear guidance on alternatives within the tool itself.

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

get_notebook_execution_detailsGet Notebook Execution DetailsA

Get detailed execution information for a notebook run by job instance ID.

Retrieves execution metadata from the Fabric Notebook Livy Sessions API, which provides detailed timing, resource usage, and execution state information.

Use this tool when:

  • You want to check the status and timing of a completed notebook run

  • You need to verify resource allocation for a notebook execution

  • You want to analyze execution performance (queue time, run time)

Note: This method returns execution metadata (timing, state, resource usage). Cell-level outputs are only available for active sessions. Once a notebook job completes, individual cell outputs cannot be retrieved via the REST API. To capture cell outputs, use mssparkutils.notebook.exit() in your notebook and access the exitValue through Data Pipeline activities.

Parameters: workspace_name: The display name of the workspace containing the notebook. notebook_name: Name of the notebook. job_instance_id: The job instance ID from execute_notebook or run_on_demand_job result.

Returns: Dictionary with: - status: "success" or "error" - message: Description of the result - session: Full Livy session details (state, timing, resources) - execution_summary: Summarized execution information including: - state: Execution state (Success, Failed, Cancelled, etc.) - spark_application_id: Spark application identifier - queued_duration_seconds: Time spent in queue - running_duration_seconds: Actual execution time - total_duration_seconds: Total end-to-end time - driver_memory, driver_cores, executor_memory, etc.

Example: ```python # After executing a notebook exec_result = run_on_demand_job( workspace_name="Analytics", item_name="ETL_Pipeline", item_type="Notebook", job_type="RunNotebook" )

# Get detailed execution information
details = get_notebook_execution_details(
    workspace_name="Analytics",
    notebook_name="ETL_Pipeline",
    job_instance_id=exec_result["job_instance_id"]
)

if details["status"] == "success":
    summary = details["execution_summary"]
    print(f"State: {summary['state']}")
    print(f"Duration: {summary['total_duration_seconds']}s")
    print(f"Spark App ID: {summary['spark_application_id']}")
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
notebook_nameYes
job_instance_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it retrieves metadata from the Fabric Notebook Livy Sessions API, provides timing/resource usage/state information, and clarifies limitations about cell-level outputs. It doesn't mention error handling, rate limits, or authentication requirements, but covers the core behavioral aspects well.

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

Conciseness5/5

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

The description is well-structured with clear sections (purpose, usage guidelines, notes, parameters, returns, example). Every sentence adds value: the opening explains what the tool does, the usage guidelines provide context, the note clarifies limitations, and the parameters/returns sections document essential information. The example is relevant and demonstrates practical usage.

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

Completeness5/5

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

Given the tool's complexity (execution details retrieval), no annotations, and an output schema present, the description provides excellent completeness. It explains the tool's purpose, when to use it, behavioral characteristics, parameter meanings, and includes a comprehensive example. The output schema handles return value documentation, so the description appropriately focuses on usage context.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It provides clear semantic explanations for all three parameters: 'workspace_name' as 'display name of the workspace containing the notebook', 'notebook_name' as 'Name of the notebook', and 'job_instance_id' as 'The job instance ID from execute_notebook or run_on_demand_job result'. This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Get detailed execution information', 'Retrieves execution metadata') and identifies the resource ('notebook run by job instance ID'). It distinguishes from siblings like 'get_notebook_content' or 'get_job_status' by focusing on execution metadata rather than content or generic job status.

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

Usage Guidelines5/5

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

The description explicitly provides usage guidelines with a dedicated 'Use this tool when:' section listing three specific scenarios (check status/timing, verify resource allocation, analyze performance). It also includes a 'Note:' section explaining limitations (cell outputs not available for completed sessions) and alternatives (using mssparkutils.notebook.exit() for cell outputs).

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

get_operation_resultGet Operation ResultA

Get the result of a long-running operation.

Retrieves the result of an asynchronous operation using its operation ID. Operation IDs are typically returned in the x-ms-operation-id header from API calls that return 202 Accepted responses.

Parameters: operation_id: The operation ID (from x-ms-operation-id header).

Returns: Dictionary with status, operation_id, message, and operation result.

Example: ```python result = get_operation_result("12345678-1234-1234-1234-123456789abc")

if result["status"] == "success":
    operation_result = result["result"]
    # Process operation result
```
ParametersJSON Schema
NameRequiredDescriptionDefault
operation_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It effectively describes the tool's behavior: it retrieves results for long-running operations, explains where operation IDs come from (x-ms-operation-id headers), and provides a clear example of how to handle the response. It doesn't mention rate limits, authentication needs, or error conditions, but covers the core behavioral context well.

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

Conciseness5/5

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

The description is well-structured and appropriately sized. It starts with a clear purpose statement, provides usage context, documents the parameter, describes returns, and includes a practical code example. Every sentence adds value with zero wasted content, making it easy to scan and understand.

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

Completeness5/5

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

Given the tool's moderate complexity (1 parameter, no annotations, but with output schema), the description is complete enough. It explains the purpose, usage context, parameter semantics, and includes an example showing how to handle the response. The existence of an output schema means the description doesn't need to exhaustively document return values, and it provides all necessary contextual information for effective use.

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

Parameters4/5

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

The schema has 0% description coverage for its single parameter, but the description compensates by explaining that 'operation_id' comes from the x-ms-operation-id header of API calls returning 202 Accepted responses. This adds crucial semantic context beyond the bare schema, though it doesn't specify format constraints like UUID requirements.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get the result of a long-running operation' and specifies it retrieves results for asynchronous operations using operation IDs. It distinguishes from sibling tools like 'get_job_status' by focusing on operation results rather than job status, providing specific verb+resource differentiation.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: for retrieving results of asynchronous operations where operation IDs are returned in x-ms-operation-id headers from API calls with 202 Accepted responses. However, it doesn't explicitly state when NOT to use it or mention alternatives like 'get_job_status' for job-related status checks.

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

get_semantic_model_definitionGet Semantic Model DefinitionC

Get semantic model definition parts in the requested format.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
semantic_model_nameNo
semantic_model_idNo
formatNoTMSL
decode_model_bimNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read operation ('Get'), but doesn't specify permissions, rate limits, error handling, or what 'definition parts' entails (e.g., schema, metadata, or content). For a tool with 5 parameters and no annotation coverage, this is a significant gap in transparency.

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

Conciseness4/5

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

The description is a single, efficient sentence with no wasted words, making it easy to parse. However, it's front-loaded with the core action but lacks elaboration needed for clarity, leaning toward under-specification rather than optimal conciseness.

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

Completeness3/5

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

Given the tool has 5 parameters, no annotations, and an output schema exists (which reduces the need to describe return values), the description is incomplete. It doesn't adequately cover parameter meanings, behavioral traits, or usage context. While the output schema helps, the description falls short for a tool of this complexity, making it minimally viable but with clear gaps.

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

Parameters2/5

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

Schema description coverage is 0%, meaning none of the 5 parameters are documented in the schema. The description only mentions 'requested format,' which loosely relates to the 'format' parameter but doesn't explain the others (workspace_name, semantic_model_name, semantic_model_id, decode_model_bim). It adds minimal value beyond the schema, failing to compensate for the coverage gap.

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

Purpose3/5

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

The description states the tool retrieves 'semantic model definition parts in the requested format,' which indicates a read operation on semantic models. However, it's vague about what 'definition parts' includes and doesn't differentiate from sibling tools like 'get_semantic_model_details' or 'execute_dax_query' that also interact with semantic models. The purpose is understandable but lacks specificity.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. With siblings like 'get_semantic_model_details' available, the description doesn't clarify if this tool is for metadata, structure, or other aspects of semantic models. There's no mention of prerequisites, exclusions, or comparative contexts, leaving usage ambiguous.

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

get_semantic_model_detailsGet Semantic Model DetailsB

Get semantic model metadata by name or ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
semantic_model_nameNo
semantic_model_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states it's a read operation ('Get'), implying safety, but doesn't cover permissions, rate limits, error handling, or what metadata includes. This leaves significant gaps for a tool with 3 parameters and an output schema.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and includes key parameter hints, making it appropriately sized for its content.

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

Completeness3/5

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

Given 3 parameters with 0% schema coverage and an output schema, the description is minimally adequate. It covers the basic purpose but lacks details on usage, behavior, and parameter nuances. The output schema helps, but without annotations, more context on permissions or errors would improve completeness.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It mentions retrieval by 'name or ID', which hints at 'semantic_model_name' and 'semantic_model_id', but doesn't explain 'workspace_name' or clarify that at least one of name/ID is needed. This adds some meaning but doesn't fully cover the 3 parameters.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('semantic model metadata'), specifying it can be retrieved by name or ID. It distinguishes this tool from siblings like 'get_semantic_model_definition' by focusing on metadata rather than definition details, though it doesn't explicitly mention this distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'get_semantic_model_definition' or 'list_items'. It mentions the parameters (name or ID) but doesn't explain prerequisites, context, or exclusions for usage.

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

import_notebook_to_fabricImport Notebook to Fabric WorkspaceA

Upload a local .ipynb into a Fabric workspace identified by name.

Imports a Jupyter notebook from the local filesystem into a Microsoft Fabric workspace. The notebook file must be in .ipynb format. The notebook can be organized into folders using forward slashes in the display name (e.g., "demos/hello_world").

Parameters: workspace_name: The display name of the target workspace (case-sensitive as shown in Fabric). notebook_display_name: Desired name (optionally with folders, e.g. "demos/hello_world") inside Fabric. local_notebook_path: Path to the notebook file (absolute or repo-relative). description: Optional description for the notebook.

Returns: Dictionary with status, message, and artifact_id if successful.

Example: python result = import_notebook_to_fabric( workspace_name="My Workspace", notebook_display_name="analysis/customer_analysis", local_notebook_path="notebooks/customer_analysis.ipynb", description="Customer behavior analysis notebook" )

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
notebook_display_nameYes
local_notebook_pathYes
descriptionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses the upload action and format requirements, but doesn't mention authentication needs, rate limits, error handling, or what happens if the workspace doesn't exist. It states the return format but lacks details about failure modes 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.

Conciseness4/5

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

The description is well-structured with clear sections: purpose statement, parameter explanations, return format, and example. While comprehensive, some sentences could be more concise (e.g., 'The notebook file must be in .ipynb format' could be merged with the first sentence).

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

Completeness4/5

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

Given 4 parameters with 0% schema coverage and no annotations, the description does an excellent job explaining parameter semantics and providing an example. The output schema exists, so return values don't need explanation. However, for a mutation tool with no annotations, it could better address behavioral aspects like error conditions or side effects.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It provides clear explanations for all 4 parameters: workspace_name (target workspace, case-sensitive), notebook_display_name (desired name with folder structure), local_notebook_path (file path), and description (optional). The example further clarifies usage with concrete values.

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

Purpose5/5

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

The description clearly states the specific action ('Upload a local .ipynb'), target resource ('into a Microsoft Fabric workspace'), and format constraints ('.ipynb format'). It distinguishes itself from sibling tools by focusing on notebook import rather than pipeline activities, semantic model operations, or workspace/item listing.

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

Usage Guidelines3/5

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

The description implies usage context (uploading local notebooks to Fabric) but doesn't explicitly state when to use this tool versus alternatives like 'get_notebook_content' or 'list_items'. It mentions format requirements but doesn't provide guidance on prerequisites or error conditions.

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

list_itemsList Items in WorkspaceA

List all items in a Fabric workspace, optionally filtered by type.

Returns all items in the specified workspace. If item_type is provided, only items of that type are returned. Supported types include: Notebook, Lakehouse, Warehouse, Pipeline, DataPipeline, Report, SemanticModel, Dashboard, Dataflow, Dataset, and 40+ other Fabric item types.

Parameters: workspace_name: The display name of the workspace. item_type: Optional item type filter (e.g., "Notebook", "Lakehouse"). If not provided, all items are returned.

Returns: Dictionary with status, workspace_name, item_type_filter, item_count, and list of items. Each item contains: id, display_name, type, description, created_date, modified_date.

Example: ```python # List all items result = list_items("My Workspace")

# List only notebooks
result = list_items("My Workspace", item_type="Notebook")
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
item_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses behavioral traits such as returning all items by default, supporting optional filtering, listing supported types, and detailing the return structure. It does not mention rate limits, authentication needs, or pagination, but covers core behavior adequately for a read operation.

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

Conciseness4/5

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

The description is well-structured with clear sections (purpose, parameters, returns, example) and uses bullet points for types. It is appropriately sized but includes some redundancy (e.g., repeating 'Returns all items' after the opening sentence). Every sentence adds value, though minor trimming could improve efficiency.

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

Completeness5/5

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

Given the tool's low complexity (read-only list operation), no annotations, 0% schema coverage, but with an output schema implied in the description, the description is complete. It covers purpose, parameters, return values, and examples, providing all necessary context for an agent to invoke the tool correctly without gaps.

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

Parameters5/5

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

The schema description coverage is 0%, so the description must compensate fully. It clearly explains both parameters: workspace_name as 'the display name of the workspace' and item_type as an optional filter with examples and default behavior. This adds significant meaning beyond the bare schema, fully documenting parameter usage.

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

Purpose5/5

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

The description clearly states the verb ('List') and resource ('all items in a Fabric workspace'), specifies optional filtering by type, and distinguishes from siblings like list_workspaces (which lists workspaces, not items within them). It provides specific examples of item types, making the purpose unambiguous.

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

Usage Guidelines4/5

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

The description implies usage context by stating it returns items 'in the specified workspace' and mentions filtering by item_type. However, it does not explicitly state when to use this tool versus alternatives like list_notebook_executions or get_semantic_model_details, which might overlap for specific item types. The guidance is clear but lacks explicit sibling differentiation.

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

list_notebook_executionsList Notebook ExecutionsA

List all Livy sessions (execution history) for a notebook.

Retrieves a list of all Livy sessions associated with a notebook, providing an execution history with job instance IDs, states, and timing information.

Use this tool when:

  • You want to see the execution history of a notebook

  • You need to find a job instance ID for a past execution

  • You want to analyze execution patterns over time

Parameters: workspace_name: The display name of the workspace containing the notebook. notebook_name: Name of the notebook. limit: Optional maximum number of sessions to return.

Returns: Dictionary with: - status: "success" or "error" - message: Description of the result - sessions: List of session summaries, each containing: - job_instance_id: Unique identifier for the job - livy_id: Livy session identifier - state: Execution state (Success, Failed, Cancelled, etc.) - operation_name: Type of operation (Notebook Scheduled Run, etc.) - spark_application_id: Spark application identifier - submitted_time_utc: When the job was submitted - start_time_utc: When execution started - end_time_utc: When execution ended - total_duration_seconds: Total execution time - total_count: Total number of sessions found

Example: ```python history = list_notebook_executions( workspace_name="Analytics", notebook_name="ETL_Pipeline", limit=10 )

if history["status"] == "success":
    print(f"Found {history['total_count']} executions")
    for session in history["sessions"]:
        print(f"{session['job_instance_id']}: {session['state']}")
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
notebook_nameYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (retrieves execution history), what information it provides (job instance IDs, states, timing), and includes a detailed return structure. However, it doesn't mention potential limitations like pagination, rate limits, or authentication requirements, which would be helpful for a production tool.

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

Conciseness5/5

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

The description is well-structured with clear sections: purpose statement, usage guidelines, parameters, returns, and example. Every sentence earns its place by providing essential information. The front-loaded purpose statement immediately tells users what the tool does, followed by progressively detailed information.

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

Completeness5/5

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

Given the tool's moderate complexity (3 parameters, no annotations, but has output schema), the description is remarkably complete. It covers purpose, usage guidelines, parameter semantics, and includes a detailed return structure with example. The output schema existence means the description doesn't need to explain return values in detail, but it still provides a comprehensive overview that would help an agent use the tool correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It provides clear explanations for all three parameters: workspace_name ('display name of the workspace'), notebook_name ('Name of the notebook'), and limit ('Optional maximum number of sessions to return'). This adds significant value beyond the bare schema, though it doesn't specify format constraints or examples for workspace/notebook names.

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

Purpose5/5

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

The description clearly states the specific verb ('List all Livy sessions') and resource ('for a notebook'), with additional context about execution history. It distinguishes this tool from siblings like 'get_notebook_execution_details' (which likely provides details for a single execution) and 'livy_list_sessions' (which appears to list all Livy sessions without notebook filtering).

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

Usage Guidelines5/5

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

The description includes an explicit 'Use this tool when:' section with three specific scenarios: seeing execution history, finding job instance IDs, and analyzing execution patterns. This provides clear guidance on when to use this tool versus alternatives like 'get_notebook_execution_details' for detailed information about a specific execution.

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

list_workspacesList WorkspacesA

List all accessible Fabric workspaces.

Returns a list of all workspaces the authenticated user has access to, including workspace ID, name, description, type, state, and capacity ID.

Parameters: None

Returns: Dictionary with status, workspace_count, and list of workspaces. Each workspace contains: id, display_name, description, type, state, capacity_id.

Example: python result = list_workspaces()

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that it returns a list of workspaces with specific fields and mentions authentication ('authenticated user'), but lacks details on rate limits, pagination, or error handling. This is adequate but has gaps for a read operation.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by return details and an example. Every sentence adds value: the first defines the action, the second specifies return fields, and the third provides a usage example, with no redundant information.

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

Completeness5/5

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

Given the tool's low complexity (0 parameters), no annotations, and the presence of an output schema (implied by 'Returns' details), the description is complete. It covers purpose, return structure, and usage, leaving no significant gaps for this simple list operation.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description explicitly states 'Parameters: None', which adds clarity beyond the schema, justifying a score above the baseline of 3.

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

Purpose5/5

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

The description clearly states the specific action ('List all accessible Fabric workspaces') and resource ('Fabric workspaces'), distinguishing it from siblings like 'list_items' which lists items rather than workspaces. It explicitly defines the scope as all accessible workspaces for the authenticated user.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: to retrieve all accessible workspaces. However, it does not explicitly mention when not to use it or name alternatives (e.g., 'list_items' for other item types), which prevents a score of 5.

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

livy_cancel_statementCancel Livy StatementA

Cancel a running Livy statement without killing the session.

Cancels a statement that is currently 'waiting' or 'running'. The statement will transition to 'cancelling' then 'cancelled' state. The session remains available for new statements.

Note: Only works on statements in 'waiting' or 'running' state.

Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID. statement_id: Statement ID to cancel.

Returns: Dictionary with cancellation result (typically {"msg": "canceled"}).

Example: python result = livy_cancel_statement( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0", statement_id="1" )

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes
lakehouse_idYes
session_idYes
statement_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it cancels statements, transitions them through states ('cancelling' then 'cancelled'), and leaves the session intact. However, it doesn't mention potential side effects, error conditions, or rate limits, leaving some behavioral aspects uncovered.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose. Every sentence adds value: the first states the action, the second explains state transitions, the third notes session preservation, the fourth provides a critical usage note, and subsequent sections clearly document parameters, returns, and an example without redundancy.

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

Completeness4/5

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

Given the tool's moderate complexity (4 parameters, no annotations, but with an output schema), the description is largely complete. It covers purpose, usage, behavior, parameters, and returns. The output schema exists, so detailed return value explanation isn't needed. However, it lacks error handling or permission context, which could be useful for a cancellation tool.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It lists all four parameters with brief explanations (e.g., 'Fabric workspace ID'), adding meaningful context beyond the bare schema. However, it doesn't provide format details (e.g., UUID format) or constraints, leaving some semantic gaps.

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

Purpose5/5

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

The description clearly states the specific action ('Cancel a running Livy statement') and resource ('Livy statement'), distinguishing it from sibling tools like livy_close_session (which kills the session) and livy_run_statement (which runs statements). It explicitly notes the session remains available, which differentiates it from session-terminating alternatives.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool: 'Only works on statements in 'waiting' or 'running' state.' It also implicitly suggests when not to use it (for statements not in those states) and distinguishes it from livy_close_session by noting 'without killing the session.'

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

livy_close_sessionClose Livy SessionA

Close (terminate) a Livy session.

Terminates the specified Livy session and releases its resources. Any running statements will be cancelled.

Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID to close.

Returns: Dictionary with success/error status and message.

Example: python result = livy_close_session( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0" )

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes
lakehouse_idYes
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it terminates the session, releases resources, and cancels any running statements. However, it lacks details on permissions, error handling, or side effects (e.g., irreversible termination). This is adequate but leaves gaps for a destructive operation.

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

Conciseness4/5

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

The description is well-structured with a clear opening sentence, bullet points for parameters and returns, and an example. It is appropriately sized, though the example could be slightly trimmed. Every sentence adds value, but minor redundancy exists in the example's parameter listing.

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

Completeness4/5

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

Given the tool's complexity (destructive operation with 3 parameters), no annotations, and an output schema present, the description is fairly complete. It covers purpose, parameters, returns, and includes an example. However, it could improve by mentioning authentication needs or error scenarios, given the lack of annotations.

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

Parameters5/5

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

The schema description coverage is 0%, so the description must compensate. It explicitly lists all three parameters (workspace_id, lakehouse_id, session_id) with clear semantics: workspace_id as 'Fabric workspace ID', lakehouse_id as 'Fabric lakehouse ID', and session_id as 'Livy session ID to close'. This adds essential meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Close (terminate)') and resource ('a Livy session'), distinguishing it from sibling tools like livy_create_session, livy_list_sessions, and livy_get_session_status. The verb 'terminates' and the clarification about releasing resources and cancelling statements make the purpose unambiguous.

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

Usage Guidelines4/5

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

The description implies usage context by specifying that it terminates a session and cancels running statements, suggesting it should be used to clean up resources. However, it does not explicitly state when to use it versus alternatives (e.g., livy_cancel_statement for specific statements) or any prerequisites, such as needing an active session.

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

livy_create_sessionCreate Livy SessionA

Create a new Livy session for Spark code execution.

Creates a Spark session for executing PySpark, Scala, or SparkR code. Session creation can take 6+ minutes on first startup as Spark initializes. It's recommended to keep with_wait=True to ensure the session is ready before use.

Parameters: workspace_id: Fabric workspace ID (use list_workspaces tool to find by name). lakehouse_id: Fabric lakehouse ID (use list_items tool with item_type="Lakehouse"). environment_id: Optional Fabric environment ID for pre-installed libraries. kind: Session kind - 'pyspark' (default), 'scala', or 'sparkr'. conf: Optional Spark configuration as key-value pairs (e.g., {"spark.executor.memory": "4g"}). with_wait: If True (default), wait for session to become available before returning. timeout_seconds: Maximum time to wait for session availability (default: from config).

Returns: Dictionary with session details including id, state, kind, appId, appInfo, and log.

Example: ```python # Create a PySpark session result = livy_create_session( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", kind="pyspark", with_wait=True )

if result.get("state") == "idle":
    session_id = result["id"]
    # Session is ready to execute code
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes
lakehouse_idYes
environment_idNo
kindNopyspark
confNo
with_waitNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: the creation process ('can take 6+ minutes on first startup'), the recommendation to use 'with_wait=True' for readiness, and the return format ('Dictionary with session details'). It also implies this is a write operation (creating a session) and mentions timeouts. However, it lacks details on error handling, permissions, or rate limits, which are important for a creation tool.

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

Conciseness4/5

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

The description is well-structured with clear sections: purpose, behavioral notes, parameters, returns, and an example. It is appropriately sized for a complex tool with 7 parameters. However, some sentences could be more concise (e.g., the parameter explanations are detailed but slightly verbose), and the example is lengthy, though it adds practical value. Overall, it is efficient but not perfectly minimal.

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

Completeness5/5

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

Given the complexity (7 parameters, no annotations, schema coverage 0%), the description is highly complete. It covers purpose, behavioral traits (like startup time and waiting), detailed parameter semantics, return values, and includes a practical example. With an output schema present, it doesn't need to explain return values in depth, but it still provides a summary. This makes it sufficient for an agent to understand and use the tool effectively.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It provides detailed semantics for all 7 parameters: explains what each parameter represents (e.g., 'workspace_id: Fabric workspace ID'), gives usage tips (e.g., 'use list_workspaces tool to find by name'), lists options (e.g., 'kind: Session kind - 'pyspark' (default), 'scala', or 'sparkr''), and includes examples (e.g., 'conf: Optional Spark configuration as key-value pairs'). This adds significant value beyond the bare schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Create a new Livy session for Spark code execution' and 'Creates a Spark session for executing PySpark, Scala, or SparkR code.' It specifies the exact action (create), resource (Livy/Spark session), and distinguishes it from sibling tools like livy_list_sessions, livy_close_session, etc., by focusing on creation rather than listing or closing.

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

Usage Guidelines4/5

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

The description provides clear context on when to use this tool: for creating a session to execute Spark code. It mentions that 'Session creation can take 6+ minutes on first startup' and recommends 'with_wait=True to ensure the session is ready before use,' offering practical guidance. However, it does not explicitly state when not to use it or name alternatives (e.g., using existing sessions vs. creating new ones), which prevents a score of 5.

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

livy_get_session_logGet Livy Session LogA

Fetch incremental Livy driver logs for a session.

Retrieves Spark driver logs for debugging session startup issues or statement problems. Supports incremental reads with start/size parameters for paging through logs.

Use Cases:

  • Debugging session startup issues

  • Troubleshooting failed statements

  • Investigating Spark driver problems

  • Monitoring session health

Note: Returns driver-side logs only, not executor logs.

Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID. start: Starting log line index (default: 0). size: Number of log lines to retrieve (default: 500).

Returns: Dictionary with log content and metadata: {"status": "success", "log_content": "", "log_size_bytes": , "offset": , "size": }.

Example: ```python # Get first 100 log lines result = livy_get_session_log( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0", start=0, size=100 )

for log_line in result.get("log", []):
    print(log_line)

# Get next 100 lines
result = livy_get_session_log(..., start=100, size=100)
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes
lakehouse_idYes
session_idYes
startNo
sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing key behaviors: it's a read operation (implied by 'Fetch'), supports incremental reads with paging, and specifies log scope (driver-only). It lacks details on permissions, rate limits, or error handling, but covers essential operational traits beyond basic purpose.

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

Conciseness4/5

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

The description is well-structured with sections for purpose, use cases, notes, parameters, returns, and an example. It is appropriately sized and front-loaded with key information, though the example is detailed and could be slightly condensed without losing value.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, no annotations, but with output schema), the description is complete: it covers purpose, usage, parameters, return format, and includes an example. The output schema exists, so the description need not explain return values in depth, and it adequately addresses all necessary context for a logging tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate fully. It adds significant meaning by explaining all 5 parameters: workspace_id, lakehouse_id, and session_id as identifiers, and start/size for paging with defaults and usage context. This goes beyond the bare schema, providing practical guidance for each parameter.

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

Purpose5/5

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

The description clearly states the specific action ('Fetch incremental Livy driver logs') and resource ('for a session'), distinguishing it from sibling tools like 'get_notebook_driver_logs' or 'get_notebook_execution_details' by specifying it's for Livy sessions. The purpose is precise and avoids tautology.

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

Usage Guidelines4/5

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

The description provides explicit use cases (e.g., debugging session startup, troubleshooting failed statements) and notes that it returns driver-side logs only, not executor logs, offering clear context. However, it does not specify when not to use it or name direct alternatives among siblings, such as 'get_notebook_driver_logs' for non-Livy contexts.

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

livy_get_session_statusGet Livy Session StatusA

Get the current status and details of a Livy session.

Retrieves detailed information about a session including its state, Spark application details, and configuration. Use this to check session health and readiness.

Session States:

  • 'not_started': Session created but not yet started

  • 'starting': Session is initializing

  • 'idle': Session is ready to accept statements

  • 'busy': Session is currently executing a statement

  • 'shutting_down': Session is terminating

  • 'error': Session encountered an error

  • 'dead': Session has terminated

  • 'killed': Session was forcefully terminated

  • 'success': Session completed successfully

Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID to check.

Returns: Dictionary with session status including state, appId, appInfo, kind, and log.

Example: ```python result = livy_get_session_status( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0" )

if result.get("state") == "idle":
    # Session is ready to execute code
    pass
elif result.get("state") == "busy":
    # Session is executing a statement
    pass
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes
lakehouse_idYes
session_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (retrieves session details), includes a comprehensive list of possible session states with explanations, and provides an example showing how to interpret the results. However, it lacks details on error handling, rate limits, or authentication requirements, which are common behavioral traits for API tools.

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

Conciseness5/5

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

The description is well-structured and appropriately sized. It starts with a clear purpose statement, follows with usage guidance, provides a detailed state reference, lists parameters with semantics, describes returns, and includes a practical code example. Every section adds value without redundancy, and information is front-loaded for quick understanding.

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

Completeness5/5

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

Given the tool's moderate complexity (3 parameters, no annotations, but with output schema), the description is complete. It covers purpose, usage, parameters, return values (including state details), and provides an example. The output schema existence means the description doesn't need to exhaustively document return structure, and it adequately supplements with key return insights like state interpretation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It explicitly lists all three parameters (workspace_id, lakehouse_id, session_id) with clear semantic explanations ('Fabric workspace ID', 'Fabric lakehouse ID', 'Livy session ID to check'), adding essential context beyond the bare schema. The example further illustrates parameter usage with realistic values.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('Get', 'Retrieves') and resources ('current status and details of a Livy session', 'detailed information about a session'). It distinguishes itself from siblings like 'livy_list_sessions' (which lists sessions) and 'livy_get_session_log' (which retrieves logs specifically) by focusing on comprehensive session status and health checking.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool: 'Use this to check session health and readiness.' It implies usage scenarios (e.g., monitoring session state) but does not explicitly state when NOT to use it or name specific alternatives like 'livy_list_sessions' for broader session overviews, which prevents a perfect score.

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

livy_get_statement_statusGet Livy Statement StatusA

Get the current status and output of a Livy statement.

Retrieves the status, output, and execution details of a statement. Use this for manual status checking without auto-polling.

Statement States:

  • 'waiting': Statement is queued for execution

  • 'running': Statement is currently executing

  • 'available': Statement completed successfully

  • 'error': Statement encountered an error

  • 'cancelling': Statement is being cancelled

  • 'cancelled': Statement was cancelled

Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID. statement_id: Statement ID to check.

Returns: Dictionary with statement status including id, state, output, and code. Output field contains execution results when state is 'available'.

Example: ```python result = livy_get_statement_status( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0", statement_id="1" )

if result.get("state") == "available":
    output = result.get("output", {})
    print(f"Status: {output.get('status')}")
    print(f"Result: {output.get('data', {}).get('text/plain')}")
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes
lakehouse_idYes
session_idYes
statement_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior by listing all possible statement states (waiting, running, available, error, cancelling, cancelled) and explaining what the output field contains when state is 'available'. However, it doesn't mention error handling, rate limits, or authentication needs, leaving some behavioral aspects uncovered.

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

Conciseness5/5

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

The description is well-structured and appropriately sized. It front-loads the core purpose, follows with usage guidelines, provides a detailed state enumeration, documents parameters, describes returns, and includes a practical example. Every section adds value without redundancy.

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

Completeness5/5

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

Given the tool's complexity (checking statement execution status), no annotations, and an output schema (which handles return values), the description is complete. It covers purpose, usage, behavioral details (states), parameters, and includes an example that demonstrates how to interpret results. No significant gaps remain for effective tool use.

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

Parameters5/5

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

With 0% schema description coverage, the description fully compensates by providing clear parameter documentation. It lists all four parameters with brief explanations (e.g., 'Fabric workspace ID', 'Statement ID to check'), adding essential semantic meaning beyond the bare schema. The example further clarifies parameter usage with concrete values.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs ('get', 'retrieves') and resources ('Livy statement status and output'), distinguishing it from siblings like livy_cancel_statement or livy_run_statement. It explicitly mentions retrieving status, output, and execution details, making the purpose unambiguous.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'Use this for manual status checking without auto-polling.' This clearly indicates when to use this tool versus automated alternatives, and it distinguishes it from other Livy tools like livy_run_statement (which executes) or livy_cancel_statement (which cancels).

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

livy_list_sessionsList Livy SessionsA

List all Livy sessions in a workspace/lakehouse.

Retrieves all active Livy sessions for the specified workspace and lakehouse, including session IDs, states, and configuration details.

Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID.

Returns: Dictionary with sessions list containing id, state, kind, appId, and other details.

Example: ```python result = livy_list_sessions( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321" )

for session in result.get("sessions", []):
    print(f"Session {session['id']}: {session['state']}")
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes
lakehouse_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool retrieves session details (IDs, states, configuration) and returns a dictionary with a sessions list, which adds behavioral context beyond basic listing. However, it doesn't cover important traits like whether this is a read-only operation, potential rate limits, authentication needs, or error handling. The description doesn't contradict any annotations (none exist).

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

Conciseness4/5

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

The description is appropriately sized and front-loaded with the core purpose in the first sentence. It efficiently explains parameters and returns in separate sections, and includes a relevant example. Some minor redundancy exists (e.g., repeating 'List all Livy sessions' and 'Retrieves all active Livy sessions'), but overall it's structured and concise with no wasted sentences.

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

Completeness4/5

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

Given the tool's moderate complexity (listing sessions with 2 parameters), no annotations, and an output schema present, the description is fairly complete. It covers purpose, parameters, return structure, and includes an example. However, it could improve by addressing behavioral aspects like read-only nature or error cases, but the output schema likely handles return value details, making this adequate.

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

Parameters4/5

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

The description explicitly lists and describes both parameters (workspace_id and lakehouse_id) with clear semantics, adding meaning beyond the input schema which has 0% description coverage. It specifies these as 'Fabric workspace ID' and 'Fabric lakehouse ID,' providing context that the schema lacks. Since there are only 2 parameters and the description covers them fully, it compensates well for the low schema coverage.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'List all Livy sessions in a workspace/lakehouse' and 'Retrieves all active Livy sessions...' with specific resources (Livy sessions) and scope (workspace/lakehouse). It distinguishes from siblings like livy_create_session or livy_close_session by focusing on listing rather than creating/managing sessions. However, it doesn't explicitly differentiate from other list tools like list_items or list_notebook_executions.

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

Usage Guidelines3/5

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

The description implies usage context by specifying 'for the specified workspace and lakehouse' and mentions retrieving 'active Livy sessions,' suggesting it's for monitoring current sessions. However, it lacks explicit guidance on when to use this versus alternatives (e.g., livy_get_session_status for specific session details) or prerequisites. No when-not-to-use or comparison with sibling tools is provided.

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

livy_run_statementRun Livy StatementA

Execute code in a Livy session.

Executes PySpark, Scala, or SparkR code in an existing Livy session. The session must be in 'idle' state to accept new statements.

Important Notes:

  • Use df.show() or df.printSchema() to inspect DataFrames before accessing columns

  • SHOW TABLES returns 'namespace' column, not 'database' in Fabric

  • Avoid direct Row attribute access without schema verification

  • When with_wait=False, returns immediately with statement ID - check status separately

Parameters: workspace_id: Fabric workspace ID. lakehouse_id: Fabric lakehouse ID. session_id: Livy session ID (must be in 'idle' state). code: Code to execute (PySpark, Scala, or SparkR). kind: Statement kind - 'pyspark' (default), 'scala', or 'sparkr'. with_wait: If True (default), wait for statement completion before returning. timeout_seconds: Maximum time to wait for statement completion (default: from config).

Returns: Dictionary with statement details including id, state, output, and execution details.

Example: ```python # Execute PySpark code result = livy_run_statement( workspace_id="12345678-1234-1234-1234-123456789abc", lakehouse_id="87654321-4321-4321-4321-210987654321", session_id="0", code="df = spark.range(10)\ndf.count()", kind="pyspark", with_wait=True )

if result.get("state") == "available":
    output = result.get("output", {})
    if output.get("status") == "ok":
        print(f"Result: {output.get('data', {}).get('text/plain')}")
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_idYes
lakehouse_idYes
session_idYes
codeYes
kindNopyspark
with_waitNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the tool executes code asynchronously (with_wait parameter controls waiting), requires session state validation, returns a dictionary with statement details, and includes practical warnings about DataFrame inspection and Fabric-specific column names. This covers execution patterns, output structure, and domain-specific pitfalls.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by important notes, parameter explanations, return details, and a comprehensive example. Every section earns its place by providing essential guidance without redundancy. The use of bullet points and code blocks enhances readability while maintaining brevity.

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

Completeness5/5

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

For a complex tool with 7 parameters, 0% schema coverage, no annotations, but an output schema, the description is exceptionally complete. It covers prerequisites (session state), parameter semantics, execution behavior (synchronous vs. asynchronous), return value interpretation, and practical examples with error handling. The output schema likely defines the dictionary structure, so the description appropriately focuses on usage context rather than repeating schema details.

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

Parameters5/5

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

Given 0% schema description coverage, the description fully compensates by explaining all 7 parameters in detail. It clarifies each parameter's purpose (e.g., workspace_id as 'Fabric workspace ID', session_id 'must be in idle state'), default values (kind defaults to 'pyspark', with_wait defaults to true), and behavioral implications (timeout_seconds 'from config' if null). This adds significant meaning beyond the bare schema.

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

Purpose5/5

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

The description clearly states the specific action ('Execute code in a Livy session') and resource ('existing Livy session'), distinguishing it from siblings like livy_create_session or livy_cancel_statement. It specifies the supported languages (PySpark, Scala, SparkR) and the required session state ('idle'), making the purpose highly specific and differentiated.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool (e.g., 'session must be in idle state'), when not to use it (e.g., 'Avoid direct Row attribute access without schema verification'), and alternatives (e.g., 'check status separately' when with_wait=False). It also includes important notes for correct usage, such as handling SHOW TABLES in Fabric and DataFrame inspection.

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

refresh_semantic_modelRefresh Semantic ModelC

Refresh a semantic model and wait for completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
semantic_model_nameNo
semantic_model_idNo
refresh_typeNo
objectsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions 'wait for completion' (implying synchronous operation), it doesn't address critical aspects: what permissions are required, whether this is a destructive operation (could overwrite data), potential rate limits, error conditions, or what happens if the refresh fails. For a mutation tool with zero annotation coverage, this is insufficient.

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

Conciseness5/5

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

The description is extremely concise - just 7 words in a single sentence. It's front-loaded with the core action and includes the important 'wait for completion' detail. There's zero wasted language or redundancy.

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

Completeness2/5

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

Given the complexity (mutation operation with 5 parameters, 0% schema coverage, no annotations) and the existence of an output schema, the description is incomplete. While the output schema might document return values, the description fails to explain parameter usage, behavioral constraints, or operational context needed for safe and effective use of this tool.

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

Parameters1/5

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

Schema description coverage is 0% (none of the 5 parameters have descriptions in the schema), and the tool description provides absolutely no information about any parameters. The agent must guess what 'workspace_name', 'semantic_model_name', 'semantic_model_id', 'refresh_type', and 'objects' mean and how to use them. This is a critical gap for a tool with multiple parameters.

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

Purpose4/5

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

The description clearly states the action ('Refresh') and target ('semantic model'), and specifies that it 'waits for completion' which adds important behavioral context. However, it doesn't differentiate this tool from potential alternatives or siblings like 'get_semantic_model_details' or 'get_job_status' that might provide status information without performing the refresh.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With many sibling tools available (like 'get_semantic_model_details', 'create_semantic_model', 'add_measures_to_semantic_model'), there's no indication of when refresh is appropriate versus other operations on semantic models, nor any prerequisites or constraints mentioned.

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

remove_activity_dependencyRemove Activity DependencyA

Remove dependsOn references to a target activity.

Removes dependsOn edges pointing to the target activity. If from_activity_name is provided, only removes edges from that activity.

Parameters: workspace_name: The display name of the workspace containing the pipeline. pipeline_name: Name of the existing pipeline to update. activity_name: Name of the activity being depended on. from_activity_name: Optional activity to remove dependencies from.

Returns: Dictionary with status, pipeline_id, pipeline_name, activity_name, removed_count, workspace_name, and message.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
pipeline_nameYes
activity_nameYes
from_activity_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only partially discloses behavior. It explains what the tool does (removing dependency edges) and the conditional logic with from_activity_name, but misses critical details like whether this requires specific permissions, if changes are reversible, potential side effects on pipeline execution, or error handling. For a mutation tool with zero annotation coverage, this is insufficient.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement, parameter explanations, and return value summary in separate logical sections. Every sentence adds value without redundancy, and it's appropriately sized for the tool's complexity.

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

Completeness4/5

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

Given the tool's moderate complexity (4 parameters, mutation operation), no annotations, but with an output schema (returns dictionary with specific fields), the description is reasonably complete. It covers purpose, parameters, and return structure, though it could better address behavioral aspects like permissions or side effects to fully compensate for the lack of annotations.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates well by explaining all 4 parameters in plain language, clarifying their roles (e.g., workspace_name as 'display name', pipeline_name for 'existing pipeline to update', activity_name as 'being depended on', and from_activity_name's optional filtering effect). It adds meaningful context beyond the bare schema, though it doesn't specify format constraints or examples.

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

Purpose5/5

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

The description clearly states the specific action ('Remove dependsOn references') and target resource ('to a target activity'), distinguishing it from sibling tools like delete_activity_from_pipeline (which removes the activity itself) and add_activity_to_pipeline (which adds dependencies). The verb 'remove' is precise and the scope is well-defined.

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

Usage Guidelines3/5

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

The description implies usage context through the parameter explanation (e.g., 'If from_activity_name is provided, only removes edges from that activity'), but lacks explicit guidance on when to use this tool versus alternatives like delete_activity_from_pipeline or when dependencies should be removed. No clear exclusions or prerequisites are stated.

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

run_on_demand_jobRun On-Demand JobA

Run an on-demand job for a Fabric item.

Executes a job for the specified item. Common job types include:

  • RunNotebook: Execute a notebook

  • Pipeline: Run a data pipeline

  • DefaultJob: Default job type for the item

The job runs asynchronously. Use get_job_status or get_job_status_by_url to check the job's progress and result.

Parameters: workspace_name: The display name of the workspace. item_name: Name of the item to run job for. item_type: Type of the item (Notebook, Pipeline, Lakehouse, Warehouse, etc.). job_type: Type of job to run (RunNotebook, DefaultJob, Pipeline, etc.). execution_data: Optional execution data payload for the job (e.g., notebook parameters).

Returns: Dictionary with status, message, job_instance_id, location_url, and retry_after.

Example: ```python # Run a notebook result = run_on_demand_job( workspace_name="My Workspace", item_name="analysis_notebook", item_type="Notebook", job_type="RunNotebook", execution_data={"parameters": {"start_date": "2025-01-01"}} )

# Use the location URL to check status
job_status = get_job_status_by_url(result["location_url"])
```
ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_nameYes
item_nameYes
item_typeYes
job_typeYes
execution_dataNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses key behavioral traits: the job runs asynchronously, returns a dictionary with specific fields, and provides example usage. However, it doesn't mention authentication requirements, rate limits, error conditions, or what happens if the job fails. The description doesn't contradict any annotations since none exist.

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

Conciseness4/5

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

The description is well-structured with purpose statement, common job types, behavioral note, parameter explanations, return value description, and example. Every section adds value. It could be slightly more concise by integrating the example more tightly, but overall it's appropriately sized and front-loaded with essential information.

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

Completeness4/5

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

Given 5 parameters with 0% schema coverage, no annotations, but with output schema (implied by 'Returns' section), the description does well. It covers purpose, usage, parameters, returns, and provides an example. The main gap is lack of error handling or permission information. The output schema existence reduces the need to fully document return values, but the description still provides useful context about what fields mean.

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

Parameters4/5

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

With 0% schema description coverage for 5 parameters, the description must compensate. It provides meaningful explanations for all parameters: workspace_name as 'display name', item_name as 'Name of the item', item_type with examples, job_type with common types, and execution_data as 'Optional execution data payload'. This adds substantial value beyond the bare schema, though it doesn't specify format constraints or validation rules.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Run an on-demand job for a Fabric item' with the verb 'executes' and resource 'job for the specified item'. It distinguishes from siblings by focusing on job execution rather than creation, deletion, or status checking. However, it doesn't explicitly differentiate from all 30+ siblings, just the two status-checking tools mentioned later.

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

Usage Guidelines4/5

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

The description provides clear context about when to use this tool: for running jobs asynchronously. It explicitly mentions alternatives for checking progress: 'Use get_job_status or get_job_status_by_url to check the job's progress and result.' It doesn't specify when NOT to use it or compare with other job-related siblings like livy_run_statement.

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. 37 tool updatesv0.7.1
    • First observedadd_activity_to_pipeline
    • First observedadd_copy_activity_to_pipeline
    • First observedadd_dataflow_activity_to_pipeline
    • First observedadd_measures_to_semantic_model
    • First observedadd_notebook_activity_to_pipeline
    • First observedadd_relationship_to_semantic_model
    • First observedadd_table_to_semantic_model
    • First observedattach_lakehouse_to_notebook
    • First observedcreate_blank_pipeline
    • First observedcreate_semantic_model
    • First observeddelete_activity_from_pipeline
    • First observeddelete_item
    • First observeddelete_measures_from_semantic_model
    • First observedexecute_dax_query
    • First observedget_job_status
    • First observedget_job_status_by_url
    • First observedget_notebook_content
    • First observedget_notebook_driver_logs
    • First observedget_notebook_execution_details
    • First observedget_operation_result
    • First observedget_semantic_model_definition
    • First observedget_semantic_model_details
    • First observedimport_notebook_to_fabric
    • First observedlist_items
    • First observedlist_notebook_executions
    • First observedlist_workspaces
    • First observedlivy_cancel_statement
    • First observedlivy_close_session
    • First observedlivy_create_session
    • First observedlivy_get_session_log
    • First observedlivy_get_session_status
    • First observedlivy_get_statement_status
    • First observedlivy_list_sessions
    • First observedlivy_run_statement
    • First observedrefresh_semantic_model
    • First observedremove_activity_dependency
    • First observedrun_on_demand_job

TDQS

B3.4/5.0
Disambiguation3/5

There is significant overlap between pipeline activity tools (add_copy_activity_to_pipeline, add_notebook_activity_to_pipeline, add_dataflow_activity_to_pipeline, add_activity_to_pipeline) where the generic tool can perform the same functions as the specific ones, causing potential confusion. However, descriptions help clarify the distinctions, and other tools like list_items vs list_workspaces or get_job_status vs get_job_status_by_url have clear boundaries.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (e.g., add_activity_to_pipeline, delete_activity_from_pipeline, list_items, get_job_status). There are minor deviations like livy_run_statement (prefix instead of verb_noun) and execute_dax_query (verb_noun but with a different verb style), but overall the naming is predictable and readable.

Tool Count2/5

With 37 tools, the count is excessive for a single server, making it heavy and potentially overwhelming for agents. While the domain (Microsoft Fabric) is broad, the toolset includes many specialized tools (e.g., multiple Livy session management tools) that could be consolidated or scoped more narrowly.

Completeness4/5

The toolset provides comprehensive coverage for Fabric operations, including CRUD for pipelines, notebooks, semantic models, and jobs, with lifecycle management (create, update, delete, execute, monitor). Minor gaps exist, such as limited update operations for items beyond pipelines (e.g., no update_notebook), but agents can work around these with existing tools.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides full execution and management capabilities for Microsoft Fabric Data Engineering workloads, including notebooks, pipelines, Lakehouses, and Spark jobs. It enables users to trigger runs, monitor status, manage workspace items, and configure job schedules through natural language.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to query and explore schemas in Microsoft Fabric lakehouses, warehouses, and SQL databases using natural language, with tools for executing read-only SQL queries and searching tables, columns, and query patterns.
    3
    MIT
  • F
    license
    B
    quality
    C
    maintenance
    Exposes Microsoft Fabric operations as MCP tools, with 105 tools across 17 domains including lakehouses, warehouses, notebooks, pipelines, and real-time analytics, handling long-running operations and supporting multiple authentication modes.
    100
    -
  • A
    license
    B
    quality
    A
    maintenance
    Enables AI agents to interact with Microsoft Fabric Real-Time Intelligence services, allowing for seamless data querying, analysis, and streaming capabilities.
    39
    130
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bablulawrence/ms-fabric-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server