mcp-server-motherduck 0.6.1__tar.gz → 0.6.3__tar.gz

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.

Potentially problematic release.


This version of mcp-server-motherduck might be problematic. Click here for more details.

Files changed (19) hide show
  1. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/.idea/workspace.xml +2 -2
  2. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/PKG-INFO +12 -12
  3. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/README.md +10 -11
  4. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/pyproject.toml +2 -1
  5. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/src/mcp_server_motherduck/configs.py +1 -1
  6. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/src/mcp_server_motherduck/database.py +1 -4
  7. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/uv.lock +12 -1
  8. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/.github/workflows/python-publish.yml +0 -0
  9. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/.gitignore +0 -0
  10. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/.idea/.gitignore +0 -0
  11. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/.idea/mcp-server-motherduck.iml +0 -0
  12. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/.idea/misc.xml +0 -0
  13. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/.idea/modules.xml +0 -0
  14. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/.idea/vcs.xml +0 -0
  15. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/LICENSE +0 -0
  16. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/makefile +0 -0
  17. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/src/mcp_server_motherduck/__init__.py +0 -0
  18. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/src/mcp_server_motherduck/prompt.py +0 -0
  19. {mcp_server_motherduck-0.6.1 → mcp_server_motherduck-0.6.3}/src/mcp_server_motherduck/server.py +0 -0
@@ -14,7 +14,7 @@
14
14
  <component name="ChangeListManager">
15
15
  <list default="true" id="8bdee1d4-886c-4093-b4cf-95b120034c9e" name="Changes" comment="">
16
16
  <change beforePath="$PROJECT_DIR$/pyproject.toml" beforeDir="false" afterPath="$PROJECT_DIR$/pyproject.toml" afterDir="false" />
17
- <change beforePath="$PROJECT_DIR$/uv.lock" beforeDir="false" afterPath="$PROJECT_DIR$/uv.lock" afterDir="false" />
17
+ <change beforePath="$PROJECT_DIR$/src/mcp_server_motherduck/configs.py" beforeDir="false" afterPath="$PROJECT_DIR$/src/mcp_server_motherduck/configs.py" afterDir="false" />
18
18
  </list>
19
19
  <option name="SHOW_DIALOG" value="false" />
20
20
  <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -95,7 +95,7 @@
95
95
  <workItem from="1750084439422" duration="575000" />
96
96
  <workItem from="1750086684829" duration="92000" />
97
97
  <workItem from="1750099676834" duration="5651000" />
98
- <workItem from="1750235697329" duration="602000" />
98
+ <workItem from="1750235697329" duration="4118000" />
99
99
  </task>
100
100
  <servers />
101
101
  </component>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-server-motherduck
3
- Version: 0.6.1
3
+ Version: 0.6.3
4
4
  Summary: A MCP server for MotherDuck and local DuckDB
5
5
  Author-email: tdoehmen <till@motherduck.com>
6
6
  License-File: LICENSE
@@ -9,6 +9,7 @@ Requires-Dist: anyio>=4.8.0
9
9
  Requires-Dist: click>=8.1.8
10
10
  Requires-Dist: duckdb==1.3.1
11
11
  Requires-Dist: mcp>=1.9.4
12
+ Requires-Dist: pytz>=2025.2
12
13
  Requires-Dist: starlette>=0.46.1
13
14
  Requires-Dist: tabulate>=0.9.0
14
15
  Requires-Dist: uvicorn>=0.34.0
@@ -54,16 +55,16 @@ All interactions with both DuckDB and MotherDuck are done through writing SQL qu
54
55
 
55
56
  The MCP server supports the following parameters:
56
57
 
57
- | Parameter | Type | Default | Description |
58
- |-----------|------|---------|-------------|
59
- | `--transport` | Choice | `stdio` | Transport type. Options: `stdio`, `sse`, `stream` |
60
- | `--port` | Integer | `8000` | Port to listen on for sse and stream transport mode |
61
- | `--db-path` | String | `md:` | Path to local DuckDB database file or MotherDuck database |
62
- | `--motherduck-token` | String | `None` | Access token to use for MotherDuck database connections (uses `motherduck_token` env var by default) |
63
- | `--read-only` | Flag | `False` | Flag for connecting to DuckDB in read-only mode. Only supported for local DuckDB databases. Uses short-lived connections for concurrent access |
64
- | `--home-dir` | String | `None` | Home directory for DuckDB (uses `HOME` env var by default) |
65
- | `--saas-mode` | Flag | `False` | Flag for connecting to MotherDuck in SaaS mode |
66
- | `--json-response` | Flag | `False` | Enable JSON responses for HTTP stream. Only supported for `stream` transport |
58
+ | Parameter | Type | Default | Description |
59
+ |-----------|------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
60
+ | `--transport` | Choice | `stdio` | Transport type. Options: `stdio`, `sse`, `stream` |
61
+ | `--port` | Integer | `8000` | Port to listen on for sse and stream transport mode |
62
+ | `--db-path` | String | `md:` | Path to local DuckDB database file or MotherDuck database |
63
+ | `--motherduck-token` | String | `None` | Access token to use for MotherDuck database connections (uses `motherduck_token` env var by default) |
64
+ | `--read-only` | Flag | `False` | Flag for connecting to DuckDB or MotherDuck in read-only mode. For DuckDB it uses short-lived connections to enable concurrent access |
65
+ | `--home-dir` | String | `None` | Home directory for DuckDB (uses `HOME` env var by default) |
66
+ | `--saas-mode` | Flag | `False` | Flag for connecting to MotherDuck in [SaaS mode](https://motherduck.com/docs/key-tasks/authenticating-and-connecting-to-motherduck/authenticating-to-motherduck/#authentication-using-saas-mode). (disables filesystem and write permissions for local DuckDB) |
67
+ | `--json-response` | Flag | `False` | Enable JSON responses for HTTP stream. Only supported for `stream` transport |
67
68
 
68
69
  ### Quick Usage Examples
69
70
 
@@ -221,7 +222,6 @@ Optionally, you can add it to a file called `.vscode/mcp.json` in your workspace
221
222
  **Important Notes**:
222
223
 
223
224
  - Replace `YOUR_MOTHERDUCK_TOKEN_HERE` with your actual MotherDuck token
224
- - The `HOME` environment variable is required for DuckDB to function properly.
225
225
 
226
226
  ## Securing your MCP Server when querying MotherDuck
227
227
 
@@ -38,16 +38,16 @@ All interactions with both DuckDB and MotherDuck are done through writing SQL qu
38
38
 
39
39
  The MCP server supports the following parameters:
40
40
 
41
- | Parameter | Type | Default | Description |
42
- |-----------|------|---------|-------------|
43
- | `--transport` | Choice | `stdio` | Transport type. Options: `stdio`, `sse`, `stream` |
44
- | `--port` | Integer | `8000` | Port to listen on for sse and stream transport mode |
45
- | `--db-path` | String | `md:` | Path to local DuckDB database file or MotherDuck database |
46
- | `--motherduck-token` | String | `None` | Access token to use for MotherDuck database connections (uses `motherduck_token` env var by default) |
47
- | `--read-only` | Flag | `False` | Flag for connecting to DuckDB in read-only mode. Only supported for local DuckDB databases. Uses short-lived connections for concurrent access |
48
- | `--home-dir` | String | `None` | Home directory for DuckDB (uses `HOME` env var by default) |
49
- | `--saas-mode` | Flag | `False` | Flag for connecting to MotherDuck in SaaS mode |
50
- | `--json-response` | Flag | `False` | Enable JSON responses for HTTP stream. Only supported for `stream` transport |
41
+ | Parameter | Type | Default | Description |
42
+ |-----------|------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
43
+ | `--transport` | Choice | `stdio` | Transport type. Options: `stdio`, `sse`, `stream` |
44
+ | `--port` | Integer | `8000` | Port to listen on for sse and stream transport mode |
45
+ | `--db-path` | String | `md:` | Path to local DuckDB database file or MotherDuck database |
46
+ | `--motherduck-token` | String | `None` | Access token to use for MotherDuck database connections (uses `motherduck_token` env var by default) |
47
+ | `--read-only` | Flag | `False` | Flag for connecting to DuckDB or MotherDuck in read-only mode. For DuckDB it uses short-lived connections to enable concurrent access |
48
+ | `--home-dir` | String | `None` | Home directory for DuckDB (uses `HOME` env var by default) |
49
+ | `--saas-mode` | Flag | `False` | Flag for connecting to MotherDuck in [SaaS mode](https://motherduck.com/docs/key-tasks/authenticating-and-connecting-to-motherduck/authenticating-to-motherduck/#authentication-using-saas-mode). (disables filesystem and write permissions for local DuckDB) |
50
+ | `--json-response` | Flag | `False` | Enable JSON responses for HTTP stream. Only supported for `stream` transport |
51
51
 
52
52
  ### Quick Usage Examples
53
53
 
@@ -205,7 +205,6 @@ Optionally, you can add it to a file called `.vscode/mcp.json` in your workspace
205
205
  **Important Notes**:
206
206
 
207
207
  - Replace `YOUR_MOTHERDUCK_TOKEN_HERE` with your actual MotherDuck token
208
- - The `HOME` environment variable is required for DuckDB to function properly.
209
208
 
210
209
  ## Securing your MCP Server when querying MotherDuck
211
210
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mcp-server-motherduck"
3
- version = "0.6.1"
3
+ version = "0.6.3"
4
4
  description = "A MCP server for MotherDuck and local DuckDB"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -12,6 +12,7 @@ dependencies = [
12
12
  "uvicorn>=0.34.0",
13
13
  "anyio>=4.8.0",
14
14
  "mcp>=1.9.4",
15
+ "pytz>=2025.2"
15
16
  ]
16
17
 
17
18
  [[project.authors]]
@@ -1,6 +1,6 @@
1
1
  from typing import Any
2
2
 
3
- SERVER_VERSION = "0.6.1"
3
+ SERVER_VERSION = "0.6.3"
4
4
 
5
5
  SERVER_LOCALHOST = "127.0.0.1"
6
6
 
@@ -53,13 +53,10 @@ class DatabaseClient:
53
53
  logger.error(f"❌ Read-only check failed: {e}")
54
54
  raise
55
55
 
56
- if self._read_only:
57
- raise ValueError(
58
- "Read-only mode is only supported for local DuckDB databases. See `saas_mode` for similar functionality with MotherDuck."
59
- )
60
56
  conn = duckdb.connect(
61
57
  self.db_path,
62
58
  config={"custom_user_agent": f"mcp-server-motherduck/{SERVER_VERSION}"},
59
+ read_only=self._read_only,
63
60
  )
64
61
 
65
62
  logger.info(f"✅ Successfully connected to {self.db_type} database")
@@ -182,13 +182,14 @@ wheels = [
182
182
 
183
183
  [[package]]
184
184
  name = "mcp-server-motherduck"
185
- version = "0.6.1"
185
+ version = "0.6.3"
186
186
  source = { editable = "." }
187
187
  dependencies = [
188
188
  { name = "anyio" },
189
189
  { name = "click" },
190
190
  { name = "duckdb" },
191
191
  { name = "mcp" },
192
+ { name = "pytz" },
192
193
  { name = "starlette" },
193
194
  { name = "tabulate" },
194
195
  { name = "uvicorn" },
@@ -200,6 +201,7 @@ requires-dist = [
200
201
  { name = "click", specifier = ">=8.1.8" },
201
202
  { name = "duckdb", specifier = "==1.3.1" },
202
203
  { name = "mcp", specifier = ">=1.9.4" },
204
+ { name = "pytz", specifier = ">=2025.2" },
203
205
  { name = "starlette", specifier = ">=0.46.1" },
204
206
  { name = "tabulate", specifier = ">=0.9.0" },
205
207
  { name = "uvicorn", specifier = ">=0.34.0" },
@@ -339,6 +341,15 @@ wheels = [
339
341
  { url = "https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104", size = 24546 },
340
342
  ]
341
343
 
344
+ [[package]]
345
+ name = "pytz"
346
+ version = "2025.2"
347
+ source = { registry = "https://pypi.org/simple" }
348
+ sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884 }
349
+ wheels = [
350
+ { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225 },
351
+ ]
352
+
342
353
  [[package]]
343
354
  name = "sniffio"
344
355
  version = "1.3.1"