mcp

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2026 License: MIT Imports: 15 Imported by: 0

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

func Run

func Run(ctx context.Context, cfg *config.File, opts ...Option) error

Run 在 stdio 上启动 MCP server,阻塞直到 ctx 取消或 stdin 关闭。 这是 AI 客户端(Claude Desktop 等)的标准接入方式。

Types

type Option

type Option func(*Session)

Option 配置 Session。

func WithLogger

func WithLogger(l *log.Logger) Option

WithLogger 替换默认 logger(默认写 stderr,带 [dbm-mcp] 前缀)。

func WithQueryLimit

func WithQueryLimit(n int) Option

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

func NewSession(cfg *config.File, opts ...Option) *Session

NewSession 创建一个绑定到指定配置的 MCP 会话。 cfg 可为 nil(此时除 list_datasources 外的 tool 都会在调用时报「未配置数据源」)。

func (*Session) BuildServer

func (s *Session) BuildServer() *server.MCPServer

BuildServer 构建并返回注册好全部 tool 的 MCPServer。 传输层(stdio/http)由调用方在 Run 中决定。

func (*Session) Close

func (s *Session) Close() error

Close 释放所有缓存连接。可在 server 退出时调用。

func (*Session) Conn

func (s *Session) Conn(ctx context.Context, name string) (driver.Conn, string, error)

Conn 返回指定数据源(name 为空时用 default)的已缓存连接。 首次访问时打开并 Ping;后续复用。连接由 Session 管理,调用方不要 Close。

返回的 Conn 已被 WriteGuard 包裹,因此 Exec 会受 allow_write 守卫保护, 与 CLI 行为完全一致。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL