mcp-dbutils 0.9.0__py3-none-any.whl → 0.10.2__py3-none-any.whl
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.
- mcp_dbutils/base.py +69 -12
- mcp_dbutils/config.py +2 -2
- mcp_dbutils/log.py +5 -10
- mcp_dbutils/mysql/__init__.py +6 -0
- mcp_dbutils/mysql/config.py +219 -0
- mcp_dbutils/mysql/handler.py +467 -0
- mcp_dbutils/mysql/server.py +216 -0
- mcp_dbutils/postgres/config.py +80 -19
- {mcp_dbutils-0.9.0.dist-info → mcp_dbutils-0.10.2.dist-info}/METADATA +137 -42
- mcp_dbutils-0.10.2.dist-info/RECORD +22 -0
- mcp_dbutils-0.9.0.dist-info/RECORD +0 -18
- {mcp_dbutils-0.9.0.dist-info → mcp_dbutils-0.10.2.dist-info}/WHEEL +0 -0
- {mcp_dbutils-0.9.0.dist-info → mcp_dbutils-0.10.2.dist-info}/entry_points.txt +0 -0
- {mcp_dbutils-0.9.0.dist-info → mcp_dbutils-0.10.2.dist-info}/licenses/LICENSE +0 -0
mcp_dbutils/postgres/config.py
CHANGED
@@ -1,28 +1,35 @@
|
|
1
1
|
"""PostgreSQL configuration module"""
|
2
2
|
from dataclasses import dataclass
|
3
3
|
from typing import Optional, Dict, Any, Literal
|
4
|
-
from urllib.parse import urlparse
|
4
|
+
from urllib.parse import urlparse, parse_qs
|
5
5
|
from ..config import ConnectionConfig
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
@dataclass
|
8
|
+
class SSLConfig:
|
9
|
+
"""SSL configuration for PostgreSQL connection"""
|
10
|
+
mode: Literal['disable', 'require', 'verify-ca', 'verify-full'] = 'disable'
|
11
|
+
cert: Optional[str] = None
|
12
|
+
key: Optional[str] = None
|
13
|
+
root: Optional[str] = None
|
14
|
+
|
15
|
+
def parse_url(url: str) -> Dict[str, Any]:
|
16
|
+
"""Parse PostgreSQL URL into connection parameters
|
9
17
|
|
10
18
|
Args:
|
11
|
-
|
19
|
+
url: URL (e.g. postgresql://host:port/dbname?sslmode=verify-full)
|
12
20
|
|
13
21
|
Returns:
|
14
|
-
Dictionary of connection parameters
|
22
|
+
Dictionary of connection parameters including SSL settings
|
15
23
|
"""
|
16
|
-
if not
|
17
|
-
raise ValueError("Invalid PostgreSQL
|
24
|
+
if not url.startswith('postgresql://'):
|
25
|
+
raise ValueError("Invalid PostgreSQL URL format")
|
18
26
|
|
19
|
-
# Remove jdbc: prefix and ensure no credentials in URL
|
20
|
-
url = jdbc_url[5:]
|
21
27
|
if '@' in url:
|
22
|
-
raise ValueError("
|
28
|
+
raise ValueError("URL should not contain credentials. Please provide username and password separately.")
|
23
29
|
|
24
|
-
# Parse URL
|
30
|
+
# Parse URL and query parameters
|
25
31
|
parsed = urlparse(url)
|
32
|
+
query_params = parse_qs(parsed.query)
|
26
33
|
|
27
34
|
params = {
|
28
35
|
'host': parsed.hostname or 'localhost',
|
@@ -32,6 +39,24 @@ def parse_jdbc_url(jdbc_url: str) -> Dict[str, str]:
|
|
32
39
|
|
33
40
|
if not params['dbname']:
|
34
41
|
raise ValueError("PostgreSQL database name must be specified in URL")
|
42
|
+
|
43
|
+
# Parse SSL parameters if present
|
44
|
+
ssl_params = {}
|
45
|
+
if 'sslmode' in query_params:
|
46
|
+
mode = query_params['sslmode'][0]
|
47
|
+
if mode not in ['disable', 'require', 'verify-ca', 'verify-full']:
|
48
|
+
raise ValueError(f"Invalid sslmode: {mode}")
|
49
|
+
ssl_params['mode'] = mode
|
50
|
+
|
51
|
+
if 'sslcert' in query_params:
|
52
|
+
ssl_params['cert'] = query_params['sslcert'][0]
|
53
|
+
if 'sslkey' in query_params:
|
54
|
+
ssl_params['key'] = query_params['sslkey'][0]
|
55
|
+
if 'sslrootcert' in query_params:
|
56
|
+
ssl_params['root'] = query_params['sslrootcert'][0]
|
57
|
+
|
58
|
+
if ssl_params:
|
59
|
+
params['ssl'] = SSLConfig(**ssl_params)
|
35
60
|
|
36
61
|
return params
|
37
62
|
|
@@ -44,6 +69,8 @@ class PostgreSQLConfig(ConnectionConfig):
|
|
44
69
|
port: str = '5432'
|
45
70
|
local_host: Optional[str] = None
|
46
71
|
type: Literal['postgres'] = 'postgres'
|
72
|
+
url: Optional[str] = None
|
73
|
+
ssl: Optional[SSLConfig] = None
|
47
74
|
|
48
75
|
@classmethod
|
49
76
|
def from_yaml(cls, yaml_path: str, db_name: str, local_host: Optional[str] = None) -> 'PostgreSQLConfig':
|
@@ -74,9 +101,9 @@ class PostgreSQLConfig(ConnectionConfig):
|
|
74
101
|
raise ValueError("Password must be specified in connection configuration")
|
75
102
|
|
76
103
|
# Get connection parameters
|
77
|
-
if '
|
78
|
-
# Parse
|
79
|
-
params =
|
104
|
+
if 'url' in db_config:
|
105
|
+
# Parse URL for connection parameters
|
106
|
+
params = parse_url(db_config['url'])
|
80
107
|
config = cls(
|
81
108
|
dbname=params['dbname'],
|
82
109
|
user=db_config['user'],
|
@@ -84,6 +111,8 @@ class PostgreSQLConfig(ConnectionConfig):
|
|
84
111
|
host=params['host'],
|
85
112
|
port=params['port'],
|
86
113
|
local_host=local_host,
|
114
|
+
url=db_config['url'],
|
115
|
+
ssl=params.get('ssl')
|
87
116
|
)
|
88
117
|
else:
|
89
118
|
if not db_config.get('dbname'):
|
@@ -92,6 +121,24 @@ class PostgreSQLConfig(ConnectionConfig):
|
|
92
121
|
raise ValueError("Host must be specified in connection configuration")
|
93
122
|
if not db_config.get('port'):
|
94
123
|
raise ValueError("Port must be specified in connection configuration")
|
124
|
+
|
125
|
+
# Parse SSL configuration if present
|
126
|
+
ssl_config = None
|
127
|
+
if 'ssl' in db_config:
|
128
|
+
ssl_params = db_config['ssl']
|
129
|
+
if not isinstance(ssl_params, dict):
|
130
|
+
raise ValueError("SSL configuration must be a dictionary")
|
131
|
+
|
132
|
+
if ssl_params.get('mode') not in [None, 'disable', 'require', 'verify-ca', 'verify-full']:
|
133
|
+
raise ValueError(f"Invalid sslmode: {ssl_params.get('mode')}")
|
134
|
+
|
135
|
+
ssl_config = SSLConfig(
|
136
|
+
mode=ssl_params.get('mode', 'disable'),
|
137
|
+
cert=ssl_params.get('cert'),
|
138
|
+
key=ssl_params.get('key'),
|
139
|
+
root=ssl_params.get('root')
|
140
|
+
)
|
141
|
+
|
95
142
|
config = cls(
|
96
143
|
dbname=db_config['dbname'],
|
97
144
|
user=db_config['user'],
|
@@ -99,17 +146,18 @@ class PostgreSQLConfig(ConnectionConfig):
|
|
99
146
|
host=db_config['host'],
|
100
147
|
port=str(db_config['port']),
|
101
148
|
local_host=local_host,
|
149
|
+
ssl=ssl_config
|
102
150
|
)
|
103
151
|
config.debug = cls.get_debug_mode()
|
104
152
|
return config
|
105
153
|
|
106
154
|
@classmethod
|
107
|
-
def
|
108
|
-
|
109
|
-
"""Create configuration from
|
155
|
+
def from_url(cls, url: str, user: str, password: str,
|
156
|
+
local_host: Optional[str] = None) -> 'PostgreSQLConfig':
|
157
|
+
"""Create configuration from URL and credentials
|
110
158
|
|
111
159
|
Args:
|
112
|
-
|
160
|
+
url: URL (postgresql://host:port/dbname)
|
113
161
|
user: Username for connection
|
114
162
|
password: Password for connection
|
115
163
|
local_host: Optional local host address
|
@@ -117,7 +165,7 @@ class PostgreSQLConfig(ConnectionConfig):
|
|
117
165
|
Raises:
|
118
166
|
ValueError: If URL format is invalid or required parameters are missing
|
119
167
|
"""
|
120
|
-
params =
|
168
|
+
params = parse_url(url)
|
121
169
|
|
122
170
|
config = cls(
|
123
171
|
dbname=params['dbname'],
|
@@ -126,6 +174,8 @@ class PostgreSQLConfig(ConnectionConfig):
|
|
126
174
|
host=params['host'],
|
127
175
|
port=params['port'],
|
128
176
|
local_host=local_host,
|
177
|
+
url=url,
|
178
|
+
ssl=params.get('ssl')
|
129
179
|
)
|
130
180
|
config.debug = cls.get_debug_mode()
|
131
181
|
return config
|
@@ -139,6 +189,17 @@ class PostgreSQLConfig(ConnectionConfig):
|
|
139
189
|
'host': self.local_host or self.host,
|
140
190
|
'port': self.port
|
141
191
|
}
|
192
|
+
|
193
|
+
# Add SSL parameters if configured
|
194
|
+
if self.ssl:
|
195
|
+
params['sslmode'] = self.ssl.mode
|
196
|
+
if self.ssl.cert:
|
197
|
+
params['sslcert'] = self.ssl.cert
|
198
|
+
if self.ssl.key:
|
199
|
+
params['sslkey'] = self.ssl.key
|
200
|
+
if self.ssl.root:
|
201
|
+
params['sslrootcert'] = self.ssl.root
|
202
|
+
|
142
203
|
return {k: v for k, v in params.items() if v}
|
143
204
|
|
144
205
|
def get_masked_connection_info(self) -> Dict[str, Any]:
|
@@ -1,12 +1,13 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mcp-dbutils
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.10.2
|
4
4
|
Summary: MCP Database Utilities Service
|
5
5
|
Author: Dong Hao
|
6
6
|
License-Expression: MIT
|
7
7
|
License-File: LICENSE
|
8
8
|
Requires-Python: >=3.10
|
9
9
|
Requires-Dist: mcp>=1.2.1
|
10
|
+
Requires-Dist: mysql-connector-python>=8.2.0
|
10
11
|
Requires-Dist: psycopg2-binary>=2.9.10
|
11
12
|
Requires-Dist: python-dotenv>=1.0.1
|
12
13
|
Requires-Dist: pyyaml>=6.0.2
|
@@ -32,7 +33,7 @@ Description-Content-Type: text/markdown
|
|
32
33
|
[中文文档](README_CN.md)
|
33
34
|
|
34
35
|
## Overview
|
35
|
-
MCP Database Utilities is a unified database access service that supports multiple database types (PostgreSQL and
|
36
|
+
MCP Database Utilities is a unified database access service that supports multiple database types (PostgreSQL, SQLite, and MySQL). Through its abstraction layer design, it provides a simple and unified database operation interface for MCP servers.
|
36
37
|
|
37
38
|
## Features
|
38
39
|
- Unified database access interface
|
@@ -42,6 +43,7 @@ MCP Database Utilities is a unified database access service that supports multip
|
|
42
43
|
- Database tables listing via MCP tools
|
43
44
|
- Intelligent connection management and resource cleanup
|
44
45
|
- Debug mode support
|
46
|
+
- SSL/TLS connection support for PostgreSQL and MySQL
|
45
47
|
|
46
48
|
## Installation and Configuration
|
47
49
|
|
@@ -143,54 +145,138 @@ Add to Claude configuration:
|
|
143
145
|
- Python 3.10+
|
144
146
|
- PostgreSQL (optional)
|
145
147
|
- SQLite3 (optional)
|
148
|
+
- MySQL (optional)
|
146
149
|
|
147
150
|
### Configuration File
|
148
|
-
The project requires a YAML configuration file, specified via the `--config` parameter. Configuration
|
151
|
+
The project requires a YAML configuration file, specified via the `--config` parameter. Configuration examples:
|
149
152
|
|
150
153
|
```yaml
|
151
154
|
connections:
|
152
|
-
#
|
153
|
-
|
155
|
+
# SQLite configuration examples
|
156
|
+
dev-db:
|
157
|
+
type: sqlite
|
158
|
+
path: /path/to/dev.db
|
159
|
+
# Password is optional
|
160
|
+
password:
|
161
|
+
|
162
|
+
# PostgreSQL standard configuration
|
163
|
+
test-db:
|
154
164
|
type: postgres
|
155
|
-
|
156
|
-
user: postgres
|
157
|
-
password: secret
|
158
|
-
host: host.docker.internal # For Mac/Windows
|
159
|
-
# host: 172.17.0.1 # For Linux (docker0 IP)
|
165
|
+
host: postgres.example.com
|
160
166
|
port: 5432
|
167
|
+
dbname: test_db
|
168
|
+
user: test_user
|
169
|
+
password: test_pass
|
161
170
|
|
162
|
-
# PostgreSQL
|
163
|
-
|
171
|
+
# PostgreSQL URL configuration with SSL
|
172
|
+
prod-db:
|
164
173
|
type: postgres
|
165
|
-
|
166
|
-
user:
|
167
|
-
password:
|
168
|
-
|
169
|
-
#
|
170
|
-
|
171
|
-
type:
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
174
|
+
url: postgresql://postgres.example.com:5432/prod-db?sslmode=verify-full
|
175
|
+
user: prod_user
|
176
|
+
password: prod_pass
|
177
|
+
|
178
|
+
# PostgreSQL full SSL configuration example
|
179
|
+
secure-db:
|
180
|
+
type: postgres
|
181
|
+
host: secure-db.example.com
|
182
|
+
port: 5432
|
183
|
+
dbname: secure_db
|
184
|
+
user: secure_user
|
185
|
+
password: secure_pass
|
186
|
+
ssl:
|
187
|
+
mode: verify-full # disable/require/verify-ca/verify-full
|
188
|
+
cert: /path/to/client-cert.pem
|
189
|
+
key: /path/to/client-key.pem
|
190
|
+
root: /path/to/root.crt
|
191
|
+
|
192
|
+
# MySQL standard configuration
|
193
|
+
sandbox-mysql:
|
194
|
+
type: mysql
|
195
|
+
host: localhost
|
196
|
+
port: 3306
|
197
|
+
database: sandbox_db
|
198
|
+
user: sandbox_user
|
199
|
+
password: sandbox_pass
|
200
|
+
charset: utf8mb4
|
201
|
+
|
202
|
+
# MySQL URL configuration
|
203
|
+
integration-mysql:
|
204
|
+
type: mysql
|
205
|
+
url: mysql://mysql.example.com:3306/integration_db?charset=utf8mb4
|
206
|
+
user: integration_user
|
207
|
+
password: integration_pass
|
208
|
+
|
209
|
+
# MySQL with SSL configuration
|
210
|
+
secure-mysql:
|
211
|
+
type: mysql
|
212
|
+
host: secure-mysql.example.com
|
213
|
+
port: 3306
|
214
|
+
database: secure_db
|
215
|
+
user: secure_user
|
216
|
+
password: secure_pass
|
217
|
+
charset: utf8mb4
|
218
|
+
ssl:
|
219
|
+
mode: verify_identity
|
220
|
+
ca: /path/to/ca.pem
|
221
|
+
cert: /path/to/client-cert.pem
|
222
|
+
key: /path/to/client-key.pem
|
180
223
|
```
|
181
224
|
|
182
|
-
|
183
|
-
|
184
|
-
PostgreSQL:
|
185
|
-
1.
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
225
|
+
Database SSL Configuration Options:
|
226
|
+
|
227
|
+
PostgreSQL SSL Configuration:
|
228
|
+
1. Using URL parameters:
|
229
|
+
```
|
230
|
+
postgresql://host:port/dbname?sslmode=verify-full&sslcert=/path/to/cert.pem
|
231
|
+
```
|
232
|
+
2. Using dedicated SSL configuration section:
|
233
|
+
```yaml
|
234
|
+
ssl:
|
235
|
+
mode: verify-full # SSL verification mode
|
236
|
+
cert: /path/to/cert.pem # Client certificate
|
237
|
+
key: /path/to/key.pem # Client private key
|
238
|
+
root: /path/to/root.crt # CA certificate
|
239
|
+
```
|
240
|
+
|
241
|
+
PostgreSQL SSL Modes:
|
242
|
+
- disable: No SSL
|
243
|
+
- require: Use SSL but no certificate verification
|
244
|
+
- verify-ca: Verify server certificate is signed by trusted CA
|
245
|
+
- verify-full: Verify server certificate and hostname match
|
246
|
+
|
247
|
+
MySQL SSL Configuration:
|
248
|
+
1. Using URL parameters:
|
249
|
+
```
|
250
|
+
mysql://host:port/dbname?ssl-mode=verify_identity&ssl-ca=/path/to/ca.pem
|
251
|
+
```
|
252
|
+
2. Using dedicated SSL configuration section:
|
253
|
+
```yaml
|
254
|
+
ssl:
|
255
|
+
mode: verify_identity # SSL verification mode
|
256
|
+
ca: /path/to/ca.pem # CA certificate
|
257
|
+
cert: /path/to/cert.pem # Client certificate
|
258
|
+
key: /path/to/key.pem # Client private key
|
259
|
+
```
|
260
|
+
|
261
|
+
MySQL SSL Modes:
|
262
|
+
- disabled: No SSL
|
263
|
+
- preferred: Use SSL if available, but allow unencrypted connection
|
264
|
+
- required: Always use SSL, but don't verify server certificate
|
265
|
+
- verify_ca: Verify server certificate is signed by trusted CA
|
266
|
+
- verify_identity: Verify server certificate and hostname match
|
267
|
+
|
268
|
+
SQLite Configuration Options:
|
269
|
+
1. Basic configuration with path:
|
270
|
+
```yaml
|
271
|
+
type: sqlite
|
272
|
+
path: /path/to/db.sqlite
|
273
|
+
password: optional_password # Optional encryption
|
274
|
+
```
|
275
|
+
2. Using URI parameters:
|
276
|
+
```yaml
|
277
|
+
type: sqlite
|
278
|
+
path: /path/to/db.sqlite?mode=ro&cache=shared
|
279
|
+
```
|
194
280
|
|
195
281
|
### Debug Mode
|
196
282
|
Set environment variable `MCP_DEBUG=1` to enable debug mode for detailed logging output.
|
@@ -207,12 +293,15 @@ graph TD
|
|
207
293
|
DatabaseHandler[Database Handler]
|
208
294
|
PostgresHandler[PostgreSQL Handler]
|
209
295
|
SQLiteHandler[SQLite Handler]
|
296
|
+
MySQLHandler[MySQL Handler]
|
210
297
|
DatabaseServer --> DatabaseHandler
|
211
298
|
DatabaseHandler --> PostgresHandler
|
212
299
|
DatabaseHandler --> SQLiteHandler
|
300
|
+
DatabaseHandler --> MySQLHandler
|
213
301
|
end
|
214
302
|
PostgresHandler --> PostgreSQL[(PostgreSQL)]
|
215
303
|
SQLiteHandler --> SQLite[(SQLite)]
|
304
|
+
MySQLHandler --> MySQL[(MySQL)]
|
216
305
|
```
|
217
306
|
|
218
307
|
The abstraction layer design is the core architectural concept in MCP Database Utilities. Just like a universal remote control that works with different devices, users only need to know the basic operations without understanding the underlying complexities.
|
@@ -224,7 +313,7 @@ The abstraction layer design is the core architectural concept in MCP Database U
|
|
224
313
|
|
225
314
|
#### 2. Unified Interface Design
|
226
315
|
- DatabaseHandler abstract class defines unified operation interfaces
|
227
|
-
- All specific database implementations (PostgreSQL/SQLite) follow the same interface
|
316
|
+
- All specific database implementations (PostgreSQL/SQLite/MySQL) follow the same interface
|
228
317
|
- Users interact with different databases in the same way
|
229
318
|
|
230
319
|
#### 3. Configuration and Implementation Separation
|
@@ -241,7 +330,7 @@ The abstraction layer design is the core architectural concept in MCP Database U
|
|
241
330
|
2. DatabaseHandler
|
242
331
|
- Abstract base class defining unified interface
|
243
332
|
- Includes get_tables(), get_schema(), execute_query(), etc.
|
244
|
-
- Implemented by PostgreSQL and
|
333
|
+
- Implemented by PostgreSQL, SQLite, and MySQL handlers
|
245
334
|
|
246
335
|
3. Configuration System
|
247
336
|
- YAML-based configuration file
|
@@ -364,6 +453,13 @@ Provides SQLite-specific features:
|
|
364
453
|
- URI scheme support
|
365
454
|
- Password protection support (optional)
|
366
455
|
|
456
|
+
### MySQL Implementation
|
457
|
+
Provides MySQL-specific features:
|
458
|
+
- Remote connection support
|
459
|
+
- Character set configuration
|
460
|
+
- SSL/TLS secure connection
|
461
|
+
- URL and standard connection methods
|
462
|
+
|
367
463
|
## Contributing
|
368
464
|
Contributions are welcome! Here's how you can help:
|
369
465
|
|
@@ -383,7 +479,6 @@ For detailed guidelines, see [CONTRIBUTING.md](.github/CONTRIBUTING.md)
|
|
383
479
|
- [MCP Servers](https://github.com/modelcontextprotocol/servers) for inspiration and demonstration
|
384
480
|
- AI Editors:
|
385
481
|
* [Claude Desktop](https://claude.ai/download)
|
386
|
-
* [5ire](https://5ire.app/)
|
387
482
|
* [Cline](https://cline.bot)
|
388
483
|
- [Model Context Protocol](https://modelcontextprotocol.io/) for comprehensive interfaces
|
389
484
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
mcp_dbutils/__init__.py,sha256=9dqT2BdVvwforQVWOvJq2M0zCHxFamWIYWC4-6aY70k,1905
|
2
|
+
mcp_dbutils/base.py,sha256=UjZuGxh0Zojcs-CIDfxz506EH7vJGqk79LBgq5RCoII,27653
|
3
|
+
mcp_dbutils/config.py,sha256=K0rlNio8sjuTp-CAuY1CnG8zljp2dhPsfZY7wUhwZX4,1923
|
4
|
+
mcp_dbutils/log.py,sha256=wKyMzB8IpKI7wsDUsN5SRfjf-bh_se6U9QhmzoNuxhw,809
|
5
|
+
mcp_dbutils/stats.py,sha256=WYD9NAKHH2bFKmUSTOg18-SuIXergpznPq8AtIjtxdI,7101
|
6
|
+
mcp_dbutils/mysql/__init__.py,sha256=OgwFO0gdymkvcEw-d1yqJB55XhcucmYQMEZkQ__CG_M,129
|
7
|
+
mcp_dbutils/mysql/config.py,sha256=C977PtaRk7gJm47fV7NaPeEDGInDZNBIQKfcgvjdBbU,8069
|
8
|
+
mcp_dbutils/mysql/handler.py,sha256=AJ1C-aVsBD3NXD31UjFC44cl4yuNeOO-HOY2mFBym0U,19737
|
9
|
+
mcp_dbutils/mysql/server.py,sha256=dF1FE_sYM9UOg6pQrq6EEHHPj2RtqB4Ve0FjQbVp-Fc,8603
|
10
|
+
mcp_dbutils/postgres/__init__.py,sha256=XanCXw-kVE6ayqFqjuLJ9swWPcCVlcKZXB2Et2Wjl9w,154
|
11
|
+
mcp_dbutils/postgres/config.py,sha256=FG0YUV4TtP1IGZT87ov_PK-ouOEjAOHdSaK42klk5OE,7750
|
12
|
+
mcp_dbutils/postgres/handler.py,sha256=O45K0MOosNQ68SJ8piXXH3aZ74RVQ981hudk6faj28Y,24397
|
13
|
+
mcp_dbutils/postgres/server.py,sha256=FROogvjr3xlKAZcAvJMNHGgyHqT_LaMK9-vYbA0Dbm0,8716
|
14
|
+
mcp_dbutils/sqlite/__init__.py,sha256=lTUOkSfSWNw_BohJ_KNxYKMCANdtpGa3JK_ZyJsg_Ls,134
|
15
|
+
mcp_dbutils/sqlite/config.py,sha256=2ekTp89rcCu4qQN1O3sZjIcOwjhzWi4tisD20T2WAik,4533
|
16
|
+
mcp_dbutils/sqlite/handler.py,sha256=VxBVbwpNSQHyiudQXYFYpcdoScvbK2IGzYMbkcpvFcI,17731
|
17
|
+
mcp_dbutils/sqlite/server.py,sha256=49ug43nyXZApclMXo0t5dKCN4wjDyDUZ-vmf746ac8M,7709
|
18
|
+
mcp_dbutils-0.10.2.dist-info/METADATA,sha256=2jbwB4ShFyfAiADcjChvtg4OvZVYA731BFS2VyYlRJw,14354
|
19
|
+
mcp_dbutils-0.10.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
20
|
+
mcp_dbutils-0.10.2.dist-info/entry_points.txt,sha256=XTjt0QmYRgKOJQT6skR9bp1EMUfIrgpHeZJPZ3CJffs,49
|
21
|
+
mcp_dbutils-0.10.2.dist-info/licenses/LICENSE,sha256=1A_CwpWVlbjrKdVEYO77vYfnXlW7oxcilZ8FpA_BzCI,1065
|
22
|
+
mcp_dbutils-0.10.2.dist-info/RECORD,,
|
@@ -1,18 +0,0 @@
|
|
1
|
-
mcp_dbutils/__init__.py,sha256=9dqT2BdVvwforQVWOvJq2M0zCHxFamWIYWC4-6aY70k,1905
|
2
|
-
mcp_dbutils/base.py,sha256=2fLSPL-BxdgKIOT_eq73wQGla6MZB03jUrWqBRSWVBQ,25474
|
3
|
-
mcp_dbutils/config.py,sha256=uFI4Haw4en5gxHfCM9zugUqNCQFikdlHJZU_NTht7gQ,1905
|
4
|
-
mcp_dbutils/log.py,sha256=fibVIwsb1HVU5zriGrDZTMEirKjgIuxuN_B_YTdAJ7I,996
|
5
|
-
mcp_dbutils/stats.py,sha256=WYD9NAKHH2bFKmUSTOg18-SuIXergpznPq8AtIjtxdI,7101
|
6
|
-
mcp_dbutils/postgres/__init__.py,sha256=XanCXw-kVE6ayqFqjuLJ9swWPcCVlcKZXB2Et2Wjl9w,154
|
7
|
-
mcp_dbutils/postgres/config.py,sha256=Kqq0ZCa7PhtvMaBX3sfdEscGosHR1dWuiP8IkI5lzDo,5495
|
8
|
-
mcp_dbutils/postgres/handler.py,sha256=O45K0MOosNQ68SJ8piXXH3aZ74RVQ981hudk6faj28Y,24397
|
9
|
-
mcp_dbutils/postgres/server.py,sha256=FROogvjr3xlKAZcAvJMNHGgyHqT_LaMK9-vYbA0Dbm0,8716
|
10
|
-
mcp_dbutils/sqlite/__init__.py,sha256=lTUOkSfSWNw_BohJ_KNxYKMCANdtpGa3JK_ZyJsg_Ls,134
|
11
|
-
mcp_dbutils/sqlite/config.py,sha256=2ekTp89rcCu4qQN1O3sZjIcOwjhzWi4tisD20T2WAik,4533
|
12
|
-
mcp_dbutils/sqlite/handler.py,sha256=VxBVbwpNSQHyiudQXYFYpcdoScvbK2IGzYMbkcpvFcI,17731
|
13
|
-
mcp_dbutils/sqlite/server.py,sha256=49ug43nyXZApclMXo0t5dKCN4wjDyDUZ-vmf746ac8M,7709
|
14
|
-
mcp_dbutils-0.9.0.dist-info/METADATA,sha256=I52Q7IV8un9A5tmTTmEOFKZiW_UYCrWwBDhDq1tzFyE,11986
|
15
|
-
mcp_dbutils-0.9.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
16
|
-
mcp_dbutils-0.9.0.dist-info/entry_points.txt,sha256=XTjt0QmYRgKOJQT6skR9bp1EMUfIrgpHeZJPZ3CJffs,49
|
17
|
-
mcp_dbutils-0.9.0.dist-info/licenses/LICENSE,sha256=1A_CwpWVlbjrKdVEYO77vYfnXlW7oxcilZ8FpA_BzCI,1065
|
18
|
-
mcp_dbutils-0.9.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|