@naganpm/snowflake-mcp-server 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +159 -125
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.js +166 -51
- package/dist/mcp-server.js.map +1 -1
- package/dist/routes/snowflake.routes.d.ts.map +1 -1
- package/dist/routes/snowflake.routes.js +27 -4
- package/dist/routes/snowflake.routes.js.map +1 -1
- package/dist/services/snowflake.service.d.ts +1 -0
- package/dist/services/snowflake.service.d.ts.map +1 -1
- package/dist/services/snowflake.service.js +48 -21
- package/dist/services/snowflake.service.js.map +1 -1
- package/package.json +7 -5
package/README.md
CHANGED
|
@@ -1,47 +1,56 @@
|
|
|
1
1
|
# Snowflake MCP Server
|
|
2
2
|
|
|
3
|
-
A Model Context Protocol (MCP) server for Snowflake database integration built with
|
|
3
|
+
A **Model Context Protocol (MCP) server** for Snowflake database integration, built with TypeScript and compliant with Snowflake's MCP standards (revision 2025-06-18).
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
- ✅ Error handling
|
|
7
|
+
- 🚀 **MCP Protocol Compliant** - Follows Snowflake's MCP standards
|
|
8
|
+
- 🔧 **System SQL Execution** - Execute SQL queries with proper context management
|
|
9
|
+
- 📊 **Metadata Queries** - Query databases, schemas, tables, columns, and warehouses
|
|
10
|
+
- 🏭 **Warehouse Management** - Start, stop, suspend, and resume warehouses
|
|
11
|
+
- 📍 **Session Information** - Get current session and connection status
|
|
12
|
+
- 🛡️ **Error Handling** - Comprehensive error handling and logging
|
|
13
|
+
- 💻 **TypeScript Support** - Full TypeScript implementation
|
|
14
|
+
- 🔌 **Dual Mode** - MCP server (primary) + Express API (optional)
|
|
16
15
|
|
|
17
16
|
## Installation
|
|
18
17
|
|
|
18
|
+
```bash
|
|
19
|
+
npm install @naganpm/snowflake-mcp-server
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or for development:
|
|
19
23
|
```bash
|
|
20
24
|
npm install
|
|
21
25
|
```
|
|
22
26
|
|
|
23
27
|
## Configuration
|
|
24
28
|
|
|
25
|
-
|
|
29
|
+
### MCP Configuration (Primary Method)
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
#### Using continue.dev or Claude Desktop
|
|
28
32
|
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"mcpServers": {
|
|
36
|
+
"snowflake": {
|
|
37
|
+
"command": "npx",
|
|
38
|
+
"args": ["-y", "@naganpm/snowflake-mcp-server@latest"],
|
|
39
|
+
"env": {
|
|
40
|
+
"SNOWFLAKE_ACCOUNT": "your-account.us-east-2.aws",
|
|
41
|
+
"SNOWFLAKE_USERNAME": "your-username",
|
|
42
|
+
"SNOWFLAKE_PASSWORD": "your-password",
|
|
43
|
+
"SNOWFLAKE_WAREHOUSE": "your-warehouse",
|
|
44
|
+
"SNOWFLAKE_DATABASE": "your-database",
|
|
45
|
+
"SNOWFLAKE_SCHEMA": "your-schema"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
29
50
|
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
args:
|
|
34
|
-
- -y
|
|
35
|
-
- "@naganpm/snowflake-mcp-server@latest"
|
|
36
|
-
env:
|
|
37
|
-
SNOWFLAKE_ACCOUNT: <account-id>.us-east-2.aws
|
|
38
|
-
SNOWFLAKE_USERNAME: <your-username>
|
|
39
|
-
SNOWFLAKE_PASSWORD: <your-password>
|
|
40
|
-
SNOWFLAKE_WAREHOUSE: <warehouse-name>
|
|
41
|
-
SNOWFLAKE_DATABASE: <database-name>
|
|
42
|
-
SNOWFLAKE_SCHEMA: <schema-name>
|
|
43
|
-
```
|
|
44
|
-
#### Approach2
|
|
51
|
+
|
|
52
|
+
### Environment Configuration
|
|
53
|
+
|
|
45
54
|
1. Copy `.env.example` to `.env`:
|
|
46
55
|
```bash
|
|
47
56
|
cp .env.example .env
|
|
@@ -55,142 +64,143 @@ SNOWFLAKE_PASSWORD=your-password
|
|
|
55
64
|
SNOWFLAKE_WAREHOUSE=YOUR_WAREHOUSE
|
|
56
65
|
SNOWFLAKE_DATABASE=YOUR_DATABASE
|
|
57
66
|
SNOWFLAKE_SCHEMA=YOUR_SCHEMA
|
|
58
|
-
PORT=3000
|
|
59
67
|
```
|
|
60
68
|
|
|
61
69
|
## Usage
|
|
62
70
|
|
|
63
|
-
###
|
|
71
|
+
### MCP Server (Primary)
|
|
72
|
+
|
|
64
73
|
```bash
|
|
74
|
+
# Development
|
|
65
75
|
npm run dev
|
|
66
|
-
```
|
|
67
76
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
npm run build
|
|
77
|
+
# Production
|
|
78
|
+
npm run build && npm start
|
|
71
79
|
```
|
|
72
80
|
|
|
73
|
-
###
|
|
81
|
+
### Express API Server (Optional)
|
|
82
|
+
|
|
74
83
|
```bash
|
|
75
|
-
|
|
84
|
+
# Development
|
|
85
|
+
npm run dev:express
|
|
86
|
+
|
|
87
|
+
# Production
|
|
88
|
+
npm run build && npm run start:express
|
|
76
89
|
```
|
|
77
90
|
|
|
78
|
-
##
|
|
91
|
+
## MCP Tools
|
|
79
92
|
|
|
80
|
-
###
|
|
81
|
-
|
|
82
|
-
GET /health
|
|
83
|
-
```
|
|
93
|
+
### 1. `system_execute_sql`
|
|
94
|
+
Execute SQL queries with optional context switching.
|
|
84
95
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
96
|
+
**Parameters:**
|
|
97
|
+
- `sql` (required): SQL query to execute
|
|
98
|
+
- `parameters` (optional): Bind parameters
|
|
99
|
+
- `warehouse` (optional): Warehouse context
|
|
100
|
+
- `database` (optional): Database context
|
|
101
|
+
- `schema` (optional): Schema context
|
|
89
102
|
|
|
103
|
+
**Example:**
|
|
104
|
+
```json
|
|
90
105
|
{
|
|
91
|
-
"
|
|
92
|
-
"
|
|
106
|
+
"name": "system_execute_sql",
|
|
107
|
+
"arguments": {
|
|
108
|
+
"sql": "SELECT COUNT(*) FROM my_table",
|
|
109
|
+
"warehouse": "COMPUTE_WH"
|
|
110
|
+
}
|
|
93
111
|
}
|
|
94
112
|
```
|
|
95
113
|
|
|
96
|
-
###
|
|
97
|
-
|
|
98
|
-
GET /api/snowflake/databases
|
|
99
|
-
```
|
|
114
|
+
### 2. `snowflake_metadata_query`
|
|
115
|
+
Query Snowflake metadata information.
|
|
100
116
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
117
|
+
**Parameters:**
|
|
118
|
+
- `metadata_type` (required): One of: `databases`, `schemas`, `tables`, `columns`, `warehouses`, `users`, `roles`
|
|
119
|
+
- `database_name` (optional): Required for schemas/tables/columns
|
|
120
|
+
- `schema_name` (optional): Required for tables/columns
|
|
121
|
+
- `table_name` (optional): Required for columns
|
|
105
122
|
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
### List Warehouses
|
|
117
|
-
```
|
|
118
|
-
GET /api/snowflake/warehouses
|
|
123
|
+
**Example:**
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"name": "snowflake_metadata_query",
|
|
127
|
+
"arguments": {
|
|
128
|
+
"metadata_type": "tables",
|
|
129
|
+
"database_name": "MY_DB",
|
|
130
|
+
"schema_name": "PUBLIC"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
119
133
|
```
|
|
120
134
|
|
|
121
|
-
###
|
|
122
|
-
|
|
123
|
-
GET /api/snowflake/session
|
|
124
|
-
```
|
|
135
|
+
### 3. `snowflake_session_info`
|
|
136
|
+
Get current session information and connection status.
|
|
125
137
|
|
|
126
|
-
|
|
127
|
-
```
|
|
128
|
-
|
|
138
|
+
**Example:**
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"name": "snowflake_session_info",
|
|
142
|
+
"arguments": {}
|
|
143
|
+
}
|
|
129
144
|
```
|
|
130
145
|
|
|
131
|
-
|
|
146
|
+
### 4. `snowflake_warehouse_management`
|
|
147
|
+
Manage Snowflake warehouses.
|
|
132
148
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
# Health check
|
|
137
|
-
curl http://localhost:3000/health
|
|
149
|
+
**Parameters:**
|
|
150
|
+
- `action` (required): One of: `list`, `start`, `stop`, `suspend`, `resume`, `describe`
|
|
151
|
+
- `warehouse_name` (optional): Required for start/stop/suspend/resume/describe
|
|
138
152
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
curl "http://localhost:3000/api/snowflake/tables?database=MYDB&schema=PUBLIC"
|
|
153
|
+
**Example:**
|
|
154
|
+
```json
|
|
155
|
+
{
|
|
156
|
+
"name": "snowflake_warehouse_management",
|
|
157
|
+
"arguments": {
|
|
158
|
+
"action": "resume",
|
|
159
|
+
"warehouse_name": "COMPUTE_WH"
|
|
160
|
+
}
|
|
161
|
+
}
|
|
149
162
|
```
|
|
150
163
|
|
|
151
|
-
|
|
164
|
+
## API Endpoints (Express Mode)
|
|
152
165
|
|
|
153
|
-
|
|
154
|
-
// Execute query
|
|
155
|
-
const response = await fetch('http://localhost:3000/api/snowflake/query', {
|
|
156
|
-
method: 'POST',
|
|
157
|
-
headers: {
|
|
158
|
-
'Content-Type': 'application/json',
|
|
159
|
-
},
|
|
160
|
-
body: JSON.stringify({
|
|
161
|
-
query: 'SELECT * FROM my_table LIMIT 10',
|
|
162
|
-
}),
|
|
163
|
-
});
|
|
166
|
+
If using the Express server (`npm run dev:express`), the following REST endpoints are available:
|
|
164
167
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
+
| Method | Endpoint | Description |
|
|
169
|
+
|--------|----------|-------------|
|
|
170
|
+
| GET | `/health` | Health check |
|
|
171
|
+
| POST | `/api/snowflake/query` | Execute SQL query |
|
|
172
|
+
| GET | `/api/snowflake/databases` | List databases |
|
|
173
|
+
| GET | `/api/snowflake/schemas` | List schemas |
|
|
174
|
+
| GET | `/api/snowflake/tables` | List tables |
|
|
175
|
+
| GET | `/api/snowflake/tables/:name/describe` | Describe table |
|
|
176
|
+
| GET | `/api/snowflake/warehouses` | List warehouses |
|
|
177
|
+
| GET | `/api/snowflake/session` | Get session info |
|
|
178
|
+
| GET | `/api/snowflake/status` | Connection status |
|
|
168
179
|
|
|
169
180
|
## Response Format
|
|
170
181
|
|
|
171
|
-
|
|
182
|
+
### MCP Responses
|
|
172
183
|
```json
|
|
173
184
|
{
|
|
174
185
|
"success": true,
|
|
175
186
|
"data": {
|
|
176
|
-
"columns": ["
|
|
177
|
-
"rows": [
|
|
178
|
-
{ "col1": "value1", "col2": "value2" }
|
|
179
|
-
],
|
|
187
|
+
"columns": ["column1", "column2"],
|
|
188
|
+
"rows": [["value1", "value2"]],
|
|
180
189
|
"rowCount": 1,
|
|
181
|
-
"executionTime":
|
|
182
|
-
|
|
190
|
+
"executionTime": 142,
|
|
191
|
+
"query": "SELECT column1, column2 FROM table"
|
|
192
|
+
},
|
|
193
|
+
"timestamp": "2026-02-17T10:30:00.000Z"
|
|
183
194
|
}
|
|
184
195
|
```
|
|
185
196
|
|
|
186
|
-
Error
|
|
197
|
+
### Error Responses
|
|
187
198
|
```json
|
|
188
199
|
{
|
|
189
200
|
"success": false,
|
|
190
|
-
"error":
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
}
|
|
201
|
+
"error": "SQL Error: Object 'INVALID_TABLE' does not exist (Code: 002003)",
|
|
202
|
+
"tool": "system_execute_sql",
|
|
203
|
+
"timestamp": "2026-02-17T10:30:00.000Z"
|
|
194
204
|
}
|
|
195
205
|
```
|
|
196
206
|
|
|
@@ -200,13 +210,12 @@ Error responses:
|
|
|
200
210
|
```
|
|
201
211
|
.
|
|
202
212
|
├── src/
|
|
203
|
-
│ ├──
|
|
213
|
+
│ ├── mcp-server.ts # MCP server (primary entry point)
|
|
214
|
+
│ ├── index.ts # Express server (optional)
|
|
204
215
|
│ ├── services/
|
|
205
|
-
│ │ └── snowflake.service.ts
|
|
206
|
-
│
|
|
207
|
-
│
|
|
208
|
-
│ └── middleware/
|
|
209
|
-
│ └── error.middleware.ts # Error handling
|
|
216
|
+
│ │ └── snowflake.service.ts # Snowflake service
|
|
217
|
+
│ └── routes/
|
|
218
|
+
│ └── snowflake.routes.ts # Express API routes
|
|
210
219
|
├── package.json
|
|
211
220
|
├── tsconfig.json
|
|
212
221
|
└── .env
|
|
@@ -214,12 +223,37 @@ Error responses:
|
|
|
214
223
|
|
|
215
224
|
### Scripts
|
|
216
225
|
|
|
226
|
+
- `npm run dev` - Run MCP server in development mode
|
|
227
|
+
- `npm run dev:express` - Run Express server in development mode
|
|
217
228
|
- `npm run build` - Build TypeScript to JavaScript
|
|
218
|
-
- `npm run
|
|
219
|
-
- `npm start` - Run production
|
|
229
|
+
- `npm run start` - Run production MCP server
|
|
230
|
+
- `npm run start:express` - Run production Express server
|
|
220
231
|
- `npm run watch` - Watch mode for development
|
|
221
232
|
- `npm run clean` - Clean dist folder
|
|
222
233
|
|
|
234
|
+
## Snowflake MCP Standards Compliance
|
|
235
|
+
|
|
236
|
+
This server follows Snowflake's MCP documentation standards:
|
|
237
|
+
|
|
238
|
+
- ✅ MCP Protocol revision "2025-06-18"
|
|
239
|
+
- ✅ Standardized tool naming conventions
|
|
240
|
+
- ✅ Proper error handling and logging
|
|
241
|
+
- ✅ Context-aware SQL execution
|
|
242
|
+
- ✅ Metadata query capabilities
|
|
243
|
+
- ✅ Session management
|
|
244
|
+
- ✅ Warehouse lifecycle management
|
|
245
|
+
|
|
246
|
+
## References
|
|
247
|
+
|
|
248
|
+
- [Snowflake Cortex Agents MCP Documentation](https://docs.snowflake.com/en/user-guide/snowflake-cortex/cortex-agents-mcp)
|
|
249
|
+
|
|
250
|
+
## Security Notes
|
|
251
|
+
|
|
252
|
+
- Use environment variables for credentials
|
|
253
|
+
- Avoid hardcoded passwords or tokens
|
|
254
|
+
- Follow least-privilege access principles
|
|
255
|
+
- Consider OAuth authentication for production use
|
|
256
|
+
|
|
223
257
|
## License
|
|
224
258
|
|
|
225
259
|
MIT
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAOA,OAAgB,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAM9D,QAAA,MAAM,GAAG,EAAE,OAAmB,CAAC;AAwC/B,eAAe,GAAG,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,13 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
5
|
};
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
// Load environment variables FIRST before any other imports
|
|
10
|
+
dotenv_1.default.config({ path: path_1.default.resolve(__dirname, '../.env') });
|
|
7
11
|
const express_1 = __importDefault(require("express"));
|
|
8
12
|
const cors_1 = __importDefault(require("cors"));
|
|
9
|
-
const dotenv_1 = __importDefault(require("dotenv"));
|
|
10
13
|
const snowflake_service_1 = require("./services/snowflake.service");
|
|
11
14
|
const error_middleware_1 = require("./middleware/error.middleware");
|
|
12
15
|
const snowflake_routes_1 = require("./routes/snowflake.routes");
|
|
13
|
-
dotenv_1.default.config();
|
|
14
16
|
const app = (0, express_1.default)();
|
|
15
17
|
const port = process.env.PORT || 3000;
|
|
16
18
|
// Middleware
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,sDAA8D;AAC9D,gDAAwB;AACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AACA,oDAA4B;AAC5B,gDAAwB;AAExB,4DAA4D;AAC5D,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AAE5D,sDAA8D;AAC9D,gDAAwB;AACxB,oEAAgE;AAChE,oEAA6D;AAC7D,gEAA4D;AAE5D,MAAM,GAAG,GAAY,IAAA,iBAAO,GAAE,CAAC;AAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;AAEtC,aAAa;AACb,GAAG,CAAC,GAAG,CAAC,IAAA,cAAI,GAAE,CAAC,CAAC;AAChB,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACxB,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAEhD,eAAe;AACf,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;IACjD,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,kCAAe,CAAC,CAAC;AAE3C,gBAAgB;AAChB,GAAG,CAAC,GAAG,CAAC,+BAAY,CAAC,CAAC;AAEtB,kCAAkC;AAClC,MAAM,gBAAgB,GAAG,oCAAgB,CAAC,WAAW,EAAE,CAAC;AAExD,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACpB,OAAO,CAAC,GAAG,CAAC,2CAA2C,IAAI,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,SAAS,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,oBAAoB;AACpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC/B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,MAAM,gBAAgB,CAAC,UAAU,EAAE,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,kBAAe,GAAG,CAAC"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -13,7 +13,7 @@ dotenv_1.default.config();
|
|
|
13
13
|
const snowflakeService = snowflake_service_1.SnowflakeService.getInstance();
|
|
14
14
|
const server = new index_js_1.Server({
|
|
15
15
|
name: 'snowflake-mcp-server',
|
|
16
|
-
version: '1.0.
|
|
16
|
+
version: '1.0.8',
|
|
17
17
|
}, {
|
|
18
18
|
capabilities: {
|
|
19
19
|
tools: {},
|
|
@@ -23,57 +23,90 @@ server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
|
23
23
|
return {
|
|
24
24
|
tools: [
|
|
25
25
|
{
|
|
26
|
-
name: '
|
|
27
|
-
description: 'Execute
|
|
26
|
+
name: 'system_execute_sql',
|
|
27
|
+
description: 'Execute SQL queries on Snowflake database with proper error handling and result formatting',
|
|
28
28
|
inputSchema: {
|
|
29
29
|
type: 'object',
|
|
30
30
|
properties: {
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
sql: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'SQL query to execute'
|
|
34
|
+
},
|
|
35
|
+
parameters: {
|
|
36
|
+
type: 'array',
|
|
37
|
+
description: 'Optional bind parameters for the query',
|
|
38
|
+
items: { type: 'string' }
|
|
39
|
+
},
|
|
40
|
+
warehouse: {
|
|
41
|
+
type: 'string',
|
|
42
|
+
description: 'Optional warehouse to use for this query'
|
|
43
|
+
},
|
|
44
|
+
database: {
|
|
45
|
+
type: 'string',
|
|
46
|
+
description: 'Optional database context for this query'
|
|
47
|
+
},
|
|
48
|
+
schema: {
|
|
49
|
+
type: 'string',
|
|
50
|
+
description: 'Optional schema context for this query'
|
|
51
|
+
}
|
|
33
52
|
},
|
|
34
|
-
required: ['
|
|
53
|
+
required: ['sql'],
|
|
35
54
|
},
|
|
36
55
|
},
|
|
37
56
|
{
|
|
38
|
-
name: '
|
|
39
|
-
description: '
|
|
40
|
-
inputSchema: { type: 'object', properties: {} },
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
name: 'list_schemas',
|
|
44
|
-
description: 'List schemas',
|
|
57
|
+
name: 'snowflake_metadata_query',
|
|
58
|
+
description: 'Query Snowflake metadata (databases, schemas, tables, columns, warehouses)',
|
|
45
59
|
inputSchema: {
|
|
46
60
|
type: 'object',
|
|
47
|
-
properties: {
|
|
61
|
+
properties: {
|
|
62
|
+
metadata_type: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
enum: ['databases', 'schemas', 'tables', 'columns', 'warehouses', 'users', 'roles'],
|
|
65
|
+
description: 'Type of metadata to query'
|
|
66
|
+
},
|
|
67
|
+
database_name: {
|
|
68
|
+
type: 'string',
|
|
69
|
+
description: 'Database name (required for schemas, tables, columns)'
|
|
70
|
+
},
|
|
71
|
+
schema_name: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
description: 'Schema name (required for tables, columns)'
|
|
74
|
+
},
|
|
75
|
+
table_name: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
description: 'Table name (required for columns)'
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
required: ['metadata_type'],
|
|
48
81
|
},
|
|
49
82
|
},
|
|
50
83
|
{
|
|
51
|
-
name: '
|
|
52
|
-
description: '
|
|
84
|
+
name: 'snowflake_session_info',
|
|
85
|
+
description: 'Get current Snowflake session information and connection status',
|
|
53
86
|
inputSchema: {
|
|
54
87
|
type: 'object',
|
|
55
|
-
properties: {
|
|
88
|
+
properties: {},
|
|
56
89
|
},
|
|
57
90
|
},
|
|
58
91
|
{
|
|
59
|
-
name: '
|
|
60
|
-
description: '
|
|
92
|
+
name: 'snowflake_warehouse_management',
|
|
93
|
+
description: 'Manage Snowflake warehouses (list, start, stop, suspend, resume)',
|
|
61
94
|
inputSchema: {
|
|
62
95
|
type: 'object',
|
|
63
|
-
properties: {
|
|
64
|
-
|
|
96
|
+
properties: {
|
|
97
|
+
action: {
|
|
98
|
+
type: 'string',
|
|
99
|
+
enum: ['list', 'start', 'stop', 'suspend', 'resume', 'describe'],
|
|
100
|
+
description: 'Warehouse management action'
|
|
101
|
+
},
|
|
102
|
+
warehouse_name: {
|
|
103
|
+
type: 'string',
|
|
104
|
+
description: 'Warehouse name (required for start, stop, suspend, resume, describe)'
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
required: ['action'],
|
|
65
108
|
},
|
|
66
|
-
}
|
|
67
|
-
{
|
|
68
|
-
name: 'list_warehouses',
|
|
69
|
-
description: 'List warehouses',
|
|
70
|
-
inputSchema: { type: 'object', properties: {} },
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
name: 'get_session_info',
|
|
74
|
-
description: 'Get session info',
|
|
75
|
-
inputSchema: { type: 'object', properties: {} },
|
|
76
|
-
},
|
|
109
|
+
}
|
|
77
110
|
],
|
|
78
111
|
};
|
|
79
112
|
});
|
|
@@ -82,37 +115,119 @@ server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
|
82
115
|
const { name, arguments: args } = request.params;
|
|
83
116
|
let result;
|
|
84
117
|
switch (name) {
|
|
85
|
-
case '
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
118
|
+
case 'system_execute_sql':
|
|
119
|
+
// Set context if provided
|
|
120
|
+
if (args?.warehouse) {
|
|
121
|
+
await snowflakeService.executeQuery(`USE WAREHOUSE ${args.warehouse}`);
|
|
122
|
+
}
|
|
123
|
+
if (args?.database) {
|
|
124
|
+
await snowflakeService.executeQuery(`USE DATABASE ${args.database}`);
|
|
125
|
+
}
|
|
126
|
+
if (args?.schema) {
|
|
127
|
+
await snowflakeService.executeQuery(`USE SCHEMA ${args.schema}`);
|
|
128
|
+
}
|
|
129
|
+
result = await snowflakeService.executeQuery(args?.sql || '', args?.parameters);
|
|
90
130
|
break;
|
|
91
|
-
case '
|
|
92
|
-
|
|
131
|
+
case 'snowflake_metadata_query':
|
|
132
|
+
const metadataType = args?.metadata_type;
|
|
133
|
+
const databaseName = args?.database_name;
|
|
134
|
+
const schemaName = args?.schema_name;
|
|
135
|
+
const tableName = args?.table_name;
|
|
136
|
+
switch (metadataType) {
|
|
137
|
+
case 'databases':
|
|
138
|
+
result = await snowflakeService.listDatabases();
|
|
139
|
+
break;
|
|
140
|
+
case 'schemas':
|
|
141
|
+
result = await snowflakeService.listSchemas(databaseName);
|
|
142
|
+
break;
|
|
143
|
+
case 'tables':
|
|
144
|
+
result = await snowflakeService.listTables(databaseName, schemaName);
|
|
145
|
+
break;
|
|
146
|
+
case 'columns':
|
|
147
|
+
if (!tableName) {
|
|
148
|
+
throw new Error('table_name is required for columns metadata');
|
|
149
|
+
}
|
|
150
|
+
result = await snowflakeService.describeTable(`${databaseName}.${schemaName}.${tableName}`);
|
|
151
|
+
break;
|
|
152
|
+
case 'warehouses':
|
|
153
|
+
result = await snowflakeService.listWarehouses();
|
|
154
|
+
break;
|
|
155
|
+
case 'users':
|
|
156
|
+
result = await snowflakeService.executeQuery('SHOW USERS');
|
|
157
|
+
break;
|
|
158
|
+
case 'roles':
|
|
159
|
+
result = await snowflakeService.executeQuery('SHOW ROLES');
|
|
160
|
+
break;
|
|
161
|
+
default:
|
|
162
|
+
throw new Error(`Unknown metadata type: ${metadataType}`);
|
|
163
|
+
}
|
|
93
164
|
break;
|
|
94
|
-
case '
|
|
95
|
-
result = await snowflakeService.listTables(args?.database, args?.schema);
|
|
96
|
-
break;
|
|
97
|
-
case 'describe_table':
|
|
98
|
-
result = await snowflakeService.describeTable(args?.tableName || '');
|
|
99
|
-
break;
|
|
100
|
-
case 'list_warehouses':
|
|
101
|
-
result = await snowflakeService.listWarehouses();
|
|
102
|
-
break;
|
|
103
|
-
case 'get_session_info':
|
|
165
|
+
case 'snowflake_session_info':
|
|
104
166
|
result = await snowflakeService.getCurrentSession();
|
|
105
167
|
break;
|
|
168
|
+
case 'snowflake_warehouse_management':
|
|
169
|
+
const action = args?.action;
|
|
170
|
+
const warehouseName = args?.warehouse_name;
|
|
171
|
+
switch (action) {
|
|
172
|
+
case 'list':
|
|
173
|
+
result = await snowflakeService.listWarehouses();
|
|
174
|
+
break;
|
|
175
|
+
case 'start':
|
|
176
|
+
case 'resume':
|
|
177
|
+
if (!warehouseName) {
|
|
178
|
+
throw new Error('warehouse_name is required for start/resume action');
|
|
179
|
+
}
|
|
180
|
+
result = await snowflakeService.executeQuery(`ALTER WAREHOUSE ${warehouseName} RESUME`);
|
|
181
|
+
break;
|
|
182
|
+
case 'stop':
|
|
183
|
+
case 'suspend':
|
|
184
|
+
if (!warehouseName) {
|
|
185
|
+
throw new Error('warehouse_name is required for stop/suspend action');
|
|
186
|
+
}
|
|
187
|
+
result = await snowflakeService.executeQuery(`ALTER WAREHOUSE ${warehouseName} SUSPEND`);
|
|
188
|
+
break;
|
|
189
|
+
case 'describe':
|
|
190
|
+
if (!warehouseName) {
|
|
191
|
+
throw new Error('warehouse_name is required for describe action');
|
|
192
|
+
}
|
|
193
|
+
result = await snowflakeService.executeQuery(`DESCRIBE WAREHOUSE ${warehouseName}`);
|
|
194
|
+
break;
|
|
195
|
+
default:
|
|
196
|
+
throw new Error(`Unknown warehouse action: ${action}`);
|
|
197
|
+
}
|
|
198
|
+
break;
|
|
106
199
|
default:
|
|
107
200
|
throw new Error(`Unknown tool: ${name}`);
|
|
108
201
|
}
|
|
202
|
+
// Format the response according to MCP standards
|
|
109
203
|
return {
|
|
110
|
-
content: [
|
|
204
|
+
content: [
|
|
205
|
+
{
|
|
206
|
+
type: 'text',
|
|
207
|
+
text: JSON.stringify({
|
|
208
|
+
success: true,
|
|
209
|
+
data: result,
|
|
210
|
+
timestamp: new Date().toISOString()
|
|
211
|
+
}, null, 2)
|
|
212
|
+
}
|
|
213
|
+
],
|
|
111
214
|
};
|
|
112
215
|
}
|
|
113
216
|
catch (error) {
|
|
217
|
+
const toolName = request.params.name;
|
|
218
|
+
console.error(`MCP Tool Error [${toolName}]:`, error);
|
|
114
219
|
return {
|
|
115
|
-
content: [
|
|
220
|
+
content: [
|
|
221
|
+
{
|
|
222
|
+
type: 'text',
|
|
223
|
+
text: JSON.stringify({
|
|
224
|
+
success: false,
|
|
225
|
+
error: error.message,
|
|
226
|
+
tool: toolName,
|
|
227
|
+
timestamp: new Date().toISOString()
|
|
228
|
+
}, null, 2)
|
|
229
|
+
}
|
|
230
|
+
],
|
|
116
231
|
isError: true,
|
|
117
232
|
};
|
|
118
233
|
}
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";;;;;;AACA,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAC5C,oEAAgE;AAChE,oDAA4B;AAE5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,MAAM,gBAAgB,GAAG,oCAAgB,CAAC,WAAW,EAAE,CAAC;AAExD,MAAM,MAAM,GAAG,IAAI,iBAAM,CACvB;IACE,IAAI,EAAE,sBAAsB;IAC5B,OAAO,EAAE,OAAO;CACjB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO;QACL,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake.routes.d.ts","sourceRoot":"","sources":["../../src/routes/snowflake.routes.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,4CAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"snowflake.routes.d.ts","sourceRoot":"","sources":["../../src/routes/snowflake.routes.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,MAAM,4CAAW,CAAC;AAuJxB,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,CAAC"}
|
|
@@ -105,16 +105,39 @@ router.get('/session', async (req, res, next) => {
|
|
|
105
105
|
}
|
|
106
106
|
});
|
|
107
107
|
// Connection status
|
|
108
|
-
router.get('/status', async (req, res
|
|
108
|
+
router.get('/status', async (req, res) => {
|
|
109
109
|
try {
|
|
110
|
-
|
|
110
|
+
// Check if already connected
|
|
111
|
+
const isCurrentlyConnected = snowflakeService.isConnected();
|
|
112
|
+
if (isCurrentlyConnected) {
|
|
113
|
+
res.json({
|
|
114
|
+
success: true,
|
|
115
|
+
connected: true,
|
|
116
|
+
message: 'Connected to Snowflake',
|
|
117
|
+
});
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// If not connected, attempt a connection test
|
|
121
|
+
console.log('Testing Snowflake connection...');
|
|
122
|
+
// Reset connection to ensure fresh attempt
|
|
123
|
+
snowflakeService.resetConnection();
|
|
124
|
+
// Test connection by trying to get session info (timeout after 10 seconds)
|
|
125
|
+
const timeout = new Promise((_, reject) => setTimeout(() => reject(new Error('Connection timeout after 10 seconds')), 10000));
|
|
126
|
+
const connectionTest = snowflakeService.getCurrentSession();
|
|
127
|
+
await Promise.race([connectionTest, timeout]);
|
|
111
128
|
res.json({
|
|
112
129
|
success: true,
|
|
113
|
-
connected:
|
|
130
|
+
connected: true,
|
|
131
|
+
message: 'Successfully connected to Snowflake',
|
|
114
132
|
});
|
|
115
133
|
}
|
|
116
134
|
catch (error) {
|
|
117
|
-
|
|
135
|
+
console.error('Status check failed:', error.message);
|
|
136
|
+
res.json({
|
|
137
|
+
success: true,
|
|
138
|
+
connected: false,
|
|
139
|
+
error: error.message,
|
|
140
|
+
});
|
|
118
141
|
}
|
|
119
142
|
});
|
|
120
143
|
//# sourceMappingURL=snowflake.routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake.routes.js","sourceRoot":"","sources":["../../src/routes/snowflake.routes.ts"],"names":[],"mappings":";;;AAAA,qCAAkE;AAClE,qEAAiE;AAEjE,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"snowflake.routes.js","sourceRoot":"","sources":["../../src/routes/snowflake.routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake.service.d.ts","sourceRoot":"","sources":["../../src/services/snowflake.service.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"snowflake.service.d.ts","sourceRoot":"","sources":["../../src/services/snowflake.service.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO;WAWO,WAAW,IAAI,gBAAgB;YAO/B,OAAO;IA2CN,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA6CpE,aAAa,IAAI,OAAO,CAAC,WAAW,CAAC;IAIrC,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOpD,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAOpE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAItD,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IAItC,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC;IAIzC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBjC,WAAW,IAAI,OAAO;IAKtB,eAAe,IAAI,IAAI;CAG/B"}
|
|
@@ -47,6 +47,18 @@ class SnowflakeService {
|
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
49
49
|
console.log('✅ Successfully connected to Snowflake');
|
|
50
|
+
console.log('📊 Connection Details:');
|
|
51
|
+
console.log(` - Account: ${this.config.account}`);
|
|
52
|
+
console.log(` - Username: ${this.config.username}`);
|
|
53
|
+
if (this.config.warehouse) {
|
|
54
|
+
console.log(` - Warehouse: ${this.config.warehouse}`);
|
|
55
|
+
}
|
|
56
|
+
if (this.config.database) {
|
|
57
|
+
console.log(` - Database: ${this.config.database}`);
|
|
58
|
+
}
|
|
59
|
+
if (this.config.schema) {
|
|
60
|
+
console.log(` - Schema: ${this.config.schema}`);
|
|
61
|
+
}
|
|
50
62
|
resolve(conn);
|
|
51
63
|
}
|
|
52
64
|
});
|
|
@@ -54,28 +66,43 @@ class SnowflakeService {
|
|
|
54
66
|
}
|
|
55
67
|
async executeQuery(sqlText, binds) {
|
|
56
68
|
const startTime = Date.now();
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
try {
|
|
70
|
+
const conn = await this.connect();
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
conn.execute({
|
|
73
|
+
sqlText,
|
|
74
|
+
binds,
|
|
75
|
+
complete: (err, stmt, rows) => {
|
|
76
|
+
const executionTime = Date.now() - startTime;
|
|
77
|
+
if (err) {
|
|
78
|
+
console.error('SQL Execution Error:', {
|
|
79
|
+
query: sqlText,
|
|
80
|
+
error: err.message,
|
|
81
|
+
code: err.code,
|
|
82
|
+
sqlState: err.sqlState
|
|
83
|
+
});
|
|
84
|
+
reject(new Error(`SQL Error: ${err.message} (Code: ${err.code})`));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const columns = stmt.getColumns().map(col => col.getName());
|
|
88
|
+
const result = {
|
|
89
|
+
columns,
|
|
90
|
+
rows: rows || [],
|
|
91
|
+
rowCount: rows?.length || 0,
|
|
92
|
+
executionTime,
|
|
93
|
+
query: sqlText
|
|
94
|
+
};
|
|
95
|
+
console.log(`Query executed successfully: ${sqlText.substring(0, 100)}${sqlText.length > 100 ? '...' : ''} (${executionTime}ms)`);
|
|
96
|
+
resolve(result);
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
});
|
|
77
100
|
});
|
|
78
|
-
}
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
console.error('Connection Error:', error.message);
|
|
104
|
+
throw new Error(`Failed to execute query: ${error.message}`);
|
|
105
|
+
}
|
|
79
106
|
}
|
|
80
107
|
async listDatabases() {
|
|
81
108
|
return this.executeQuery('SHOW DATABASES');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snowflake.service.js","sourceRoot":"","sources":["../../src/services/snowflake.service.ts"],"names":[],"mappings":";;;;;;AAAA,kEAAsC;
|
|
1
|
+
{"version":3,"file":"snowflake.service.js","sourceRoot":"","sources":["../../src/services/snowflake.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naganpm/snowflake-mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "MCP server for Snowflake database integration",
|
|
5
|
-
"main": "dist/
|
|
6
|
-
"types": "dist/
|
|
5
|
+
"main": "dist/mcp-server.js",
|
|
6
|
+
"types": "dist/mcp-server.d.ts",
|
|
7
7
|
"bin": {
|
|
8
8
|
"snowflake-mcp-server": "dist/mcp-server.js"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc",
|
|
12
|
-
"dev": "ts-node src/
|
|
13
|
-
"
|
|
12
|
+
"dev": "ts-node src/mcp-server.ts",
|
|
13
|
+
"dev:express": "ts-node src/index.ts",
|
|
14
|
+
"start": "node dist/mcp-server.js",
|
|
15
|
+
"start:express": "node dist/index.js",
|
|
14
16
|
"watch": "tsc --watch",
|
|
15
17
|
"clean": "rm -rf dist",
|
|
16
18
|
"prepare": "npm run build"
|