Bauplan MCP Server
OfficialThe Bauplan MCP Server enables AI assistants to interact with a Bauplan data lakehouse, providing the following capabilities:
Data Operations: List tables, inspect schemas (all or specific tables), run SQL
SELECTqueries (returning structured results or saving to CSV).Branch Management: List, create, check existence, merge, and delete branches; view commit history with filtering by author, date, or message.
Namespace Management: List, create, check existence, and delete namespaces within a branch.
Tag Management: List, create, check existence, and delete tags on commits/branches.
Table Management: Create tables from S3 (Parquet, CSV, JSONL) with automatic schema detection; plan and apply table creation to resolve schema conflicts; check existence, delete tables, import data into existing tables from S3, and revert tables to a source reference.
Project/Pipeline Execution: Run Bauplan pipelines from a local project directory or directly from provided code files (with parameters, dry-run, and timeout support).
Job Management: List jobs (with filtering), get detailed job info including logs and code snapshots, and cancel running jobs.
User Management: Retrieve the current authenticated user's username and full name.
Guided Instructions: Get detailed guidance for specific use cases including pipeline creation, data reading, pipeline repair, Write-Audit-Publish (WAP) pattern, data quality testing, and SDK usage.
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., "@Bauplan MCP Serverlist tables in the sales schema"
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.
Bauplan MCP Server
A Model Context Protocol (MCP) server that gives AI assistants (Claude Code, Claude Desktop, Cursor) access to Bauplan lakehouse operations: querying tables, schema inspection, branch management, and running pipelines. A video walkthrough demonstrates setup and usage.
This project is released in Beta under MIT license. APIs and features may change without notice as we continue development.
A hosted MCP server is now available for existing Bauplan users at https://mcp.use1.aprod.bauplanlabs.com/mcp - you no longer need to run the server locally. Add it as a custom connector in Claude Desktop (or any MCP client) and authenticate with your Bauplan API key. See Execution modes for all the ways to run the server.
Overview
This repository contains the Bauplan MCP Server — a Model Context Protocol server that gives AI assistants access to Bauplan lakehouse operations. A blog post with context and background is available here.
Looking for the best local AI setup with Bauplan? Check out BauplanLabs/bauplan-skills — it includes agent playbooks (CLAUDE.md), skills, and everything you need to get AI coding assistants working with Bauplan via CLI and SDK, without running an MCP server.
Related MCP server: DBT Core MCP Server
Execution modes
The server supports three execution modes. They differ in who runs the server and in which tools are exposed: tool visibility is set by FastMCP tags and can be tuned with MCP_VISIBLE_TOOL_TAGS. All three authenticate with your Bauplan API key.
Local - run the server on your own machine and point your AI assistant at
http://localhost:8000/mcp; exposes every tool by default. See MCP Quick Start.Self-hosted - deploy the server on your own infrastructure and point your assistant at your endpoint, passing your Bauplan API key as a bearer token; control the exposed tools with
MCP_VISIBLE_TOOL_TAGS. See Bauplan Credentials and Container Runtime.Bauplan public endpoint - skip running a server and connect directly to Bauplan's hosted endpoint at
https://mcp.use1.aprod.bauplanlabs.com/mcp; exposes only the remote-safe tools.
MCP Quick Start
You can get started in one minute with your existing AI assistant: a video setup with Claude Desktop and Claude Code is also available here for reference.
You need:
a Bauplan API key properly configured in your local config file (default profile) - the server will pick it up automatically (see below for alternative authentication methods);
uv (or a standard
pipmanaged virtual environment, see below);an AI platform able to leverage the MCP, as for example Claude Code, Cursor, Claude Desktop.
do not use an Admin Bauplan API key: while the server will refuse to write onmain, it is good practice to use a non-admin key for AI-assisted development (see our roadmap below for more details on upcoming security features).
Start the server with:
uv sync
uv run python main.py --transport streamable-http
The MCP server is now available at http://localhost:8000/mcp. You can configure the server in Claude Code for example with:
claude mcp add -t http mcp-bauplan http://localhost:8000/mcp
Similar commands can be run on Claude Desktop or Cursor to enable the AI to access the server.
Et voilà! You can now start asking your AI questions about your data lakehouse (and much more!).
Advanced Configurations
Bauplan Credentials
The Beta release covers the local development use case. Authentication to your Bauplan lakehouse happens as follows:
if you do not specify a Bauplan profile as a flag, the default one on the machine running the server will be used at every interaction with the lakehouse.
if you specify a profile as a flag, this profile will be used instead when instantiating a Bauplan client.
if you specify a header in your assistant - either
Authorization: Bearer <your-bauplan-api-key>orBauplan: <your-bauplan-api-key>(e.g. in Claude Codeclaude mcp add -H "Authorization: Bearer <your-bauplan-api-key>" ...) -, that value will be used instead when instantiating a Bauplan client. This is convenient for quick tests, and opens up the possibility of hosting the catalog on a shared infrastructure, delegating to clients the Bauplan API key management.
For example, if you are connecting to a remotely hosted MCP server that delegates Bauplan authentication to the client, you can register it in Claude Code and pass your own bearer token with:
claude mcp add -t http -H "Authorization: Bearer <your-bauplan-api-key>" mcp-bauplan https://<your-mcp-host>/mcp
Server CLI Options
The server supports the following CLI options, mostly useful for specifying alternative transport options:
Option | Default | Description | Used With |
|
| Transport protocol: | All commands |
|
| Host to bind to (localhost by default) |
|
|
| Port to bind to |
|
|
| Bauplan profile to use | All commands |
Note: The --host and --port options are ignored when using stdio transport since it communicates through stdin/stdout.
Container Runtime
The Docker image starts HTTP transports with Gunicorn and Uvicorn workers. This is meant for remote deployments where several requests can be handled concurrently. Local MCP usage should continue to use python main.py, especially for stdio.
Useful environment variables:
Variable | Default | Description |
|
| HTTP transport for the container, or |
|
| Gunicorn worker count for HTTP transports |
|
| Gunicorn keep-alive timeout in seconds |
|
| Container listen port for HTTP transports |
|
| Use |
| required for OAuth | Public MCP server base URL. Requires |
|
| Log full tool arguments for debugging. Emits a warning when |
| unset locally, | Comma-separated allowlist of FastMCP tool tags to expose |
| required for OAuth | Stable secret used to sign tokens and encrypt API keys |
| Claude and ChatGPT callbacks | Comma-separated trusted redirect list. Supports a trailing |
Tool visibility is controlled with FastMCP tags. Local runs expose every tool by default. Remote OAuth runs expose only tools tagged remote unless MCP_VISIBLE_TOOL_TAGS is set explicitly. This keeps local-only tools such as project_run and run_query_to_csv out of shared server deployments.
When multiple tags are configured, a tool is visible if it has at least one matching tag.
Useful examples:
# Expose only remote-safe tools.
MCP_VISIBLE_TOOL_TAGS=remote uv run python main.py --transport streamable-http
# Expose only read-only tools for inspection.
MCP_VISIBLE_TOOL_TAGS=read uv run python main.py --transport streamable-httpCurrent tags are remote, local, read, write, and destructive.
OAuth clients with valid HTTPS redirect URIs can still register dynamically. Redirects outside MCP_OAUTH_TRUSTED_REDIRECTS are shown to users as unverified before they continue.
Claude Desktop
To add the Bauplan MCP server to Claude Desktop, follow the guide to get to your claude_desktop_config.json file.
You can then add this configuration (modify the paths as needed):
{
"mcpServers": {
"mcp-bauplan": {
"command": "/path/to/bauplan-mcp-server/.venv/bin/python3",
"args": [
"/path/to/bauplan-mcp-server/main.py",
"--transport",
"stdio"
],
"workingDirectory": "/path/to/bauplan-mcp-server/"
}
}
}Quit and restart Claude Desktop. Now all Bauplan tools are available to your assistant, as this video demonstrates.
MCP Inspector
Start the MCP Inspector if you wish to manually test the server (Node is required):
npx @modelcontextprotocol/inspectorNow, configure the inspector with the proper variables, e.g. for Streamable HTTP:
Transport Type: Streamable HTTP
Session Token: Use the token from inspector output
Features
Tool List
Data Operations
get_tables: List all tables in a branch/namespaceget_table: Get schema for a specific table (more efficient for single table)run_query: Execute SELECT queries on tablesrun_query_to_csv: Execute SELECT queries and save results directly to CSV file (local/non-OAuth servers only, scalar data types only)
Branch Management
get_branches: List branches with optional filtersget_branch: Get a branch by nameget_commits: Get commit history from branchescreate_branch: Create new branches from referencesmerge_branch: Merge branches with custom commit messagesdelete_branch: Delete branches (with safety checks)
Namespace Management
get_namespaces: List available namespaces in a branchget_namespace: Get a namespace by namecreate_namespace: Create new namespaces in branchesdelete_namespace: Delete namespaces from branches
Tag Management
get_tags: Get tags with optional filtersget_tag: Get a tag by namecreate_tag: Create a new tag from a referencedelete_tag: Delete a tag
Table Management
create_table: Create a table from S3 location using schema detection (creates ICEBERG table structure but doesn't populate data)plan_table_creation: Create a table import plan from S3 location (generates YAML schema plan with job tracking)apply_table_creation_plan: Apply a table creation plan to resolve schema conflicts (returns job_id for tracking)delete_table: Delete a table from a specific branchimport_data: Import data into an existing table from S3 location (returns job_id for tracking)revert_table: Revert a table from a source reference to a target branch with optional replacement
Project Management
project_run: Run a Bauplan project from a specified directory and reference with configurable parameters (local/non-OAuth servers only)code_run: Run a Bauplan project from code files provided as a dictionary (useful for clients that cannot submit paths), automatically creates temporary directory and validates project structure
Job Management
get_jobs: List jobs in the Bauplan system with optional filtering for all usersget_job: Get detailed information about a specific job by its IDcancel_job: Cancel a running job by its ID and get updated job status
User Management
get_user_info: Get information about the current authenticated user (username and full name)
Instructions and Guidance
get_instructions: Get detailed instructions for specific Bauplan use cases (pipeline, data, repair, wap, test, sdk)
License
This project is provided with no guarantees under the attached MIT License.
Available Tools
33 toolsapply_table_creation_planA
Apply a provided table creation plan to resolve schema conflicts and create a new table in the system. Returns a job_id for tracking the asynchronous operation.
This function is used when schema conflicts exist after plan creation and need manual resolution. Most common schema conflict is two parquet files with the same column name but different datatype. Note: This is done automatically during table plan creation if no schema conflicts exist.
Args: plan: The plan dictionary or TableCreatePlanState to apply. debug: Whether to enable or disable debug mode (optional). args: Additional arguments for plan application (optional). priority: Job priority, 1-10 where 10 is highest priority (optional). verbose: Whether to enable or disable verbose mode (optional). client_timeout: Timeout in seconds (defaults to 120).
Returns: TablePlanApplied: Object indicating success/failure with job tracking details
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | ||
| debug | No | ||
| args | No | ||
| priority | No | ||
| verbose | No | ||
| client_timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| job_id | Yes | |
| success | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry full burden. It discloses async operation and return type (job_id, TablePlanApplied). However, it does not cover permissions, side effects (e.g., table creation is irreversible), or error conditions for invalid plans. Adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured: summary, usage context, parameter list, return info. Front-loaded with key details. Parameter list is a bit lengthy but each line is functional. No unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage context, parameter meanings, async nature, and return type. However, lacks examples, error handling, prerequisites (e.g., valid plan), and deeper explanation of parameter interactions. Adequate for a moderate-complexity tool but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description's parameter explanations are essential. Each of the 6 parameters (plan, debug, args, priority, verbose, client_timeout) gets a brief description. While some are vague (e.g., 'Additional arguments for plan application'), overall it compensates well for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Apply a provided table creation plan to resolve schema conflicts and create a new table,' specifying the action, resource, and purpose. It distinguishes from siblings like 'create_table' and 'plan_table_creation' by focusing on applying an existing plan with conflict resolution.
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?
Explicitly states when to use: 'when schema conflicts exist after plan creation and need manual resolution' and notes automatic handling when no conflicts. Provides a concrete example of a common conflict (two parquet files with same column but different datatype). Lacks explicit alternatives or when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_jobA
Cancel a running job in the Bauplan system by its job_id and return the updated job status.
Args: job_id: The ID of the job to cancel.
Returns: JobInfo: Object containing updated job details after cancellation
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| kind | Yes | |
| user | Yes | |
| human_readable_status | Yes | |
| created_at | Yes | |
| finished_at | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes mutation (cancel) and return of updated status, but lacks details on failure modes, immediacy, or idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus args/returns. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple single-parameter tool with output schema; could mention error handling for invalid or non-running jobs.
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?
Only one parameter with schema description coverage 0%; description adds minimal meaning ('The ID of the job to cancel'), which is basic but useful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it cancels a running job using job_id, distinguishing it from siblings like get_job or list_jobs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions 'running job' implying the job must be in a running state; no explicit guidance on when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
code_runA
Run a pipeline from provided source code files as a dictionary and a data ref, returning a job ID and success/failure to the caller.
Args: project_files: Dictionary mapping file names to source code as strings. Must contain bauplan_project.yml and .sql/.py files. ref: The ref or branch name from which to run the project. parameters: Parameters for templating DAGs. Keys are parameter names, values must be simple types (str, int, float, bool). Default: None.
Returns: RunState: Object indicating success/failure with job Id.
| Name | Required | Description | Default |
|---|---|---|---|
| project_files | Yes | ||
| ref | Yes | ||
| parameters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | |
| job_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. Discloses constraints (must contain bauplan_project.yml and .sql/.py files) and return characteristics (job ID suggesting asynchrony). Does not mention side effects, permissions, or failure 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?
Description is concise, well-structured with a brief intro and clear Args/Returns sections. Front-loaded with purpose, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key aspects: inputs, constraints, output as RunState. Given moderate complexity and presence of output schema, missing edge case behavior (e.g., missing required files) but overall sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description fully compensates with detailed explanations for all three parameters: project_files (dictionary, required files), ref (branch name), parameters (templating, simple types, default). Adds constraints and purpose beyond schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a pipeline from source code files, specifying verb 'Run' and resource 'pipeline from source code files'. It distinguishes from siblings like 'project_run' but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'project_run' or 'run_query'. Description lacks context for selection without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_branchA
Create a new branch in the user's Bauplan data catalog using a branch name, returning a confirmation.
Args: branch: Name of the new branch to create. Must follow the format <username.branch_name>. from_ref: Reference (branch/commit) to create the branch from. Can be either a branch name or a hash that starts with "@" and has 64 additional characters.
Returns: BranchCreated: Object indicating success/failure with branch details
| Name | Required | Description | Default |
|---|---|---|---|
| branch | Yes | ||
| from_ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| created | Yes | |
| name | No | |
| hash | No | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description should fully disclose behaviors. It mentions creation and confirmation but does not address error handling (e.g., what happens if branch already exists or from_ref is invalid), idempotency, permissions, or side effects. The format constraints for parameters are helpful but insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a clear opening sentence and structured Args/Returns sections. Every sentence adds value, and there is no 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?
Given the tool's complexity (2 required parameters, output schema), the description covers parameter formats and return type. However, it lacks usage context (e.g., when to use vs. other tools) and behavioral details (e.g., idempotency, failure modes), which limits completeness for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must provide parameter meaning. It does so: 'branch' must follow format <username.branch_name>, and 'from_ref' can be a branch name or hash starting with '@' with 64 characters. This adds significant value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new branch in the Bauplan data catalog, specifies the branch name format <username.branch_name>, and returns a confirmation. This is specific and distinguishes it from sibling tools like create_table or create_namespace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but does not explicitly mention when to use it vs alternatives, nor does it provide prerequisites or conditions (e.g., when to create a new branch vs. using an existing one). Usage is implied through the parameter description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_namespaceB
Create a new namespace in a specified branch of the user's Bauplan data catalog using a namespace name.
Args: namespace: Name of the namespace to create. branch: Branch name where the namespace will be created. Must follow the format <username.branch_name>.
Returns: NamespaceCreated: Object indicating success/failure with namespace details
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | Yes | ||
| branch | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| created | Yes | |
| namespace | Yes | |
| branch | Yes | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must carry full burden. It mentions returning a success/failure object but does not explain behavior on duplicate namespaces, error conditions, or idempotency. Minimal useful behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a brief summary and then Args/Returns. It is fairly concise, though the Args section could be more compact for only two parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple creation tool with an output schema, the description covers the basic return object but misses edge cases like namespace already existing or branch missing. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds valuable constraints: branch must follow '<username.branch_name>' format. However, it lacks details on namespace characters or lengths.
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 'Create' and resource 'namespace' with context 'in a specified branch', distinguishing it clearly from siblings like delete_namespace or get_namespaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives, such as when a namespace already exists or prerequisites like branch existence. Usage is only implied by the action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tableB
Create an empty table from an S3 URI identifying parquet, csv or JSONL files in S3. The table schema is automatically inferred from the files at the given search uri.
Args: table: Name of the table to create. search_uri: S3 URI to search for parquet files. branch: branch name. namespace: Optional namespace (defaults to "bauplan"). partitioned_by: Optional partitioning column. replace: Optional flag to replace existing table.
Returns: TableCreated: Object indicating success/failure with table details.
NOTE: This tool creates a ICEBERG table with the schema of the file(s) in the URI but it does not populate the table.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| search_uri | Yes | ||
| branch | Yes | ||
| namespace | No | ||
| partitioned_by | No | ||
| replace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| table_name | Yes | |
| namespace | Yes | |
| success | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses that the table is ICEBERG and not populated, and that it returns a TableCreated object. However, it omits details on error behavior (e.g., if table exists without replace flag) and does not mention permissions or side effects, leaving gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear one-sentence summary, followed by a structured parameter list and a crucial note about not populating the table. It is concise (78 words) and well-organized, with no unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters) and missing annotations, the description covers the basic purpose and parameter meanings, and references the output. However, it lacks details on the 'replace' behavior (e.g., success vs error when table exists) and does not mention relationships to sibling tools, leaving uncertainty for complex 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?
The input schema has 0% description coverage, but the tool description includes a parameter list with brief explanations (e.g., 'table: Name of the table to create', 'partitioned_by: Optional partitioning column'). This adds significant meaning beyond the raw schema, though some parameters like 'namespace' lack detail on defaults beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates an empty table from an S3 URI, specifying supported file types (parquet, csv, JSONL) and automatic schema inference. However, it does not differentiate from sibling tools like plan_table_creation or apply_table_creation_plan, which limits clarity about when to use this tool directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., plan_table_creation). It does not mention prerequisites, exclusions, or typical use cases, leaving the agent to infer usage context without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tagB
Create a new tag in a specified branch of the user's Bauplan data catalog using a tag name. Create a new tag in a specific branch of the user's Bauplan catalog.
Args: tag: Name of the tag to create. from_ref: Reference (branch or commit) from which to create the tag.
Returns: TagCreated: Object indicating success/failure with tag details
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| from_ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| created | Yes | |
| tag | Yes | |
| from_ref | Yes | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as idempotency, uniqueness constraints, error conditions, or side effects beyond creation. The return type is mentioned, but not enough context for safe invocation.
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 fairly concise but has redundancy: the purpose is restated in the first paragraph and again in the docstring. The structure with Args/Returns is clear but could be more compact.
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 two required parameters and no annotations, the description is adequate but incomplete. Missing details on behavior when tag exists, how branches affect tagging, and error handling. The output schema exists but its content is not visible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description partially compensates by listing args 'tag' and 'from_ref' with minimal explanations. However, it lacks constraints, formats, or examples, leaving room for ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new tag') and the resource ('in a specified branch of the user's Bauplan data catalog'). It distinguishes from sibling tools like delete_tag, get_tags, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description lacks prerequisites, when-not-to-use scenarios, or references to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_branchA
Delete a specified branch from the user's Bauplan data catalog using a branch name.
Args: branch: Name of the branch to delete. Must follow the format <username.branch_name>.
Returns: BranchDeleted: Object indicating success/failure of the deletion
| Name | Required | Description | Default |
|---|---|---|---|
| branch | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | |
| branch | Yes | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are not provided, so the description carries the full burden. It discloses the return type (success/failure) but does not mention irreversible effects, prerequisites, or error handling, making it adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with no unnecessary words. It front-loads the main purpose and includes an Args/Returns structure that is clear and easy to scan.
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 low complexity (one parameter) and the presence of an output schema, the description covers the core aspects: purpose, parameter format, and return type. It could mention permissions or preconditions but is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds a formatting constraint (<username.branch_name>) to the single required parameter, which is not present in the input schema (0% schema description coverage). This adds meaningful value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'delete' and the resource 'branch', and distinguishes it from sibling tools like create_branch, merge_branch, and get_branches.
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 a formatting requirement for the branch parameter, offering clear context. However, it does not explicitly state when to use this tool versus alternatives, nor does it exclude any use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_namespaceC
Delete a specified namespace from a given branch in the user's Bauplan data catalog using a namespace name and branch name. Delete a namespace from a specific branch of the user's Bauplan catalog.
Args: namespace: Name of the namespace to delete. branch: Branch name containing the namespace to delete. Must follow the format <username.branch_name>.
Returns: NamespaceDeleted: Object indicating success/failure of the deletion
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | Yes | ||
| branch | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | |
| namespace | Yes | |
| branch | Yes | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral details like destructiveness, reversibility, or authorization needs. It only says 'Delete a namespace' without further context, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat repetitive (first paragraph restated in the second). It includes useful Args and Returns sections but could be more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description explains the operation and parameters fairly well, but lacks details on error conditions, prerequisites, or side effects, making it incomplete for a destructive action.
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?
Despite schema coverage reported as 0%, the description includes an Args section that explains each parameter and provides a format constraint for the branch parameter (<username.branch_name>), adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it deletes a namespace from a branch in the Bauplan data catalog. It specifies the resource and action, but does not explicitly differentiate from sibling delete tools like delete_branch or delete_table.
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, nor does it mention prerequisites or exclusions. The agent must infer 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.
delete_tableC
Delete a specified table from the user's Bauplan data catalog using a table name. Delete a table from the user's Bauplan data lake.
Args: table: Name of the table to delete. branch: Branch name where the table will be deleted. Must follow the format <username.branch_name>.
Returns: TableDeleted: Object indicating whether the table was deleted with details
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| branch | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| table_name | Yes | |
| deleted | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must convey behavioral traits. It only states 'Delete' (destructive), but lacks details such as irreversibility, permission requirements, potential cascading effects, or what the TableDeleted return object contains (though output schema exists).
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 has a clear structure (purpose, args, returns), but the first two sentences are repetitive ('Delete a specified table...' and 'Delete a table...'). Could be trimmed to one sentence.
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 2 required parameters and output schema, the description is borderline adequate. It lacks context about the destructive nature, comparison to sibling tools (e.g., delete_branch, revert_table), and any usage prerequisites, leaving gaps for an agent.
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 baseline is 4, but the description adds minimal semantic value: 'table' is described as 'Name of the table to delete' and 'branch' with a format constraint. It does not explain the role of 'branch' or how to obtain a valid branch name.
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 identifies the action ('delete') and resource ('table'), and the context signals show sibling tools like delete_branch and delete_namespace, so this tool is distinct. However, the first two sentences are redundant, slightly reducing clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., revert_table, delete_branch). No mention of prerequisites or implications, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_tagC
Delete a specified tag from the user's Bauplan data catalog using a tag name.
Args: tag: Name of the tag to delete.
Returns: TagDeleted: Object indicating success/failure of the deletion
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | |
| tag | Yes | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should fully disclose behavior. It only mentions returning a success/failure object, but does not address side effects, permanence, or conditions for failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and structured with Args/Returns, every sentence adds value, though it could be more informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Missing important context like error handling, what happens if tag doesn't exist, and whether deletion is irreversible, leaving gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only adds that 'tag' is a name, without constraints, format, or examples.
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 'Delete' and the resource 'tag', distinguishing it from sibling tools like 'create_tag' and 'has_tag'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, or prerequisites like the tag must exist before deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_branchesA
Retrieve branches from the user's Bauplan data catalog as a list, with optional user and limit (integer) filters to reduce response size. Get branches from the Bauplan catalog with optional filtering. NOTE: This can return a large response. Always use limit parameter.
Args: name: Optional filter to get branches by name (substring match) user: Optional filter to get branches by user limit: Maximum number of branches to return (needs to be an integer, default 10)
Returns: BranchesOut: Object containing list of branches with their names and hashes
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| user | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| branches | Yes | |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the response can be large and that limit should be used. No annotations exist, so the description carries full burden. It does not mention permissions, scope, or side effects. For a read-only tool, this is acceptable but could be more explicit about 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 concise, front-loaded with purpose and critical note, and structured with clear Args and Returns sections. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameters, and return type (BranchesOut with names and hashes). Given the tool's simplicity and the presence of an output schema, the description is mostly complete. Lacks details on error handling or ordering, but these are not critical for a basic list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that 'name' is a substring match, 'user' filters by user, and 'limit' is a maximum with default 10. This adds significant meaning beyond the schema's type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Retrieve branches from the user's Bauplan data catalog as a list', specifying the resource (branches) and action (retrieve/list). Distinguishes from siblings like create_branch and delete_branch by being a read operation.
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?
Provides a strong usage guideline: 'NOTE: This can return a large response. Always use limit parameter.' This advises on when to use and how to avoid issues. However, it does not explicitly mention alternative tools (e.g., has_branch) or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_commitsA
Retrieve commit history for a specified branch in the user's Bauplan data catalog as a list, with optional filters including date range (ISO format: YYYY-MM-DD) and limit (integer). Retrieve commit history from a Bauplan branch.
Args: ref: branch or commit hash to get commits from. Can be either a hash that starts with "@" and has 64 additional characters or a branch name, that is a mnemonic reference to the last commit that follows the "username.name" format. message_filter: Optional filter for commit messages (substring match) author_username: Optional filter by author's username author_email: Optional filter by author's email date_start: Optional start date for filtering (ISO format: YYYY-MM-DD) date_end: Optional end date for filtering (ISO format: YYYY-MM-DD) limit: Maximum number of commits to return (default: 10)
Returns: CommitsOut: Object containing list of commits and total count
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| message_filter | No | ||
| author_username | No | ||
| author_email | No | ||
| date_start | No | ||
| date_end | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| commits | Yes | |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. It mentions the return type but does not declare side effects (e.g., read-only nature), authentication needs, or error conditions. The description adds context beyond the schema but is insufficient for a safe 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 front-loaded with a concise summary and then a structured docstring for parameters and returns. However, there is slight redundancy (first sentence repeats the summary). Overall clear and well-organized.
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 (7 parameters, no annotations, output schema exists), the description covers all inputs and return structure. It lacks handling of edge cases (e.g., branch not found) or pagination details, but is sufficient for typical agent 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?
The input schema has 0% description coverage, leaving parameters undefined. The description's docstring compensates fully with detailed explanations for all 7 parameters, including formats for ref (hash/branch), filters (substring match), and default for limit. This is critical for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves commit history for a specified branch in the Bauplan data catalog. It specifies the resource (commits), action (retrieve), and scope (branch-specific). This distinguishes it from sibling tools like get_branches or get_tags.
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 the tool's purpose but does not explicitly instruct when to use it versus alternatives. It implies use for commit history retrieval but lacks exclusionary guidance or comparisons with siblings like get_branches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instructionsA
Get detailed instructions for specific Bauplan use cases to be used to solve the task, possibly suggesting further tool usage.
Args: use_case: The use case to get instructions for. Must be one of: - 'pipeline': Instructions for creating and managing data pipelines - 'data': Instructions for reading data and metadata, including data lineage information - 'repair': Instructions for repairing failed pipelines - 'wap': Instructions for data ingestion using the Write-Audit-Publish (WAP) pattern - 'test': Instructions for creating and managing data expectations and quality tests - 'sdk': Instructions for explaining Bauplan SDK methods and verifying their syntax and usage
Returns: Prompt: Object containing the detailed instructions for the specified use case, to be used by the caller to further plan which tools to use and how to use them.
| Name | Required | Description | Default |
|---|---|---|---|
| use_case | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| prompt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on the full burden of behavioral disclosure. It explains the return type ('Prompt object with detailed instructions') but does not mention side effects, idempotency, or authentication requirements. The tool is likely read-only, but this is not stated.
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 an Args section and a Returns section, making it easy to parse. It includes a bulleted list of use cases. While somewhat lengthy, every sentence adds value, and the main purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (not shown but indicated), the description adequately explains the return value. It covers all possible inputs and notes how the output is used for further planning. It is complete for a tool that provides contextual guidance.
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 only specifies the 'use_case' parameter as a string with no description or enum. The description compensates by explicitly listing all allowed values ('pipeline', 'data', etc.), adding critical semantic information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Get detailed instructions') and the resource ('specific Bauplan use cases'). It enumerates specific use cases, making the purpose unambiguous. It distinguishes itself from sibling tools by being the only tool providing instructional guidance for high-level tasks.
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 specifies when to use the tool ('to solve the task') and hints at its role in suggesting further tool usage. However, it does not explicitly state when not to use it or mention alternative tools for similar purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobA
Retrieve details of a job by job ID, such as user logs, code snapshot, project id. Get details of a specific job by its ID.
Human_readable_status in the response will be "Failed" for failed jobs, "Completed" for completed jobs.
Args: job_id: The ID of the job to retrieve.
Returns: JobInfo: Object containing job details id (str): The ID of the job. kind (str): The kind of job. user (str): The user who created the job. human_readable_status (str): Human-readable status of the job. created_at (Optional[str]): ISO formatted creation timestamp of the job. finished_at (Optional[str]): ISO formatted finish timestamp of the job. status (str): The status of the job. logs (Optional[str]): Concatenated user logs from the job. code_snapshot_path (Optional[Path]): Path to the code snapshot directory. ref (Optional[str]): The data commit reference when the job was run, i.e. the state of source tables for the job at that time. transactional_branch (Optional[str]): The transactional branch that was open when the job was run. project_yml (Optional[str]): The contents of the bauplan_project.yml file from the snapshot. project_files (Optional[dict[str, str]]): A dictionary of other project files from the snapshot, with filenames as keys and file contents as values.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| kind | Yes | |
| user | Yes | |
| human_readable_status | Yes | |
| created_at | Yes | |
| finished_at | Yes | |
| status | Yes | |
| logs | No | |
| code_snapshot_path | No | |
| ref | No | |
| transactional_branch | No | |
| project_yml | No | |
| project_files | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must stand alone. It describes a read-only operation (retrieve) and details the return fields, including the human_readable_status mapping. While it does not explicitly state that the tool is read-only or that it has no side effects, the action verb 'retrieve' implies a safe operation, and the detailed return spec adds 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 well-structured with a summary, Args, and Returns. It front-loads the main purpose. However, there is minor redundancy: the first two sentences both convey 'get details of a specific job by its ID.' Trimming this would improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no annotations, existing output schema), the description provides complete context. It explains the job retrieval, the meaning of human_readable_status, and lists all return fields with types and descriptions. An agent can fully understand the tool's behavior without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one required parameter (job_id) with no description. The description fills this gap with an Args section: 'job_id: The ID of the job to retrieve.' This adds full meaning beyond the schema, achieving high semantic value despite the schema's 0% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the purpose: 'Retrieve details of a job by job ID.' It specifies what the tool does (retrieve details) and the resource (job by ID). Among sibling tools like list_jobs or cancel_job, this is 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description effectively communicates when to use the tool (when you have a job ID and need full details). Although it does not explicitly exclude alternatives, the context of sibling names like list_jobs and cancel_job makes the usage context clear. Missing explicit 'when not to use' guidance prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_namespacesA
Retrieve namespaces for a branch from the user's Bauplan data catalog as a list. Use 'limit' (integer) to reduce response size. Get the namespaces of a branch using optional filters.
Args: ref: branch or commit hash to get namespaces from. Can be either a hash that starts with "@" and has 64 additional characters or a branch name, that is a mnemonic reference to the last commit that follows the "username.name" format. namespace: Optional filter for namespace names (substring match) limit: Optional maximum number of namespaces to return (default: 10)
Returns: NamespacesOut: Object containing list of namespaces and total count
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| namespace | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| namespaces | Yes | |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose behavioral traits beyond the obvious read operation. Does not elaborate on side effects, expected output structure, or performance implications, leaving gaps for the agent.
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?
Includes a concise summary followed by structured args. While efficient, the docstring style adds some redundancy (e.g., re-explaining ref format). Still, it is well-organized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all parameters and return type (NamespacesOut) adequately. Given the presence of an output schema, the description is sufficiently complete for a list retrieval tool, though it could clarify the substring match behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds comprehensive parameter explanations (ref format, namespace substring match, limit default). This adds significant meaning beyond the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Retrieve namespaces for a branch from the user's Bauplan data catalog as a list', using specific verb and resource. It effectively distinguishes from sibling tools like create_namespace and delete_namespace.
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?
Provides basic parameter guidance (e.g., 'Use limit to reduce response size') but lacks explicit when-to-use vs alternatives. No mention of when not to use or comparison with sibling tools like has_namespace.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_schemaA
Retrieve schemas of all data tables in a specified branch or reference of the user's Bauplan data catalog as a list, using a branch name.
Args: ref: a reference to a commit that is a state of the user data lake: can be either a hash that starts with "@" and has 64 additional characters or a branch name, that is a mnemonic reference to the last commit that follows the "username.name" format. namespace: Optional namespace table filter to use.
Returns: SchemasOut: Schema object with table fields
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| namespace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tables | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description explains that ref can be a branch name or commit hash, which adds behavioral context. However, it does not explicitly state that the operation is read-only or discuss any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description includes Args and Returns sections which are clear. It is not overly verbose, though the ref explanation could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not detail return values. It adequately covers the core purpose and parameters. Lacks discussion of edge cases like invalid ref, but acceptable for a retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema parameter descriptions are missing (0% coverage), but the tool description fully explains both parameters: ref format in detail and namespace as optional filter. This significantly aids correct 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?
Clearly states 'retrieve schemas of all data tables' with verb and resource. Distinguishes from siblings like get_table (single table) and get_branches (branches).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. Does not mention when to use get_schema over get_table or other query tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tableB
Retrieve the schema of a specified data table in the user's Bauplan data catalog using a table name, returning a schema object.
Args: ref: a reference to a commit that is a state of the user data lake: can be either a hash that starts with "@" and has 64 additional characters or a branch name, that is a mnemonic reference to the last commit that follows the "username.name" format. table_name: Name of the specific table to get schema for. namespace: Optional namespace to use (defaults to "bauplan").
Returns: TableOut: Schema object with table fields for the specified table
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| table_name | Yes | ||
| namespace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| table | 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 traits. It states it retrieves schema but does not disclose whether it is read-only, required permissions, error behavior for missing tables, or side effects. The only added detail is namespace default, which is minimal.
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 Args and Returns sections and front-loads the purpose. However, it is slightly verbose; for example, the Args section repeats information that could be inferred from the schema. It earns its place but could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, return value details are covered. However, with no annotations, the description lacks completeness on behavioral aspects (e.g., idempotency, auth, errors). For a 3-parameter read tool, it provides adequate but not comprehensive context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, so the description must add meaning. It explains 'ref' as a commit reference with format details, 'table_name' as the specific table, and 'namespace' with default. This provides semantic context beyond the schema's type-only definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('retrieve the schema') and resource ('specified data table in the user's Bauplan data catalog'). The mention of returning a schema object further clarifies purpose. Among siblings, only 'get_schema' could overlap, but the description explicitly ties to a table name, distinguishing it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the parameters but provides no guidance on when to use this tool versus alternatives like 'get_schema' or 'list_tables'. It does not mention optimal scenarios, prerequisites, or exclusions, 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.
get_tagsA
Retrieve tags from the user's Bauplan data catalog as a list, with optional filter_by_name and limit (integer) to reduce response size. Get the tags using optional filters.
Args: filter_by_name: Optional filter for tag names (substring match) limit: Optional maximum number of tags to return
Returns: TagsOut: Object containing list of tags and total count
| Name | Required | Description | Default |
|---|---|---|---|
| filter_by_name | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tags | Yes | |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes retrieval operation with filters and return type, but does not explicitly state it's read-only or any side-effect information. With no annotations, the description carries the full burden and is adequate but minimal.
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?
Two paragraphs with some repetition (e.g., 'Retrieve tags' and 'Get the tags'). Could be more concise without the second paragraph that repeats the first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with only two optional parameters and a return type mentioned, the description covers functionality completely. No unmet expectations given the output schema exists.
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?
Adds meaning beyond schema by describing filter_by_name as substring match and limit as maximum number to return. Schema has 0% description coverage, so description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves tags from 'user's Bauplan data catalog as a list', distinguishing from create_tag, delete_tag, and has_tag. Includes optional filters for narrowing results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this vs. alternatives (e.g., has_tag for existence check). Usage is implied but not contrasted with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_infoA
Retrieve user information about the current authenticated Bauplan user. Get information about the current authenticated user.
Args:
Returns: UserInfo: Object containing username and full name of the authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| username | Yes | |
| full_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses that the tool returns a UserInfo object with username and full name, implying a read-only operation. Could explicitly state no modification, but the verb 'retrieve' is sufficient.
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 contains redundancy by stating the same purpose twice ('Retrieve user information...' and 'Get information...'). It also includes empty 'Args:' and 'Returns:' sections, adding clutter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no parameters and an existing output schema, the description fully covers what the tool does and what it returns. No additional context is needed.
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 zero parameters, so schema coverage is 100%. The description does not need to add parameter details. Baseline 4 applies as per guidelines.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves user information of the current authenticated user, using a specific verb and resource. It is distinct from all sibling tools that perform other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives are provided, but the tool's purpose is straightforward and no sibling tool provides the same function. Usage is implied by the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
has_branchA
Check if a specified branch exists in the user's Bauplan data catalog using a branch name. Check if a specific branch exists in the Bauplan catalog.
Args: branch: Name of the branch to check for existence.
Returns: BranchExists: Object indicating whether the branch exists with details
| Name | Required | Description | Default |
|---|---|---|---|
| branch | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| branch_name | Yes | |
| exists | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It discloses the return type (an object indicating existence with details) but does not mention that the tool is read-only, safe, or whether it requires specific permissions. The description adds some value but lacks full 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 repeats the same idea in two sentences ('Check if a specified branch exists...' and 'Check if a specific branch exists...'), which is redundant. It could be more concise by merging into one sentence while keeping the args/return section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple existence-check tool with an output schema (not shown but present), the description adequately covers purpose, parameter semantics, and return type. It does not mention error handling or edge cases, but these may be implied by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description explains the 'branch' parameter as 'Name of the branch to check for existence', adding meaning beyond the schema's type-only definition. This compensates well for the schema gap.
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 verb ('Check if exists') and resource ('branch'), and explicitly distinguishes existence checking from sibling tools like create_branch, delete_branch, or get_branches, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for existence checks, but does not explicitly mention when to use this tool versus alternatives like get_branches (which lists all branches) or has_table (for tables). No 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.
has_namespaceA
Check if a specified namespace exists in a given branch of the user's Bauplan data catalog using a namespace name and branch name.
Args: namespace: Name of the namespace to check for existence. ref: The ref, branch name or tag name to check the namespace on.
Returns: NamespaceExists: Object indicating whether the namespace exists with details
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | Yes | ||
| ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| namespace_name | Yes | |
| ref_name | Yes | |
| exists | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral traits beyond the basic operation. It does not mention authentication, rate limits, or side effects, which is acceptable for a simple read-only check. The description is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences plus structured Args/Returns sections. Every sentence adds value, and there is no redundancy or unnecessary information. It is well-organized and 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?
The tool is simple, and the description covers the core functionality and parameters. An output schema exists, so return values are documented externally. However, it lacks information on error cases or permissions, which would be helpful for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description carries the full burden. It thoroughly explains both parameters: namespace as 'Name of the namespace to check for existence' and ref as 'The ref, branch name or tag name to check the namespace on.' This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check if a specified namespace exists', specifying the verb 'check' and the resource 'namespace'. It also includes the context of a branch, distinguishing it from sibling tools like create_namespace or get_namespaces. The description is specific 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 when to use the tool (to check namespace existence), but does not explicitly state when not to use it or provide alternatives. Given siblings like has_branch and has_table, the context is clear, but no explicit guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
has_tableB
Check if a specified table exists in a given branch of the user's Bauplan data catalog using a table name and branch name.
Args: table: Name of the table to check for existence. ref: A reference to a commit that is a state of the user data lake: can be either a hash that starts with "@" and has 64 additional characters or a branch name, that is a mnemonic reference to the last commit that follows the "username.name" format.
Returns: TableExists: Object indicating whether the table exists with details
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| ref | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| table_name | Yes | |
| exists | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits like read-only nature, authentication needs, or error cases. While 'check' implies no side effects, this is not explicitly stated, leaving ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: one sentence for purpose, followed by parameter details. It is front-loaded with the core action and avoids extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool and presence of an output schema (TableExists), the description covers inputs and output adequately. However, it lacks differentiation from sibling tools and does not provide context on when this check is useful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by defining both parameters: 'table' as the table name and 'ref' with detailed format (hash or branch name following 'username.name' pattern). This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks if a table exists in a branch, with specific verb ('check'), resource ('table'), and scope ('in a given branch'). It naturally distinguishes from siblings like has_branch or has_namespace by focusing on tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., get_table, list_tables). The description only states what it does without mentioning prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
has_tagA
Check if a specified tag exists in the user's Bauplan data catalog using a tag name.
Args: tag: Name of the tag to check for existence.
Returns: TagExists: Object indicating whether the tag exists with details
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| tag_name | Yes | |
| exists | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral aspects. It mentions the return type (TagExists object indicating existence) but does not state side effects (none expected) or whether it is idempotent. For a simple existence check, this is adequate but could be more explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief (two sentences) and includes structured Args and Returns sections. Every sentence is informative with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's simplicity, the description fully explains the action, parameter, and return type. An output schema exists, and the description complements it well. No critical information is missing.
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 adds necessary meaning to the 'tag' parameter: 'Name of the tag to check for existence.' This clarifies its purpose beyond the schema's simple type declaration.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Check if a specified tag exists'), the resource ('tag in the user's Bauplan data catalog'), and the method ('using a tag name'). This clearly distinguishes it from sibling tools like 'create_tag' or 'get_tags'.
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 the tool is for checking existence of a single tag, which is distinct from 'get_tags' (listing all). However, it does not explicitly state when to use or not use this tool, nor mention alternatives. The purpose is clear enough to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_dataA
Import data into a specified existing table using a table name and data source.
Args: table: Name of the table to import data into, it needs to exist beforehand. search_uri: URI to search for data files to import. branch: branch name. namespace: Optional namespace (defaults to "bauplan").
Returns: DataImported: Object indicating success/failure with job details
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| search_uri | Yes | ||
| branch | Yes | ||
| namespace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| table_name | Yes | |
| job_id | Yes | |
| success | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions the return type (success/failure with job details) but lacks crucial details: whether the import is synchronous or asynchronous, whether it appends or replaces data, permissions needed, and rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise, with purpose stated upfront and an Args list for parameters. It could be slightly more compact by integrating parameter descriptions more efficiently, but overall it is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains parameters and return type, but given the tool's complexity (data import) and lack of annotations, it omits important behavioral details like idempotency, overwrite behavior, and side effects. An output schema exists but its content is not used to reduce need for description. Overall, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description's Args section adds value: it explains that 'table' must exist, 'search_uri' is for searching data files, 'branch' is a branch name, and 'namespace' defaults to 'bauplan'. This provides meaningful context beyond the schema's types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool imports data into an existing table, specifying verb ('import') and resource ('data into a specified existing table'). It distinguishes from sibling tools like create_table (which creates a new table) and run_query (which queries data).
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 the tool should be used after the table exists ('table needs to exist beforehand'), but it does not explicitly state when to use this tool versus alternatives (e.g., project_run, run_query_to_csv) or provide conditions for not using it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_jobsA
Retrieve a list of jobs in Bauplan, optionally filter by job id, status (COMPLETE, FAIL, ABORT, RUNNING), user name, start and end time (UTC, format '%m/%d/%y %H:%M:%S').
Args: job_id: Optional filter by job ID status: Optional filter by job status, either COMPLETE, FAIL, ABORT or RUNNING user_name: Optional filter by user name start_time: Optional filter by job start time, UTC time, '%m/%d/%y %H:%M:%S', e.g. '09/19/22 13:55:26' end_time: Optional filter by job finish time, UTC time, '%m/%d/%y %H:%M:%S', e.g. '09/19/22 13:55:26'
Returns: JobsList: Object containing list of jobs with their details
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | ||
| status | No | ||
| user_name | No | ||
| start_time | No | ||
| end_time | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | Yes | |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states it retrieves a list with filters and returns a JobsList, but does not mention side effects, performance, authorization, or error handling. Minimal beyond 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 concise and uses a clear docstring format. Every sentence contributes meaning, though it could be slightly more streamlined. No wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters and no annotations, the description covers purpose and parameter details. However, it lacks information on filter combination logic, pagination, sorting, and error handling. The existence of an output schema partially compensates, but gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description adds significant value by explaining each parameter's purpose and providing format examples for time fields (e.g., '%m/%d/%y %H:%M:%S'). The description compensates well for the lack of schema descriptions.
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 'Retrieve a list of jobs in Bauplan' with optional filters, specifying the verb and resource. It implicitly distinguishes from sibling 'get_job' which retrieves a single job.
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 lists optional filters but does not explicitly state when to use this tool versus alternatives (e.g., get_job). Usage context is implied but not explicit, lacking when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tablesA
Retrieve a list of all data tables in a specified branch or reference of the user's Bauplan data catalog using a ref name.
Args: ref: a reference to a commit that is a state of the user data lake: can be either a hash that starts with "@" and has 64 additional characters or a branch name, that is a mnemonic reference to the last commit that follows the "username.name" format. namespace: Optional namespace to use.
IMPORTANT: Always use this tool BEFORE generating code with generate_code to ensure you're referencing tables that actually exist.
Returns: TablesOut: object with list of table names
| Name | Required | Description | Default |
|---|---|---|---|
| ref | Yes | ||
| namespace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tables | Yes | |
| ref | Yes | |
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description fully bears responsibility. It describes a read-only operation without side effects, and mentions the return type. Could add details about pagination or limits, but is transparent enough.
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?
Concise single-sentence purpose, followed by structured Args and Returns sections. The IMPORTANT note is a useful addition without verbosity. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters, no annotations, and presence of output schema, the description covers key aspects: parameter details, usage guidance, and return type. Lacks error handling or limits, but adequate for a straightforward list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains both parameters in detail, especially ref with its format rules, adding significant value beyond the basic schema types. Schema coverage was 0%, so the description compensates fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a list of tables in a specified branch or reference, using a specific verb and resource. It distinguishes from siblings like get_schema and get_table by focusing on listing all tables.
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?
Includes explicit instruction to use this tool before generate_code to ensure table existence. Lacks explicit when-not-to-use or alternative tools, but provides clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_branchB
Merge a source branch into a target branch in the user's Bauplan data catalog using source and target branch names. Branch names must follow the format <username.branch_name>.
Args: source_ref: The branch to merge from. The name must follow the format <username.branch_name>. into_branch: The target branch to merge into. The name must follow the format <username.branch_name>. commit_message: Optional custom commit message for the merge commit_body: Optional additional commit body/description
Returns: MergeResult: Object indicating success/failure with merge details
| Name | Required | Description | Default |
|---|---|---|---|
| source_ref | Yes | ||
| into_branch | Yes | ||
| commit_message | No | ||
| commit_body | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| merged | Yes | |
| source_ref | Yes | |
| target_branch | Yes | |
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It states the merge action and return type but does not disclose side effects (e.g., overwriting, permissions needed, conflict handling). Minimal 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?
Description is concise and includes a clear list of arguments and return value. It is front-loaded with the main action. A few words could be trimmed, but overall efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (merge operation), missing annotations, and no schema descriptions, the description provides parameter explanations and return type but lacks preconditions, error scenarios, and behavioral details. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description compensates by naming each parameter and adding format constraint (<username.branch_name>). Provides basic meaning for source_ref, into_branch, commit_message, and commit_body, adding 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?
Clearly states it merges a source branch into a target branch, specifying the resource (Bauplan data catalog) and action. However, it does not differentiate from sibling tools like create_branch or delete_branch, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. Mentions branch name format but lacks context such as prerequisites (branches must exist) or conflict scenarios. No reference to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_table_creationA
Generate a YAML schema plan for importing a table from an S3 URI in the user's Bauplan data catalog returning a job ID for tracking). Create a table import plan from an S3 location.
This operation will attempt to create a table based of schemas of N parquet files found by a given search uri. A YAML file containing the schema and plan is returned and if there are no conflicts, it is automatically applied.
Args: table: Name of the table to plan creation for. search_uri: S3 URI to search for parquet files. namespace: Optional namespace (defaults to "bauplan"). branch: Optional branch name. partitioned_by: Optional partitioning column. replace: Optional flag to replace existing table.
Returns: TablePlanCreated: Object indicating success/failure with job tracking details
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| search_uri | Yes | ||
| namespace | No | ||
| branch | No | ||
| partitioned_by | No | ||
| replace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| job_id | Yes | |
| table_name | Yes | |
| search_uri | Yes | |
| success | Yes | |
| message | Yes | |
| namespace | Yes | |
| branch | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description bears full burden. It discloses that the tool attempts to create a table based on schemas, returns a plan, and auto-applies if no conflicts. However, it does not detail error handling, authorization needs, or what happens to existing data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a run-on sentence containing a misplaced parenthesis. The structured 'Args' section is helpful, but the overall text could be more concise and better organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description covers the main purpose, parameters, and outcome. However, it lacks details on error scenarios (e.g., conflicts) and how to proceed if auto-application fails. Still fairly complete for a planning tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides clear, concise explanations for all 6 parameters in the 'Args' section, adding meaning beyond the raw schema. This compensates well for the lack of schema-level descriptions.
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 generates a YAML schema plan for importing a table from S3, and distinguishes it from siblings like 'apply_table_creation_plan' by noting automatic application if no conflicts. The verb 'plan' and resource 'table creation' are specific.
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 planning before applying, but does not explicitly guide when to use this tool versus 'create_table' or 'apply_table_creation_plan'. It mentions automatic application, leaving uncertainty about conflict handling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_runA
Run a pipeline from a specified directory and data ref, returning a job ID and success/failure to the caller.
Args: project_dir: The directory of the project containing the source code files and bauplan_project.yml. ref: The ref or branch name from which to run the project. namespace: The Namespace to run the job in. If not set, the job will be run in the default namespace. parameters: Parameters for templating DAGs. Keys are parameter names, values must be simple types (str, int, float, bool). dry_run: Whether to enable or disable dry-run mode for the run; models are not materialized (defaults to False). client_timeout: Seconds to timeout (defaults to 120).
Returns: RunState: Object indicating success/failure with job Id
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | Yes | ||
| ref | Yes | ||
| namespace | No | ||
| parameters | No | ||
| dry_run | No | ||
| client_timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | |
| job_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions return behavior and dry_run mode, but does not disclose side effects, idempotency, auth requirements, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is well-structured with Args and Returns sections, but could be slightly more concise. Each section earns its place, but some sentences are verbose (e.g., parameter descriptions).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, 2 required, no annotations, and a described output, the description covers parameters well and mentions return type. Lacks behavioral details but is generally complete for invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates fully with detailed Args section explaining each parameter's purpose and defaults. Adds meaning beyond the schema for all 6 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a pipeline from a directory and data ref, returning a job ID. It distinguishes from siblings like code_run and run_query by specifying the source as a project directory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies when to use (running a project pipeline), but lacks explicit guidance on when not to use or how it differs from siblings like code_run or run_query. No exclusions or alternative mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revert_tableC
Revert a specified table from a source reference to a target branch in the user's Bauplan data catalog using a table name, source reference, and target branch. Revert a table from a source reference to a target branch.
Args: table: The table to revert. source_ref: The name of the source ref. into_branch: The name of the target branch where the table will be reverted. replace: Optional, whether to replace the table if it already exists.
Returns: TableReverted: Object indicating success/failure with revert details
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| source_ref | Yes | ||
| into_branch | Yes | ||
| replace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| table_name | Yes | |
| source_ref | Yes | |
| into_branch | Yes | |
| success | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description mentions reversion and returns a success/failure object but does not disclose side effects, required permissions, or destructive potential (e.g., overwriting data when replace=true).
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 repetitive, restating the same idea in the first sentence and then in bullet points. Could be more concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema, the description lacks important details like the behavior of the 'replace' parameter, format of source_ref, or implications of reverting. Incomplete for a 4-parameter tool with no schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description only lists parameter names without explaining their meanings (e.g., what is a 'source_ref'?) or providing additional context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Revert') and the resources (table, source ref, target branch). However, it does not differentiate from sibling tools like 'merge_branch' or 'create_table', which could be confused.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. Missing context such as prerequisites (e.g., branch must exist) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_queryA
Execute a SQL SELECT query on the user's Bauplan data catalog, returning results as a QueryOut object using a query, optional ref, and optional namespace. Executes a SQL query against the user's Bauplan data lake.
Args: query: SQL query to execute ref: a reference to a commit that is a state of the user data lake: can be either a hash that starts with "@" and has 64 additional characters or a branch name, that is a mnemonic reference to the last commit that follows the "username.name" format. namespace: Optional namespace to use.
Returns: QueryOut: Response object with query results or error
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| ref | No | ||
| namespace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| data | Yes | |
| metadata | No | |
| error | 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 for behavioral disclosure. It explains that the tool executes a query and returns results, but does not explicitly state that it is read-only (no side effects), nor does it mention authentication needs, rate limits, or error handling. The description is adequate for a query tool but lacks explicit safety cues.
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 front-loaded with the main purpose and includes structured Args and Returns sections, making it easy to parse. However, it repeats information (the second sentence mirrors the first paragraph) and could be slightly more concise without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters with a complex ref format) and the presence of a similar sibling 'run_query_to_csv', the description covers the basics but does not differentiate when to use which tool. It mentions the return type (QueryOut) but lacks context on output format or integration with other tools. The description is adequate but not fully complete for an agent to make optimal choices among siblings.
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 add meaning. It provides detailed format rules for the 'ref' parameter (hash starting with '@' and 64 characters, or branch name in 'username.name' format) and explains 'query' as a SQL query. 'Namespace' is only described as 'Optional namespace', which is minimal. Overall, it adds significant value beyond the schema, especially for 'ref', but could improve on 'namespace'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a SQL SELECT query on the Bauplan data catalog and returns a QueryOut object. It uses specific verbs and resources, and the mention of returning a QueryOut object distinguishes it from the sibling tool 'run_query_to_csv', which likely outputs CSV.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'run_query_to_csv' or other data operations. It does not specify when not to use it or any prerequisites, leaving the agent without decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_query_to_csvA
Execute SQL SELECT queries on a specified table in the user's Bauplan data catalog, saving results to a CSV file, using a query and table name, returning a file path. Execute SELECT queries and save results directly to CSV file.
Note: CSV format only supports scalar data types (strings, numbers, booleans). Queries returning complex types (arrays, lists, nested objects) will fail. For complex data, use run_query tool instead or modify SQL to flatten/convert data.
Args: path: Output CSV file path where results will be saved. query: SQL query to execute (DuckDB SQL syntax). ref: Branch/reference to query against (optional). namespace: Namespace to use (optional). client_timeout: Timeout in seconds (defaults to 120).
Returns: QueryToCSVResult: Object indicating success/failure with execution details
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| query | Yes | ||
| ref | No | ||
| namespace | No | ||
| client_timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| query | Yes | |
| ref | Yes | |
| namespace | Yes | |
| success | Yes | |
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description shoulders the burden. It discloses the limitation that only scalar types are supported and that complex types cause failure. It doesn't mention potential side effects (e.g., file overwrite) but given it's a SELECT query, destructive behavior is unlikely.
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: a brief summary followed by a note about type limitations and a parameter list. It is concise without unnecessary 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?
Given the output schema exists (QueryToCSVResult), the description covers inputs, constraints, and return type sufficiently. It could mention the output schema contents, but the detail of 'success/failure' is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are described in plain language, including their purpose (path as output file path, query as DuckDB SQL, etc.), types, and defaults. Since schema coverage is 0%, the description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes SQL SELECT queries and saves results to CSV. It specifies the resource (user's Bauplan data catalog table), verb (execute), and distinguishes from sibling 'run_query' by noting its limitation to scalar types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly advises against using when queries return complex types, and directs to the alternative 'run_query' tool. It also mentions optional parameters and defaults, providing clear when-to-use context.
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.
33 tool updates
v0.1.0- First observed
apply_table_creation_plan - First observed
cancel_job - First observed
code_run - First observed
create_branch - First observed
create_namespace - First observed
create_table - First observed
create_tag - First observed
delete_branch - First observed
delete_namespace - First observed
delete_table - First observed
delete_tag - First observed
get_branches - First observed
get_commits - First observed
get_instructions - First observed
get_job - First observed
get_namespaces - First observed
get_schema - First observed
get_table - First observed
get_tags - First observed
get_user_info - First observed
has_branch - First observed
has_namespace - First observed
has_table - First observed
has_tag - First observed
import_data - First observed
list_jobs - First observed
list_tables - First observed
merge_branch - First observed
plan_table_creation - First observed
project_run - First observed
revert_table - First observed
run_query - First observed
run_query_to_csv
TDQS
Most tools have clearly distinct purposes (e.g., create, get, delete for different resources). Potential overlaps like code_run vs project_run and run_query vs run_query_to_csv are mitigated by detailed descriptions. A few pairs could still cause confusion, but overall boundaries are clear.
Naming patterns are mixed: some use verb_noun (create_branch), others verb_noun_noun (apply_table_creation_plan), and retrieval uses both 'get_' and 'list_' inconsistently (e.g., get_branches vs list_tables). While still readable, the inconsistency may hinder quick tool selection.
With 33 tools, the server is on the heavier side for a typical MCP server. While the domain (data catalog and pipelines) justifies many operations, some tools like multiple query variants and plan phases could be consolidated. Not extreme, but above ideal.
The tool surface covers CRUD for branches, namespaces, tables, and tags, plus job management, query execution, and pipeline runs. Missing explicit update tools (e.g., update_table) but those are handled via merge/revert/import. The inclusion of a meta-instruction tool is helpful. Minor gaps exist but overall solid.
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
List datasets, schemas, run APL queries, and use prompts for exploration, anomalies, and monitoring.
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
- OleanderOAuthdev.oleander
The all-in-one data stack for agents. Upload files, run SQL, evolve tables, and render charts.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Databricks workspaces programmatically, providing comprehensive tools for cluster management, notebook operations, job orchestration, Unity Catalog data governance, user management, permissions control, and FinOps cost analytics.410MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to interact with DBT (Data Build Tool) projects, allowing them to query project metadata, inspect models and sources, view compiled SQL, and run DBT commands.1415MIT
- AlicenseCqualityCmaintenanceEnables AI assistants to interact with MLflow experiments, runs, and registered models. Supports browsing experiments, retrieving run details with metrics and parameters, and querying the model registry through natural language.7MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform comprehensive Snowflake database operations including DDL, DML, and warehouse management. It allows users to query data, manage database objects, and configure permissions using natural language commands.MIT
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/BauplanLabs/bauplan-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server