Snowflake MCP server

Prebuilt SnapLogic agentic-tool pipelines that let an LLM read from and act on Snowflake, callable as MCP tools via Pipeline Execute. Published in the SnapLogic pattern catalog.

Overview

This tool pack gives an agent full read, write, and query access to Snowflake tables, including SQL execution, row inserts, updates, deletes, CSV exports, and streaming ingestion. It also exposes Snowflake's Cortex AI services so an agent can answer analytical questions, run LLM inference, generate embeddings, and search indexed content, all within the same Snowflake account.

For setup instructions, see SnapLogic MCP Server quickstart.

Example Prompts

  • What were total sales last quarter by region?
  • Ask the sales semantic model which product line grew fastest this year
  • Using our semantic model, how many active customers did we have in Q1?
  • What's the trend in average order value over the last six months?
  • Summarise this customer feedback using llama3.1-70b
  • Classify these support ticket bodies as billing, technical or account, low temperature
  • Rewrite this product description to be two sentences, max 200 tokens
  • Use Cortex Complete to draft a short summary of the rows we just pulled from ORDERS
  • Embed 'customer complaints about billing accuracy' with snowflake-arctic-embed-l-v2.0
  • Generate an embedding vector for this support ticket summary

Tools

Tool Name Functions
SnowflakeCortexAnalyst Answer a business question via Cortex Analyst over a semantic model.
SnowflakeCortexComplete Run an LLM completion on a Cortex-hosted model.
SnowflakeCortexEmbed Generate an embedding vector for a piece of text via Cortex.
SnowflakeCortexSearch Retrieve documents from a managed Cortex Search service.
SnowflakeDeleteRows Delete rows from a Snowflake table matching a SQL condition.
SnowflakeDeleteRowsChild Snowflake Delete Rows Child
SnowflakeExecuteSQL Execute any SQL statement against Snowflake and return its result.
SnowflakeExportData Unload a SELECT result to an internal Snowflake stage as CSV.
SnowflakeInsertRows Insert a row into a Snowflake table from a field map.
SnowflakeInsertRowsChild Snowflake Insert Rows Child
SnowflakeQuery Select rows from a Snowflake table with an optional WHERE clause and row limit.
SnowflakeSnowpipeStream Stream a record into a Snowflake table via Snowpipe Streaming.
SnowflakeSnowpipeStreamChild Snowflake Snowpipe Stream Child
SnowflakeUpdateRows Update rows in a Snowflake table matching a SQL condition.
SnowflakeUpdateRowsChild Snowflake Update Rows Child
SnowflakeVectorSearch Cosine-similarity search over a VECTOR column, returning scored neighbours.

Set up the MCP Server tools

  1. Download snowflake_tools.zip.
  2. In SnapLogic Designer, open the target project space (or create one), then choose Import Project / Import Pipelines and select the downloaded snowflake_tools.zip. Designer unpacks each pipeline into the project.
  3. Attach the required account to the connectivity snaps (see Connection Setup).
  4. Expose the project as an MCP server — each pipeline becomes a tool named after its label. New to this? Start with the MCP quickstart, then use the MCP Server Pipeline Builder to generate the server from the imported pipelines.

Configure account

Attach a Snowflake account (user/password, key-pair, or OAuth 2.0) to the Snowflake snaps in Designer after import.

These pipelines ship without credentials by design — attach a valid account in Designer before the tools will execute.

See the SnapLogic account documentation for this connector: Sp Snowflake Account Config.Html.

Important: These pipelines ship without credentials by design — attach a valid account in Designer before the tools will execute. Credentials live in the SnapLogic account store, never in the pipeline JSON.

SnowflakeCortexAnalyst

Answers business questions in plain English by querying a Cortex Analyst semantic model, so the agent does not need to write SQL for governed subject areas. Use it for analytical questions such as revenue breakdowns or sales trends over a defined semantic model.

Parameter Type Default Description
question* string

The business question in natural language, e.g. What were total sales last quarter by region?

semantic_model_file* string

Stage path of the semantic model YAML, e.g. @MY_DB.PUBLIC.MY_STAGE/semantic_model.yaml.

* Required parameter.

Try asking:

  • What were total sales last quarter by region?
  • Ask the sales semantic model which product line grew fastest this year
  • Using our semantic model, how many active customers did we have in Q1?
  • What's the trend in average order value over the last six months?

SnowflakeCortexComplete

Runs LLM inference on a Cortex-hosted model inside Snowflake, returning the completed text. Use it to summarize, classify, or rewrite content, often over data the other tools just retrieved from the warehouse.

Parameter Type Default Description
model* string

Cortex model to call, e.g. llama3.1-70b.

prompt* string

The user prompt sent to the model.

max_tokens string

Maximum tokens to generate. Omitted if not supplied.

temperature string

Sampling temperature, e.g. 0.1 for deterministic output. Omitted if not supplied.

* Required parameter.

Try asking:

  • Summarise this customer feedback using llama3.1-70b
  • Classify these support ticket bodies as billing, technical or account, low temperature
  • Rewrite this product description to be two sentences, max 200 tokens
  • Use Cortex Complete to draft a short summary of the rows we just pulled from ORDERS

SnowflakeCortexEmbed

Converts a piece of text into an embedding vector using a Cortex embedding model. Use it to generate vectors for similarity search or to store embeddings in a Snowflake VECTOR column.

Parameter Type Default Description
model* string

Cortex embedding model, e.g. snowflake-arctic-embed-l-v2.0.

text* string

The text to embed. One string per call.

* Required parameter.

Try asking:

  • Embed 'customer complaints about billing accuracy' with snowflake-arctic-embed-l-v2.0
  • Generate an embedding vector for this support ticket summary
  • Turn this paragraph into a vector so I can store it in the embeddings table
  • Embed my search phrase before we run the similarity search

SnowflakeCortexSearch

Searches a managed Cortex Search service and returns the best-matching documents for a free-text query. Use it for question-answering over indexed text content, where Snowflake manages the retrieval index.

Parameter Type Default Description
database* string

Database containing the Cortex Search service, e.g. MY_DB.

schema* string

Schema containing the Cortex Search service, e.g. PUBLIC.

service_name* string

Name of the Cortex Search service to query, e.g. DOCS_SEARCH.

query* string

Free-text search query.

columns string

Comma-separated columns to return, e.g. title,content. Omit to use the service default.

limit string

Maximum number of results to return. Defaults to 10.

filter_json string

Cortex Search filter expression restricting which indexed rows are searched.

* Required parameter.

Try asking:

  • Search the DOCS_SEARCH service for how to reset a password, top 5 results
  • Find support articles about billing disputes in the MY_DB.PUBLIC search service
  • Query our knowledge search service and just return the title and content columns
  • Look up onboarding documentation in Cortex Search, limit to 3 hits
  • Search the indexed contracts service for renewal clauses, filtered to this year

SnowflakeDeleteRows

Deletes rows from a Snowflake table that match a SQL condition, for cleanup tasks such as purging staging data or dropping test records. Confirm the condition with the user before executing, as it can match many rows at once.

Parameter Type Default Description
table_name* string

Table to delete from, e.g. TEMP_RECORDS.

schema_name string

Schema containing the table, e.g. PUBLIC. Omit to use the account's default schema.

delete_condition* string

SQL condition selecting the rows to delete, without the WHERE keyword, e.g. CREATED_DATE < '2024-01-01'.

* Required parameter.

Try asking:

  • Delete everything in TEMP_RECORDS created before 2024-01-01
  • Remove the row in PUBLIC.CUSTOMERS where ID = 99
  • Clear out the STAGING_EVENTS rows where PROCESSED = TRUE
  • Purge the test orders from the ORDERS table where CUSTOMER_ID = 0

SnowflakeDeleteRowsChild

Lets the LLM snowflake delete rows child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
table_name string TEMP_RECORDS

schema_name string PUBLIC

delete_condition string CREATED_DATE < '2024-01-01'

SnowflakeExecuteSQL

Runs any SQL statement against Snowflake, including SELECT queries with joins, DDL, and metadata commands such as SHOW TABLES and DESCRIBE. Use it as the flexible, general-purpose option when the structured read and write tools are not sufficient.

Parameter Type Default Description
sql_statement* string

The SQL statement to execute, e.g. SHOW TABLES IN SCHEMA PUBLIC. Query type is auto-detected.

* Required parameter.

Try asking:

  • What tables exist in the PUBLIC schema?
  • Describe the columns on the CUSTOMERS table
  • Run a query joining ORDERS to CUSTOMERS and give me revenue per region for last quarter
  • Create a view called ACTIVE_CUSTOMERS over the customers with a positive balance
  • How many rows are in EVENTS grouped by event type?

SnowflakeExportData

Exports the result of a SELECT statement to an internal Snowflake stage as a CSV file, so users can download the data or pass it to another system. The stage path is optional and defaults to the user stage.

Parameter Type Default Description
select_query* string

The SELECT statement whose result is unloaded, e.g. SELECT * FROM PUBLIC.CUSTOMERS WHERE BALANCE > 1000.

staging string

Internal stage path to write to, e.g. @~/exports/. Defaults to @~/.

staging_location string

Present in the tool signature; the pipeline pins the unload to Internal staging.

* Required parameter.

Try asking:

  • Export all customers with a balance over 1000 to a CSV on the stage
  • Unload last quarter's orders to @~/exports/ as a CSV file
  • Dump the results of a query on the EVENTS table to internal staging so I can download it
  • Write the ACTIVE_CUSTOMERS view out to a CSV in my user stage

SnowflakeInsertRows

Inserts a new row into a Snowflake table from a field map of column names and values. Use it when the user wants to record a new customer, order, log entry, or any other data without writing an INSERT statement.

Parameter Type Default Description
table_name* string

Table to insert into, e.g. CUSTOMERS.

schema_name string

Schema containing the table, e.g. PUBLIC. Omit to use the account's default schema.

record* object

Field map of the new row, keyed by column name, e.g. {NAME, EMAIL, BALANCE}.

* Required parameter.

Try asking:

  • Add a customer to PUBLIC.CUSTOMERS: Acme Corp, [email protected], balance 5000
  • Insert a new row into the ORDERS table for order 1042, customer 17, total 249.99
  • Log an entry in the AUDIT_LOG table with action 'export' and user 'jarcega'
  • Create a record in the PRODUCTS table for SKU A-100, name 'Widget', price 12.50

SnowflakeInsertRowsChild

Lets the LLM snowflake insert rows child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
table_name string CUSTOMERS

schema_name string PUBLIC

SnowflakeQuery

Reads rows from a Snowflake table using an optional filter condition and row limit, without the caller writing any SQL. Use it as the default read tool for single-table lookups, and fall back to SnowflakeExecuteSQL only when joins or aggregation are needed.

Parameter Type Default Description
table_name* string

Table to read from, e.g. CUSTOMERS.

schema_name string

Schema containing the table, e.g. PUBLIC. Omit to use the account's default schema.

where_clause string

SQL WHERE condition without the WHERE keyword, e.g. BALANCE > 1000. Omit to return all rows.

limit_rows string

Maximum number of rows to return. Omit for no limit.

* Required parameter.

Try asking:

  • Show me the customers in PUBLIC.CUSTOMERS with a balance over 1000
  • Pull the first 50 rows of the ORDERS table in the SALES schema
  • List everything in EVENTS where EVENT_TYPE = 'page_view'
  • What's in the PRODUCTS table? Just give me the top 10 rows
  • Get the accounts in PUBLIC.ACCOUNTS where STATUS = 'churned'

SnowflakeSnowpipeStream

Streams a record into a Snowflake table via Snowpipe Streaming for low-latency, high-frequency event ingestion. Use it for event-shaped writes; use SnowflakeInsertRows for standard transactional inserts.

Parameter Type Default Description
table_name* string

Table to stream into, e.g. EVENTS.

schema_name string

Schema containing the table, e.g. PUBLIC. Omit to use the account's default schema.

max_client_lag string

Maximum client lag in milliseconds before the buffered rows are committed. Defaults to 1000.

record* object

Field map of the row to stream, keyed by column name.

* Required parameter.

Try asking:

  • Stream a page_view event for user u123 into the EVENTS table
  • Push this telemetry record into PUBLIC.EVENTS with a 2 second max client lag
  • Send a click event into the streaming events table right now
  • Ingest this sensor reading into the READINGS table via Snowpipe

SnowflakeSnowpipeStreamChild

Lets the LLM snowflake snowpipe stream child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
table_name string EVENTS

schema_name string PUBLIC

max_client_lag string 1000

SnowflakeUpdateRows

Updates rows in a Snowflake table that match a SQL condition, applying a field map of new column values. Confirm the condition and scope with the user before calling, as it can match a single row or many rows at once.

Parameter Type Default Description
table_name* string

Table to update, e.g. CUSTOMERS.

schema_name string

Schema containing the table, e.g. PUBLIC. Omit to use the account's default schema.

update_condition* string

SQL condition selecting the rows to update, without the WHERE keyword, e.g. ID = 42.

record* object

Field map of the new column values, e.g. {BALANCE: 7500, STATUS: 'premium'}.

* Required parameter.

Try asking:

  • Set the balance to 7500 and status to premium for the customer with ID 42
  • Mark every order in ORDERS where STATUS = 'pending' as 'shipped'
  • Update the email on PUBLIC.CUSTOMERS where ID = 17 to [email protected]
  • Bump the price to 14.99 on the PRODUCTS row with SKU = 'A-100'

SnowflakeUpdateRowsChild

Lets the LLM snowflake update rows child, exposed as an MCP tool callable via Pipeline Execute.

Parameter Type Default Description
table_name string CUSTOMERS

schema_name string PUBLIC

update_condition string ID = 1

SnowflakeVectorSearch

Searches a VECTOR column in a Snowflake table for the nearest neighbours by cosine similarity, returning scored results. Use it for retrieval over embeddings you manage in your own tables; use SnowflakeCortexSearch when a managed Cortex Search service already indexes the content.

Parameter Type Default Description
table_name* string

Table holding the vectors, e.g. DOCUMENT_EMBEDDINGS.

vector_column* string

Column of type VECTOR to search against, e.g. EMBEDDING.

schema_name string

Schema containing the table, e.g. ML. Omit to use the account's default schema.

where_clause string

SQL condition narrowing the candidate rows before the similarity search.

limit_rows string

Number of nearest neighbours to return. Defaults to 10.

* Required parameter.

Try asking:

  • Find the closest matches in ML.DOCUMENT_EMBEDDINGS on the EMBEDDING column
  • Give me the top 5 nearest neighbours from the DOCUMENT_EMBEDDINGS table with their scores
  • Search the embeddings table but only over rows where SOURCE = 'support_tickets'
  • Which rows in the KB_VECTORS table are most similar, limit it to 3?