Connect your AI Agents to Snowflake in minutes

Merge lets you securely connect your agents to Snowflake and thousands of tools instantly

Available tools

list_databases

List all databases in the Snowflake account

create_database

Create a new database in Snowflake. Use list_databases to check the name is free.

alter_database

Alter an existing database in Snowflake. Use list_databases to find database names.

drop_database

Drop a database from Snowflake. With cascade=false this refuses if the database still holds schemas, because Snowflake itself would drop them without warning. Pass cascade=true to drop them with it. Use list_databases to find names.

get_database

Get details of a specific database. Use list_databases to find database names.

list_schemas

List all schemas in a database

create_schema

Create a new schema in a database. Use list_databases to find the parent database.

alter_schema

Alter an existing schema in Snowflake. Use list_schemas to find schema names.

drop_schema

Drop a schema from a database. With cascade=false this refuses if the schema still holds tables, because Snowflake itself would drop them without warning. Pass cascade=true to drop them with it. Use list_schemas to find names.

get_schema

Get details of a specific schema. Use listdatabases and listschemas to find names.

list_roles

List all roles in the Snowflake account

create_role

Create a new role in Snowflake. Use list_roles to check the name is free.

drop_role

Drop a role from Snowflake. Use list_roles to find role names.

get_role

Get details of a specific role. Use list_roles to find role names.

list_grants

List grants: what a role holds (role), what roles a user has (user), or everything granted on an object (objectname, with objecttype). Call this before revokeprivilege to see what exists. Use listroles, listusers and listdatabases/listschemas/listtables to find names.

grant_privilege

Grant privileges to a role on a Snowflake object. Use listroles for roles and listdatabases/listschemas/listtables for object names. Use list_grants to see what a role already holds.

revoke_privilege

Revoke privileges from a role on a Snowflake object. Use listroles for roles and listdatabases/listschemas/listtables for object names. Use list_grants to see what a role already holds.

grant_role

Grant a role to a user or another role. Use listroles for roles and listusers for users.

revoke_role

Revoke a role from a user or another role. Use listroles for roles and listusers for users.

execute_sql

Execute a SQL statement in Snowflake (query, DDL, or DML). Use listwarehouses to find a warehouse. Use executesql_readonly for reads.

execute_sql_readonly

Execute a read-only SQL statement in Snowflake (SELECT, WITH, SHOW, DESCRIBE, EXPLAIN, VALUES, LIST). Rejects DDL/DML and multi-statement input. Use execute_sql for writes.

get_statement_status

Get the status of an asynchronous SQL statement, including one that was cancelled. Takes the statementhandle returned by executesql or executesqlreadonly with async_exec=true.

get_query_results

Fetch results from a completed SQL query with pagination. Takes the statementhandle returned by executesql or executesqlreadonly.

cancel_statement

Cancel a running SQL statement. Takes the handle returned by an async execute_sql.

list_stages

List all stages in a schema

create_stage

Create a new stage for data loading/unloading. Use list_schemas to find the parent schema.

drop_stage

Drop a stage from Snowflake. Use list_stages to find stage names.

get_stage

Get details of a specific stage. Use list_stages to find stage names.

list_stage_files

List files in a stage. Use list_stages to find stage names. Returns every file; LIST supports no limit or cursor.

describe_stage

Describe a stage to see its properties and file format settings. Use liststages to find stage names; use getstage for the summary instead.

copy_into_table

Load data from a stage into a table. Supports file patterns, error handling modes, and validation. Use listtables for the target and liststages for the source stage.

copy_into_location

Unload data from a table or query to a stage. Supports file format and partitioning options. Use list_stages to find the destination stage.

list_tables

List all tables in a schema

create_table

Create a new table in Snowflake. Use list_schemas to find the parent schema.

alter_table

Alter an existing table in Snowflake. Use listtables to find tables and describetable for current columns.

drop_table

Drop a table from Snowflake. Use list_tables to find table names.

describe_table

Get the structure and column definitions of a table. Use listtables to find table names, and listdatabases/list_schemas for the container.

get_table

Get details of a specific table. Use listtables to find table names. Use describetable for its columns.

list_tasks

List all tasks in a schema

create_task

Create a new scheduled task in Snowflake. The task starts SUSPENDED; call resumetask to begin scheduled runs. Use listwarehouses for a valid warehouse. Note that usertasktimeoutms and suspendtaskafternumfailures are settable but not readable back: SHOW TASKS omits them, so gettask returns null for both.

alter_task

Alter an existing task in Snowflake. The task must be suspended first: call suspendtask, then altertask, then resumetask, or Snowflake rejects the change with error 091421. Use listtasks to find task names.

drop_task

Drop a task from Snowflake. Use list_tasks to find task names.

resume_task

Resume a suspended task to start scheduled execution. Use list_tasks to find task names and their state.

suspend_task

Suspend a running task to stop scheduled execution. Use list_tasks to find task names and their state.

execute_task

Execute a task immediately without waiting for schedule. Use list_tasks to find task names.

get_task_history

Get execution history for a task: recent runs with status, timing and errors. Covers the last 7 days, newest first, capped by limit - check pageinfo.hasnextpage to see if runs were truncated. Use listtasks to find task names.

get_task

Get details of a specific task, including state, schedule and definition. Use listtasks to find task names. usertasktimeoutms and suspendtaskafternumfailures are always null: SHOW TASKS does not return them.

list_users

List all users in the Snowflake account

create_user

Create a new user in Snowflake. Use listusers to check the name is free and listroles for a default role.

alter_user

Alter an existing user in Snowflake. Use list_users to find usernames.

drop_user

Drop a user from Snowflake. Use list_users to find usernames.

get_user

Get details of a specific user. Use list_users to find user names.

validate_credential

Validate Snowflake credentials by executing a lightweight query. Works with every auth option the connector ships. Returns {success, message}.

list_warehouses

List all warehouses in the Snowflake account

create_warehouse

Create a new virtual warehouse in Snowflake. Use list_warehouses to check the name is free.

alter_warehouse

Alter an existing warehouse in Snowflake. Use list_warehouses to find warehouse names.

drop_warehouse

Drop a warehouse from Snowflake. Use list_warehouses to find warehouse names.

resume_warehouse

Resume a suspended warehouse. Use list_warehouses to find warehouses and their state.

suspend_warehouse

Suspend a running warehouse to stop billing. Use list_warehouses to find warehouses and their state.

get_warehouse

Get details of a specific warehouse. Use list_warehouses to find warehouse names.

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

In an mcp.json file, add the configuration below, and restart Cursor.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5      "headers": {
6        "Authorization": "Bearer yMt*****"
7      }
8    }
9  }
10}
11
Copy Code

Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.

Make sure Claude is using the Node v20+.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "mcp-remote@latest",
8        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9        "--header",
10        "Authorization: Bearer ${AUTH_TOKEN}"
11      ],
12      "env": {
13        "AUTH_TOKEN": "yMt*****"
14      }
15    }
16  }
17}
Copy Code
Copied!

Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.

Learn more in the official documentation ↗

1{
2    "mcpServers": {
3      "agent-handler": {
4        "command": "npx",
5        "args": [
6          "-y",
7          "mcp-remote@latest",
8          "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9          "--header",
10          "Authorization: Bearer ${AUTH_TOKEN}"
11        ],
12        "env": {
13          "AUTH_TOKEN": "<ah-production-access-key>"
14        }
15      }
16    }
17  }
Copy Code

In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".

You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.

Learn more in the official documentation ↗

1{
2  "inputs": [
3    {
4      "type": "promptString",
5      "id": "agent-handler-auth",
6      "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7      "password": true
8    }
9  ],
10  "servers": {
11    "agent-handler": {
12      "type": "stdio",
13      "command": "npx",
14      "args": [
15        "-y",
16        "mcp-remote@latest",
17        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18        "--header",
19        "Authorization: Bearer ${input:agent-handler-auth}"
20      ]
21    }
22  }
23}
Copy Code

FAQs on using Merge's Snowflake  MCP server

FAQs on using Merge's Snowflake  MCP server

What is a Snowflake MCP server?

It’s an MCP server that lets you access data from a Snowflake instance via tools. Your agents can invoke these tools to modify databases, create a schema in a database, list user roles, and more.

Snowflake offers an official MCP server. But you can also access Snowflake MCP servers from 3rd-party platforms, like Merge Agent Handler.

What are common ways to use a Snowflake MCP server?

Here are just a few popular use cases:

  • Schema and metadata discovery for better SQL generation: Browse databases, schemas, tables, columns, comments, and sample values so an LLM can ground itself before writing queries
  • Ad hoc analytics and dashboards: Generate SQL for explorations, slice-and-dice, cohort checks, funnel breakdowns, and quick “why did this change?” investigations
  • Data quality and observability: Run validation queries (null rates, duplicates, referential integrity), monitor freshness/latency, and surface anomalies in key metrics
  • Customer or support “data lookup” workflows: Given an account id or email, fetch relevant rows (usage, invoices, events) for support or sales enablement
  • Automated reporting: Produce daily/weekly summaries by running a known set of queries and returning results in a structured format (tables, JSON), often for posting into docs or Slack

What are popular tools for Snowflake’s MCP server?

Here are some widely-used tools:

Databases

  • <code class="blog_inline-code">list_databases</code>
  • <code class="blog_inline-code">create_databases</code>
  • <code class="blog_inline-code">alter_databases</code>
  • <code class="blog_inline-code">drop_database</code>

Schemas

  • <code class="blog_inline-code">list_schemas</code>
  • <code class="blog_inline-code">create_schema</code>
  • <code class="blog_inline-code">get_schema</code>
  • <code class="blog_inline-code">drop_schema</code>

Roles

  • <code class="blog_inline-code">create_role</code>
  • <code class="blog_inline-code">list_roles</code>
  • <code class="blog_inline-code">get_role</code>
  • <code class="blog_inline-code">grant_role</code>

What makes Merge Agent Handler’s Snowflake MCP server better than alternative Snowflake MCP servers?

Here are just a few reasons:

  • Unified authentication and credential management: Merge Agent Handler abstracts OAuth and API key handling, enabling secure, user-level or shared authentication without custom implementation
  • Built-in security and DLP: Developers can enforce granular policies on tool usage and data access, helping ensure sensitive Snowflake data is protected during agent interactions
  • Real-time observability and auditability: Agent Handler provides real-time monitoring of tool calls along with fully-searchable logs, enabling debugging, compliance audits, and performance tracking of Snowflake interactions
  • Connector Studio for customization: Teams can modify or extend Snowflake tools without rebuilding integrations from scratch, allowing tailored workflows for specific use cases
  • Evaluation Suite for pre-production validation: Developers can test Snowflake tool performance before deployment, reducing the risk of failures in production environments

Can I set custom security rules for Snowflake tool calls in Merge Agent Handler?

Yes, Merge Agent Handler supports granular security controls, including DLP policies, which allow you to define rules governing how agents interact with external systems like Snowflake.

Here are some rules you can set:

  • Prevent PII leaks in ad hoc analytics. Block or redact Snowflake query inputs and outputs when they contain SSNs, credit card numbers, or other regulated identifiers
  • Stop credential and secret exfiltration. Detect and block tool calls that include API keys, tokens, or passwords in prompts, SQL text, or returned results
  • Allow “safe insights” while masking raw rows. Let queries run, but redact sensitive fields in the result set before the agent receives them
  • Create an audit trail for compliance reviews. Log tool calls (without changing payloads) so security teams can investigate who queried what and when
  • Add “step-up” controls for risky workflows. Block or gate tool calls that match high-risk patterns (for example, bulk exports or unusually broad queries) unless explicitly allowed
  • Customize detections to your data model. Use custom regex rules to catch internal identifiers (like customer IDs, contract numbers, or proprietary tokens) that generic DLP rules might miss

How can I start using Merge Agent Handler’s Snowflake connector?

You can take these steps:

1. Create (or sign in to) an Agent Handler account, then open the dashboard where you can manage connectors and Tool Packs.

2. Create a Tool Pack for the workflow you want (e.g., “Snowflake analytics copilot”), since Tool Packs define which connectors and tools your agent can access.

3. Add the Snowflake connector to that Tool Pack and configure access using least-privilege permissions (via your Tool Pack configuration and RBAC/policies).

4. Create a Registered User (the identity your agent will execute tool calls as) and complete the Snowflake authentication flow when prompted.

5. Connect your agent runtime to Agent Handler (either via MCP or the SDK pattern) so your agent can discover tools by calling “list tools” and then execute Snowflake tool calls through Agent Handler.

6. Validate end-to-end behavior using the Tool Pack tester / Evaluation Suite, starting with low-risk read-only queries, then iterating until outputs are consistent.

7. Before production, configure security rules (DLP) and alerts to scan Snowflake tool inputs and outputs, and to block, redact, or log sensitive data patterns.

Explore other MCP servers built and managed by Merge

activecampaign
ActiveCampaign
adobe_pdf_services
Adobe PDF Services
ahrefs
Ahrefs
airtable
Airtable
amadeus
Amadeus
amazon_s3
Amazon S3
amplitude
Amplitude
anaplan
Anaplan
apollo
Apollo
arize
Arize
articulate
Articulate Reach 360
asana
Asana
ashby
Ashby
attio
Attio
avalara
Avalara
aviationstack
Aviationstack
axiom
Axiom
bamboohr
BambooHR
basecamp
Basecamp
biorxiv
bioRxiv
bitbucket
Bitbucket
bitly
Bitly
box
Box
brex
Brex

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now