Databricks MCP Server
Provides access to Databricks functionality including cluster management, job management, notebook operations, file system operations (DBFS and Unity Catalog volumes), and SQL execution capabilities.
Supports notebook operations with Jupyter, allowing export of Databricks notebooks in Jupyter format as well as other formats.
Enables interaction with Python notebooks in Databricks, supporting operations like creating and exporting notebooks with Python content.
Integrates with Unity Catalog, providing tools for volume operations such as uploading files to Unity Catalog volumes and listing files in volumes with detailed metadata.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Databricks MCP Serverlist all running clusters and show their status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Databricks MCP Server - Working Version
A fixed version of the Databricks MCP Server that properly works with Claude Code and other MCP clients.
š§ What Was Fixed
This is a working fork of the original Databricks MCP server that fixes critical issues preventing it from working with Claude Code and other MCP clients.
Original Repository: https://github.com/JustTryAI/databricks-mcp-server
The Problems
Asyncio event loop conflict: Original server used
asyncio.run()inside MCP tool functions, causingasyncio.run() cannot be called from a running event looperrors when used with Claude Code (which already runs in an async context)Command spawning issues: Claude Code's MCP client can only spawn single executables, not commands with arguments like
databricks-mcp startSQL API issues: Byte limit too high (100MB vs 25MB max), no API endpoint fallback for different Databricks workspace configurations
The Solutions
Fixed async patterns: Created
simple_databricks_mcp_server.pythat follows the working iPython MCP pattern - changed all tools to useasync defwithawaitinstead ofasyncio.run()Simplified CLI: Modified the CLI to default to starting the server when no command is provided, eliminating the need for wrapper scripts
SQL API improvements:
Reduced byte_limit from 100MB to 25MB (Databricks maximum allowed)
Added API endpoint fallback: tries
/statementsfirst, then/statements/executeBetter error logging when SQL APIs fail
Related MCP server: Databricks MCP Server
š Quick Start for Claude Code Users
Install directly from GitHub:
uv tool install git+https://github.com/samhavens/databricks-mcp-server.gitOr clone and install locally:
git clone https://github.com/samhavens/databricks-mcp-server.git
cd databricks-mcp-server
uv tool install --editable .Configure credentials:
cp .env.example .env
# Edit .env with your Databricks host and tokenAdd to Claude Code:
claude mcp add databricks "databricks-mcp"Test it works:
> list all databricks clustersWhy no arguments needed?
The CLI now defaults to starting the server when no command is provided, making it compatible with Claude Code's MCP client (which can only spawn single executables without arguments).
About This MCP Server
A Model Completion Protocol (MCP) server for Databricks that provides access to Databricks functionality via the MCP protocol. This allows LLM-powered tools to interact with Databricks clusters, jobs, notebooks, and more.
Features
MCP Protocol Support: Implements the MCP protocol to allow LLMs to interact with Databricks
Databricks API Integration: Provides access to Databricks REST API functionality
Tool Registration: Exposes Databricks functionality as MCP tools
Async Support: Built with asyncio for efficient operation
Available Tools
The Databricks MCP Server exposes 20 comprehensive tools across all major Databricks functionality areas:
Cluster Management (5 tools)
list_clusters: List all Databricks clusters with status and configuration details
create_cluster: Create a new Databricks cluster with specified configuration
terminate_cluster: Terminate a Databricks cluster
get_cluster: Get detailed information about a specific Databricks cluster
start_cluster: Start a terminated Databricks cluster
Job Management (4 tools)
list_jobs: List Databricks jobs with advanced pagination, creator filtering, and run status tracking
list_job_runs: List recent job runs with detailed execution status, duration, and result information
run_job: Execute a Databricks job with optional parameters
create_job: Create a new job to run a notebook (supports serverless compute by default)
Notebook Management (3 tools)
list_notebooks: List notebooks in a workspace directory with metadata
export_notebook: Export a notebook from the workspace in various formats (Jupyter, Python, etc.)
create_notebook: Create a new notebook in the workspace with specified content and language
File System (4 tools)
list_files: List files and directories in DBFS paths with size and modification details
upload_file_to_volume: Upload files to Unity Catalog volumes with progress tracking and large file support
upload_file_to_dbfs: Upload files to DBFS with chunked upload for large files
list_volume_files: List files and directories in Unity Catalog volumes with detailed metadata
SQL Execution (3 tools)
execute_sql: Execute SQL statement and wait for completion (blocking) - perfect for quick queries
execute_sql_nonblocking: Start SQL execution and return immediately with statement_id for long-running queries
get_sql_status: Monitor and retrieve results of non-blocking SQL executions by statement_id
Enhanced Features
Advanced Job Management
Pagination support:
list_jobsincludes pagination with configurable limits and offsetsCreator filtering: Filter jobs by creator email (case-insensitive)
Run status integration: Automatically includes latest run status and execution duration
Duration calculations: Real-time tracking of job execution times
Unity Catalog Integration
Volume operations: Full support for Unity Catalog volumes using Databricks SDK
Large file handling: Optimized upload with progress tracking for multi-GB files
Path validation: Automatic validation of volume paths and permissions
Non-blocking SQL Execution
Asynchronous execution: Start long-running SQL queries without blocking
Status monitoring: Real-time status tracking with detailed error reporting
Result retrieval: Fetch results when queries complete successfully
Key Features
Serverless Compute Support
The create_job tool supports serverless compute by default, eliminating the need for cluster management:
# Serverless execution (default - no cluster needed)
mcp__databricks__create_job(
job_name="My Data Pipeline",
notebook_path="/Users/your.email@company.com/MyNotebook",
timeout_seconds=3600,
parameters={"param1": "value1"}
)
# Or explicitly specify serverless
mcp__databricks__create_job(
job_name="My Pipeline",
notebook_path="/path/to/notebook",
use_serverless=True # Default
)
# Still supports cluster-based execution
mcp__databricks__create_job(
job_name="My Pipeline",
notebook_path="/path/to/notebook",
use_serverless=False,
cluster_id="your-cluster-id"
)Benefits of serverless:
No cluster creation permissions required
Auto-scaling compute resources
Cost-efficient - pay only for execution time
Faster job startup
Installation
Prerequisites
Python 3.10 or higher
uvpackage manager (recommended for MCP servers)
Setup
Install
uvif you don't have it already:# MacOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh # Windows (in PowerShell) irm https://astral.sh/uv/install.ps1 | iexRestart your terminal after installation.
Clone the repository:
git clone https://github.com/samhavens/databricks-mcp-server.git cd databricks-mcp-serverSet up the project with
uv:# Create and activate virtual environment uv venv # On Windows .\.venv\Scripts\activate # On Linux/Mac source .venv/bin/activate # Install dependencies in development mode uv pip install -e . # Install development dependencies uv pip install -e ".[dev]"Set up environment variables:
# Windows set DATABRICKS_HOST=https://your-databricks-instance.azuredatabricks.net set DATABRICKS_TOKEN=your-personal-access-token # Linux/Mac export DATABRICKS_HOST=https://your-databricks-instance.azuredatabricks.net export DATABRICKS_TOKEN=your-personal-access-tokenYou can also create an
.envfile based on the.env.exampletemplate.
Usage with Claude Code
The MCP server is automatically started by Claude Code when needed. No manual server startup is required.
After installation and configuration:
Start using Databricks tools in Claude Code:
> list all databricks clusters > create a job to run my notebook > execute SQL: SHOW CATALOGSCheck available tools:
databricks-mcp list-tools
Querying Databricks Resources
You can test the MCP server tools directly or use them through Claude Code once installed.
Project Structure
databricks-mcp-server/
āāā src/ # Source code
ā āāā __init__.py # Makes src a package
ā āāā __main__.py # Main entry point for the package
ā āāā api/ # Databricks API clients
ā ā āāā clusters.py # Cluster management APIs
ā ā āāā dbfs.py # DBFS file system APIs
ā ā āāā jobs.py # Job management APIs
ā ā āāā notebooks.py # Notebook workspace APIs
ā ā āāā sql.py # SQL execution APIs
ā āāā core/ # Core functionality
ā ā āāā config.py # Configuration management
ā ā āāā auth.py # Authentication
ā ā āāā utils.py # Utility functions
ā āāā server/ # Server implementation
ā ā āāā simple_databricks_mcp_server.py # Main MCP server
ā āāā cli/ # Command-line interface
ā āāā commands.py # CLI commands
āāā tests/ # Test directory
ā āāā test_clusters.py # Unit tests for API functions
ā āāā test_direct.py # Integration tests
ā āāā test_tools.py # MCP tool tests
ā āāā test_validation.py # Import/schema validation tests
āāā pyproject.toml # Project configurationDevelopment
Linting
The project includes optional linting tools for code quality:
# Run linters (if installed in dev dependencies)
uv run pylint src/ tests/
uv run flake8 src/ tests/
uv run mypy src/Testing
The project uses pytest for testing with async support. Tests are automatically configured to run with pytest-asyncio.
# Run all tests
uv run pytest tests/ -v
# Run specific test files
uv run pytest tests/test_clusters.py -v
uv run pytest tests/test_direct.py -v
uv run pytest tests/test_tools.py -v
# Run with coverage report (if coverage is installed)
uv run pytest --cov=src tests/ --cov-report=term-missingTest Status: ā 12 passed, 5 skipped (intentionally disabled)
Test Types:
Unit tests (
test_clusters.py): Test API functions with mocksIntegration tests (
test_direct.py,test_tools.py): Test MCP tools directly (requires Databricks credentials)Validation tests (
test_validation.py): Test import and schema validation
Note: Integration tests will show errors if Databricks credentials are not configured, but this is expected behavior.
Documentation
API documentation is generated using Sphinx and can be found in the
docs/apidirectoryAll code includes Google-style docstrings
See the
examples/directory for usage examples
Examples
Volume Upload Operations
Upload a local file to Unity Catalog volume:
# Upload dataset to Unity Catalog volume
mcp__databricks__upload_file_to_volume(
local_file_path='./data/large_dataset.json',
volume_path='/Volumes/catalog/schema/volume/large_dataset.json',
overwrite=True
)
# List files in the volume to verify
mcp__databricks__list_volume_files(
volume_path='/Volumes/catalog/schema/volume/'
)Upload to DBFS for temporary processing:
# Upload script to DBFS
mcp__databricks__upload_file_to_dbfs(
local_file_path='./scripts/analysis.py',
dbfs_path='/tmp/analysis.py',
overwrite=True
)Non-blocking SQL Execution
Start long-running query and monitor progress:
# Start a long-running query (non-blocking)
statement_result = mcp__databricks__execute_sql_nonblocking(
statement="SELECT COUNT(*) FROM large_table GROUP BY category",
warehouse_id="your-warehouse-id"
)
statement_id = statement_result['statement_id']
# Check status periodically
status = mcp__databricks__get_sql_status(statement_id=statement_id)
print(f"Status: {status['state']}") # PENDING, RUNNING, SUCCEEDED, FAILED
# When complete, retrieve results
if status['state'] == 'SUCCEEDED':
results = status['result']Advanced Job Management
List jobs with filtering and pagination:
# List jobs created by specific user with pagination
jobs = mcp__databricks__list_jobs(
limit=25,
offset=0,
created_by='user@company.com',
include_run_status=True # Include latest run info
)
# Get detailed run history for a specific job
runs = mcp__databricks__list_job_runs(
job_id=12345,
limit=10
)For more examples, check the examples/ directory:
# Run example scripts with uv
uv run examples/direct_usage.py
uv run examples/mcp_client_usage.pyContributing
Contributions are welcome! Please feel free to submit a Pull Request.
Ensure your code follows the project's coding standards
Add tests for any new functionality
Update documentation as necessary
Verify all tests pass before submitting
š Technical Details
The key fix was changing from:
@mcp.tool()
def list_clusters() -> str:
result = asyncio.run(clusters.list_clusters()) # ā Breaks in async context
return json.dumps(result)To:
@mcp.tool()
async def list_clusters() -> str:
result = await clusters.list_clusters() # ā
Works in async context
return json.dumps(result)This pattern was applied to all 20 MCP tools in the server.
šļø Implementation Architecture
SDK vs REST API Approach
The MCP server uses a hybrid implementation approach optimized for reliability and performance:
Databricks SDK (Preferred)
Used for: Volume operations, authentication, and core workspace interactions
Benefits: Automatic authentication, better error handling, type safety
Tools using SDK:
upload_file_to_volume,list_volume_files, authentication layerAuthentication: Automatically discovers credentials from environment, CLI config, or instance metadata
REST API (Legacy)
Used for: SQL execution, some job operations
Benefits: Direct control over API calls, established patterns
Tools using REST:
execute_sql,execute_sql_nonblocking,get_sql_statusAuthentication: Uses manual token-based authentication
Migration Status
ā Volume operations: Migrated to SDK (fixes 404 errors from REST)
š In progress: Additional tools being evaluated for SDK migration
š Future: Plan to migrate remaining tools for consistency
Recommendation: New tools should use the Databricks SDK for better maintainability and error handling.
š Original Repository
Based on: https://github.com/JustTryAI/databricks-mcp-server
š Issues Fixed
ā
asyncio.run() cannot be called from a running event loopā
spawn databricks-mcp start ENOENT(command with arguments not supported)ā MCP server connection failures with Claude Code
ā Proper async/await patterns for MCP tools
ā SQL execution byte limit issues (100MB ā 25MB)
ā SQL API endpoint compatibility across different Databricks workspaces
ā Better error handling and logging for SQL operations
License
This project is licensed under the MIT License - see the LICENSE file for details.
Available Tools
19 toolscreate_clusterC
Create a new Databricks cluster
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_name | Yes | ||
| spark_version | Yes | ||
| node_type_id | Yes | ||
| num_workers | No |
TDQS
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 creates a cluster but doesn't describe what happens after creation (e.g., whether it starts automatically, returns a cluster ID, or has side effects like billing implications). It lacks details on permissions required, rate limits, or error conditions, leaving 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to scan. Every word earns its place by directly stating the tool's purpose without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 4 parameters, 0% schema description coverage, no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns, how to use the parameters, or behavioral aspects like idempotency or error handling. The agent lacks sufficient context to use this tool effectively beyond basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate by explaining parameters, but it provides no parameter information. The description doesn't mention any of the four parameters (cluster_name, spark_version, node_type_id, num_workers) or their purposes, leaving them entirely undocumented. This fails to add value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('new Databricks cluster'), making the purpose immediately understandable. It distinguishes this from sibling tools like 'get_cluster', 'list_clusters', 'start_cluster', and 'terminate_cluster' by specifying creation rather than retrieval or management. However, it doesn't explicitly differentiate from other creation tools like 'create_job' or 'create_notebook' beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing proper permissions or available resources), when not to use it (e.g., if a cluster already exists), or how it relates to sibling tools like 'start_cluster' or 'terminate_cluster'. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_jobB
Create a new Databricks job to run a notebook (uses serverless by default)
| Name | Required | Description | Default |
|---|---|---|---|
| job_name | Yes | ||
| notebook_path | Yes | ||
| timeout_seconds | No | ||
| parameters | No | ||
| cluster_id | No | ||
| use_serverless | No |
TDQS
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 mentions the default serverless behavior, which adds some context, but it doesn't disclose critical behavioral traits such as whether this is a mutating operation, what permissions are required, if there are rate limits, or what the output looks like. For a creation tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that is front-loaded with the core purpose and includes an important behavioral detail (serverless default). There is no wasted text, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a job creation tool with 6 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on parameter meanings, behavioral implications (e.g., mutation effects, error handling), and expected outputs, leaving significant gaps for an AI 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.
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 for undocumented parameters. It only mentions 'serverless by default', which relates to the 'use_serverless' parameter, but it doesn't explain the semantics of other parameters like 'job_name', 'notebook_path', 'timeout_seconds', 'parameters', or 'cluster_id'. This fails to add sufficient meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new Databricks job') and the resource ('to run a notebook'), which is specific and actionable. It distinguishes from siblings like 'run_job' by focusing on creation rather than execution, though it doesn't explicitly contrast with all siblings like 'create_cluster' or 'create_notebook'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating jobs to run notebooks, with a default behavior ('uses serverless by default'), but it doesn't provide explicit guidance on when to use this tool versus alternatives like 'run_job' or 'create_cluster'. It offers some context but lacks clear exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_notebookC
Create a new notebook in the Databricks workspace
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| content | Yes | ||
| language | No | PYTHON | |
| overwrite | No |
TDQS
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 but offers minimal information. It states the tool creates a notebook but doesn't cover critical aspects like authentication requirements, rate limits, error conditions (e.g., invalid paths), or what happens on success (e.g., returns a notebook ID). For a mutation tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to parse. Every part of the sentence ('Create a new notebook in the Databricks workspace') directly contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with 4 parameters), lack of annotations, 0% schema description coverage, and no output schema, the description is incomplete. It doesn't address behavioral traits, parameter meanings, return values, or usage context, leaving significant gaps for an AI agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so parameters are undocumented in the schema. The description adds no parameter semanticsāit doesn't explain what 'path', 'content', 'language', or 'overwrite' mean, their formats, or constraints (e.g., path syntax, language options). This fails to compensate for the schema gap, leaving parameters largely ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new notebook') and resource ('in the Databricks workspace'), making the purpose immediately understandable. However, it doesn't differentiate this tool from potential siblings like 'upload_file_to_dbfs' or 'export_notebook' that might also create notebook-like resources, preventing a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., workspace access), contrast with similar tools (e.g., 'upload_file_to_dbfs' for files vs. notebooks), or specify use cases (e.g., for interactive coding vs. batch jobs). This leaves the agent with minimal context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_sqlB
Execute a SQL statement and wait for completion (blocking)
| Name | Required | Description | Default |
|---|---|---|---|
| statement | Yes | ||
| warehouse_id | Yes | ||
| catalog | No | ||
| schema_name | No |
TDQS
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 the blocking behavior, which is useful, but lacks critical details such as permissions required, potential side effects (e.g., data modification), error handling, or performance implications. For a tool that executes SQL statements, this is a significant gap in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Execute a SQL statement') and adds essential behavioral detail ('wait for completion (blocking)'). There is no wasted verbiage, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of executing SQL (potentially involving data mutation, permissions, and performance), no annotations, no output schema, and low parameter semantics, the description is incomplete. It lacks details on return values, error cases, and the broader context of SQL execution in this environment, making it insufficient for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'SQL statement' which relates to the 'statement' parameter, but doesn't explain the purpose of 'warehouse_id', 'catalog', or 'schema_name', nor does it provide any syntax or format guidance. With 4 parameters and no schema descriptions, this is inadequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute a SQL statement') and specifies the blocking behavior ('wait for completion'), which distinguishes it from the sibling 'execute_sql_nonblocking'. However, it doesn't specify the resource or context (e.g., database, warehouse) beyond what's implied by the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning 'blocking', which suggests this tool should be used when waiting for SQL execution completion is required, as opposed to the non-blocking sibling. However, it doesn't explicitly state when to use this versus alternatives like 'execute_sql_nonblocking' or other SQL-related tools, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_sql_nonblockingB
Start SQL statement execution and return immediately with statement_id (non-blocking)
| Name | Required | Description | Default |
|---|---|---|---|
| statement | Yes | ||
| warehouse_id | Yes | ||
| catalog | No | ||
| schema_name | No |
TDQS
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 the non-blocking behavior and immediate return of a statement_id, which is useful. However, it lacks critical behavioral details such as execution timeouts, error handling, authentication requirements, or how to retrieve results later (e.g., using 'get_sql_status'). For a tool with no annotations, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the key action and outcome. It wastes no words and efficiently communicates the core functionality. Every part of the sentence earns its place by specifying the action, behavior, and return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a SQL execution tool with no annotations, no output schema, and 4 parameters (2 required), the description is incomplete. It covers the high-level behavior but misses details on parameter usage, result retrieval (e.g., via 'get_sql_status'), error scenarios, and integration with sibling tools. For such a tool, more context is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It doesn't mention any parameters or their semantics (e.g., what 'warehouse_id' refers to, the format of 'statement', or the purpose of 'catalog' and 'schema_name'). With 4 parameters and no schema descriptions, the description adds no value beyond what the bare schema provides, failing to clarify usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start SQL statement execution') and the resource (SQL statement), and specifies the non-blocking behavior with immediate return of a statement_id. It distinguishes from the sibling 'execute_sql' by highlighting the non-blocking aspect, though it doesn't explicitly name the sibling. The purpose is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for asynchronous SQL execution where immediate results aren't needed, contrasting with the blocking 'execute_sql' sibling. However, it doesn't explicitly state when to use this tool versus alternatives like 'execute_sql' or provide context on prerequisites (e.g., warehouse availability). The guidance is implied but not detailed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_notebookC
Export a notebook from the workspace
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| format | No | JUPYTER |
TDQS
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. 'Export' implies a read operation that generates output, but the description doesn't specify what happens (e.g., file download, storage location, format defaults, permissions needed, or error conditions). It lacks critical details for safe and effective use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to scan. Every word contributes directly to the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (export operation with 2 parameters), no annotations, 0% schema coverage, and no output schema, the description is incomplete. It doesn't explain parameters, behavioral traits, or output format, leaving significant gaps for the agent to operate effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema provides no parameter details. The description mentions no parameters at all, failing to explain 'path' (e.g., notebook path in workspace) or 'format' (e.g., export formats like JUPYTER). It doesn't compensate for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Export') and resource ('a notebook from the workspace'), making the purpose understandable. However, it doesn't distinguish this tool from potential sibling export operations (none are listed, but it could be confused with general file export tools). The description is specific but lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., notebook must exist), exclusions, or related tools like 'list_notebooks' for finding notebooks to export. The agent must infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_clusterC
Get information about a specific Databricks cluster
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_id | Yes |
TDQS
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 'Get information' implies a read-only operation, it doesn't specify what type of information is returned (configuration, status, metrics), whether authentication is required, rate limits, or error conditions. The description is too vague about the actual behavior beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence that directly states the tool's purpose. There's zero wasted language, and it's front-loaded with the essential information. Every word earns its place in this minimal description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of cluster operations in Databricks, no annotations, no output schema, and 0% schema description coverage, this description is insufficient. It doesn't explain what information is returned, how to interpret results, or provide context about cluster states. For a tool that presumably returns detailed cluster information, the description is too minimal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage and 1 parameter, the description doesn't add any meaning beyond what the input schema provides. It mentions 'a specific Databricks cluster' which implies the cluster_id parameter, but doesn't explain where to obtain this ID, its format, or validation requirements. The description doesn't compensate for the complete lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get information') and resource ('about a specific Databricks cluster'), making the purpose evident. However, it doesn't distinguish this tool from its sibling 'list_clusters' which also provides cluster information but in a list format rather than for a specific cluster.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention that 'list_clusters' should be used to find cluster IDs first, or when to use this versus checking cluster status through other means. There's no explicit when/when-not usage context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sql_statusC
Get the status and results of a SQL statement by statement_id
| Name | Required | Description | Default |
|---|---|---|---|
| statement_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it 'gets' status and results, implying a read-only operation, but doesn't disclose behavioral traits like authentication needs, rate limits, error handling, or what 'status' and 'results' entail (e.g., success/failure, data format). For a tool with no annotations, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Get the status and results') and specifies the key parameter ('by statement_id'). There is zero waste, and every word earns its place, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and low schema coverage, the description is incomplete. It doesn't explain what 'status' and 'results' mean, how they're returned, or any dependencies (e.g., statement_id from execute_sql_nonblocking). For a tool that retrieves SQL execution outcomes, more context is needed to understand its full usage and behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning by specifying that statement_id is used to identify the SQL statement, which the input schema only titles as 'Statement Id' with 0% coverage. However, with only 1 parameter and low schema coverage, it partially compensates but doesn't explain what a statement_id is (e.g., from execute_sql_nonblocking) or its format. Baseline is 3 as it adds some semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('status and results of a SQL statement'), specifying it's done 'by statement_id'. It distinguishes from siblings like execute_sql (which runs SQL) and list_jobs (which lists jobs), but doesn't explicitly contrast with similar tools like get_cluster or get_job. The purpose is specific but could be more differentiated from other 'get' tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a statement_id from execute_sql_nonblocking), when-not-to-use scenarios, or comparisons to siblings like list_job_runs for job status. Usage is implied only by the tool name and description, lacking explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_clustersB
List all Databricks clusters
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 action but doesn't describe what 'List all' entailsāsuch as pagination behavior, return format, authentication requirements, or rate limits. For a tool with zero 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasteāit directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the listing returns (e.g., cluster IDs, names, statuses) or behavioral aspects like ordering or limits. For a tool with no structured data to supplement it, the description should provide more context to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, earning a baseline score of 4 for not introducing confusion or redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('Databricks clusters') with scope ('all'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'get_cluster' (which retrieves a specific cluster) or 'list_jobs' (which lists different resources), missing explicit sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to use 'list_clusters' instead of 'get_cluster' (for specific cluster details) or other list tools like 'list_jobs', nor does it specify prerequisites or exclusions. This leaves usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_filesC
List files and directories in DBFS
| Name | Required | Description | Default |
|---|---|---|---|
| dbfs_path | No | / |
TDQS
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. While 'List' implies a read-only operation, the description doesn't specify whether this requires authentication, what format the results are returned in, whether there's pagination, rate limits, or any other behavioral characteristics. It's minimally adequate but lacks important operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise - a single sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized for a simple listing operation and front-loads the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and 0% schema description coverage, the description is inadequate. It doesn't explain what the tool returns, how to interpret results, or provide any context about the DBFS environment. While the tool appears simple, the description leaves too many operational questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides no information about the single parameter 'dbfs_path'. With 0% schema description coverage and no parameter information in the description, the agent has no semantic understanding of what this parameter does or how to use it effectively. The description doesn't compensate for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('files and directories in DBFS'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from 'list_volume_files' which appears to be a sibling tool for listing files in a different location (volume vs DBFS).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of when to choose 'list_files' over 'list_volume_files' or other listing tools like 'list_clusters', 'list_jobs', etc. No prerequisites, exclusions, or context for usage is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_job_runsA
List recent job runs with detailed status and duration information.
Args:
job_id: Specific job ID to list runs for (optional, omit to see runs across all jobs)
limit: Number of runs to return (default: 10, most recent first)
Returns:
JSON with runs array. Each run includes state (RUNNING/SUCCESS/FAILED), result_state,
duration_minutes for completed runs, current_duration_minutes for running jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | ||
| limit | No |
TDQS
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's a read operation (implied by 'List'), returns detailed status/duration info, and specifies ordering (most recent first). However, it doesn't mention pagination, rate limits, authentication requirements, or error conditions that would be helpful for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a clear purpose statement followed by organized sections for Args and Returns. Every sentence earns its place by providing essential information without redundancy. The formatting with clear section headers makes it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, no annotations, and no output schema, the description does well by explaining parameters, return format, and behavior. However, it could be more complete by mentioning potential error cases, authentication requirements, or rate limits given the absence of annotations. The return format description partially compensates for the lack of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant value beyond the input schema, which has 0% description coverage. It explains that job_id is optional and what happens when omitted ('omit to see runs across all jobs'), clarifies the limit default value and ordering ('most recent first'), and provides context not present in the schema's bare property definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('recent job runs') with specific scope ('with detailed status and duration information'). It distinguishes from siblings like 'list_jobs' by focusing on runs rather than job definitions, and from 'get_sql_status' by covering job execution status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use it (to see runs across all jobs or for a specific job) and includes parameter guidance (optional job_id, default limit). However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings for different scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsA
List Databricks jobs with pagination and filtering.
Args:
limit: Number of jobs to return (default: 25, keeps response under token limits)
offset: Starting position for pagination (default: 0, use pagination_info.next_offset for next page)
created_by: Filter by creator email (e.g. 'user@company.com'), case-insensitive, optional
include_run_status: Include latest run status and duration (default: true, set false for faster response)
Returns:
JSON with jobs array and pagination_info. Each job includes latest_run with state, duration_minutes, etc.
Use pagination_info.next_offset for next page. Total jobs shown in pagination_info.total_jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| created_by | No | ||
| include_run_status | No |
TDQS
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 behavioral traits: it mentions pagination mechanics, token limit considerations ('keeps response under token limits'), performance trade-offs ('set false for faster response'), and case-insensitive filtering. It also details the return structure, including pagination info and job data with latest run details. However, it lacks information on rate limits, authentication requirements, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and well-structured: it starts with a clear purpose statement, then details arguments with explanations, and concludes with return value information. Every sentence adds valueāno fluff or repetition. The use of sections (Args, Returns) enhances readability without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, no annotations, no output schema), the description is largely complete: it covers purpose, parameters, return format, and pagination behavior. However, it lacks context on authentication, error cases, or rate limits, which are important for a listing tool in a cloud service like Databricks. The absence of an output schema is mitigated by the detailed return description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate fully, which it does excellently. It adds meaningful semantics for all 4 parameters: explains 'limit' default and token limit rationale, describes 'offset' usage with pagination guidance, specifies 'created_by' format and case-insensitivity, and clarifies 'include_run_status' impact on performance. This goes well beyond the basic schema to provide practical usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List Databricks jobs with pagination and filtering.' It specifies the verb ('List') and resource ('Databricks jobs'), and distinguishes it from siblings like 'list_job_runs' by focusing on jobs rather than runs. However, it doesn't explicitly contrast with other listing tools like 'list_clusters' or 'list_notebooks' beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing jobs with optional filtering and pagination, but doesn't explicitly state when to use this tool versus alternatives. For example, it doesn't clarify if this should be used over 'list_job_runs' for job metadata or when filtering by creator is needed. The guidance is limited to functional parameters rather than contextual decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notebooksC
List notebooks in a workspace directory
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
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 action ('List') but lacks details on permissions, rate limits, pagination, output format, or error conditions. For a read operation without annotations, this leaves significant gaps in understanding how the tool behaves beyond its basic function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place by contributing essential information about the tool's function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, 0% schema coverage, no output schema, and multiple sibling tools, the description is incomplete. It covers the basic purpose but misses critical context like parameter details, behavioral traits, output expectations, and differentiation from similar tools. For a list operation in a complex environment, this leaves too many unanswered questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It implies a 'path' parameter contextually ('in a workspace directory') but doesn't explain what the path represents, its format, or valid values. This adds minimal semantic value beyond the bare schema, failing to adequately document the single required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('notebooks'), and specifies the scope ('in a workspace directory'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'list_files' or 'list_volume_files', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal guidance by mentioning 'in a workspace directory', but offers no explicit advice on when to use this tool versus alternatives like 'list_files' or 'list_volume_files'. There's no mention of prerequisites, exclusions, or comparative contexts, leaving usage decisions largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_volume_filesA
List files and directories in a Unity Catalog volume.
Args:
volume_path: Volume path to list (e.g. '/Volumes/catalog/schema/volume/directory')
Returns:
JSON with directory listing including file names, sizes, and modification times.
Example:
# List files in volume directory
files = list_volume_files('/Volumes/kbqa/stark_mas_eval/stark_raw_data/')
Note: Returns detailed file information including sizes for managing large datasets.
| Name | Required | Description | Default |
|---|---|---|---|
| volume_path | Yes |
TDQS
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 returns detailed file information (names, sizes, modification times) and mentions it's useful for managing large datasets, which adds context about output format and scale. However, it doesn't cover potential limitations like pagination, error conditions, or authentication requirements, leaving 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections for Args, Returns, Example, and Note, making it easy to scan. It's appropriately sized with no redundant sentences, though the Note slightly overlaps with Returns. Every sentence adds value, such as clarifying the JSON output format and dataset management context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no annotations, no output schema), the description is reasonably complete. It covers purpose, parameter semantics, return format, and an example. However, it lacks details on error handling or performance considerations, which could be useful for a file-listing tool in large datasets.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It clearly explains the single parameter 'volume_path' with a definition, example format, and usage in the example code. This adds essential meaning beyond the bare schema, making the parameter's purpose and format understandable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('List files and directories') and resource ('in a Unity Catalog volume'), distinguishing it from siblings like 'list_files' (likely for different storage) and 'upload_file_to_volume' (a write operation). The verb+resource combination is precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing volume contents but provides no explicit guidance on when to use this tool versus alternatives like 'list_files' (which might list different storage locations) or 'upload_file_to_volume' (for writing). The example shows a typical use case but lacks comparative context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_jobD
Run a Databricks job
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| notebook_params | No |
TDQS
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 states 'Run a Databricks job' but fails to disclose critical traits: whether this is a read or write operation (likely a write that triggers execution), what permissions or authentication are needed, potential side effects (e.g., resource consumption, job execution), rate limits, or what happens on success/failure. For a tool that likely performs a significant action, this lack of detail is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasteāit's appropriately sized and front-loaded. However, it's overly concise to the point of under-specification, lacking necessary details. While it earns points for brevity, it sacrifices clarity, so it's not a perfect 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a likely write operation to run jobs), no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It doesn't explain what the tool does beyond the name, provide usage context, detail parameters, or describe expected outcomes. For a tool in a Databricks environment with many siblings, this is severely inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, meaning parameters are undocumented in the schema. The description adds no meaning beyond the schemaāit doesn't explain what 'job_id' refers to (e.g., an existing job identifier) or what 'notebook_params' are (e.g., key-value pairs for notebook execution). With 2 parameters and no schema descriptions, the description fails to compensate, leaving semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Run a Databricks job' is a tautology that essentially restates the tool name. It specifies the verb ('Run') and resource ('Databricks job'), but doesn't distinguish this from sibling tools like 'create_job' or 'list_job_runs'āit doesn't clarify what 'running' entails versus creating or listing. While it identifies the basic action, it lacks specificity about what the tool actually does beyond the obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing job), exclusions (e.g., not for creating jobs), or context for choosing it over siblings like 'execute_sql' or 'list_job_runs'. There's no indication of appropriate scenarios, making it misleading if an agent assumes it can create or manage jobs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_clusterB
Start a terminated Databricks cluster
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_id | Yes |
TDQS
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 action ('Start') but doesn't mention permissions required, whether it's idempotent, rate limits, or what happens if the cluster isn't terminated. This leaves 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without any fluff. It's appropriately sized and front-loaded, making it easy to understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of starting a cluster (a mutation operation), no annotations, no output schema, and minimal parameter coverage, the description is inadequate. It should explain more about behavior, outcomes, or error conditions to be complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description doesn't add any parameter details beyond the schema, but with only 1 parameter and 0% schema description coverage, the baseline is high. The tool name and description imply 'cluster_id' refers to a terminated cluster, which adds minimal context, keeping it near the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start') and the resource ('a terminated Databricks cluster'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from siblings like 'create_cluster' or 'run_job', which might involve cluster operations, so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'create_cluster' for new clusters or 'run_job' for job execution. It lacks any context about prerequisites, exclusions, or typical scenarios, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminate_clusterC
Terminate a Databricks cluster
| Name | Required | Description | Default |
|---|---|---|---|
| cluster_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states 'terminate' which implies a destructive mutation, but doesn't disclose critical behavioral traits: whether termination is irreversible, requires specific permissions, has side effects (e.g., data loss), or rate limits. This is inadequate for a mutation tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (destructive mutation), lack of annotations, no output schema, and 0% schema description coverage, the description is incomplete. It fails to address key aspects like behavioral risks, parameter details, or expected outcomes, making it insufficient for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds no parameter semantics beyond what the schema's title ('Cluster Id') implies. It doesn't explain what 'cluster_id' represents, its format, or where to find it. With only one parameter, the baseline is 4, but the lack of any parameter details in the description reduces it to 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('terminate') and target resource ('a Databricks cluster'), providing specific verb+resource. However, it doesn't differentiate from sibling tools like 'start_cluster' or 'get_cluster' beyond the obvious action difference, missing explicit sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description lacks context about prerequisites (e.g., cluster must be running), exclusions (e.g., cannot terminate if jobs are active), or comparisons to siblings like 'start_cluster' or 'list_clusters'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_file_to_dbfsA
Upload a local file to Databricks File System (DBFS).
Args:
local_file_path: Path to local file (e.g. './data/notebook.py')
dbfs_path: DBFS path (e.g. '/tmp/uploaded/notebook.py')
overwrite: Whether to overwrite existing file (default: True)
Returns:
JSON with upload results including success status, file size, and upload time.
Example:
# Upload script to DBFS
result = upload_file_to_dbfs(
local_file_path='./scripts/analysis.py',
dbfs_path='/tmp/analysis.py',
overwrite=True
)
Note: For large files (>10MB), uses chunked upload with proper retry logic.
DBFS is good for temporary files, scripts, and smaller datasets.
| Name | Required | Description | Default |
|---|---|---|---|
| local_file_path | Yes | ||
| dbfs_path | Yes | ||
| overwrite | No |
TDQS
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 mentions chunked upload with retry logic for large files (>10MB), default overwrite behavior, and the JSON return structure. However, it doesn't cover potential error conditions, authentication requirements, or rate limits that would be valuable for an upload operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Example, Note), front-loads the core purpose, and every sentence adds value. The example is practical and illustrative without being verbose. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a file upload tool with no annotations and no output schema, the description does an excellent job covering parameters, return format, and behavioral notes. However, it could benefit from mentioning error handling, permission requirements, or file size limits beyond the 10MB threshold mentioned. The absence of an output schema makes the return format description particularly valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing clear explanations for all 3 parameters: it defines each parameter's purpose, provides concrete examples of expected values, and explains the default behavior for 'overwrite'. 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.
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 file') and target resource ('to Databricks File System (DBFS)'), distinguishing it from sibling tools like 'upload_file_to_volume'. It uses precise language that leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context about when to use this tool ('DBFS is good for temporary files, scripts, and smaller datasets') and mentions large file handling, but doesn't explicitly contrast when to use this versus the sibling 'upload_file_to_volume' tool. It offers practical guidance but lacks explicit alternative comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_file_to_volumeA
Upload a local file to a Databricks Unity Catalog volume.
Args:
local_file_path: Path to local file (e.g. './data/products.json')
volume_path: Full volume path (e.g. '/Volumes/catalog/schema/volume/file.json')
overwrite: Whether to overwrite existing file (default: False)
Returns:
JSON with upload results including success status, file size in MB, and upload time.
Example:
# Upload large dataset to volume
result = upload_file_to_volume(
local_file_path='./stark_export/products_full.json',
volume_path='/Volumes/kbqa/stark_mas_eval/stark_raw_data/products_full.json',
overwrite=True
)
Note: Handles large files (multi-GB) with progress tracking and proper error handling.
Perfect for uploading extracted datasets to Unity Catalog volumes for processing.
| Name | Required | Description | Default |
|---|---|---|---|
| local_file_path | Yes | ||
| volume_path | Yes | ||
| overwrite | No |
TDQS
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: handles large files (multi-GB), includes progress tracking, provides proper error handling, and describes the return format (JSON with success status, file size, upload time). It doesn't mention authentication requirements or rate limits, but covers most operational aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Example, Note), front-loads the core purpose, and every sentence adds value. It's appropriately sized for a 3-parameter tool with no annotations, avoiding both verbosity and under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a file upload operation with no annotations and no output schema, the description provides complete context: clear purpose, detailed parameter semantics, return format description, example usage, and behavioral notes about large file handling. It leaves no significant gaps for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed parameter explanations in the Args section, including examples for both path parameters and default value for overwrite. It adds substantial meaning beyond the bare schema, making all three parameters completely understandable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Upload a local file') and target resource ('to a Databricks Unity Catalog volume'), distinguishing it from sibling tools like 'upload_file_to_dbfs'. It provides a complete verb+resource+scope statement that leaves no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides usage guidance with 'Perfect for uploading extracted datasets to Unity Catalog volumes for processing' and distinguishes it from alternatives by specifying the target (Unity Catalog volumes vs. DBFS). The example and note further clarify appropriate use cases, including handling large files with progress tracking.
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.
19 tool updates
- First observed
create_cluster - First observed
create_job - First observed
create_notebook - First observed
execute_sql - First observed
execute_sql_nonblocking - First observed
export_notebook - First observed
get_cluster - First observed
get_sql_status - First observed
list_clusters - First observed
list_files - First observed
list_job_runs - First observed
list_jobs - First observed
list_notebooks - First observed
list_volume_files - First observed
run_job - First observed
start_cluster - First observed
terminate_cluster - First observed
upload_file_to_dbfs - First observed
upload_file_to_volume
TDQS
Every tool has a clearly distinct purpose targeting specific Databricks resources and actions. There is no ambiguity: create_* tools create resources, list_* tools list resources, execute_sql vs execute_sql_nonblocking handle different execution modes, and upload_file_to_dbfs vs upload_file_to_volume target different storage systems. The descriptions reinforce these distinctions.
All tool names follow a consistent verb_noun pattern with snake_case throughout. Verbs like create, list, get, execute, run, start, terminate, export, and upload are used predictably with appropriate nouns (cluster, job, notebook, sql, files, etc.). There are no deviations in naming conventions.
With 19 tools, the count is slightly high but reasonable for a comprehensive Databricks interface covering clusters, jobs, notebooks, SQL execution, and file management. It includes core operations for each domain without being excessive, though some tools like list_job_runs and list_jobs could potentially be consolidated to reduce count.
The tool surface provides complete CRUD/lifecycle coverage for Databricks domains: clusters (create/get/list/start/terminate), jobs (create/list/run with detailed run tracking), notebooks (create/list/export), SQL execution (blocking/non-blocking with status check), and file management (list/upload for both DBFS and Unity Catalog volumes). There are no obvious gaps that would cause agent failures.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Remote data science agents for Snowflake, Databricks & BigQuery in Claude/Cursor via MCP
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceA Model Context Protocol server that enables LLMs to interact with Databricks workspaces through natural language, allowing SQL query execution and job management operations.50-
- AlicenseBqualityDmaintenanceA server that implements the Model Completion Protocol (MCP) to allow LLMs to interact with Databricks resources including clusters, jobs, notebooks, and SQL execution through natural language.1148MIT
- -licenseNot gradedqualityNot gradedmaintenanceEnables AI assistants like Claude to interact with Databricks workspaces through secure OAuth authentication. Supports custom prompts, tools for workspace management, and SQL query execution via a deployable MCP server on Databricks Apps.-
- AlicenseCqualityDmaintenanceA read-only MCP server that enables users to query Databricks SQL, browse metadata, and monitor Delta Lake tables. It also supports tracking Databricks Jobs, DLT Pipelines, and cluster metrics through natural language interfaces.254MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/samhavens/databricks-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server