universal-db-mcp 2.5.0 โ 2.6.0
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 +63 -24
- package/README.zh-CN.md +63 -24
- package/dist/http/middleware/auth.d.ts.map +1 -1
- package/dist/http/middleware/auth.js +8 -3
- package/dist/http/middleware/auth.js.map +1 -1
- package/dist/http/routes/index.d.ts.map +1 -1
- package/dist/http/routes/index.js +3 -0
- package/dist/http/routes/index.js.map +1 -1
- package/dist/http/routes/mcp-sse.d.ts +11 -0
- package/dist/http/routes/mcp-sse.d.ts.map +1 -0
- package/dist/http/routes/mcp-sse.js +303 -0
- package/dist/http/routes/mcp-sse.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +15 -1
- package/dist/mcp/mcp-server.d.ts.map +1 -1
- package/dist/mcp/mcp-server.js +22 -4
- package/dist/mcp/mcp-server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -53,7 +53,7 @@ AI: Let me query that for you...
|
|
|
53
53
|
## โจ Features
|
|
54
54
|
|
|
55
55
|
- **17 Database Support** - MySQL, PostgreSQL, Redis, Oracle, SQL Server, MongoDB, SQLite, and 10 Chinese domestic databases
|
|
56
|
-
- **
|
|
56
|
+
- **Flexible Architecture** - 2 startup modes (stdio/http) with 4 access methods: MCP stdio, MCP SSE, MCP Streamable HTTP, and REST API
|
|
57
57
|
- **Security First** - Read-only mode by default prevents accidental data modifications
|
|
58
58
|
- **Intelligent Caching** - Schema caching with configurable TTL for blazing-fast performance
|
|
59
59
|
- **Batch Query Optimization** - Up to 100x faster schema retrieval for large databases
|
|
@@ -123,6 +123,38 @@ npx universal-db-mcp
|
|
|
123
123
|
curl http://localhost:3000/api/health
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
+
### MCP SSE Mode (Dify and Remote Access)
|
|
127
|
+
|
|
128
|
+
When running in HTTP mode, the server also exposes MCP protocol endpoints via SSE (Server-Sent Events) and Streamable HTTP. This allows platforms like Dify to connect using the MCP protocol directly.
|
|
129
|
+
|
|
130
|
+
**SSE Endpoint (Legacy):**
|
|
131
|
+
```
|
|
132
|
+
GET http://localhost:3000/sse?type=mysql&host=localhost&port=3306&user=root&password=xxx&database=mydb
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Streamable HTTP Endpoint (MCP 2025 Spec, Recommended):**
|
|
136
|
+
```
|
|
137
|
+
POST http://localhost:3000/mcp
|
|
138
|
+
Headers:
|
|
139
|
+
X-DB-Type: mysql
|
|
140
|
+
X-DB-Host: localhost
|
|
141
|
+
X-DB-Port: 3306
|
|
142
|
+
X-DB-User: root
|
|
143
|
+
X-DB-Password: your_password
|
|
144
|
+
X-DB-Database: your_database
|
|
145
|
+
Body: MCP JSON-RPC request
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
| Endpoint | Method | Description |
|
|
149
|
+
|----------|--------|-------------|
|
|
150
|
+
| `/sse` | GET | Establish SSE connection (legacy) |
|
|
151
|
+
| `/sse/message` | POST | Send message to SSE session |
|
|
152
|
+
| `/mcp` | POST | Streamable HTTP endpoint (recommended) |
|
|
153
|
+
| `/mcp` | GET | SSE stream for Streamable HTTP |
|
|
154
|
+
| `/mcp` | DELETE | Close session |
|
|
155
|
+
|
|
156
|
+
See [Dify Integration Guide](./docs/integrations/DIFY.md) for detailed setup instructions.
|
|
157
|
+
|
|
126
158
|
## ๐ Supported Databases
|
|
127
159
|
|
|
128
160
|
| Database | Type | Default Port | Category |
|
|
@@ -148,29 +180,36 @@ curl http://localhost:3000/api/health
|
|
|
148
180
|
## ๐๏ธ Architecture
|
|
149
181
|
|
|
150
182
|
```
|
|
151
|
-
|
|
152
|
-
โ
|
|
153
|
-
|
|
154
|
-
โ
|
|
155
|
-
โ
|
|
156
|
-
โ โ
|
|
157
|
-
โ โ
|
|
158
|
-
โ
|
|
159
|
-
โ
|
|
160
|
-
โ
|
|
161
|
-
โ
|
|
162
|
-
โ
|
|
163
|
-
โ โ
|
|
164
|
-
โ โ
|
|
165
|
-
โ
|
|
166
|
-
โ
|
|
167
|
-
โ
|
|
168
|
-
โ
|
|
169
|
-
โ โ
|
|
170
|
-
โ โ
|
|
171
|
-
โ
|
|
172
|
-
โ
|
|
173
|
-
|
|
183
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
184
|
+
โ Universal DB MCP โ
|
|
185
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
186
|
+
โ โ
|
|
187
|
+
โ Startup Modes: โ
|
|
188
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
189
|
+
โ โ stdio mode โ http mode โ โ
|
|
190
|
+
โ โ (npm run start:mcp) โ (npm run start:http) โ โ
|
|
191
|
+
โ โโโโโโโโโโโโฌโโโโโโโโโโโดโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
192
|
+
โ โ โ โ
|
|
193
|
+
โ Access Methods: โ โ
|
|
194
|
+
โ โโโโโโโโโโโโผโโโโโโโโโโโ โโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
195
|
+
โ โ MCP stdio โ โ MCP SSE โ MCP Streamable โ REST โ โ
|
|
196
|
+
โ โ (Claude Desktop) โ โ (legacy) โ HTTP (recommended)โ API โ โ
|
|
197
|
+
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โโโโโโโโโโโโฌโโโโโโโโโโโโโโฌโโโโโโโฌโโโโ โ
|
|
198
|
+
โ โ โ โ โ โ
|
|
199
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโ โ
|
|
200
|
+
โ โ โ
|
|
201
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
202
|
+
โ โ Core Business Logic โ โ
|
|
203
|
+
โ โ โข Query Execution โข Schema Caching โ โ
|
|
204
|
+
โ โ โข Safety Validation โข Connection Management โ โ
|
|
205
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
206
|
+
โ โผ โ
|
|
207
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
208
|
+
โ โ Database Adapter Layer โ โ
|
|
209
|
+
โ โ MySQL โ PostgreSQL โ Redis โ Oracle โ MongoDB โ ... โ โ
|
|
210
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
211
|
+
โ โ
|
|
212
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
174
213
|
```
|
|
175
214
|
|
|
176
215
|
## ๐ Security
|
package/README.zh-CN.md
CHANGED
|
@@ -53,7 +53,7 @@ AI: ่ฎฉๆๅธฎไฝ ๆฅ่ฏขไธไธ...
|
|
|
53
53
|
## โจ ็นๆง
|
|
54
54
|
|
|
55
55
|
- **ๆฏๆ 17 ็งๆฐๆฎๅบ** - MySQLใPostgreSQLใRedisใOracleใSQL ServerใMongoDBใSQLite๏ผไปฅๅ 10 ็งๅฝไบงๆฐๆฎๅบ
|
|
56
|
-
-
|
|
56
|
+
- **็ตๆดปๆถๆ** - 2 ็งๅฏๅจๆจกๅผ๏ผstdio/http๏ผ๏ผ4 ็งๆฅๅ
ฅๆนๅผ๏ผMCP stdioใMCP SSEใMCP Streamable HTTPใREST API
|
|
57
57
|
- **ๅฎๅ
จ็ฌฌไธ** - ้ป่ฎคๅช่ฏปๆจกๅผ๏ผ้ฒๆญขๆๅค็ๆฐๆฎไฟฎๆน
|
|
58
58
|
- **ๆบ่ฝ็ผๅญ** - Schema ็ผๅญๆฏๆๅฏ้
็ฝฎ็ TTL๏ผๆง่ฝๆ้
|
|
59
59
|
- **ๆน้ๆฅ่ฏขไผๅ** - ๅคงๅๆฐๆฎๅบ็ Schema ่ทๅ้ๅบฆๆๅ้ซ่พพ 100 ๅ
|
|
@@ -123,6 +123,38 @@ npx universal-db-mcp
|
|
|
123
123
|
curl http://localhost:3000/api/health
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
+
### MCP SSE ๆจกๅผ๏ผDify ๅ่ฟ็จ่ฎฟ้ฎ๏ผ
|
|
127
|
+
|
|
128
|
+
ๅจ HTTP ๆจกๅผไธ่ฟ่กๆถ๏ผๆๅกๅจ่ฟไผ้่ฟ SSE๏ผServer-Sent Events๏ผๅ Streamable HTTP ๆด้ฒ MCP ๅ่ฎฎ็ซฏ็นใ่ฟไฝฟๅพ Dify ็ญๅนณๅฐๅฏไปฅ็ดๆฅไฝฟ็จ MCP ๅ่ฎฎ่ฟๆฅใ
|
|
129
|
+
|
|
130
|
+
**SSE ็ซฏ็น๏ผไผ ็ปๆนๅผ๏ผ๏ผ**
|
|
131
|
+
```
|
|
132
|
+
GET http://localhost:3000/sse?type=mysql&host=localhost&port=3306&user=root&password=xxx&database=mydb
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Streamable HTTP ็ซฏ็น๏ผMCP 2025 ่ง่๏ผๆจ่๏ผ๏ผ**
|
|
136
|
+
```
|
|
137
|
+
POST http://localhost:3000/mcp
|
|
138
|
+
่ฏทๆฑๅคด๏ผ
|
|
139
|
+
X-DB-Type: mysql
|
|
140
|
+
X-DB-Host: localhost
|
|
141
|
+
X-DB-Port: 3306
|
|
142
|
+
X-DB-User: root
|
|
143
|
+
X-DB-Password: your_password
|
|
144
|
+
X-DB-Database: your_database
|
|
145
|
+
่ฏทๆฑไฝ๏ผMCP JSON-RPC ่ฏทๆฑ
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
| ็ซฏ็น | ๆนๆณ | ่ฏดๆ |
|
|
149
|
+
|------|------|------|
|
|
150
|
+
| `/sse` | GET | ๅปบ็ซ SSE ่ฟๆฅ๏ผไผ ็ปๆนๅผ๏ผ |
|
|
151
|
+
| `/sse/message` | POST | ๅ SSE ไผ่ฏๅ้ๆถๆฏ |
|
|
152
|
+
| `/mcp` | POST | Streamable HTTP ็ซฏ็น๏ผๆจ่๏ผ |
|
|
153
|
+
| `/mcp` | GET | Streamable HTTP ็ SSE ๆต |
|
|
154
|
+
| `/mcp` | DELETE | ๅ
ณ้ญไผ่ฏ |
|
|
155
|
+
|
|
156
|
+
่ฏฆ็ป้
็ฝฎ่ฏดๆ่ฏทๅ้
[Dify ้ๆๆๅ](./docs/integrations/DIFY.zh-CN.md)ใ
|
|
157
|
+
|
|
126
158
|
## ๐ ๆฏๆ็ๆฐๆฎๅบ
|
|
127
159
|
|
|
128
160
|
| ๆฐๆฎๅบ | ็ฑปๅๅๆฐ | ้ป่ฎค็ซฏๅฃ | ๅ็ฑป |
|
|
@@ -148,29 +180,36 @@ curl http://localhost:3000/api/health
|
|
|
148
180
|
## ๐๏ธ ๆถๆ
|
|
149
181
|
|
|
150
182
|
```
|
|
151
|
-
|
|
152
|
-
โ
|
|
153
|
-
|
|
154
|
-
โ
|
|
155
|
-
โ
|
|
156
|
-
โ โ
|
|
157
|
-
โ โ
|
|
158
|
-
โ
|
|
159
|
-
โ
|
|
160
|
-
โ
|
|
161
|
-
โ
|
|
162
|
-
โ
|
|
163
|
-
โ โ
|
|
164
|
-
โ โ
|
|
165
|
-
โ
|
|
166
|
-
โ
|
|
167
|
-
โ
|
|
168
|
-
โ
|
|
169
|
-
โ โ
|
|
170
|
-
โ โ
|
|
171
|
-
โ
|
|
172
|
-
โ
|
|
173
|
-
|
|
183
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
184
|
+
โ Universal DB MCP โ
|
|
185
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
186
|
+
โ โ
|
|
187
|
+
โ ๅฏๅจๆจกๅผ๏ผ โ
|
|
188
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
189
|
+
โ โ stdio ๆจกๅผ โ http ๆจกๅผ โ โ
|
|
190
|
+
โ โ (npm run start:mcp) โ (npm run start:http) โ โ
|
|
191
|
+
โ โโโโโโโโโโโโฌโโโโโโโโโโโโดโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
192
|
+
โ โ โ โ
|
|
193
|
+
โ ๆฅๅ
ฅๆนๅผ๏ผ โ โ
|
|
194
|
+
โ โโโโโโโโโโโโผโโโโโโโโโโโ โโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
195
|
+
โ โ MCP stdio โ โ MCP SSE โ MCP Streamable โ REST โ โ
|
|
196
|
+
โ โ (Claude Desktop) โ โ (ไผ ็ป) โ HTTP (ๆจ่) โ API โ โ
|
|
197
|
+
โ โโโโโโโโโโโโฌโโโโโโโโโโโ โโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโฌโโโโโโโโ โ
|
|
198
|
+
โ โ โ โ โ โ
|
|
199
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโ โ
|
|
200
|
+
โ โ โ
|
|
201
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
202
|
+
โ โ ๆ ธๅฟไธๅก้ป่พๅฑ โ โ
|
|
203
|
+
โ โ โข ๆฅ่ฏขๆง่ก โข Schema ็ผๅญ โ โ
|
|
204
|
+
โ โ โข ๅฎๅ
จๆ ก้ช โข ่ฟๆฅ็ฎก็ โ โ
|
|
205
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
206
|
+
โ โผ โ
|
|
207
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
208
|
+
โ โ ๆฐๆฎๅบ้้
ๅจๅฑ โ โ
|
|
209
|
+
โ โ MySQL โ PostgreSQL โ Redis โ Oracle โ MongoDB โ ... โ โ
|
|
210
|
+
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
|
|
211
|
+
โ โ
|
|
212
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
174
213
|
```
|
|
175
214
|
|
|
176
215
|
## ๐ ๅฎๅ
จ
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/http/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/http/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,IAAI,CAAC,CAsDf"}
|
|
@@ -10,11 +10,17 @@ export async function authMiddleware(request, reply, config) {
|
|
|
10
10
|
if (request.url === '/api/health' || request.url === '/api/info') {
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
|
-
// Get API key from header
|
|
13
|
+
// Get API key from header (supports both X-API-Key and Authorization Bearer)
|
|
14
14
|
const apiKey = request.headers['x-api-key'] ||
|
|
15
15
|
(request.headers.authorization?.startsWith('Bearer ')
|
|
16
16
|
? request.headers.authorization.substring(7)
|
|
17
17
|
: null);
|
|
18
|
+
// Check if API keys are configured
|
|
19
|
+
const validKeys = config.http?.apiKeys || [];
|
|
20
|
+
// If no API keys configured, skip authentication (development mode)
|
|
21
|
+
if (validKeys.length === 0) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
18
24
|
if (!apiKey) {
|
|
19
25
|
reply.code(401).send({
|
|
20
26
|
success: false,
|
|
@@ -30,8 +36,7 @@ export async function authMiddleware(request, reply, config) {
|
|
|
30
36
|
return;
|
|
31
37
|
}
|
|
32
38
|
// Validate API key
|
|
33
|
-
|
|
34
|
-
if (validKeys.length > 0 && !validKeys.includes(apiKey)) {
|
|
39
|
+
if (!validKeys.includes(apiKey)) {
|
|
35
40
|
reply.code(403).send({
|
|
36
41
|
success: false,
|
|
37
42
|
error: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/http/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,KAAmB,EACnB,MAAiB;IAEjB,0CAA0C;IAC1C,IAAI,OAAO,CAAC,GAAG,KAAK,aAAa,IAAI,OAAO,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;QACjE,OAAO;IACT,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/http/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAuB,EACvB,KAAmB,EACnB,MAAiB;IAEjB,0CAA0C;IAC1C,IAAI,OAAO,CAAC,GAAG,KAAK,aAAa,IAAI,OAAO,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;QACjE,OAAO;IACT,CAAC;IAED,6EAA6E;IAC7E,MAAM,MAAM,GACV,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;QAC5B,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC;YACnD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;YAC5C,CAAC,CAAC,IAAI,CAAC,CAAC;IAEZ,mCAAmC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;IAE7C,oEAAoE;IACpE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,2EAA2E;aACrF;YACD,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EAAE,OAAO,CAAC,EAAE;aACtB;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAgB,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,iBAAiB;aAC3B;YACD,QAAQ,EAAE;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EAAE,OAAO,CAAC,EAAE;aACtB;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,yCAAyC;IACxC,OAAe,CAAC,MAAM,GAAG,MAAM,CAAC;AACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/routes/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/routes/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAOrE;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,eAAe,EACxB,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC,IAAI,CAAC,CAef"}
|
|
@@ -6,12 +6,15 @@ import { setupHealthRoutes } from './health.js';
|
|
|
6
6
|
import { setupConnectionRoutes } from './connection.js';
|
|
7
7
|
import { setupQueryRoutes } from './query.js';
|
|
8
8
|
import { setupSchemaRoutes } from './schema.js';
|
|
9
|
+
import { setupMcpSseRoutes } from './mcp-sse.js';
|
|
9
10
|
/**
|
|
10
11
|
* Setup all routes
|
|
11
12
|
*/
|
|
12
13
|
export async function setupRoutes(fastify, connectionManager) {
|
|
13
14
|
// Health and info routes (no auth required)
|
|
14
15
|
await setupHealthRoutes(fastify);
|
|
16
|
+
// MCP SSE routes (no auth required, uses its own session management)
|
|
17
|
+
await setupMcpSseRoutes(fastify);
|
|
15
18
|
// Connection routes
|
|
16
19
|
await setupConnectionRoutes(fastify, connectionManager);
|
|
17
20
|
// Query routes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/routes/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/routes/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAwB,EACxB,iBAAoC;IAEpC,4CAA4C;IAC5C,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEjC,qEAAqE;IACrE,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEjC,oBAAoB;IACpB,MAAM,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAExD,eAAe;IACf,MAAM,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAEnD,gBAAgB;IAChB,MAAM,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP SSE Routes
|
|
3
|
+
* ๆไพ MCP over SSE/Streamable HTTP ไผ ่พๆฏๆ
|
|
4
|
+
* ไฝฟ Dify ็ญๅนณๅฐๅฏไปฅ้่ฟ MCP ๅ่ฎฎ็ดๆฅ่ฐ็จ
|
|
5
|
+
*/
|
|
6
|
+
import type { FastifyInstance } from 'fastify';
|
|
7
|
+
/**
|
|
8
|
+
* ่ฎพ็ฝฎ MCP SSE ่ทฏ็ฑ
|
|
9
|
+
*/
|
|
10
|
+
export declare function setupMcpSseRoutes(fastify: FastifyInstance): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=mcp-sse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-sse.d.ts","sourceRoot":"","sources":["../../../src/http/routes/mcp-sse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AA4E7E;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiQ/E"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP SSE Routes
|
|
3
|
+
* ๆไพ MCP over SSE/Streamable HTTP ไผ ่พๆฏๆ
|
|
4
|
+
* ไฝฟ Dify ็ญๅนณๅฐๅฏไปฅ้่ฟ MCP ๅ่ฎฎ็ดๆฅ่ฐ็จ
|
|
5
|
+
*/
|
|
6
|
+
import { randomUUID } from 'node:crypto';
|
|
7
|
+
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
|
|
8
|
+
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
9
|
+
import { isInitializeRequest } from '@modelcontextprotocol/sdk/types.js';
|
|
10
|
+
import { DatabaseMCPServer } from '../../mcp/mcp-server.js';
|
|
11
|
+
import { createAdapter } from '../../utils/adapter-factory.js';
|
|
12
|
+
const SUPPORTED_DB_TYPES = [
|
|
13
|
+
'mysql', 'postgres', 'redis', 'oracle', 'dm', 'sqlserver', 'mongodb', 'sqlite',
|
|
14
|
+
'kingbase', 'gaussdb', 'oceanbase', 'tidb', 'clickhouse', 'polardb', 'vastbase', 'highgo', 'goldendb'
|
|
15
|
+
];
|
|
16
|
+
// ๅญๅจๆดป่ท็ SSE ไผ ่พๅฎไพ๏ผๆ sessionId๏ผ
|
|
17
|
+
const sseTransports = new Map();
|
|
18
|
+
// ๅญๅจๆดป่ท็ Streamable HTTP ไผ ่พๅฎไพ๏ผๆ sessionId๏ผ
|
|
19
|
+
const streamableTransports = new Map();
|
|
20
|
+
// ๅญๅจ MCP ๆๅกๅจๅฎไพ๏ผๆ sessionId๏ผ
|
|
21
|
+
const mcpServers = new Map();
|
|
22
|
+
/**
|
|
23
|
+
* ้ช่ฏๆฐๆฎๅบ็ฑปๅ
|
|
24
|
+
*/
|
|
25
|
+
function isValidDbType(type) {
|
|
26
|
+
return SUPPORTED_DB_TYPES.includes(type);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* ไป่ฏทๆฑไธญ่งฃๆๆฐๆฎๅบ้
็ฝฎ
|
|
30
|
+
*/
|
|
31
|
+
function parseDbConfigFromQuery(query) {
|
|
32
|
+
const type = query.type;
|
|
33
|
+
if (!type || !isValidDbType(type))
|
|
34
|
+
return null;
|
|
35
|
+
return {
|
|
36
|
+
type,
|
|
37
|
+
host: query.host,
|
|
38
|
+
port: query.port ? parseInt(query.port, 10) : undefined,
|
|
39
|
+
user: query.user,
|
|
40
|
+
password: query.password,
|
|
41
|
+
database: query.database,
|
|
42
|
+
filePath: query.filePath,
|
|
43
|
+
allowWrite: query.allowWrite === 'true',
|
|
44
|
+
oracleClientPath: query.oracleClientPath,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* ๅๅปบๅนถๅๅงๅ MCP ๆๅกๅจ
|
|
49
|
+
*/
|
|
50
|
+
async function createMcpServer(config) {
|
|
51
|
+
const mcpServer = new DatabaseMCPServer(config);
|
|
52
|
+
const adapter = createAdapter(config);
|
|
53
|
+
mcpServer.setAdapter(adapter);
|
|
54
|
+
await mcpServer.connectDatabase();
|
|
55
|
+
return mcpServer;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* ๆธ
็ไผ่ฏ่ตๆบ
|
|
59
|
+
*/
|
|
60
|
+
async function cleanupSession(sessionId) {
|
|
61
|
+
const mcpServer = mcpServers.get(sessionId);
|
|
62
|
+
if (mcpServer) {
|
|
63
|
+
await mcpServer.stop();
|
|
64
|
+
mcpServers.delete(sessionId);
|
|
65
|
+
}
|
|
66
|
+
sseTransports.delete(sessionId);
|
|
67
|
+
streamableTransports.delete(sessionId);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* ่ฎพ็ฝฎ MCP SSE ่ทฏ็ฑ
|
|
71
|
+
*/
|
|
72
|
+
export async function setupMcpSseRoutes(fastify) {
|
|
73
|
+
/**
|
|
74
|
+
* SSE ็ซฏ็น - ็จไบๅปบ็ซ SSE ่ฟๆฅ๏ผไผ ็ป SSE ๆจกๅผ๏ผ
|
|
75
|
+
* GET /sse?type=mysql&host=localhost&port=3306&user=root&password=xxx&database=mydb
|
|
76
|
+
*/
|
|
77
|
+
fastify.get('/sse', async (request, reply) => {
|
|
78
|
+
const query = request.query;
|
|
79
|
+
const config = parseDbConfigFromQuery(query);
|
|
80
|
+
if (!config) {
|
|
81
|
+
return reply.code(400).send({
|
|
82
|
+
success: false,
|
|
83
|
+
error: {
|
|
84
|
+
code: 'INVALID_CONFIG',
|
|
85
|
+
message: 'Missing required database configuration. Please provide at least "type" parameter.',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
// ๅๅปบ MCP ๆๅกๅจ
|
|
91
|
+
const mcpServer = await createMcpServer(config);
|
|
92
|
+
// ่ทๅๅๅง็ Node.js response ๅฏน่ฑก
|
|
93
|
+
const res = reply.raw;
|
|
94
|
+
// ๅๅปบ SSE ไผ ่พ
|
|
95
|
+
const transport = new SSEServerTransport('/sse/message', res);
|
|
96
|
+
const sessionId = transport.sessionId;
|
|
97
|
+
// ๅญๅจๅฎไพ
|
|
98
|
+
sseTransports.set(sessionId, transport);
|
|
99
|
+
mcpServers.set(sessionId, mcpServer);
|
|
100
|
+
// ่ฎพ็ฝฎๅ
ณ้ญๅค็
|
|
101
|
+
transport.onclose = async () => {
|
|
102
|
+
console.error(`SSE session ${sessionId} closed`);
|
|
103
|
+
await cleanupSession(sessionId);
|
|
104
|
+
};
|
|
105
|
+
// ่ฟๆฅ MCP ๆๅกๅจๅฐไผ ่พๅฑ๏ผconnect ไผ่ชๅจ่ฐ็จ transport.start()๏ผ
|
|
106
|
+
await mcpServer.getServer().connect(transport);
|
|
107
|
+
console.error(`๐ SSE session started: ${sessionId}`);
|
|
108
|
+
// SSE ่ฟๆฅ้่ฆไฟๆๆๅผ๏ผไธ่ฟๅไปปไฝๅ
ๅฎน
|
|
109
|
+
// Fastify ไผ่ชๅจๅค็๏ผๅ ไธบ response ๅทฒ็ป่ขซ SSE transport ๆฅ็ฎก
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
113
|
+
console.error(`โ SSE connection error: ${errorMessage}`);
|
|
114
|
+
// ๅชๆๅจ headers ่ฟๆฒกๅ้ๆถๆ่ฟๅ้่ฏฏ
|
|
115
|
+
if (!reply.raw.headersSent) {
|
|
116
|
+
return reply.code(500).send({
|
|
117
|
+
success: false,
|
|
118
|
+
error: {
|
|
119
|
+
code: 'CONNECTION_ERROR',
|
|
120
|
+
message: errorMessage,
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
/**
|
|
127
|
+
* SSE ๆถๆฏ็ซฏ็น - ๆฅๆถๅฎขๆท็ซฏๅ้็ๆถๆฏ๏ผไผ ็ป SSE ๆจกๅผ๏ผ
|
|
128
|
+
* POST /sse/message?sessionId=xxx
|
|
129
|
+
*/
|
|
130
|
+
fastify.post('/sse/message', async (request, reply) => {
|
|
131
|
+
const query = request.query;
|
|
132
|
+
const sessionId = query.sessionId;
|
|
133
|
+
if (!sessionId) {
|
|
134
|
+
return reply.code(400).send({
|
|
135
|
+
success: false,
|
|
136
|
+
error: {
|
|
137
|
+
code: 'MISSING_SESSION_ID',
|
|
138
|
+
message: 'Session ID is required',
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
const transport = sseTransports.get(sessionId);
|
|
143
|
+
if (!transport) {
|
|
144
|
+
return reply.code(404).send({
|
|
145
|
+
success: false,
|
|
146
|
+
error: {
|
|
147
|
+
code: 'SESSION_NOT_FOUND',
|
|
148
|
+
message: 'Session not found or expired',
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
try {
|
|
153
|
+
// ่ทๅๅๅง็ Node.js request/response ๅฏน่ฑก
|
|
154
|
+
const req = request.raw;
|
|
155
|
+
const res = reply.raw;
|
|
156
|
+
await transport.handlePostMessage(req, res, request.body);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
160
|
+
console.error(`โ SSE message error: ${errorMessage}`);
|
|
161
|
+
return reply.code(500).send({
|
|
162
|
+
success: false,
|
|
163
|
+
error: {
|
|
164
|
+
code: 'MESSAGE_ERROR',
|
|
165
|
+
message: errorMessage,
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
/**
|
|
171
|
+
* Streamable HTTP ็ซฏ็น - MCP 2025 ๆฐ่ง่
|
|
172
|
+
* POST /mcp
|
|
173
|
+
*
|
|
174
|
+
* ๆฐๆฎๅบ้
็ฝฎ้่ฟ่ฏทๆฑๅคดไผ ้๏ผ
|
|
175
|
+
* X-DB-Type, X-DB-Host, X-DB-Port, X-DB-User, X-DB-Password, X-DB-Database, X-DB-Allow-Write
|
|
176
|
+
*/
|
|
177
|
+
fastify.post('/mcp', async (request, reply) => {
|
|
178
|
+
const headers = request.headers;
|
|
179
|
+
const body = request.body;
|
|
180
|
+
// ไป่ฏทๆฑๅคด่งฃๆๆฐๆฎๅบ็ฑปๅ
|
|
181
|
+
const dbType = headers['x-db-type'];
|
|
182
|
+
try {
|
|
183
|
+
// ๆฃๆฅๆฏๅฆๆ็ฐๆไผ่ฏ
|
|
184
|
+
const sessionId = headers['mcp-session-id'];
|
|
185
|
+
let transport;
|
|
186
|
+
if (sessionId && streamableTransports.has(sessionId)) {
|
|
187
|
+
// ๅค็จ็ฐๆไผ ่พ
|
|
188
|
+
transport = streamableTransports.get(sessionId);
|
|
189
|
+
}
|
|
190
|
+
else if (!sessionId && isInitializeRequest(body)) {
|
|
191
|
+
// ๆฐ็ๅๅงๅ่ฏทๆฑ
|
|
192
|
+
if (!dbType || !isValidDbType(dbType)) {
|
|
193
|
+
return reply.code(400).send({
|
|
194
|
+
jsonrpc: '2.0',
|
|
195
|
+
error: {
|
|
196
|
+
code: -32000,
|
|
197
|
+
message: 'Missing or invalid database configuration. Please provide valid X-DB-Type header.',
|
|
198
|
+
},
|
|
199
|
+
id: null,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// ๆๅปบๆฐๆฎๅบ้
็ฝฎ
|
|
203
|
+
const config = {
|
|
204
|
+
type: dbType,
|
|
205
|
+
host: headers['x-db-host'],
|
|
206
|
+
port: headers['x-db-port'] ? parseInt(headers['x-db-port'], 10) : undefined,
|
|
207
|
+
user: headers['x-db-user'],
|
|
208
|
+
password: headers['x-db-password'],
|
|
209
|
+
database: headers['x-db-database'],
|
|
210
|
+
filePath: headers['x-db-filepath'],
|
|
211
|
+
allowWrite: headers['x-db-allow-write'] === 'true',
|
|
212
|
+
oracleClientPath: headers['x-db-oracle-client-path'],
|
|
213
|
+
};
|
|
214
|
+
// ๅๅปบ MCP ๆๅกๅจ
|
|
215
|
+
const mcpServer = await createMcpServer(config);
|
|
216
|
+
// ๅๅปบ Streamable HTTP ไผ ่พ
|
|
217
|
+
transport = new StreamableHTTPServerTransport({
|
|
218
|
+
sessionIdGenerator: () => randomUUID(),
|
|
219
|
+
onsessioninitialized: (newSessionId) => {
|
|
220
|
+
console.error(`๐ MCP session initialized: ${newSessionId}`);
|
|
221
|
+
streamableTransports.set(newSessionId, transport);
|
|
222
|
+
mcpServers.set(newSessionId, mcpServer);
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
// ่ฟๆฅ MCP ๆๅกๅจๅฐไผ ่พๅฑ๏ผไฝฟ็จ getServer() ้ฟๅ
้ๅค่ฐ็จ start๏ผ
|
|
226
|
+
await mcpServer.getServer().connect(transport);
|
|
227
|
+
// ๅค็่ฏทๆฑ
|
|
228
|
+
await transport.handleRequest(request.raw, reply.raw, body);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// ๆ ๆ่ฏทๆฑ
|
|
233
|
+
return reply.code(400).send({
|
|
234
|
+
jsonrpc: '2.0',
|
|
235
|
+
error: {
|
|
236
|
+
code: -32000,
|
|
237
|
+
message: 'Bad Request: No valid session ID provided',
|
|
238
|
+
},
|
|
239
|
+
id: null,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
// ไฝฟ็จ็ฐๆไผ ่พๅค็่ฏทๆฑ
|
|
243
|
+
await transport.handleRequest(request.raw, reply.raw, body);
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
247
|
+
console.error(`โ MCP request error: ${errorMessage}`);
|
|
248
|
+
if (!reply.sent) {
|
|
249
|
+
return reply.code(500).send({
|
|
250
|
+
jsonrpc: '2.0',
|
|
251
|
+
error: {
|
|
252
|
+
code: -32603,
|
|
253
|
+
message: errorMessage,
|
|
254
|
+
},
|
|
255
|
+
id: null,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
/**
|
|
261
|
+
* Streamable HTTP GET ็ซฏ็น - ็จไบ SSE ๆต
|
|
262
|
+
* GET /mcp
|
|
263
|
+
*/
|
|
264
|
+
fastify.get('/mcp', async (request, reply) => {
|
|
265
|
+
const sessionId = request.headers['mcp-session-id'];
|
|
266
|
+
if (!sessionId || !streamableTransports.has(sessionId)) {
|
|
267
|
+
return reply.code(400).send({
|
|
268
|
+
jsonrpc: '2.0',
|
|
269
|
+
error: {
|
|
270
|
+
code: -32000,
|
|
271
|
+
message: 'Bad Request: No valid session ID provided',
|
|
272
|
+
},
|
|
273
|
+
id: null,
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
const transport = streamableTransports.get(sessionId);
|
|
277
|
+
await transport.handleRequest(request.raw, reply.raw);
|
|
278
|
+
});
|
|
279
|
+
/**
|
|
280
|
+
* ๅ ้คไผ่ฏ็ซฏ็น
|
|
281
|
+
* DELETE /mcp?sessionId=xxx
|
|
282
|
+
*/
|
|
283
|
+
fastify.delete('/mcp', async (request, reply) => {
|
|
284
|
+
const query = request.query;
|
|
285
|
+
const sessionId = query.sessionId || request.headers['mcp-session-id'];
|
|
286
|
+
if (!sessionId) {
|
|
287
|
+
return reply.code(400).send({
|
|
288
|
+
success: false,
|
|
289
|
+
error: {
|
|
290
|
+
code: 'MISSING_SESSION_ID',
|
|
291
|
+
message: 'Session ID is required',
|
|
292
|
+
},
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
await cleanupSession(sessionId);
|
|
296
|
+
return reply.send({
|
|
297
|
+
success: true,
|
|
298
|
+
message: 'Session closed',
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
console.error('๐ก MCP SSE/Streamable HTTP routes registered');
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=mcp-sse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-sse.js","sourceRoot":"","sources":["../../../src/http/routes/mcp-sse.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/mcp-server.d.ts
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* MCP ๆฐๆฎๅบไธ่ฝ่ฟๆฅๅจ - ไธปๆๅกๅจ
|
|
4
4
|
* ้่ฟ Model Context Protocol ่ฎฉ Claude Desktop ่ฟๆฅๆฐๆฎๅบ
|
|
5
5
|
*/
|
|
6
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
7
|
+
import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
6
8
|
import type { DbAdapter, DbConfig } from '../types/adapter.js';
|
|
7
9
|
import { SchemaCacheConfig } from '../core/database-service.js';
|
|
8
10
|
/**
|
|
@@ -24,7 +26,19 @@ export declare class DatabaseMCPServer {
|
|
|
24
26
|
*/
|
|
25
27
|
setAdapter(adapter: DbAdapter): void;
|
|
26
28
|
/**
|
|
27
|
-
*
|
|
29
|
+
* ่ทๅ MCP Server ๅฎไพ๏ผ็จไบ SSE/HTTP ไผ ่พ๏ผ
|
|
30
|
+
*/
|
|
31
|
+
getServer(): Server;
|
|
32
|
+
/**
|
|
33
|
+
* ่ฟๆฅๆฐๆฎๅบ๏ผไธๅฏๅจไผ ่พๅฑ๏ผ
|
|
34
|
+
*/
|
|
35
|
+
connectDatabase(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* ไฝฟ็จๆๅฎ็ไผ ่พๅฑ่ฟๆฅ MCP ๆๅกๅจ
|
|
38
|
+
*/
|
|
39
|
+
connect(transport: Transport): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* ๅฏๅจๆๅกๅจ๏ผไฝฟ็จ stdio ไผ ่พ๏ผ็จไบ Claude Desktop๏ผ
|
|
28
42
|
*/
|
|
29
43
|
start(): Promise<void>;
|
|
30
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-server.ts"],"names":[],"mappings":";AAEA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../../src/mcp/mcp-server.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAMnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAmB,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEjF;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,eAAe,CAAgC;IACvD,OAAO,CAAC,WAAW,CAA6B;gBAEpC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAkBtE;;OAEG;IACH,OAAO,CAAC,aAAa;IAoLrB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI;IAKpC;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtC;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAS5B"}
|
package/dist/mcp/mcp-server.js
CHANGED
|
@@ -200,11 +200,17 @@ export class DatabaseMCPServer {
|
|
|
200
200
|
this.databaseService = new DatabaseService(adapter, this.config, this.cacheConfig);
|
|
201
201
|
}
|
|
202
202
|
/**
|
|
203
|
-
*
|
|
203
|
+
* ่ทๅ MCP Server ๅฎไพ๏ผ็จไบ SSE/HTTP ไผ ่พ๏ผ
|
|
204
204
|
*/
|
|
205
|
-
|
|
205
|
+
getServer() {
|
|
206
|
+
return this.server;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* ่ฟๆฅๆฐๆฎๅบ๏ผไธๅฏๅจไผ ่พๅฑ๏ผ
|
|
210
|
+
*/
|
|
211
|
+
async connectDatabase() {
|
|
206
212
|
if (!this.adapter) {
|
|
207
|
-
throw new Error('
|
|
213
|
+
throw new Error('ๅฟ
้กปๅ
่ฎพ็ฝฎๆฐๆฎๅบ้้
ๅจๆ่ฝ่ฟๆฅๆฐๆฎๅบ');
|
|
208
214
|
}
|
|
209
215
|
// ่ฟๆฅๆฐๆฎๅบ
|
|
210
216
|
console.error('๐ ๆญฃๅจ่ฟๆฅๆฐๆฎๅบ...');
|
|
@@ -219,7 +225,19 @@ export class DatabaseMCPServer {
|
|
|
219
225
|
}
|
|
220
226
|
// ๆพ็คบ็ผๅญ้
็ฝฎ
|
|
221
227
|
console.error('๐ฆ Schema ็ผๅญๅทฒๅฏ็จ (้ป่ฎค TTL: 5 ๅ้)');
|
|
222
|
-
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* ไฝฟ็จๆๅฎ็ไผ ่พๅฑ่ฟๆฅ MCP ๆๅกๅจ
|
|
231
|
+
*/
|
|
232
|
+
async connect(transport) {
|
|
233
|
+
await this.server.connect(transport);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* ๅฏๅจๆๅกๅจ๏ผไฝฟ็จ stdio ไผ ่พ๏ผ็จไบ Claude Desktop๏ผ
|
|
237
|
+
*/
|
|
238
|
+
async start() {
|
|
239
|
+
await this.connectDatabase();
|
|
240
|
+
// ๅฏๅจ MCP ๆๅกๅจ๏ผstdio ๆจกๅผ๏ผ
|
|
223
241
|
const transport = new StdioServerTransport();
|
|
224
242
|
await this.server.connect(transport);
|
|
225
243
|
console.error('๐ MCP ๆๅกๅจๅทฒๅฏๅจ๏ผ็ญๅพ
Claude Desktop ่ฟๆฅ...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/mcp/mcp-server.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/mcp/mcp-server.ts"],"names":[],"mappings":"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"}
|