Documentation
¶
Overview ¶
Package mcp 把 dbm-cli 的数据库能力以 MCP(Model Context Protocol)server 形式暴露,让 AI 客户端(Claude Desktop / Cursor 等)能直接调用。
设计原则:完全复用现有的 driver/config 抽象,零侵入 CLI。
- 连接经 driver.Get + NewWriteGuard 打开,自动继承 allow_write 守卫与 各 driver 的连接池实现,MCP 层不重做权限/连接逻辑。
- 每个 tool 对应一个现有 CLI 子命令的语义(见 tools.go 注释表), 文案与 manifest 保持一致。
- MCP server 是长驻进程,不混用 cobra 一次性 flag 解析;连接按 datasource 名缓存并 lazy 打开,进程退出时统一 Close。
启动入口见 Run。cobra 子命令封装见 internal/cli/mcp.go。
tools.go 定义 MCP server 暴露的全部 tool 及其 handler。
每个 tool 与一个现有 CLI 子命令一一对应,保持语义与文案一致:
list_datasources <-> dbm-cli datasources (不连库) get_version <-> dbm-cli version list_databases <-> dbm-cli databases list_schemas <-> dbm-cli schemas list_tables <-> dbm-cli tables describe_table <-> dbm-cli columns list_indexes <-> dbm-cli indexes list_views <-> dbm-cli views sample_table <-> dbm-cli table(分页读取) query <-> dbm-cli query(只读) execute <-> dbm-cli query(写,受 allow_write 守卫)
结果以 JSON 文本返回(mcp.NewToolResultText),与 CLI 的 -o json 口径一致, 便于 AI 客户端解析。错误统一用 mcp.NewToolResultErrorFromErr 标记 isError=true。
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Option ¶
type Option func(*Session)
Option 配置 Session。
func WithLogger ¶
WithLogger 替换默认 logger(默认写 stderr,带 [dbm-mcp] 前缀)。
func WithQueryLimit ¶
WithQueryLimit 设置只读查询的默认行数上限(防 SELECT * 拉爆大表)。
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
Session 持有一个 MCP server 实例的运行期状态:配置 + 连接缓存。
它是 MCP handler 与 driver 层之间的桥梁:handler 通过 Session.Conn(name) 取得带写守卫的连接,无需关心 driver 查找/打开/缓存细节。
func NewSession ¶
NewSession 创建一个绑定到指定配置的 MCP 会话。 cfg 可为 nil(此时除 list_datasources 外的 tool 都会在调用时报「未配置数据源」)。
func (*Session) BuildServer ¶
BuildServer 构建并返回注册好全部 tool 的 MCPServer。 传输层(stdio/http)由调用方在 Run 中决定。