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.
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.
- The procedures you nominate become the tools, so the logic stays where your team maintains it
- Two ways to scope: `--schemas` exposes every stored procedure in the schemas you name, `--procedures` exposes 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
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.
