snowflake-mcp
Enables AI agents to execute SQL queries against Snowflake databases, supporting schema discovery, table inspection, query execution with safety features, and multiple output formats.
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., "@snowflake-mcpShow me the top 5 customers by sales this year"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Snowflake MCP Server
A Model Context Protocol (MCP) server that enables AI agents to execute SQL queries against Snowflake databases.
Users can use natural language to query Snowflake databases, like:
"Get me the top 10 products by revenue"
"Show me the total revenue for the last 30 days"
"Describe the structure of the orders table"
"Explore the database and summarize what data is available"
"Build a query to find customers who haven't ordered in 90 days"
Features
Execute SQL queries directly from AI agents like Cursor, Claude Desktop, etc.
Schema Discovery: Browse databases, schemas, tables, and views
Table Inspection: Describe table structures, view sample data, check row counts
Query Safety: Readonly mode, row limits, and query timeouts
Multiple Output Formats: Table, JSON, or CSV
Query Explanation: Get execution plans for queries
MCP Prompts: Guided workflows for common tasks
Support for both password and SSO (browser-based) authentication
Configurable default warehouse, database, schema, and role
Related MCP server: Snowflake Developer MCP Server
Prerequisites
Node.js 18 or later
Usage
Cursor
Add to your Cursor MCP settings (~/.cursor/mcp.json):
SSO Authentication (Recommended)
{
"mcpServers": {
"snowflake": {
"command": "npx",
"args": ["-y", "snowflake-mcp"],
"env": {
"SNOWFLAKE_ACCOUNT": "your-org-your-account",
"SNOWFLAKE_USERNAME": "your-username",
"SNOWFLAKE_AUTHENTICATOR": "externalbrowser",
"SNOWFLAKE_WAREHOUSE": "your-warehouse",
"SNOWFLAKE_DATABASE": "your-database",
"SNOWFLAKE_SCHEMA": "your-schema"
}
}
}
}A browser window will open for authentication on first query.
Password Authentication
{
"mcpServers": {
"snowflake": {
"command": "npx",
"args": ["-y", "snowflake-mcp"],
"env": {
"SNOWFLAKE_ACCOUNT": "your-org-your-account",
"SNOWFLAKE_USERNAME": "your-username",
"SNOWFLAKE_PASSWORD": "your-password",
"SNOWFLAKE_ROLE": "your-role",
"SNOWFLAKE_WAREHOUSE": "your-warehouse",
"SNOWFLAKE_DATABASE": "your-database",
"SNOWFLAKE_SCHEMA": "your-schema",
"SNOWFLAKE_READONLY": "true"
}
}
}
}Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"snowflake": {
"command": "npx",
"args": ["-y", "snowflake-mcp"],
"env": {
"SNOWFLAKE_ACCOUNT": "your-org-your-account",
"SNOWFLAKE_USERNAME": "your-username",
"SNOWFLAKE_AUTHENTICATOR": "externalbrowser"
}
}
}
}Configuration
Variable | Required | Default | Description |
| Yes | - | Your Snowflake account identifier (e.g., |
| Yes | - | Snowflake username |
| No |
| Authentication method: |
| Conditional | - | Required if authenticator is |
| No | - | Role to use for the session (uses account default if not set) |
| No | - | Warehouse to use (uses account default if not set) |
| No | - | Database to use (uses account default if not set) |
| No | - | Schema to use (uses account default if not set) |
| No |
| Set to |
Finding Your Connection Settings
You can find your connection settings in Snowsight (Snowflake's web interface):
Sign in to Snowsight
Click on your username in the bottom-left corner to open the user menu
Select Connect a tool to Snowflake
Open the
Config FiletabSelect the Warehouse, Database, Schema you want to use
Copy values from the generated config file
Available Tools
Query Execution
execute_query
Execute a SQL query against Snowflake.
Parameter | Type | Required | Default | Description |
| string | Yes | - | The SQL query to execute |
| number | No | 100 | Maximum number of rows to return |
| number | No | - | Query timeout in seconds |
| string | No | table | Output format: |
explain_query
Get the execution plan for a SQL query without running it.
Parameter | Type | Required | Description |
| string | Yes | The SQL query to explain |
Connection
test_connection
Test the connection to Snowflake and return connection info including current user, role, warehouse, database, schema, and version.
Schema Discovery
list_databases
List all accessible databases in Snowflake.
list_schemas
List all schemas in a database.
Parameter | Type | Required | Description |
| string | No | Database name (uses current if not specified) |
list_tables
List all tables in a schema.
Parameter | Type | Required | Description |
| string | No | Database name |
| string | No | Schema name |
list_views
List all views in a schema.
Parameter | Type | Required | Description |
| string | No | Database name |
| string | No | Schema name |
Table Inspection
describe_table
Get detailed information about a table's structure including columns, types, and constraints.
Parameter | Type | Required | Description |
| string | Yes | Table name (can include database.schema.table) |
get_table_sample
Get a sample of rows from a table to understand its data.
Parameter | Type | Required | Default | Description |
| string | Yes | - | Table name |
| number | No | 5 | Number of sample rows to return |
get_table_row_count
Get the total number of rows in a table.
Parameter | Type | Required | Description |
| string | Yes | Table name |
get_primary_keys
Get primary key columns for a table.
Parameter | Type | Required | Description |
| string | Yes | Table name |
MCP Resources
schema://current
Returns information about the current database schema, including:
Current database and schema names
List of all tables
List of all views
Access this resource to get a quick overview of the connected schema without running queries.
MCP Prompts
analyze_table
Analyze a table's structure, sample data, and get query suggestions.
Parameter | Type | Required | Description |
| string | Yes | The table to analyze |
explore_database
Explore and summarize the structure of a database.
Parameter | Type | Required | Description |
| string | No | Database to explore (uses current if not specified) |
query_builder
Help build a SQL query based on natural language description.
Parameter | Type | Required | Description |
| string | Yes | Natural language description of desired query |
| string | No | Comma-separated list of relevant tables |
Security Considerations
SSO authentication is recommended for production use as it avoids storing passwords in configuration files
Readonly mode (
SNOWFLAKE_READONLY=true) is recommended when you only need to query dataNever commit configuration files containing credentials to version control
Consider using environment variables or a secrets manager for sensitive values
The server executes queries with the permissions of the configured Snowflake user—ensure appropriate access controls are in place
The
max_rowsparameter helps prevent accidentally returning massive result sets
License
MIT License
Available Tools
11 toolsdescribe_tableA
Get detailed information about a table's structure including columns, types, and constraints
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name (can include database.schema.table) |
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 implies a read-only operation ('Get detailed information') and lists what is included, but does not mention permissions, failure behavior, or whether row data is excluded. It is adequate for a simple metadata lookup but lacks explicit reassurances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the purpose. No filler or redundant phrasing, earning the maximum score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter and no output schema, the description explains the main return content (columns, types, constraints). It is complete enough for a metadata tool, though it could be more explicit about whether primary keys or indexes are included. The description adds value beyond a bare minimum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a complete description for the single parameter (table name with optional database.schema qualifier), and the description adds no additional parameter context. Since schema coverage is 100%, the baseline of 3 is appropriate.
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 detailed table structure (columns, types, constraints), which is specific and distinguishes it from siblings like get_row_count or get_primary_keys. The verb 'Get' and resource 'table structure' are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (use when you need table structure) but does not explicitly compare to alternatives or state when not to use. No mention of when to prefer describe_table over get_primary_keys or list_tables, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_queryC
Execute a SQL query against Snowflake and return the results
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The SQL query to execute | |
| format | No | Output format: table, json, or csv (default: table) | table |
| timeout | No | Query timeout in seconds | |
| max_rows | No | Maximum number of rows to return (default: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior, but only states that it executes SQL and returns results. It fails to disclose that arbitrary SQL (including writes/destructive statements) can be run, that there are default limits (max_rows=100, timeout), or what the response structure looks like. This is a significant transparency gap for a tool that can potentially modify 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 a single, front-loaded sentence: 'Execute a SQL query against Snowflake and return the results.' Every word contributes meaning, with no fluff or redundancy. It is appropriately concise for a general-purpose tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 4 parameters and no output schema, the description is notably incomplete. It doesn't mention possible side effects of executing arbitrary SQL, result format defaults, row limits, or error behavior. For a tool that can run any query, the lack of safety and result-shape context leaves the agent under-informed.
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 100%, with each parameter having a clear description. The tool description itself adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate. The schema already documents query, format, timeout, and max_rows effectively.
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 query against Snowflake and returns results, using a specific verb and resource. While it doesn't explicitly distinguish from sibling tools by name, its general-purpose nature is evident compared to the more specialized table inspection and metadata tools listed as siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as explain_query for query plans or get_table_sample for quick data previews. It neither states use cases nor excludes scenarios, leaving the agent to infer when this general SQL execution tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_queryA
Get the execution plan for a SQL query without running it
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The SQL query to explain |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It does disclose the most critical trait—that the query is not executed—which implies no side effects. However, it omits other potentially relevant details such as whether it requires any special permissions, what happens for invalid SQL, or the exact format of the returned execution plan. This meets the minimum viable threshold but leaves 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 a single, front-loaded sentence that precisely conveys the tool's purpose and key behavior. There is no redundancy or filler—every word contributes meaning, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema) and the clear statement of a read-only behavior, the description is largely complete. It might benefit from briefly noting the return format or typical use cases, but the current text covers the essential context for an agent to invoke it correctly. It does not leave major unknowns about when or why to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with a description for the single parameter 'query'. The tool description adds the phrase 'SQL query' and 'execution plan', which reinforces the parameter's purpose but does not add new syntactic or format details beyond what the schema states. This aligns with the baseline for high schema 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 tool gets an execution plan for a SQL query, using the specific verb 'Get' and identifying the resource (execution plan for a SQL query). It also distinguishes itself from the sibling execute_query by explicitly noting it does so 'without running it', eliminating ambiguity about its function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when the user wants a query plan without execution, which clearly separates it from execute_query. While it doesn't explicitly name alternatives or state exclusions, the context of sibling tools and the phrase 'without running it' provide clear usage context. This is slightly above baseline as the intended use case is clear from the description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_primary_keysB
Get primary key columns for a table
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name (can include database.schema.table) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only restates the purpose. It does not disclose output format, behavior for tables without primary keys, error handling, or any other behavioral traits. The agent must guess the return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the function without unnecessary verbiage. It is concise 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?
Given the tool's simple one-parameter scope, the description is mostly adequate. However, it does not specify the exact return format (e.g., array of column names) or edge cases like tables with no primary key, so it falls short of full 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 schema already fully documents the 'table' parameter (100% coverage), including the ability to specify database.schema.table. The description adds no additional semantic detail beyond what the schema provides, so the baseline score of 3 applies.
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 uses a specific verb ('Get') and clearly identifies the resource ('primary key columns for a table'). It distinguishes from sibling tools that focus on row counts, table lists, or generic describe operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like describe_table, and does not mention any exclusions or preferred contexts. Agents are left to infer suitability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_row_countA
Get the total number of rows in a table
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | Table name (can include database.schema.table) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only states the operation without caveats. It does not mention performance implications, exactness, or error handling, though it clearly indicates a read-only fetch of a count.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the action and target. There is no wasted verbiage.
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 one-parameter read tool, the description is nearly sufficient: it names the operation and parameter. However, the lack of return-type details and usage alternatives leaves minor 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?
The schema already provides full coverage for the single 'table' parameter, including its format. The description adds no further parameter semantics, so it is at the baseline score.
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 uses a specific verb ('Get') and resource ('total number of rows in a table'), clearly distinguishing it from sibling tools that list tables, describe schemas, or sample data. It unambiguously conveys the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description simply restates the function without indicating e.g. that get_table_sample should be used for row previews or describe_table for schema details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_table_sampleB
Get a sample of rows from a table to understand its data
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of sample rows to return (default: 5) | |
| table | Yes | Table name (can include database.schema.table) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'sample' but does not clarify whether rows are random, ordered, or limited by the limit parameter, nor does it state that this is a read-only operation. This ambiguity could mislead an 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?
The description is a single, front-loaded sentence that conveys the core purpose without unnecessary words. Every word contributes meaning, making it highly concise 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 description is minimal and does not compensate for the absence of an output schema or annotations. It fails to explain the nature of the sample (e.g., limit behavior, randomness) or offer any context about when this tool is preferable to siblings, leaving significant 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?
The input schema provides 100% coverage for both parameters, each with a clear description. The tool description adds no additional parameter semantics beyond what the schema already offers, which meets the baseline for fully documented schemas.
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 sample of rows from a table to understand its data. It uses a specific verb ('get') and resource ('sample of rows from a table'), effectively distinguishing it from siblings like get_table_row_count and describe_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. With many sibling tools (e.g., describe_table, execute_query), it lacks explicit context about appropriate use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_databasesA
List all accessible databases in Snowflake
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It mentions 'accessible' databases, implying permission-based scoping, but does not explicitly state that the operation is read-only or describe return format, pagination, or other 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 a single, concise sentence that states the tool's purpose without redundant words. It is front-loaded with the action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless listing tool, the description conveys the core function sufficiently. However, since there is no output schema, it could be more explicit about what is returned (e.g., database names and properties), leaving a slight gap in 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 tool takes zero parameters, so schema coverage is 100% by default. The description appropriately implies no inputs are needed, and the baseline of 4 applies for parameterless tools.
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 (list), the resource (databases), the scope (all accessible), and the environment (Snowflake). It is distinct from sibling tools such as list_tables and list_schemas by explicitly naming 'databases' as the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention related tools or scenarios, leaving the agent to infer from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_schemasA
List all schemas in a database
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | Database name (uses current database if not specified) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but 'List' clearly signals a read-only operation with no side effects. It does not explicitly discuss permissions or edge cases, but for a simple listing operation, the behavior is unambiguous 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?
The description is a single sentence, immediately stating the core function with no filler words. It is optimally 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?
Given the tool's low complexity and full schema coverage, the description is nearly sufficient. It does not specify the return format (e.g., list of strings), but for a simple listing tool this is generally expected. The lack of an output schema slightly reduces completeness, but the description covers the essential 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?
The schema description covers the single parameter ('database') fully, so the description does not need to add parameter details. Baseline of 3 applies because schema coverage is 100% and the description adds no extra semantics 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 uses a specific verb ('List') and a specific resource ('all schemas in a database'), clearly distinguishing it from sibling tools like list_tables and list_views. It unambiguously states what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not mention scenarios, prerequisites, or exclusions, leaving the agent to infer usage solely from the name and description.
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 schema
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema name | |
| database | No | Database name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description provides minimal behavioral information. It does not disclose pagination, permissions, or how the database parameter affects results, leaving the agent with only the name and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler, front-loading the action and resource.
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, but the description omits the database parameter and return format. With no output schema and no annotations, the description could provide more context on how schema and database relate.
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?
Both parameters are fully described in the input schema with 100% coverage, so the baseline is 3. The description does not add further detail about parameter usage beyond what the schema already provides.
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 uses the specific verb 'list' with resource 'tables' and scope 'in a schema', clearly distinguishing from sibling tools like list_views, list_databases, and list_schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives like list_views or list_schemas. The description does not mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_viewsC
List all views in a schema
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | Schema name | |
| database | No | Database name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of conveying behavior. It only states 'list', implying a read-only operation, but fails to disclose whether both parameters are required, what happens with invalid schema names, or the output format. This is a significant gap for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It succinctly captures the primary action 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?
Although this is a simple listing tool, the description omits essential context. The presence of a 'database' parameter is unexplained, the requiredness of the schema parameter is ambiguous (required parameters are 0, yet the description says 'in a schema'), and without an output schema, the return format is unknown. This incompleteness could lead to incorrect invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters ('Schema name' and 'Database name'), so the description's contribution is minimal. It adds that views are listed within a schema, but does not clarify the relationship between schema and database parameters. Since schema coverage is 100%, a baseline of 3 is appropriate.
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 'List all views in a schema' clearly identifies the action (list) and resource (views), which distinguishes it from sibling tools like list_tables or list_schemas. However, the phrase 'in a schema' is slightly ambiguous given the presence of a 'database' parameter, leaving the exact scope unclear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as list_tables or list_schemas. It does not mention any prerequisites, exclusions, or specific use cases, leaving the agent to infer appropriateness.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_connectionA
Test the connection to Snowflake and return connection info
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the tool tests the connection and returns info, but does not disclose whether this is a read-only operation, if it requires special permissions, what network calls occur, or what specific connection info is returned. This lack of detail leaves the agent guessing about side effects and output contents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the verb and resource. Every word contributes to communicating the purpose, with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description is minimally sufficient, but it leaves the 'connection info' unspecified. Without annotations or an output schema, a more detailed description of what info is returned (e.g., version, user, warehouse) would help the agent understand the tool's usefulness and result handling.
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 the schema is trivially simple. The description need not add parameter details. With no params, the baseline is 4 and the description adequately aligns with the empty 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 tests the connection to Snowflake and returns connection info. This distinguishes it from siblings like list_tables, execute_query, and describe_table, which all target specific data operations rather than connectivity.
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 usage guidance is given, but the purpose is clear: it is for verifying Snowflake connectivity. Since siblings are all data operations, the context implies this is a preflight check, but the description does not state when to prefer this over tools like execute_query or explain_query.
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.
11 tool updates
v1.1.0- First observed
describe_table - First observed
execute_query - First observed
explain_query - First observed
get_primary_keys - First observed
get_table_row_count - First observed
get_table_sample - First observed
list_databases - First observed
list_schemas - First observed
list_tables - First observed
list_views - First observed
test_connection
TDQS
Each tool has a clearly distinct purpose: listing vs describing vs sampling vs querying vs explaining. No overlapping tools that could cause confusion.
All tool names follow a consistent verb_noun snake_case pattern (get_*, list_*, describe_*, test_*, execute_*, explain_*). No mixed conventions or varied verb styles.
11 tools is well within the ideal 3-15 range and maps neatly to the domain of Snowflake exploration and querying. Each tool earns its place without bloat.
Covers the full read-side workflow: connection testing, database/schema/table/view enumeration, schema inspection, row counts, primary keys, sampling, query execution, and query planning. No critical gaps for an exploration/query-focused server.
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
- OleanderOAuthdev.oleander
The all-in-one data stack for agents. Upload files, run SQL, evolve tables, and render charts.
Ask data questions in natural language. Get SQL, insights, and charts from your databases.
Query BigQuery, Snowflake, Redshift & Azure Synapse with natural language
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Related MCP Servers
- AlicenseAqualityNot gradedmaintenanceEnables AI assistants to securely connect to Snowflake data warehouses and execute SQL queries through natural language interactions. Supports multiple authentication methods and provides formatted query results with built-in security controls.12-
- 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
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to securely access Snowflake data warehouses through natural language, executing SQL queries and retrieving insights with support for multiple authentication methods.4MIT
- AlicenseNot gradedqualityDmaintenanceEnables natural language querying and management of Snowflake databases, including SQL execution, schema exploration, and warehouse monitoring.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/faressoft/snowflake-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server