diff --git a/.gitignore b/.gitignore index c7d2d8f..2ddd0d2 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ logs/ htmlcov/ build/ dist/ +docs/superpowers/ +.worktrees/ diff --git a/README-zh.md b/README-zh.md index 87f0e34..badf524 100644 --- a/README-zh.md +++ b/README-zh.md @@ -64,37 +64,52 @@ MySQL 在当前实现中支持 `explain_query`,但不支持 ## 快速开始 -如果你想先把服务跑起来,之后再继续了解其余部分,可以按以下步骤进行。 +`sql-query-mcp` 提供两种官方支持的 PyPI 接入方式。两种都适合正式使用,不 +只是本地试跑。 -1. 创建虚拟环境并安装项目。 +1. 先决定让 MCP 客户端如何启动服务。 + +如果你希望先安装一次,之后在客户端里直接调用命令,可以使用安装命令模式。 ```bash -python3.10 -m venv .venv -source .venv/bin/activate -python -m pip install --upgrade pip -pip install -e . +pipx install sql-query-mcp ``` -2. 复制示例连接配置。 +如果你希望把包来源直接写进 MCP 配置,让客户端通过 `pipx` 启动服务,可以使 +用托管启动模式。 ```bash -cp config/connections.example.json config/connections.json +pipx run --spec sql-query-mcp sql-query-mcp ``` -3. 设置用于保存数据库 DSN 的环境变量。 +如果你想固定版本,可使用 `pipx install 'sql-query-mcp==X.Y.Z'`,或者使用 +`pipx run --spec 'sql-query-mcp==X.Y.Z' sql-query-mcp`。已安装版本可通过 +`pipx upgrade sql-query-mcp` 升级。 + +2. 创建配置文件。 + +无论你选择哪种启动方式,都建议把服务配置文件放在仓库之外,便于统一维护。 ```bash -export PG_CONN_CRM_PROD_MUQIAO_RO='postgresql://user:password@host:5432/dbname' -export MYSQL_CONN_CRM_PROD_MUQIAO_RO='mysql://user:password@host:3306/crm' +mkdir -p ~/.config/sql-query-mcp ``` -4. 在你的 MCP 客户端中注册这个服务。 +然后把本节后面的示例 JSON 保存为 +`~/.config/sql-query-mcp/connections.json`。 + +3. 在你的 MCP 客户端中注册这个服务。 - Codex: `docs/codex-setup.md` - OpenCode: `docs/opencode-setup.md` -默认配置路径是 `config/connections.json`。如果你需要使用其他位置,请设置 -`SQL_QUERY_MCP_CONFIG`。 +安装命令模式表示客户端直接运行 `sql-query-mcp`。托管启动模式表示客户端通 +过 `pipx run` 启动服务。 + +无论使用哪种方式,都建议把 `SQL_QUERY_MCP_CONFIG` 和真实数据库 DSN 放在 +MCP 客户端的 `env` 或 `environment` 配置里,而不是单独在 shell 中导出。 + +对于 `pipx install` 和 `pipx run`,建议显式设置 `SQL_QUERY_MCP_CONFIG`。 +默认的 `config/connections.json` 更适合源码 checkout 和本地开发场景。 示例配置如下。 @@ -107,24 +122,24 @@ export MYSQL_CONN_CRM_PROD_MUQIAO_RO='mysql://user:password@host:3306/crm' }, "connections": [ { - "connection_id": "crm_prod_muqiao_ro", + "connection_id": "crm_prod_main_ro", "engine": "postgres", - "label": "CRM PostgreSQL production / Muqiao / read-only", + "label": "CRM PostgreSQL production / Main / read-only", "env": "prod", - "tenant": "muqiao", + "tenant": "main", "role": "ro", - "dsn_env": "PG_CONN_CRM_PROD_MUQIAO_RO", + "dsn_env": "PG_CONN_CRM_PROD_MAIN_RO", "enabled": true, "default_schema": "public" }, { - "connection_id": "crm_mysql_prod_muqiao_ro", + "connection_id": "crm_mysql_prod_main_ro", "engine": "mysql", - "label": "CRM MySQL production / Muqiao / read-only", + "label": "CRM MySQL production / Main / read-only", "env": "prod", - "tenant": "muqiao", + "tenant": "main", "role": "ro", - "dsn_env": "MYSQL_CONN_CRM_PROD_MUQIAO_RO", + "dsn_env": "MYSQL_CONN_CRM_PROD_MAIN_RO", "enabled": true, "default_database": "crm" } diff --git a/README.md b/README.md index 954408f..e33a98e 100644 --- a/README.md +++ b/README.md @@ -72,51 +72,61 @@ implementation. ## Quick start -If you want to get the server running first and explore the rest later, follow -these steps. +`sql-query-mcp` supports two official PyPI-based setup modes. Both are intended +for real usage, not just local testing. -1. Create a virtual environment and install the project. +1. Choose how you want your MCP client to start the server. + +Use installed command mode if you want a simple local command after one +install. ```bash -python3.10 -m venv .venv -source .venv/bin/activate -python -m pip install --upgrade pip -pip install sql-query-mcp +pipx install sql-query-mcp ``` -Install a specific release with `pip install sql-query-mcp==X.Y.Z` if you want -to pin a version. Published release artifacts are also attached to each GitHub -Release. - -2. Copy the example connection config. +Use managed launch mode if you want the package source declared directly in +your MCP client config. ```bash -cp config/connections.example.json config/connections.json +pipx run --spec sql-query-mcp sql-query-mcp ``` -3. Export your database DSNs as environment variables. +Pin a version with `pipx install 'sql-query-mcp==X.Y.Z'` or +`pipx run --spec 'sql-query-mcp==X.Y.Z' sql-query-mcp`. Upgrade installed +command mode with `pipx upgrade sql-query-mcp`. -These example names match the copied `config/connections.example.json` file. +2. Create a config file. + +The server configuration should live outside the repository so the same file +works with either startup mode. ```bash -export PG_CONN_CRM_PROD_MUQIAO_RO='postgresql://user:password@host:5432/dbname' -export MYSQL_CONN_CRM_PROD_MUQIAO_RO='mysql://user:password@host:3306/crm' -export SQL_QUERY_MCP_CONFIG='/absolute/path/to/sql-query-mcp/config/connections.json' +mkdir -p ~/.config/sql-query-mcp ``` -4. Register the server in your MCP client. +Then save the example JSON later in this section as +`~/.config/sql-query-mcp/connections.json`. + +3. Register the server in your MCP client. - Codex: `docs/codex-setup.md` (Chinese) - OpenCode: `docs/opencode-setup.md` (Chinese) +Installed command mode means your client runs `sql-query-mcp` directly. +Managed launch mode means your client starts the server through `pipx run`. + +In both modes, put `SQL_QUERY_MCP_CONFIG` and your real database DSNs in the +MCP client's environment block instead of exporting them in your shell. + The console entry point is `sql-query-mcp`, which maps to `sql_query_mcp.app:main`. The PyPI install name is `sql-query-mcp`, and the Python package import path is `sql_query_mcp`. -The default config path is `config/connections.json`. If you need a different -location, set `SQL_QUERY_MCP_CONFIG`. +For `pipx install` and `pipx run`, set `SQL_QUERY_MCP_CONFIG` explicitly to +your config file path. The default `config/connections.json` path is mainly for +source checkouts and local development. The example config looks like this. @@ -129,24 +139,24 @@ The example config looks like this. }, "connections": [ { - "connection_id": "crm_prod_muqiao_ro", + "connection_id": "crm_prod_main_ro", "engine": "postgres", - "label": "CRM PostgreSQL production / Muqiao / read-only", + "label": "CRM PostgreSQL production / Main / read-only", "env": "prod", - "tenant": "muqiao", + "tenant": "main", "role": "ro", - "dsn_env": "PG_CONN_CRM_PROD_MUQIAO_RO", + "dsn_env": "PG_CONN_CRM_PROD_MAIN_RO", "enabled": true, "default_schema": "public" }, { - "connection_id": "crm_mysql_prod_muqiao_ro", + "connection_id": "crm_mysql_prod_main_ro", "engine": "mysql", - "label": "CRM MySQL production / Muqiao / read-only", + "label": "CRM MySQL production / Main / read-only", "env": "prod", - "tenant": "muqiao", + "tenant": "main", "role": "ro", - "dsn_env": "MYSQL_CONN_CRM_PROD_MUQIAO_RO", + "dsn_env": "MYSQL_CONN_CRM_PROD_MAIN_RO", "enabled": true, "default_database": "crm" } diff --git a/config/connections.example.json b/config/connections.example.json index 2085dff..23afaa2 100644 --- a/config/connections.example.json +++ b/config/connections.example.json @@ -6,24 +6,24 @@ }, "connections": [ { - "connection_id": "crm_prod_muqiao_ro", + "connection_id": "crm_prod_main_ro", "engine": "postgres", - "label": "CRM PostgreSQL 生产库 / 穆桥 / 只读", + "label": "CRM PostgreSQL 生产库 / Main / 只读", "env": "prod", - "tenant": "muqiao", + "tenant": "main", "role": "ro", - "dsn_env": "PG_CONN_CRM_PROD_MUQIAO_RO", + "dsn_env": "PG_CONN_CRM_PROD_MAIN_RO", "enabled": true, "default_schema": "public" }, { - "connection_id": "crm_mysql_prod_muqiao_ro", + "connection_id": "crm_mysql_prod_main_ro", "engine": "mysql", - "label": "CRM MySQL 生产库 / 穆桥 / 只读", + "label": "CRM MySQL 生产库 / Main / 只读", "env": "prod", - "tenant": "muqiao", + "tenant": "main", "role": "ro", - "dsn_env": "MYSQL_CONN_CRM_PROD_MUQIAO_RO", + "dsn_env": "MYSQL_CONN_CRM_PROD_MAIN_RO", "enabled": true, "default_database": "crm" } diff --git a/docs/codex-setup.md b/docs/codex-setup.md index 14cf245..0208556 100644 --- a/docs/codex-setup.md +++ b/docs/codex-setup.md @@ -10,38 +10,47 @@ 辑的 `~/.codex/config.toml` 文件。 - Python 3.10+ -- `sql-query-mcp` 仓库本地副本 +- `pipx` - PostgreSQL 或 MySQL 只读 DSN - Codex 本地配置权限 -## 第一步:安装服务 +## 第一步:选择运行方式 -先在仓库目录中创建虚拟环境并安装项目。 +`sql-query-mcp` 在 Codex 中支持两种正式接入方式。它们的区别不在于是否可 +用于生产,而在于你希望把启动责任放在哪一层。 + +- 安装命令模式:你先执行一次 `pipx install`,之后 Codex 直接运行 + `sql-query-mcp` +- 托管启动模式:你不预先暴露命令,而是在 Codex 配置里写入 `pipx run` + 启动链路 + +安装命令模式先执行下面的安装命令。 ```bash -cd /absolute/path/to/sql-query-mcp -python3.10 -m venv .venv -source .venv/bin/activate -python -m pip install --upgrade pip -pip install -e . +pipx install sql-query-mcp ``` -安装完成后,可执行文件通常位于以下路径。 +托管启动模式不要求预先安装 `sql-query-mcp`,但要求本机已安装 `pipx`。 +如果你想先在终端验证启动链路,可以运行: ```bash -/absolute/path/to/sql-query-mcp/.venv/bin/sql-query-mcp +pipx run --spec sql-query-mcp sql-query-mcp ``` +如果你需要固定版本,可以把 `sql-query-mcp` 替换为 +`'sql-query-mcp==X.Y.Z'`。 + ## 第二步:准备连接配置 -服务默认读取 `config/connections.json`。你可以先复制示例文件,再按实际连 -接修改。 +通过 PyPI 安装后,服务不再依赖仓库副本。更直接的方式是把配置文件放到你 +自己的目录里,并通过环境变量告诉 MCP 服务去哪里读取。 ```bash -cp config/connections.example.json config/connections.json +mkdir -p ~/.config/sql-query-mcp ``` -下面是一个最小配置示例。 +把下面这份最小配置保存为 +`~/.config/sql-query-mcp/connections.json`。 ```json { @@ -90,48 +99,63 @@ cp config/connections.example.json config/connections.json 这里的超时是数据库会话级超时,不是 Codex 客户端超时。 -## 第三步:准备环境变量 +## 第三步:注册到 Codex -连接配置里的 `dsn_env` 存放的是环境变量名,不是真实连接串。因此你还需要 -为对应 DSN 设置环境变量。 +连接配置里的 `dsn_env` 存放的是环境变量名,不是真实连接串。因此你需要在 +Codex 的 MCP 配置里同时提供配置文件路径和真实 DSN。 -```bash -export PG_CONN_CRM_PROD_MAIN_RO='postgresql://username:password@host:5432/dbname' -export MYSQL_CONN_CRM_PROD_MAIN_RO='mysql://username:password@host:3306/crm' -export SQL_QUERY_MCP_CONFIG='/absolute/path/to/sql-query-mcp/config/connections.json' -``` - -注意下面这些配置规则。 +注意下面这些规则。 - `engine` 必须明确写成 `postgres` 或 `mysql` - PostgreSQL 使用 `default_schema` - MySQL 使用 `default_database` - 不要把真实 DSN 写回 `connections.json` -## 第四步:注册到 Codex +打开 `~/.codex/config.toml`,然后选择下面任意一种配置。 + +### 安装命令模式 + +如果你已经执行过 `pipx install sql-query-mcp`,推荐使用这段配置。它的启 +动更直接,也更容易和 `pipx upgrade` 配合。 + +```toml +[mcp_servers.sql_query_mcp] +command = "sql-query-mcp" +startup_timeout_sec = 20 +tool_timeout_sec = 60 + +[mcp_servers.sql_query_mcp.env] +SQL_QUERY_MCP_CONFIG = "/Users/yourname/.config/sql-query-mcp/connections.json" +PG_CONN_CRM_PROD_MAIN_RO = "postgresql://username:password@host:5432/dbname" +MYSQL_CONN_CRM_PROD_MAIN_RO = "mysql://username:password@host:3306/crm" +``` + +### 托管启动模式 -打开 `~/.codex/config.toml`,把下面这段配置加入 MCP servers。 +如果你希望把包来源直接写在 Codex 配置中,可以使用这段配置。它的效果和 +`npx ...` 风格类似,只是这里使用的是 `pipx run`。 ```toml [mcp_servers.sql_query_mcp] -command = "/absolute/path/to/sql-query-mcp/.venv/bin/sql-query-mcp" -type = "stdio" -startup_timeout_ms = 20000 +command = "pipx" +args = ["run", "--spec", "sql-query-mcp", "sql-query-mcp"] +startup_timeout_sec = 20 +tool_timeout_sec = 60 [mcp_servers.sql_query_mcp.env] -SQL_QUERY_MCP_CONFIG = "/absolute/path/to/sql-query-mcp/config/connections.json" +SQL_QUERY_MCP_CONFIG = "/Users/yourname/.config/sql-query-mcp/connections.json" PG_CONN_CRM_PROD_MAIN_RO = "postgresql://username:password@host:5432/dbname" MYSQL_CONN_CRM_PROD_MAIN_RO = "mysql://username:password@host:3306/crm" ``` -这段配置里,`command` 指向 MCP 可执行文件,`env` 注入配置路径和真实 -DSN。 +这两种方式都由 `env` 注入配置路径和真实 DSN。你只需要保留其中一种,不要 +同时配置两份同名 server。 -## 第五步:重启 Codex +## 第四步:重启 Codex 保存配置后,重启 Codex 或新开一个会话,让新的 MCP 服务注册生效。 -## 第六步:验证接入 +## 第五步:验证接入 接入完成后,建议先用简单问题确认服务可用,再逐步进入真实查询。 @@ -152,7 +176,7 @@ DSN。 载是否成功。 - `SQL_QUERY_MCP_CONFIG` 是否指向正确文件 -- `config/connections.json` 是否是合法 JSON +- `SQL_QUERY_MCP_CONFIG` 指向的文件是否是合法 JSON - `connections.json` 是否至少有一个 `enabled: true` 的连接 ### 提示缺少 DSN 环境变量 diff --git a/docs/opencode-setup.md b/docs/opencode-setup.md index c02cc06..550966e 100644 --- a/docs/opencode-setup.md +++ b/docs/opencode-setup.md @@ -9,37 +9,46 @@ 开始前,请先确认你已经具备本地运行 MCP 服务的基础条件。 - Python 3.10+ -- `sql-query-mcp` 仓库本地副本 +- `pipx` - PostgreSQL 或 MySQL 只读账号 - 可编辑的 `~/.config/opencode/opencode.json` -## 第一步:安装服务 +## 第一步:选择运行方式 -先在本地仓库中创建虚拟环境并安装项目。 +`sql-query-mcp` 在 OpenCode 中支持两种正式接入方式。它们都适合日常使用, +区别只在于你希望先安装命令,还是把启动链路直接写进配置。 + +- 安装命令模式:先执行 `pipx install`,然后在 OpenCode 中直接运行 + `sql-query-mcp` +- 托管启动模式:在 OpenCode 配置中直接写入 `pipx run` 命令链 + +安装命令模式先执行下面的安装命令。 ```bash -cd /absolute/path/to/sql-query-mcp -python3.10 -m venv .venv -source .venv/bin/activate -python -m pip install --upgrade pip -pip install -e . +pipx install sql-query-mcp ``` -安装完成后,可执行文件通常位于以下路径。 +托管启动模式不要求预先安装 `sql-query-mcp`,但要求本机已经可用 `pipx`。 +如果你想先在终端验证启动链路,可以运行: ```bash -/absolute/path/to/sql-query-mcp/.venv/bin/sql-query-mcp +pipx run --spec sql-query-mcp sql-query-mcp ``` +如果你需要固定版本,可以把 `sql-query-mcp` 替换为 +`'sql-query-mcp==X.Y.Z'`。 + ## 第二步:准备连接配置 -服务默认读取 `config/connections.json`。你可以从示例文件开始。 +通过 PyPI 安装后,服务不依赖本地仓库目录。更实用的做法是自己维护一个独立 +的配置文件,并通过环境变量指向它。 ```bash -cp config/connections.example.json config/connections.json +mkdir -p ~/.config/sql-query-mcp ``` -下面是一个最小配置示例。 +把下面这份最小配置保存为 +`~/.config/sql-query-mcp/connections.json`。 ```json { @@ -88,27 +97,49 @@ cp config/connections.example.json config/connections.json 这个超时作用在数据库会话层,不是 OpenCode 自己的会话超时。 -## 第三步:准备环境变量 +## 第三步:注册到 OpenCode -`connections.json` 只存环境变量名,因此你还需要准备真实 DSN 和配置路径。 - -```bash -export PG_CONN_CRM_PROD_MAIN_RO='postgresql://username:password@host:5432/dbname' -export MYSQL_CONN_CRM_PROD_MAIN_RO='mysql://username:password@host:3306/crm' -export SQL_QUERY_MCP_CONFIG='/absolute/path/to/sql-query-mcp/config/connections.json' -``` +`connections.json` 只存环境变量名,因此你需要在 OpenCode 的 MCP 配置里一并 +提供配置文件路径和真实 DSN。 请保持下面这些规则一致。 - `engine` 必须显式配置 -- PostgreSQL 使用 `schema` -- MySQL 使用 `database` +- PostgreSQL 默认命名空间使用 `default_schema` +- MySQL 默认命名空间使用 `default_database` - `dsn_env` 必须和真实环境变量名一致 -## 第四步:注册到 OpenCode +OpenCode 的全局配置文件通常位于 `~/.config/opencode/opencode.json`。按你 +选择的运行方式加入对应配置即可。 + +### 安装命令模式 + +如果你已经执行过 `pipx install sql-query-mcp`,可以直接让 OpenCode 调用 +`sql-query-mcp`。 + +```json +{ + "$schema": "https://opencode.ai/config.json", + "mcp": { + "sql_query_mcp": { + "type": "local", + "command": ["sql-query-mcp"], + "enabled": true, + "timeout": 20000, + "environment": { + "SQL_QUERY_MCP_CONFIG": "/Users/yourname/.config/sql-query-mcp/connections.json", + "PG_CONN_CRM_PROD_MAIN_RO": "postgresql://username:password@host:5432/dbname", + "MYSQL_CONN_CRM_PROD_MAIN_RO": "mysql://username:password@host:3306/crm" + } + } + } +} +``` + +### 托管启动模式 -OpenCode 的全局配置文件通常位于 `~/.config/opencode/opencode.json`。在文件 -中加入下面这段 MCP 配置。 +如果你希望像 `npx` 风格那样,把包来源和启动方式一起写在配置里,可以改成 +下面这样。 ```json { @@ -117,11 +148,16 @@ OpenCode 的全局配置文件通常位于 `~/.config/opencode/opencode.json`。 "sql_query_mcp": { "type": "local", "command": [ - "/absolute/path/to/sql-query-mcp/.venv/bin/sql-query-mcp" + "pipx", + "run", + "--spec", + "sql-query-mcp", + "sql-query-mcp" ], "enabled": true, + "timeout": 20000, "environment": { - "SQL_QUERY_MCP_CONFIG": "/absolute/path/to/sql-query-mcp/config/connections.json", + "SQL_QUERY_MCP_CONFIG": "/Users/yourname/.config/sql-query-mcp/connections.json", "PG_CONN_CRM_PROD_MAIN_RO": "postgresql://username:password@host:5432/dbname", "MYSQL_CONN_CRM_PROD_MAIN_RO": "mysql://username:password@host:3306/crm" } @@ -131,13 +167,13 @@ OpenCode 的全局配置文件通常位于 `~/.config/opencode/opencode.json`。 ``` 如果你的 `opencode.json` 已经包含其他字段,只合并 `mcp` 节点即可,不要整 -个文件覆盖。 +个文件覆盖。两种方式只保留一种即可。 -## 第五步:重启 OpenCode +## 第四步:重启 OpenCode 保存配置后,重启 OpenCode 或新开会话,让 MCP 服务重新加载。 -## 第六步:验证接入 +## 第五步:验证接入 建议先跑一组最小验证动作,确认注册、连接和权限都正常。 @@ -171,7 +207,7 @@ OpenCode 的全局配置文件通常位于 `~/.config/opencode/opencode.json`。 - `dsn_env` 和 `environment` 中的变量名是否完全一致 - 对应数据库账号是否具备目标 schema 或 database 的只读权限 -- 是否把 PostgreSQL 的 `schema` 和 MySQL 的 `database` 用反了 +- 是否把 `default_schema` 和 `default_database` 配反了 ### 查询被安全规则拦截 diff --git a/docs/project-overview.md b/docs/project-overview.md index c668d6c..4110475 100644 --- a/docs/project-overview.md +++ b/docs/project-overview.md @@ -20,7 +20,7 @@ - 连接配置和真实 DSN 分离,DSN 只通过环境变量注入 - `engine` 必须显式声明,不从 `connection_id` 推断 -- PostgreSQL 使用 `schema`,MySQL 使用 `database` +- PostgreSQL 和 MySQL 保留各自原生的命名空间概念与默认值字段 - 工具执行前先过只读 SQL 校验 - 每次调用都记录审计日志 @@ -33,8 +33,8 @@ 每个连接都由 `connection_id` 唯一标识,并声明自己的数据库引擎、环境、租 户、角色和 DSN 环境变量名。 -服务默认读取 `config/connections.json`,也支持通过 -`SQL_QUERY_MCP_CONFIG` 指向自定义路径。 +源码运行时,服务默认读取 `config/connections.json`。通过 PyPI 接入时,推荐 +显式使用 `SQL_QUERY_MCP_CONFIG` 指向你自己的配置文件路径。 实现上,这部分由 `sql_query_mcp/config.py` 负责加载和校验。 @@ -43,8 +43,8 @@ 项目不会把 PostgreSQL 和 MySQL 粗暴映射成同一个抽象命名空间,而是保留 各自的原生概念。 -- PostgreSQL: 使用 `schema` -- MySQL: 使用 `database` +- PostgreSQL: 使用 `schema`,默认值字段为 `default_schema` +- MySQL: 使用 `database`,默认值字段为 `default_database` 服务会在进入数据库前完成参数合法性校验和默认值回退。 diff --git a/docs/release-process.md b/docs/release-process.md index 8c56a9e..e22b917 100644 --- a/docs/release-process.md +++ b/docs/release-process.md @@ -50,7 +50,8 @@ git push origin vX.Y.Z PyPI 和 GitHub Release。 - 在 PyPI 上确认目标版本已经可见。 -- 确认 `pip install sql-query-mcp==X.Y.Z` 可用。 +- 确认 `pipx install 'sql-query-mcp==X.Y.Z'` 可用,或确认 + `pipx run --spec 'sql-query-mcp==X.Y.Z' sql-query-mcp` 可启动。 - 在 GitHub 上确认 `vX.Y.Z` Release 已创建。 - 确认 Release 附件包含 `sdist` 和 `wheel`。 diff --git a/pyproject.toml b/pyproject.toml index f11eb5e..8f6ef95 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "sql-query-mcp" -version = "0.1.3" +version = "0.1.4" description = "Read-only SQL MCP server for PostgreSQL and MySQL." readme = "README.md" requires-python = ">=3.10" diff --git a/sql_query_mcp/__init__.py b/sql_query_mcp/__init__.py index 4c8cc68..6536ff5 100644 --- a/sql_query_mcp/__init__.py +++ b/sql_query_mcp/__init__.py @@ -2,4 +2,4 @@ __all__ = ["__version__"] -__version__ = "0.1.3" +__version__ = "0.1.4"