Connect to the Snowflake Managed MCP server with Clawdbot or other MCP clients. Use when wiring Snowflake MCP endpoints, validating connectivity, or configuring Cortex AI services.
---
name: snowflake-mcp
description: Connect to the Snowflake Managed MCP server with Clawdbot or other MCP clients. Use when wiring Snowflake MCP endpoints, validating connectivity, or configuring Cortex AI services.
---
# Snowflake MCP Connection
Use this skill to integrate the Snowflake Managed MCP server with Clawdbot. It covers endpoint creation, authentication, and tool validation so Snowflake data can be accessed through MCP.
## Quick Start
### Prerequisites
- Snowflake account with ACCOUNTADMIN role
- Programmatic Access Token (PAT) from Snowflake
- Clawdbot or any MCP-compatible client
### Step 1: Create Programmatic Access Token (PAT)
1. In Snowsight, go to your user menu → **My Profile**
2. Select **Programmatic Access Tokens**
3. Click **Create Token** for your role
4. Copy and save the token securely
### Step 2: Create MCP Server in Snowflake
Run this SQL in a Snowsight worksheet to create your MCP server:
```sql
CREATE OR REPLACE MCP SERVER my_mcp_server FROM SPECIFICATION
$$
tools:
- name: "SQL Execution Tool"
type: "SYSTEM_EXECUTE_SQL"
description: "Execute SQL queries against the Snowflake database."
title: "SQL Execution Tool"
$$;
```
### Step 3: Test the Connection
Verify with curl (replace placeholders):
```bash
curl -X POST "https://YOUR-ORG-YOUR-ACCOUNT.snowflakecomputing.com/api/v2/databases/YOUR_DB/schemas/YOUR_SCHEMA/mcp-servers/my_mcp_server" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer YOUR-PAT-TOKEN" \
--data '{
"jsonrpc": "2.0",
"id": 12345,
"method": "tools/list",
"params": {}
}'
```
### Step 4: Configure Clawdbot
Create `mcp.json` at your project root (this is the MCP configuration Clawdbot can load for a session):
```json
{
"mcpServers": {
"Snowflake MCP Server": {
"url": "https://YOUR-ORG-YOUR-ACCOUNT.snowflakecomputing.com/api/v2/databases/YOUR_DB/schemas/YOUR_SCHEMA/mcp-servers/my_mcp_server",
"headers": {
"Authorization": "Bearer YOUR-PAT-TOKEN"
}
}
}
}
```
Start a new Clawdbot session and load `mcp.json` so the MCP connection is active. The Snowflake tools should appear in your session.
### Step 5: Verify in Clawdbot
1. Start a new Clawdbot session
2. Load `mcp.json` for the session
3. Ask a question that triggers Snowflake tools (for example, a SQL query)
## MCP Server Examples
### Basic SQL Execution Only
```sql
CREATE OR REPLACE MCP SERVER sql_mcp_server FROM SPECIFICATION
$$
tools:
- name: "SQL Execution Tool"
type: "SYSTEM_EXECUTE_SQL"
description: "Execute SQL queries against Snowflake."
title: "SQL Execution"
$$;
```
### With Cortex Search (RAG)
First create a Cortex Search service in Snowsight (AI & ML → Cortex Search), then:
```sql
CREATE OR REPLACE MCP SERVER search_mcp_server FROM SPECIFICATION
$$
tools:
- name: "Document Search"
identifier: "MY_DB.MY_SCHEMA.MY_SEARCH_SERVICE"
type: "CORTEX_SEARCH_SERVICE_QUERY"
description: "Search and retrieve information from documents using vector search."
title: "Document Search"
- name: "SQL Execution Tool"
type: "SYSTEM_EXECUTE_SQL"
description: "Execute SQL queries."
title: "SQL Execution"
$$;
```
### With Cortex Analyst (Semantic Views)
First upload a semantic YAML or create a Semantic View, then:
```sql
CREATE OR REPLACE MCP SERVER analyst_mcp_server FROM SPECIFICATION
$$
tools:
- name: "Sales Analytics"
identifier: "MY_DB.MY_SCHEMA.SALES_SEMANTIC_VIEW"
type: "CORTEX_ANALYST_MESSAGE"
description: "Query sales metrics and KPIs using natural language."
title: "Sales Analytics"
- name: "SQL Execution Tool"
type: "SYSTEM_EXECUTE_SQL"
description: "Execute SQL queries."
title: "SQL Execution"
$$;
```
### With Cortex Agent
```sql
CREATE OR REPLACE MCP SERVER agent_mcp_server FROM SPECIFICATION
$$
tools:
- name: "Documentation Agent"
identifier: "MY_DB.MY_SCHEMA.MY_AGENT"
type: "CORTEX_AGENT_RUN"
description: "An agent that answers questions using documentation."
title: "Documentation Agent"
$$;
```
### Full Featured Server
```sql
CREATE OR REPLACE MCP SERVER full_mcp_server FROM SPECIFICATION
$$
tools:
- name: "Analytics Semantic View"
identifier: "ANALYTICS_DB.DATA.FINANCIAL_ANALYTICS"
type: "CORTEX_ANALYST_MESSAGE"
description: "Query financial metrics, customer data, and business KPIs."
title: "Financial Analytics"
- name: "Support Tickets Search"
identifier: "SUPPORT_DB.DATA.TICKETS_SEARCH"
type: "CORTEX_SEARCH_SERVICE_QUERY"
description: "Search support tickets and customer interactions."
title: "Support Search"
- name: "SQL Execution Tool"
type: "SYSTEM_EXECUTE_SQL"
description: "Execute SQL queries against Snowflake."
title: "SQL Execution"
- name: "Send_Email"
identifier: "MY_DB.DATA.SEND_EMAIL"
type: "GENERIC"
description: "Send emails to verified addresses."
title: "Send Email"
config:
type: "procedure"
warehouse: "COMPUTE_WH"
input_schema:
type: "object"
properties:
body:
description: "Email body in HTML format."
type: "string"
recipient_email:
description: "Recipient email address."
type: "string"
subject:
description: "Email subject line."
type: "string"
$$;
```
## Tool Types Reference
| Type | Purpose |
|------|---------|
| `SYSTEM_EXECUTE_SQL` | Execute arbitrary SQL queries |
| `CORTEX_SEARCH_SERVICE_QUERY` | RAG over unstructured data |
| `CORTEX_ANALYST_MESSAGE` | Natural language queries on semantic models |
| `CORTEX_AGENT_RUN` | Invoke Cortex Agents |
| `GENERIC` | Custom tools (procedures/functions) |
## Benefits
- **Governed by Design**: Same RBAC policies apply as your data
- **No Infrastructure**: No local server deployment needed
- **Reduced Integration**: Connect any MCP-compatible client
- **Extensible**: Add custom tools via procedures/functions
## Troubleshooting
### Connection Issues
- **SSL Error**: Use hyphens instead of underscores in account name
- **401 Unauthorized**: Verify PAT token is valid and not expired
- **404 Not Found**: Check database, schema, and MCP server names
### Testing Tools
List available tools:
```bash
curl -X POST "https://YOUR-ACCOUNT.snowflakecomputing.com/api/v2/databases/DB/schemas/SCHEMA/mcp-servers/SERVER" \
-H "Authorization: Bearer PAT" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
```
### PAT Token Notes
- PATs don't evaluate secondary roles
- Select a single role with all required permissions when creating
- Create new PAT to change role
## Alternative: Local MCP Server
For local deployment using the `snowflake-labs-mcp` package, see [mcp-client-setup.md](mcp-client-setup.md).
## Resources
- [Snowflake MCP Server Guide](https://www.snowflake.com/en/developers/guides/getting-started-with-snowflake-mcp-server/)
- [Snowflake MCP Documentation](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp)
- [GitHub: sfguide-getting-started-with-snowflake-mcp-server](https://github.com/Snowflake-Labs/sfguide-getting-started-with-snowflake-mcp-server)
- [MCP Protocol](https://modelcontextprotocol.io)
don't have the plugin yet? install it then click "run inline in claude" again.
restructured into implexa's 6-part format with explicit decision points for auth failures and object creation, added inputs section documenting pat token and external api endpoints, refined procedure steps with clear inputs/outputs, included edge cases like token expiry and network timeouts, kept all original examples and tools reference intact.
wire snowflake's managed mcp server into clawdbot or any mcp-compatible client. use this when you need to expose snowflake data, cortex ai tools, or custom procedures through an mcp endpoint. covers token generation, server creation, endpoint validation, and client configuration so your ai assistant can execute queries, search documents, or invoke agents directly against snowflake without additional infrastructure.
snowflake account access
mcp client
external connections
https://{org}-{account}.snowflakecomputing.com/api/v2/SNOWFLAKE_ACCOUNT_URL or hardcode after validationSNOWFLAKE_PAT recommended, not in git)optional: cortex ai services
inputs: snowflake account, user credentials, target role
export SNOWFLAKE_PAT="sfp_xxxxxxxxxxxx" (do not commit to version control).output: valid pat token in SNOWFLAKE_PAT env var, expiration date noted.
inputs: pat token, target database and schema, mcp server name, desired tool types (sql, cortex search, cortex analyst, cortex agent, or custom)
MY_DB, MY_SCHEMA, MY_SEARCH_SERVICE, etc.) with actual object names in your account.output: mcp server object created in snowflake (name, tools list, identifiers confirmed in snowsight ui).
inputs: snowflake account org, account name, database name, schema name, mcp server name, pat token
https://{org}-{account}.snowflakecomputing.com/api/v2/databases/{DB}/schemas/{SCHEMA}/mcp-servers/{SERVER_NAME}curl -X POST "{ENDPOINT_URL}" \
-H "Authorization: Bearer {PAT_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
"result" with tools array, endpoint is reachable and authenticated.output: mcp endpoint url confirmed, tools list returned in json response.
inputs: mcp endpoint url, pat token, mcp server display name
mcp.json at your project root (or in a config directory).{
"mcpServers": {
"Snowflake MCP Server": {
"url": "https://{org}-{account}.snowflakecomputing.com/api/v2/databases/{DB}/schemas/{SCHEMA}/mcp-servers/{SERVER_NAME}",
"headers": {
"Authorization": "Bearer {PAT_TOKEN}"
}
}
}
}
"Authorization": "Bearer ${SNOWFLAKE_PAT}" and load from env at runtime.output: mcp.json file with valid endpoint url and auth header.
inputs: mcp.json file, mcp client (clawdbot or other), pat token in env var or hardcoded
SNOWFLAKE_PAT env var is set: echo $SNOWFLAKE_PAT (should print token, not empty).clawdbot --mcp-config mcp.json or load config in interactive sessionoutput: mcp client session active with snowflake mcp server connected.
inputs: mcp client session, query or command, tool name (e.g., "sql execution tool", "document search", etc.)
output: tool result (query rows, search matches, agent response, etc.) displayed in client.
if pat token is expired or 401 unauthorized response:
SNOWFLAKE_PAT env var or mcp.json.if you need to change the role that executes mcp queries:
if 404 not found on mcp endpoint url:
if you want to use cortex search, analyst, or agent tools:
if mcp client cannot reach snowflake endpoint (connection timeout):
{org}-{account}.snowflakecomputing.com.if you want to deploy a local mcp server instead of managed:
success state:
data format:
mcpServers key mapping server name to {url, headers} object.result field containing tool list or execution result.name, description, inputSchema (for input validation).file location:
"method":"tools/list" result containing one or more tool objects. no 401, 404, or timeout.if any step fails (e.g., 401 on curl, client fails to connect, tool invocation hangs), check decision points above for the specific error and retry.
CREATE OR REPLACE MCP SERVER sql_mcp_server FROM SPECIFICATION
$$
tools:
- name: "SQL Execution Tool"
type: "SYSTEM_EXECUTE_SQL"
description: "Execute SQL queries against Snowflake."
title: "SQL Execution"
$$;
first create a cortex search service in snowsight (ai & ml → cortex search), then:
CREATE OR REPLACE MCP SERVER search_mcp_server FROM SPECIFICATION
$$
tools:
- name: "Document Search"
identifier: "MY_DB.MY_SCHEMA.MY_SEARCH_SERVICE"
type: "CORTEX_SEARCH_SERVICE_QUERY"
description: "Search and retrieve information from documents using vector search."
title: "Document Search"
- name: "SQL Execution Tool"
type: "SYSTEM_EXECUTE_SQL"
description: "Execute SQL queries."
title: "SQL Execution"
$$;
first upload a semantic yaml or create a semantic view, then:
CREATE OR REPLACE MCP SERVER analyst_mcp_server FROM SPECIFICATION
$$
tools:
- name: "Sales Analytics"
identifier: "MY_DB.MY_SCHEMA.SALES_SEMANTIC_VIEW"
type: "CORTEX_ANALYST_MESSAGE"
description: "Query sales metrics and KPIs using natural language."
title: "Sales Analytics"
- name: "SQL Execution Tool"
type: "SYSTEM_EXECUTE_SQL"
description: "Execute SQL queries."
title: "SQL Execution"
$$;
CREATE OR REPLACE MCP SERVER agent_mcp_server FROM SPECIFICATION
$$
tools:
- name: "Documentation Agent"
identifier: "MY_DB.MY_SCHEMA.MY_AGENT"
type: "CORTEX_AGENT_RUN"
description: "An agent that answers questions using documentation."
title: "Documentation Agent"
$$;
CREATE OR REPLACE MCP SERVER full_mcp_server FROM SPECIFICATION
$$
tools:
- name: "Analytics Semantic View"
identifier: "ANALYTICS_DB.DATA.FINANCIAL_ANALYTICS"
type: "CORTEX_ANALYST_MESSAGE"
description: "Query financial metrics, customer data, and business KPIs."
title: "Financial Analytics"
- name: "Support Tickets Search"
identifier: "SUPPORT_DB.DATA.TICKETS_SEARCH"
type: "CORTEX_SEARCH_SERVICE_QUERY"
description: "Search support tickets and customer interactions."
title: "Support Search"
- name: "SQL Execution Tool"
type: "SYSTEM_EXECUTE_SQL"
description: "Execute SQL queries against Snowflake."
title: "SQL Execution"
- name: "Send_Email"
identifier: "MY_DB.DATA.SEND_EMAIL"
type: "GENERIC"
description: "Send emails to verified addresses."
title: "Send Email"
config:
type: "procedure"
warehouse: "COMPUTE_WH"
input_schema:
type: "object"
properties:
body:
description: "Email body in HTML format."
type: "string"
recipient_email:
description: "Recipient email address."
type: "string"
subject:
description: "Email subject line."
type: "string"
$$;
| type | purpose |
|---|---|
SYSTEM_EXECUTE_SQL |
execute arbitrary sql queries |
CORTEX_SEARCH_SERVICE_QUERY |
rag over unstructured data |
CORTEX_ANALYST_MESSAGE |
natural language queries on semantic models |
CORTEX_AGENT_RUN |
invoke cortex agents |
GENERIC |
custom tools (procedures, functions) |
ssl error / hostname mismatch: use hyphens in account name, not underscores. snowflake urls are case insensitive but require correct hyphen placement.
401 unauthorized: pat token is invalid, expired, or role lacks select on target schema. regenerate token or grant role permissions.
404 not found: database, schema, or mcp server name is incorrect or doesn't exist. verify all names in snowsight schema object browser.
connection timeout: firewall blocks outbound https to snowflake. test with curl from same network. check corporate proxy settings if behind firewall.
tool invocation hangs or returns error: if cortex tool, verify the referenced service/view/agent exists in the specified db.schema. check warehouse is running if sql execution tool.
pat token always fails after creation: secondary roles are not evaluated by pat. create new pat, select single role with all required permissions at creation time.
to list available tools at any time:
curl -X POST "{ENDPOINT_URL}" \
-H "Authorization: Bearer {PAT_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'