mcp-dbutils 0.5.0__py3-none-any.whl → 0.6.0__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 +40 -14
- {mcp_dbutils-0.5.0.dist-info → mcp_dbutils-0.6.0.dist-info}/METADATA +20 -5
- {mcp_dbutils-0.5.0.dist-info → mcp_dbutils-0.6.0.dist-info}/RECORD +6 -6
- {mcp_dbutils-0.5.0.dist-info → mcp_dbutils-0.6.0.dist-info}/WHEEL +0 -0
- {mcp_dbutils-0.5.0.dist-info → mcp_dbutils-0.6.0.dist-info}/entry_points.txt +0 -0
- {mcp_dbutils-0.5.0.dist-info → mcp_dbutils-0.6.0.dist-info}/licenses/LICENSE +0 -0
mcp_dbutils/base.py
CHANGED
@@ -220,29 +220,55 @@ class DatabaseServer:
|
|
220
220
|
},
|
221
221
|
"required": ["database", "sql"]
|
222
222
|
}
|
223
|
+
),
|
224
|
+
types.Tool(
|
225
|
+
name="list_tables",
|
226
|
+
description="List all available tables in the specified database",
|
227
|
+
inputSchema={
|
228
|
+
"type": "object",
|
229
|
+
"properties": {
|
230
|
+
"database": {
|
231
|
+
"type": "string",
|
232
|
+
"description": "Database configuration name"
|
233
|
+
}
|
234
|
+
},
|
235
|
+
"required": ["database"]
|
236
|
+
}
|
223
237
|
)
|
224
238
|
]
|
225
239
|
|
226
240
|
@self.server.call_tool()
|
227
241
|
async def handle_call_tool(name: str, arguments: dict) -> list[types.TextContent]:
|
228
|
-
if name != "query":
|
229
|
-
raise ConfigurationError(f"Unknown tool: {name}")
|
230
|
-
|
231
242
|
if "database" not in arguments:
|
232
243
|
raise ConfigurationError("Database configuration name must be specified")
|
233
244
|
|
234
|
-
sql = arguments.get("sql", "").strip()
|
235
|
-
if not sql:
|
236
|
-
raise ConfigurationError("SQL query cannot be empty")
|
237
|
-
|
238
|
-
# Only allow SELECT statements
|
239
|
-
if not sql.lower().startswith("select"):
|
240
|
-
raise ConfigurationError("Only SELECT queries are supported for security reasons")
|
241
|
-
|
242
245
|
database = arguments["database"]
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
+
|
247
|
+
if name == "list_tables":
|
248
|
+
async with self.get_handler(database) as handler:
|
249
|
+
tables = await handler.get_tables()
|
250
|
+
formatted_tables = "\n".join([
|
251
|
+
f"Table: {table.name}\n" +
|
252
|
+
f"URI: {table.uri}\n" +
|
253
|
+
(f"Description: {table.description}\n" if table.description else "") +
|
254
|
+
"---"
|
255
|
+
for table in tables
|
256
|
+
])
|
257
|
+
return [types.TextContent(type="text", text=formatted_tables)]
|
258
|
+
elif name == "query":
|
259
|
+
sql = arguments.get("sql", "").strip()
|
260
|
+
if not sql:
|
261
|
+
raise ConfigurationError("SQL query cannot be empty")
|
262
|
+
|
263
|
+
# Only allow SELECT statements
|
264
|
+
if not sql.lower().startswith("select"):
|
265
|
+
raise ConfigurationError("Only SELECT queries are supported for security reasons")
|
266
|
+
|
267
|
+
async with self.get_handler(database) as handler:
|
268
|
+
result = await handler.execute_query(sql)
|
269
|
+
return [types.TextContent(type="text", text=result)]
|
270
|
+
else:
|
271
|
+
raise ConfigurationError(f"Unknown tool: {name}")
|
246
272
|
|
247
273
|
async def run(self):
|
248
274
|
"""Run server"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mcp-dbutils
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.6.0
|
4
4
|
Summary: MCP Database Utilities Service
|
5
5
|
Author: Dong Hao
|
6
6
|
License-Expression: MIT
|
@@ -165,16 +165,31 @@ databases:
|
|
165
165
|
user: postgres # Credentials must be provided separately
|
166
166
|
password: secret # Not included in JDBC URL for security
|
167
167
|
|
168
|
-
# SQLite
|
168
|
+
# SQLite standard configuration
|
169
169
|
my_sqlite:
|
170
170
|
type: sqlite
|
171
|
-
path: /app/sqlite.db #
|
171
|
+
path: /app/sqlite.db # Database file path
|
172
172
|
password: optional_password # optional
|
173
|
+
|
174
|
+
# SQLite with JDBC URL configuration
|
175
|
+
my_sqlite_jdbc:
|
176
|
+
type: sqlite
|
177
|
+
jdbc_url: jdbc:sqlite:/app/data.db?mode=ro&cache=shared # Supports query parameters
|
178
|
+
password: optional_password # Provided separately for security
|
173
179
|
```
|
174
180
|
|
175
|
-
The configuration supports
|
181
|
+
The configuration supports JDBC URL format for both PostgreSQL and SQLite:
|
182
|
+
|
183
|
+
PostgreSQL:
|
176
184
|
1. Standard configuration with individual parameters
|
177
|
-
2. JDBC URL configuration with separate credentials
|
185
|
+
2. JDBC URL configuration with separate credentials
|
186
|
+
|
187
|
+
SQLite:
|
188
|
+
1. Standard configuration with path parameter
|
189
|
+
2. JDBC URL configuration with query parameters support:
|
190
|
+
- mode=ro: Read-only mode
|
191
|
+
- cache=shared: Shared cache mode
|
192
|
+
- Other SQLite URI parameters
|
178
193
|
|
179
194
|
### Debug Mode
|
180
195
|
Set environment variable `MCP_DEBUG=1` to enable debug mode for detailed logging output.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
mcp_dbutils/__init__.py,sha256=xcfE1spAaONAoxBYB1ZyDX8tw7nxV1PMqo_RwxLDp0A,1892
|
2
|
-
mcp_dbutils/base.py,sha256=
|
2
|
+
mcp_dbutils/base.py,sha256=kKeTKW2BqiSu32VHElfDVBE1ziR9EvFw71AVbYf9Xq0,10919
|
3
3
|
mcp_dbutils/config.py,sha256=EwnPNuQVCBKd5WOXQfROyDTM-YpM_Odp0GhCPRg8YwE,1863
|
4
4
|
mcp_dbutils/log.py,sha256=fibVIwsb1HVU5zriGrDZTMEirKjgIuxuN_B_YTdAJ7I,996
|
5
5
|
mcp_dbutils/stats.py,sha256=2hiKi_M8V4xhVHlH5FS-Df5GuMEpuzif12C8ik06Khs,2538
|
@@ -11,8 +11,8 @@ mcp_dbutils/sqlite/__init__.py,sha256=QV4th2ywzUmCCa3GHCcBf8blJ_E8OYy0dJ2fSf1TfS
|
|
11
11
|
mcp_dbutils/sqlite/config.py,sha256=RTHT2Xx--g-osD73CpT8DrCk0VHpHfPil3D6YUzXD-g,4519
|
12
12
|
mcp_dbutils/sqlite/handler.py,sha256=bf_k93rCcJn09zc7tsqrlbiTGUg3FspimfWKxK_JQTs,4970
|
13
13
|
mcp_dbutils/sqlite/server.py,sha256=7Bbq9l7Ca_4dzkAbbdRcXxvHoO_NFLzZHwlhKB0HIJc,7724
|
14
|
-
mcp_dbutils-0.
|
15
|
-
mcp_dbutils-0.
|
16
|
-
mcp_dbutils-0.
|
17
|
-
mcp_dbutils-0.
|
18
|
-
mcp_dbutils-0.
|
14
|
+
mcp_dbutils-0.6.0.dist-info/METADATA,sha256=Dkyfy_4VUB4VO5tl6zKAljcvacBp-irM7xTxVzUjOIo,10390
|
15
|
+
mcp_dbutils-0.6.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
16
|
+
mcp_dbutils-0.6.0.dist-info/entry_points.txt,sha256=XTjt0QmYRgKOJQT6skR9bp1EMUfIrgpHeZJPZ3CJffs,49
|
17
|
+
mcp_dbutils-0.6.0.dist-info/licenses/LICENSE,sha256=1A_CwpWVlbjrKdVEYO77vYfnXlW7oxcilZ8FpA_BzCI,1065
|
18
|
+
mcp_dbutils-0.6.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|