Skip to main content
Glama
rickyb30

DataPilot MCP Server

by rickyb30

DataPilot MCP Server

CI/CD Pipeline Coverage Status Python Version License: MIT Code style: black Security: bandit Pre-commit

Navigate your data with AI guidance. A comprehensive Model Context Protocol (MCP) server for interacting with Snowflake using natural language and AI. Built with FastMCP 2.0 and OpenAI integration.

Features

πŸ—„οΈ Core Database Operations

  • execute_sql - Execute SQL queries with results

  • list_databases - List all accessible databases

  • list_schemas - List schemas in a database

  • list_tables - List tables in a database/schema

  • describe_table - Get detailed table column information

  • get_table_sample - Retrieve sample data from tables

🏭 Warehouse Management

  • list_warehouses - List all available warehouses

  • get_warehouse_status - Get current warehouse, database, and schema status

πŸ€– AI-Powered Features

  • natural_language_to_sql - Convert natural language questions to SQL queries

  • analyze_query_results - AI-powered analysis of query results

  • suggest_query_optimizations - Get optimization suggestions for SQL queries

  • explain_query - Plain English explanations of SQL queries

  • generate_table_insights - AI-generated insights about table data

πŸ“Š Resources (Data Access)

  • snowflake://databases - Access database list

  • snowflake://schemas/{database} - Access schema list

  • snowflake://tables/{database}/{schema} - Access table list

  • snowflake://table/{database}/{schema}/{table} - Access table details

πŸ“ Prompts (Templates)

  • sql_analysis_prompt - Templates for SQL analysis

  • data_exploration_prompt - Templates for data exploration

  • sql_optimization_prompt - Templates for query optimization

Related MCP server: Snowflake MCP Service

Installation

  1. Clone and setup the project:

    git clone <repository-url>
    cd datapilot
    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
  2. Install dependencies:

    pip install -r requirements.txt
  3. Configure environment variables:

    cp env.template .env
    # Edit .env with your credentials

Configuration

Environment Variables

Create a .env file with the following configuration:

# Required: Snowflake Connection
# Account examples:
# - ACCOUNT-LOCATOR.snowflakecomputing.com (recommended)
# - ACCOUNT-LOCATOR.region.cloud
# - organization-account_name
SNOWFLAKE_ACCOUNT=ACCOUNT-LOCATOR.snowflakecomputing.com
SNOWFLAKE_USER=your_username
SNOWFLAKE_PASSWORD=your_password

# Optional: Default Snowflake Context
SNOWFLAKE_WAREHOUSE=your_warehouse_name
SNOWFLAKE_DATABASE=your_database_name
SNOWFLAKE_SCHEMA=your_schema_name
SNOWFLAKE_ROLE=your_role_name

# Required: OpenAI API
OPENAI_API_KEY=your_openai_api_key
OPENAI_MODEL=gpt-4  # Optional, defaults to gpt-4

Snowflake Account Setup

  1. Get your Snowflake account identifier - Multiple formats supported:

    • Recommended: ACCOUNT-LOCATOR.snowflakecomputing.com (e.g., SCGEENJ-UR66679.snowflakecomputing.com)

    • Regional: ACCOUNT-LOCATOR.region.cloud (e.g., xy12345.us-east-1.aws)

    • Legacy: organization-account_name

  2. Ensure your user has appropriate permissions:

    • USAGE on warehouses, databases, and schemas

    • SELECT on tables for querying

    • SHOW privileges for listing objects

Usage

Running the Server

Method 1: Direct execution

python -m src.main

Method 2: Using FastMCP CLI

fastmcp run src/main.py

Method 3: Development mode with auto-reload

fastmcp dev src/main.py

Connecting to MCP Clients

Claude Desktop

Add to your Claude Desktop configuration:

{
  "mcpServers": {
    "datapilot": {
      "command": "python",
      "args": ["-m", "src.main"],
      "cwd": "/path/to/datapilot",
      "env": {
        "SNOWFLAKE_ACCOUNT": "your_account",
        "SNOWFLAKE_USER": "your_user",
        "SNOWFLAKE_PASSWORD": "your_password",
        "OPENAI_API_KEY": "your_openai_key"
      }
    }
  }
}

Using FastMCP Client

from fastmcp import Client

async def main():
    async with Client("python -m src.main") as client:
        # List databases
        databases = await client.call_tool("list_databases")
        print("Databases:", databases)
        
        # Natural language to SQL
        result = await client.call_tool("natural_language_to_sql", {
            "question": "Show me the top 10 customers by revenue",
            "database": "SALES_DB",
            "schema": "PUBLIC"
        })
        print("Generated SQL:", result)

Example Usage

1. Natural Language Query

# Ask a question in natural language
question = "What are the top 5 products by sales volume last month?"
sql = await client.call_tool("natural_language_to_sql", {
    "question": question,
    "database": "SALES_DB",
    "schema": "PUBLIC"
})
print(f"Generated SQL: {sql}")

2. Execute and Analyze

# Execute a query and get AI analysis
analysis = await client.call_tool("analyze_query_results", {
    "query": "SELECT product_name, SUM(quantity) as total_sales FROM sales GROUP BY product_name ORDER BY total_sales DESC LIMIT 10",
    "results_limit": 100,
    "analysis_type": "summary"
})
print(f"Analysis: {analysis}")

3. Table Insights

# Get AI-powered insights about a table
insights = await client.call_tool("generate_table_insights", {
    "table_name": "SALES_DB.PUBLIC.CUSTOMERS",
    "sample_limit": 50
})
print(f"Table insights: {insights}")

4. Query Optimization

# Get optimization suggestions
optimizations = await client.call_tool("suggest_query_optimizations", {
    "query": "SELECT * FROM large_table WHERE date_column > '2023-01-01'"
})
print(f"Optimization suggestions: {optimizations}")

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   MCP Client    β”‚    β”‚   FastMCP       β”‚    β”‚   Snowflake     β”‚
β”‚   (Claude/etc)  │◄──►│   Server        │◄──►│   Database      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                β”‚
                                β–Ό
                       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                       β”‚   OpenAI API    β”‚
                       β”‚   (GPT-4)       β”‚
                       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Project Structure

datapilot/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ main.py              # Main FastMCP server
β”‚   β”œβ”€β”€ models.py            # Pydantic data models
β”‚   β”œβ”€β”€ snowflake_client.py  # Snowflake connection & operations
β”‚   └── openai_client.py     # OpenAI integration
β”œβ”€β”€ requirements.txt         # Python dependencies
β”œβ”€β”€ env.template            # Environment variables template
└── README.md              # This file

Development

Adding New Tools

  1. Define your tool function in src/main.py:

@mcp.tool()
async def my_new_tool(param: str, ctx: Context) -> str:
    """Description of what the tool does"""
    await ctx.info(f"Processing: {param}")
    # Your logic here
    return "result"
  1. Add appropriate error handling and logging

  2. Test with FastMCP dev mode: fastmcp dev src/main.py

Adding New Resources

@mcp.resource("snowflake://my-resource/{param}")
async def my_resource(param: str) -> Dict[str, Any]:
    """Resource description"""
    # Your logic here
    return {"data": "value"}

Troubleshooting

Common Issues

  1. Connection Errors

    • Verify Snowflake credentials in .env

    • Check network connectivity

    • Ensure user has required permissions

  2. OpenAI Errors

    • Verify OPENAI_API_KEY is set correctly

    • Check API quota and billing

    • Ensure model name is correct

  3. Import Errors

    • Activate virtual environment

    • Install all requirements: pip install -r requirements.txt

    • Run from project root directory

Logging

Enable debug logging:

LOG_LEVEL=DEBUG

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Add tests if applicable

  5. Submit a pull request

License

This project is licensed under the MIT License.

Support

For issues and questions:

  • Check the troubleshooting section

  • Review FastMCP documentation: https://gofastmcp.com/

  • Open an issue in the repository

Available Tools

13 tools
analyze_query_resultsC

Execute a query and analyze its results using AI

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
results_limitNo
analysis_typeNosummary

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions AI-based analysis but doesn't specify what 'analyze' entails (e.g., statistical summaries, pattern detection, recommendations), performance characteristics, rate limits, authentication needs, or error handling. The description is too vague about the tool's actual behavior beyond the high-level concept.

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

Conciseness5/5

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

The description is extremely concise at just 7 words, front-loading the core purpose with zero wasted words. Every element ('Execute a query', 'analyze its results', 'using AI') contributes essential information without redundancy or unnecessary elaboration.

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

Completeness3/5

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

Given the tool has an output schema (which handles return value documentation) but no annotations and 0% schema description coverage, the description is minimally complete for understanding the high-level purpose. However, it lacks crucial details about parameter meanings, behavioral constraints, and differentiation from siblings that would make it fully adequate for a 3-parameter AI analysis tool.

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

Parameters2/5

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

With 0% schema description coverage for all 3 parameters, the description adds no semantic information about what 'query', 'results_limit', or 'analysis_type' mean. It doesn't explain query format, valid analysis types beyond the default 'summary', or how the limit applies. The description fails to compensate for the complete lack of schema documentation.

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

Purpose4/5

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

The description clearly states the tool's purpose as 'Execute a query and analyze its results using AI', which specifies both the action (execute+analyze) and resource (query results). It distinguishes from siblings like 'execute_sql' (execution only) and 'generate_table_insights' (table-focused analysis). However, it doesn't explicitly mention what kind of query or database system is involved.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'execute_sql' (for raw execution) or 'natural_language_to_sql' (for query generation). It doesn't mention prerequisites, appropriate contexts, or exclusions, leaving the agent to infer usage from the name and purpose alone.

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

describe_tableC

Get detailed information about a table's columns

ParametersJSON Schema
NameRequiredDescriptionDefault
table_nameYes
databaseNo
schemaNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states this is a read operation ('Get'), but doesn't disclose behavioral traits like whether it requires specific permissions, what format the detailed information returns, if there are rate limits, or how it handles missing tables. For a tool with 3 parameters and no annotation coverage, this is a significant gap in behavioral context.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose. Every word earns its place: 'Get' (action), 'detailed information' (scope), 'about a table's columns' (resource). There's zero waste or redundancy.

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

Completeness3/5

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

Given the tool has an output schema (which should document return values), the description doesn't need to explain outputs. However, with 3 parameters, 0% schema coverage, and no annotations, the description is incompleteβ€”it doesn't address parameter meanings or behavioral context adequately. It's minimally viable but leaves clear gaps for the agent to navigate.

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

Parameters2/5

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

Schema description coverage is 0%, so the schema provides no parameter documentation. The description mentions 'table's columns' which hints at the table_name parameter, but doesn't explain the database or schema parameters at all. With 3 parameters (table_name, database, schema) and only one implicitly addressed, the description fails to compensate for the schema's lack of documentation.

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

Purpose4/5

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

The description clearly states the verb ('Get') and resource ('table's columns') with specificity about what information is retrieved ('detailed information'). It distinguishes from siblings like list_tables (which lists names) or get_table_sample (which retrieves data rows). However, it doesn't explicitly differentiate from analyze_query_results or explain_query which might also provide table metadata.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like list_tables (for table names), get_table_sample (for data rows), and explain_query (for query structure), there's clear potential for confusion, but the description offers no when-to-use or when-not-to-use advice. The agent must infer usage from the tool name alone.

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

execute_sqlB

Execute a SQL query on Snowflake and return results

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
errorNo
columnsYes
successYes
query_idNo
row_countYes
warehouse_usedNo
execution_time_msNo

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. 'Execute a SQL query' implies a write operation could occur, but it doesn't disclose whether this is read-only, requires specific permissions, has rate limits, or what happens with DML/DDL queries. The description lacks critical behavioral context for a SQL execution tool.

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

Conciseness5/5

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

The description is a single, efficient sentence that states the core functionality without unnecessary words. It's appropriately sized and front-loaded with the essential information, making it easy to parse quickly.

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

Completeness3/5

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

Given the tool's complexity (SQL execution can involve queries with varying impacts) and the presence of an output schema (which handles return values), the description is minimally adequate. However, without annotations and with incomplete parameter documentation, it leaves significant gaps in understanding the tool's full behavior and constraints.

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

Parameters3/5

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

The description mentions 'SQL query' which aligns with the 'query' parameter in the schema, but with 0% schema description coverage, it doesn't explain the nested 'request' object structure or other parameters like 'limit' and 'warehouse'. The description adds minimal value beyond what's implied by the tool name.

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

Purpose4/5

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

The description clearly states the action ('Execute a SQL query') and target resource ('on Snowflake'), providing a specific verb+resource combination. However, it doesn't differentiate from siblings like 'natural_language_to_sql' or 'explain_query' which also involve SQL operations, missing explicit distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'natural_language_to_sql' for converting natural language to SQL or 'explain_query' for analyzing query execution, there's no indication of appropriate contexts, prerequisites, or exclusions for this execution tool.

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

explain_queryA

Explain what a SQL query does in plain English

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool explains queries but does not describe how it handles errors (e.g., invalid SQL), what the output format is (though an output schema exists), or any limitations (e.g., query complexity). This leaves significant gaps in understanding the tool's behavior.

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

Conciseness5/5

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

The description is a single, clear sentence with zero wasted words. It is front-loaded with the core purpose and efficiently communicates the tool's function without unnecessary elaboration, making it highly concise and well-structured.

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

Completeness4/5

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

Given the tool's low complexity (one parameter) and the presence of an output schema (which handles return values), the description is reasonably complete. It covers the purpose and parameter semantics adequately, though it lacks behavioral details like error handling or limitations, which are not fully compensated by the structured data.

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

Parameters3/5

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

The input schema has 0% description coverage, so the description must compensate. It mentions 'SQL query' as the parameter, adding meaning beyond the schema's generic 'query' property name. However, it does not specify format requirements (e.g., must be valid SQL) or examples, providing only basic semantic context.

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

Purpose5/5

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

The description clearly states the specific action ('explain what a SQL query does') and the resource ('SQL query'), with the qualifier 'in plain English' distinguishing it from siblings like execute_sql or suggest_query_optimizations. It precisely communicates the tool's function without being tautological.

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

Usage Guidelines3/5

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

The description implies usage for understanding SQL queries, but does not explicitly state when to use this tool versus alternatives like natural_language_to_sql (for translation) or analyze_query_results (for post-execution analysis). It provides basic context but lacks explicit guidance on exclusions or comparisons.

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

generate_table_insightsC

Generate AI-powered insights about a table's data

ParametersJSON Schema
NameRequiredDescriptionDefault
table_nameYes
sample_limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'AI-powered insights' but doesn't explain what this entailsβ€”e.g., whether it's a read-only analysis, if it requires specific permissions, potential costs or rate limits, or the nature of the output. This leaves significant gaps in understanding the tool's behavior and implications.

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

Conciseness5/5

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

The description is a single, efficient sentence with no wasted words. It's appropriately sized and front-loaded, clearly stating the core function without unnecessary elaboration, making it easy to parse quickly.

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

Completeness3/5

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

Given the complexity of AI-powered analysis and the lack of annotations, the description is incomplete. It doesn't explain what 'insights' include, how the AI works, or any behavioral traits. The presence of an output schema helps by documenting return values, but the description fails to provide enough context for safe and effective use, especially compared to detailed siblings like 'execute_sql' or 'natural_language_to_sql'.

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

Parameters3/5

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

The schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It doesn't mention the parameters 'table_name' or 'sample_limit' at all, failing to add meaning beyond the bare schema. However, with only 2 parameters and an output schema present, the baseline is slightly mitigated, but the description provides no semantic context for how these parameters affect the insights generation.

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

Purpose3/5

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

The description states the tool 'Generate AI-powered insights about a table's data', which provides a clear verb ('Generate') and resource ('table's data'), but it's vague about what 'insights' entail compared to siblings like 'describe_table' or 'analyze_query_results'. It doesn't specifically differentiate from these alternatives, leaving the purpose somewhat ambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as 'describe_table' or 'analyze_query_results'. The description implies usage for AI analysis of table data but offers no context on prerequisites, exclusions, or specific scenarios, making it unclear how it fits among the many data-related sibling tools.

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

get_table_sampleC

Get a sample of data from a table

ParametersJSON Schema
NameRequiredDescriptionDefault
table_nameYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYes
errorNo
columnsYes
successYes
query_idNo
row_countYes
warehouse_usedNo
execution_time_msNo

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action but doesn't cover critical traits like whether this is a read-only operation, if it requires specific permissions, how sampling is performed (e.g., random vs. first rows), or any rate limits. The description is minimal and leaves key behaviors unspecified.

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

Conciseness4/5

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

The description is a single, efficient sentence with no wasted words, making it appropriately concise. It's front-loaded with the core action, though it could benefit from slightly more detail given the lack of annotations and low schema coverage. Overall, it's well-structured but under-specified.

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

Completeness3/5

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

Given the tool's moderate complexity (2 parameters, no annotations) and the presence of an output schema, the description is minimally adequate. The output schema likely covers return values, reducing the need for description details. However, with 0% schema coverage and no annotations, the description should do more to explain parameters and behavior, making it borderline complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It mentions 'table' and 'sample' but doesn't explain the 'table_name' parameter's format or scope, nor the 'limit' parameter's role in defining sample size. The description adds minimal meaning beyond the bare schema, failing to clarify parameter usage effectively.

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

Purpose3/5

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

The description 'Get a sample of data from a table' clearly states the verb ('Get') and resource ('data from a table'), making the purpose understandable. However, it's vague about what constitutes a 'sample' and doesn't differentiate from siblings like 'describe_table' or 'execute_sql' that might also retrieve table data. It avoids tautology but lacks specificity.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'execute_sql' for custom queries or 'describe_table' for metadata, there's no indication of context, prerequisites, or exclusions. It implies usage for sampling data but offers no comparative advice.

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

get_warehouse_statusB

Get current warehouse, database, and schema status

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves status information but doesn't specify what 'status' entails (e.g., operational health, usage metrics, configuration), whether it's real-time or cached, or any authentication or rate limit considerations. This leaves significant gaps for an agent to understand the tool's behavior.

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

Conciseness5/5

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

The description is a single, clear sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action and resources, making it efficient and easy to parse for an agent.

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

Completeness3/5

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

Given the tool has 0 parameters, 100% schema coverage, and an output schema exists, the description is minimally adequate. However, it lacks details on what 'status' includes, which could be crucial for usage. With no annotations and a vague resource scope, more context would improve completeness for a status-checking tool.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here, but it could have clarified if any implicit parameters (like context or filters) are involved. Since there are no parameters, a baseline of 4 is applied.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resources ('warehouse, database, and schema status'), making it immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'list_warehouses' or 'list_databases', which focus on listing rather than retrieving status information.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, context, or comparisons to siblings like 'list_warehouses' (which might list warehouses without status details) or 'analyze_query_results' (which could involve status indirectly).

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

list_databasesB

List all databases available to the user

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool lists databases but doesn't describe return format, pagination, authentication requirements, rate limits, or any side effects. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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

Conciseness5/5

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

The description is a single, efficient sentence that communicates the essential purpose without any wasted words. It's appropriately sized for a simple listing tool and front-loads the core functionality.

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

Completeness3/5

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

Given the tool's simplicity (0 parameters, output schema exists), the description is adequate but minimal. With no annotations and an output schema, it covers the basic purpose but lacks behavioral context that would help an agent understand how to properly interpret results or handle edge cases.

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

Parameters4/5

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

The tool has 0 parameters with 100% schema description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't discuss parameters, maintaining focus on the tool's purpose. Baseline for 0 parameters with high schema coverage is 4.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('List') and resource ('databases'), and specifies scope ('all databases available to the user'). It doesn't explicitly differentiate from sibling tools like 'list_schemas' or 'list_tables', but the resource specificity provides implicit differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'list_schemas' or 'list_tables', nor does it mention prerequisites or context for usage. It simply states what the tool does without any usage context.

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

list_schemasC

List all schemas in a database

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('List all schemas') but doesn't describe how the listing worksβ€”whether it returns all schemas at once, uses pagination, requires specific permissions, or has rate limits. For a tool with zero annotation coverage, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly. Every part of the sentence earns its place by conveying essential information.

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

Completeness3/5

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

Given the tool's low complexity (1 parameter, no nested objects) and the presence of an output schema (which handles return values), the description is somewhat complete for basic understanding. However, it lacks details on usage context, parameter meaning, and behavioral traits, which are needed for effective tool selection and invocation in a database environment with multiple listing tools.

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

Parameters2/5

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

The input schema has 1 parameter with 0% description coverage, meaning the parameter 'database' is undocumented. The description doesn't add any meaning beyond the schemaβ€”it doesn't explain what 'database' refers to (e.g., a database name, ID, or connection string) or provide examples. This fails to compensate for the low schema coverage.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('all schemas in a database'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'list_databases' or 'list_tables', which perform similar listing operations on different resources, so it doesn't reach the highest score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'list_databases' or 'list_tables'. It doesn't mention prerequisites, such as needing to know the database name first, or contextual factors like performance implications. This leaves the agent without clear usage direction.

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

list_tablesB

List all tables in a database/schema

ParametersJSON Schema
NameRequiredDescriptionDefault
databaseNo
schemaNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits such as permissions needed, rate limits, pagination, or what 'all tables' entails (e.g., includes system tables?). It lacks details on safety, performance, or response format.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste, front-loaded with the core purpose. Every word earns its place, making it appropriately sized and structured for clarity.

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

Completeness3/5

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

Given low complexity (list operation), no annotations, and an output schema exists (reducing need to explain return values), the description is minimally adequate. However, it lacks context on parameter usage and behavioral aspects, leaving gaps for a tool with 2 parameters and sibling alternatives.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate but adds no parameter details beyond implying 'database/schema' scope. It doesn't explain what 'database' and 'schema' parameters do, their relationships, or default behaviors. Baseline is 3 due to 0 parameters being required, but value beyond schema is minimal.

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

Purpose4/5

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

The description clearly states the action ('List all tables') and target resource ('in a database/schema'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'list_databases' or 'list_schemas' beyond the obvious resource difference, missing explicit sibling distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'list_databases' or 'list_schemas', nor does it mention prerequisites or exclusions. Usage is implied by the name alone, with no explicit context for selection.

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

list_warehousesB

List all warehouses available to the user

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states it 'lists all warehouses available to the user', implying a read-only operation that returns a list, but doesn't disclose key traits like pagination, rate limits, authentication requirements, error conditions, or what 'available to the user' means (e.g., permissions-based filtering). For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is a single, clear sentence with zero waste. It's front-loaded with the core action ('List all warehouses') and adds necessary context ('available to the user'). Every word earns its place, making it highly efficient and easy to parse.

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

Completeness3/5

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

Given the tool's low complexity (0 parameters, simple list operation) and the presence of an output schema (which handles return values), the description is minimally adequate. However, with no annotations and incomplete behavioral disclosure, it doesn't fully cover aspects like authentication or operational constraints. It meets the basic need but lacks depth for confident agent use.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameters need documentation. The description appropriately doesn't discuss parameters, focusing on the tool's purpose. Baseline for 0 parameters is 4, as the description doesn't need to compensate for any schema gaps.

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

Purpose4/5

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

The description clearly states the verb ('List') and resource ('warehouses'), specifying 'all warehouses available to the user'. It distinguishes from siblings like 'get_warehouse_status' (which checks status) and 'list_databases/tables/schemas' (which list different resources). However, it doesn't explicitly differentiate from all siblings, such as 'describe_table' or 'analyze_query_results', though those are clearly different operations.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication), when to use 'list_warehouses' vs 'get_warehouse_status' (for status checks) or other listing tools like 'list_databases', or any exclusions. The agent must infer usage from the name and context alone.

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

natural_language_to_sqlC

Convert natural language question to SQL query using AI

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool uses AI for conversion but doesn't mention accuracy limitations, potential errors, rate limits, authentication needs, or what the output looks like (though an output schema exists). This is inadequate for an AI-powered tool with zero annotation coverage.

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

Conciseness5/5

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

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

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

Completeness3/5

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

Given the tool's moderate complexity (AI-based conversion), no annotations, and 0% schema coverage, the description is incomplete. It lacks parameter details and behavioral context, though the existence of an output schema mitigates some gaps by handling return values externally.

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

Parameters1/5

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

Schema description coverage is 0%, meaning none of the parameters (question, context, database, schema) are documented in the schema. The description adds no information about these parameters beyond what's implied by the tool name, failing to compensate for the coverage gap.

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

Purpose4/5

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

The description clearly states the tool's purpose as converting natural language questions to SQL queries using AI, which is a specific verb+resource combination. However, it doesn't differentiate from siblings like 'execute_sql' or 'explain_query' that also deal with SQL queries, so it misses full sibling distinction.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'execute_sql' (which runs SQL) and 'explain_query' (which explains SQL), there's no indication of whether this tool should be used before execution or as a standalone conversion step.

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

suggest_query_optimizationsB

Get AI-powered suggestions for optimizing a SQL query

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool provides 'AI-powered suggestions' but doesn't elaborate on what that entailsβ€”e.g., whether it modifies the query, returns textual advice, requires specific permissions, has rate limits, or handles errors. For a tool that likely involves computational analysis, this minimal description leaves critical behavioral traits unspecified.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose ('Get AI-powered suggestions for optimizing a SQL query') with zero wasted words. It avoids redundancy and is appropriately sized for a straightforward tool, making it easy for an agent to parse quickly.

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

Completeness3/5

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

Given the tool's moderate complexity (AI-powered optimization), lack of annotations, and an output schema (which should cover return values), the description is minimally adequate. It states what the tool does but omits usage guidelines, behavioral details, and parameter nuances. The presence of an output schema lifts some burden, but for a tool with potential behavioral implications, more context would improve completeness.

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

Parameters3/5

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

The input schema has 1 parameter with 0% description coverage, so the schema provides no semantic context. The description mentions 'optimizing a SQL query', which implies the 'query' parameter should be a SQL string, adding some meaning beyond the schema's bare 'string' type. However, it doesn't detail constraints (e.g., query length, supported SQL dialects) or examples, resulting in a baseline score given the single parameter.

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

Purpose4/5

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

The description clearly states the action ('Get AI-powered suggestions') and the resource ('optimizing a SQL query'), making the purpose immediately understandable. It distinguishes itself from siblings like 'execute_sql' or 'explain_query' by focusing on optimization suggestions rather than execution or analysis. However, it doesn't explicitly contrast with all potential alternatives like 'analyze_query_results' or 'generate_table_insights', keeping it from a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a query to optimize), exclusions (e.g., not for non-SQL queries), or comparisons to siblings like 'explain_query' (which might analyze performance) or 'natural_language_to_sql' (which generates queries). This lack of contextual direction leaves the agent to infer usage from the tool name alone.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updatesv1.0.0
    • Changedanalyze_query_results5 fields changed
      • removedInput schema / properties / analysis_type / title
        Removed value: -"Analysis Type"
      • removedInput schema / properties / query / title
        Removed value: -"Query"
      • removedInput schema / properties / results_limit / title
        Removed value: -"Results Limit"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changeddescribe_table5 fields changed
      • removedInput schema / properties / database / title
        Removed value: -"Database"
      • removedInput schema / properties / schema / title
        Removed value: -"Schema"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedexecute_sql14 fields changed
      • removedInput schema / $defs / SQLQueryRequest / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / $defs / SQLQueryRequest / properties / query / title
        Removed value: -"Query"
      • removedInput schema / $defs / SQLQueryRequest / properties / warehouse / title
        Removed value: -"Warehouse"
      • removedInput schema / $defs / SQLQueryRequest / title
        Removed value: -"SQLQueryRequest"
      • removedInput schema / properties / request / title
        Removed value: -"Request"
      • removedOutput schema / properties / columns / title
        Removed value: -"Columns"
      • removedOutput schema / properties / data / title
        Removed value: -"Data"
      • removedOutput schema / properties / error / title
        Removed value: -"Error"
      • removedOutput schema / properties / execution_time_ms / title
        Removed value: -"Execution Time Ms"
      • removedOutput schema / properties / query_id / title
        Removed value: -"Query Id"
      • removedOutput schema / properties / row_count / title
        Removed value: -"Row Count"
      • removedOutput schema / properties / success / title
        Removed value: -"Success"
      • removedOutput schema / properties / warehouse_used / title
        Removed value: -"Warehouse Used"
      • removedOutput schema / title
        Removed value: -"QueryResult"
    • Changedexplain_query3 fields changed
      • removedInput schema / properties / query / title
        Removed value: -"Query"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedgenerate_table_insights4 fields changed
      • removedInput schema / properties / sample_limit / title
        Removed value: -"Sample Limit"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedget_table_sample11 fields changed
      • removedInput schema / properties / limit / title
        Removed value: -"Limit"
      • removedInput schema / properties / table_name / title
        Removed value: -"Table Name"
      • removedOutput schema / properties / columns / title
        Removed value: -"Columns"
      • removedOutput schema / properties / data / title
        Removed value: -"Data"
      • removedOutput schema / properties / error / title
        Removed value: -"Error"
      • removedOutput schema / properties / execution_time_ms / title
        Removed value: -"Execution Time Ms"
      • removedOutput schema / properties / query_id / title
        Removed value: -"Query Id"
      • removedOutput schema / properties / row_count / title
        Removed value: -"Row Count"
      • removedOutput schema / properties / success / title
        Removed value: -"Success"
      • removedOutput schema / properties / warehouse_used / title
        Removed value: -"Warehouse Used"
      • removedOutput schema / title
        Removed value: -"QueryResult"
    • Changedlist_databases2 fields changed
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedlist_schemas3 fields changed
      • removedInput schema / properties / database / title
        Removed value: -"Database"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedlist_tables4 fields changed
      • removedInput schema / properties / database / title
        Removed value: -"Database"
      • removedInput schema / properties / schema / title
        Removed value: -"Schema"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedlist_warehouses2 fields changed
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changednatural_language_to_sql8 fields changed
      • removedInput schema / $defs / NaturalLanguageRequest / properties / context / title
        Removed value: -"Context"
      • removedInput schema / $defs / NaturalLanguageRequest / properties / database / title
        Removed value: -"Database"
      • removedInput schema / $defs / NaturalLanguageRequest / properties / question / title
        Removed value: -"Question"
      • removedInput schema / $defs / NaturalLanguageRequest / properties / schema / title
        Removed value: -"Schema"
      • removedInput schema / $defs / NaturalLanguageRequest / title
        Removed value: -"NaturalLanguageRequest"
      • removedInput schema / properties / request / title
        Removed value: -"Request"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
    • Changedsuggest_query_optimizations3 fields changed
      • removedInput schema / properties / query / title
        Removed value: -"Query"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"_WrappedResult"
  2. 13 tool updates
    • First observedanalyze_query_results
    • First observeddescribe_table
    • First observedexecute_sql
    • First observedexplain_query
    • First observedgenerate_table_insights
    • First observedget_table_sample
    • First observedget_warehouse_status
    • First observedlist_databases
    • First observedlist_schemas
    • First observedlist_tables
    • First observedlist_warehouses
    • First observednatural_language_to_sql
    • First observedsuggest_query_optimizations

TDQS

A3.5/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. For example, 'execute_sql' runs queries while 'explain_query' describes them, and 'list_databases' enumerates databases whereas 'describe_table' provides column details. The tools cover different aspects of the data workflow without overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as 'list_databases', 'execute_sql', and 'generate_table_insights'. This uniformity makes the toolset predictable and easy to navigate, with no deviations in naming conventions.

Tool Count5/5

With 13 tools, the count is well-scoped for a Snowflake data management server. Each tool serves a specific function in querying, listing, analyzing, or optimizing data, and none appear redundant, fitting the domain appropriately.

Completeness5/5

The toolset provides complete coverage for data exploration and SQL workflows, including listing resources (databases, schemas, tables), executing and explaining queries, generating insights, and optimizing performance. There are no obvious gaps, enabling agents to handle end-to-end tasks without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables Claude to execute SQL queries on Snowflake databases with automatic connection lifecycle management.
    45
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides access to Snowflake databases for any MCP-compatible client, allowing execution of SQL queries with automatic connection management.
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides AI assistants with comprehensive access to SQL databases, enabling schema inspection, query execution, and database operations with enterprise-grade security.
    46
    7
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rickyb30/datapilot-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server