LABSCO SUMMARY
Scope is set at launch, not left to the model.
Generic SQL servers hand a model the whole account and hope the prompt holds. This inverts that: the tool list is whatever you named on the command line, so a procedure that was not nominated is not reachable at all. The other benefit is that the business logic lives in reviewed, version-controlled procedures rather than being re-derived by a model on each call. The Snowflake role you configure still bounds everything, so give it the narrowest grants that work.
What it is
A framework that turns Snowflake stored procedures into callable MCP tools. You name either the schemas or the individual procedures at launch; those become the server's tool surface, so a model calls a procedure your team already wrote and reviewed rather than composing SQL.
What you get
- The procedures you nominate become the tools, so the logic stays where your team maintains it
- Two ways to scope:
--schemasexposes every stored procedure in the schemas you name,--proceduresexposes only the fully qualified procedures you list - Both flags are optional and default to empty lists, so nothing is exposed until you say what to expose
- Credentials stay in the environment rather than in the tool call
- A quickstart folder with a step-by-step setup for a development environment
Requirements
Python 3.8 or higher and uv. Every Snowflake connection variable is mandatory and comes from a .env file you create: SNOWFLAKE_ACCOUNT, SNOWFLAKE_USER, SNOWFLAKE_PASSWORD, SNOWFLAKE_ROLE, SNOWFLAKE_WAREHOUSE, SNOWFLAKE_DATABASE, SNOWFLAKE_SCHEMA and SNOWFLAKE_HOST. The client launches uv against the repository directory with main.py and the scope flags appended.
Setup effort
Build from source — git clone https://github.com/Cjaimesg/snowflake-mcp-sp-integration.git
USE CASES
Letting an assistant run a reviewed procedure
Expose the procedure your team already wrote and let the model call it with arguments instead of writing SQL.
Keeping a model away from the rest of the account
Name only the procedures you intend to expose; nothing else appears in the tool list.
Opening a whole schema for a trusted workflow
Point the schema flag at one schema so every procedure in it becomes available at once.
Standing it up in a development account first
Follow the quickstart to wire and test the integration before it touches production.
BEFORE YOU INSTALL
What to know first
Requires
- Python 3.8 or later
- SNOWFLAKE_ACCOUNT in your environment
- SNOWFLAKE_PASSWORD in your environment
- SNOWFLAKE_USER in your environment
- SNOWFLAKE_ROLE in your environment
- SNOWFLAKE_WAREHOUSE in your environment
- SNOWFLAKE_DATABASE in your environment
- SNOWFLAKE_SCHEMA in your environment
- SNOWFLAKE_HOST in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
git clone https://github.com/Cjaimesg/snowflake-mcp-sp-integration.git
cd snowflake-mcp-sp-integration
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activateCreate a .env file in the root directory with:
SNOWFLAKE_ACCOUNT=<YOUR_SNOWFLAKE_ACCOUNT>
SNOWFLAKE_USER=<YOUR_SNOWFLAKE_USER>
SNOWFLAKE_PASSWORD=<YOUR_SNOWFLAKE_PASSWORD>
SNOWFLAKE_ROLE=<YOUR_SNOWFLAKE_ROLE>
SNOWFLAKE_WAREHOUSE=<YOUR_SNOWFLAKE_WAREHOUSE>
SNOWFLAKE_DATABASE=<YOUR_SNOWFLAKE_DATABASE>
SNOWFLAKE_SCHEMA=<YOUR_SNOWFLAKE_SCHEMA>
SNOWFLAKE_HOST=<YOUR_SNOWFLAKE_HOST>Add the mcpServers entry below to your MCP configuration file
MCP Clients
Any MCP client
{
"mcpServers": {
"snowflake_sp_server": {
"command": "<YOUR_PATH_TO_UV>/uv.exe",
"args": [
"--directory",
"<YOUR_PATH_TO_SNOWFLAKE_MCP_SP_INTEGRATION>",
"run",
"main.py",
"--schemas",
"DB_NAME.SCHEMA_NAME",
"--procedures",
"DB_NAME.OTHER_SCHEMA_NAME.PROCEDURE_NAME"
]
}
}
}