UXDB MCP Server
概述
UXDB MCP Server 是UXDB 基于 Model Context Protocol(MCP)规范构建的数据库管理中间件,。它将UXDB数据库管理能力——Schema 管理、数据 CRUD、查询分析、安全审计、实时监控、数据迁移等——封装为 15 款标准化 MCP Tool,使各类支持 MCP 协议的 AI 助手能够在自然语言交互中直接执行数据库运维操作。
1.1 核心能力
| 能力域 | 覆盖内容 |
|---|---|
| 结构管理 | Schema、表、索引、约束、触发器、函数、注释、ENUM 类型、行级安全(RLS)策略 |
| 数据操作 | 查询 / 变更 / 原生 SQL / Upsert / 数据迁移(导入导出、跨实例复制) |
| 查询与性能 | EXPLAIN 执行计划分析、慢查询 Top N、查询统计 |
| 运维监控 | 五层实时监控(Database / Table / Query / Lock / Replication)、三维度分析(配置 / 性能 / 安全)、问题调试 |
| 用户权限 | 用户与角色管理、权限授予与回收 |
1.2 关键技术指标
- 15 款数据库管理工具,覆盖 Schema、数据、查询、用户、索引、约束、触发器、函数、注释、分析、调试、监控、迁移等完整领域;
- 3 种传输协议:stdio(本地)、SSE(Web 遗留兼容)、Streamable HTTP(推荐);
- 4 个 MCP 协议版本:
2026-07-28、2025-11-25、2025-06-18、2024-11-05,支持自动协商; - Python ≥ 3.8,零编译依赖,
pip install即用,单条命令启动。
1.3 与传统运维方式的对比
| 维度 | 传统方式 | UXDB MCP Server |
|---|---|---|
| 交互方式 | SQL 命令行 / GUI 工具 | 自然语言 → AI 自动生成并执行操作 |
| 上下文切换 | 频繁切换工具与窗口 | AI 对话内一站式完成 |
| 安全管控 | 依赖 DBA 手动审计 | Token 认证 + 参数化查询 + 操作语义校验 |
| 可扩展性 | 脚本耦合特定环境 | 标准化 MCP 协议,支持三种传输 |
| 运维智能化 | 依赖经验手动排查 | 内置诊断、分析、推荐引擎 |
1.4 缩略语
| 术语 | 定义 |
|---|---|
| MCP | Model Context Protocol,AI 模型与外部工具交互的开放标准协议 |
| JSON-RPC 2.0 | MCP 使用的底层远程过程调用协议 |
| Tool | MCP 中可被 AI 调用的功能单元,包含名称、描述、参数 Schema 和执行逻辑 |
| Resource | MCP 中可被 AI 读取的数据资源,具有 URI 标识 |
| Prompt | MCP 中的提示模板,帮助 AI 更好地完成特定任务 |
| Transport | MCP 中客户端与服务器之间的通信通道(stdio / SSE / Streamable HTTP) |
| UXDB | 优炫数据库管理系统 |
| RLS | Row-Level Security,行级安全策略 |
2. 快速入门
2.1 前置条件
- 一套可访问的 UXDB 数据库实例,并具备数据库账号(建议使用专用低权限账号,见 10.1);
- Python ≥ 3.8 环境;
- 一个支持 MCP 协议的 AI 客户端(IDE 插件、桌面 AI 助手、自研 Agent 等)。
2.2 安装
pip install uxdb-mcp-server
零编译依赖,无需额外系统组件。
2.3 配置连接
UXDB MCP Server 通过连接字符串定位目标数据库,解析优先级为:
- 工具调用参数显式传入;
- 服务初始化默认值;
UXDB_CONNECTION_STRING环境变量。
推荐使用 .env 文件集中管理配置(CLI 入口启动时自动加载):
# .env 示例(变量名以发行包附带的 .env.example 为准)
UXDB_CONNECTION_STRING=postgresql://username:password@127.0.0.1:5432/mydb
安全提示:连接字符串包含明文凭据。生产环境建议通过密钥管理系统或受限权限的环境变量注入,避免提交到代码仓库。
2.4 启动服务
# 本地 stdio 传输(默认)
uxdb-mcp-server
# Web 部署:Streamable HTTP 传输(推荐)
uxdb-mcp-server --transport streamable_http --host 127.0.0.1 --port 8080
# Web 部署:SSE 传输(遗留客户端兼容)
uxdb-mcp-server --transport sse --host 127.0.0.1 --port 8080
配置优先级:显式参数 > 环境变量 > 硬编码默认值。
2.5 接入 AI 客户端
stdio 传输(本地客户端,如 IDE 插件、桌面 AI 助手)——客户端以子进程方式拉起服务:
{
"mcpServers": {
"uxdb": {
"command": "uxdb-mcp-server",
"env": {
"UXDB_CONNECTION_STRING": "uxdb://username:password@127.0.0.1:5432/mydb"
}
}
}
}
Streamable HTTP / SSE 传输(Web 客户端)——先在服务器上启动 HTTP 模式,再在客户端中配置端点 URL:
{
"mcpServers": {
"uxdb": {
"type": "streamable-http",
"url": "http://127.0.0.1:8080/mcp",
"headers": {
"Authorization": "Bearer <your-token>"
}
}
}
}
各客户端的配置入口:
| 客户端类型 | 配置入口 |
|---|---|
| 桌面 AI 助手 | 设置 → 开发者/扩展 → 编辑 MCP 配置 JSON |
| IDE(Cursor / Cline 类) | 命令面板 → Settings → MCP 标签页 → 添加服务器 |
| Web Agent | mcp.json / cline_mcp_settings.json 等项目级配置文件 |
| 自研 Agent | 按 MCP 规范实现 server/discover(2026-07-28)或 initialize(旧版协议)→ tools/list → tools/call 调用序列 |
2.6 验证连通
接入后在 AI 客户端中发出自然语言指令:
"列出当前数据库有哪些 Schema 和表。"
AI 将调用 ux_manage_schema(get_info)并返回结果。也可直接访问健康检查端点(HTTP 传输,无需认证):
curl http://127.0.0.1:8080/health
3. 核心概念
3.1 MCP 协议
MCP(Model Context Protocol)是 AI 模型与外部工具交互的开放标准协议,底层基于 JSON-RPC 2.0。UXDB MCP Server 作为 MCP 服务器,向 AI 客户端暴露三类标准能力:
| 能力 | 在本产品中的形态 |
|---|---|
| Tool | 15 款 ux_* 前缀的数据库管理工具,AI 可主动调用执行操作 |
| Resource | uxdb:// URI 标识的只读数据资源(Schema 列表、健康状态、表详情) |
| Prompt | 预置提示模板(数据库分析、SQL 优化、实时监控),引导 AI 完成特定任务 |
消息编码为 UTF-8 的 JSON-RPC 请求/通知/响应。服务器实现的标准方法包括:initialize(旧版协议协商)、server/discover(2026-07-28 服务发现)、tools/list、tools/call、resources/list、resources/templates/list、resources/read、prompts/list、prompts/get、subscriptions/listen。ping 在 stdio 传输下由 SDK 处理;HTTP 传输下 ping 与 logging/setLevel 返回 Method not found。
3.2 协议版本协商
服务器支持 2026-07-28、2025-11-25、2025-06-18、2024-11-05 四个 MCP 协议版本,协商策略:
- 客户端请求版本若在支持列表中,直接使用;
- 否则返回服务器最新支持版本(
2026-07-28),由客户端决定是否继续。
其中 2026-07-28 为现代无状态协议(server/discover + 每请求 _meta 声明协议版本与能力),其余版本沿用 initialize / notifications/initialized 握手。SSE 传输仅支持旧版协议(不含 2026-07-28)。
4. 架构概览
4.1 分层架构
┌─────────────────────────────────────────────┐
│ CLI 入口层 │
│ 命令行参数解析 / .env 加载 / 配置初始化 / │
│ 操作系统信号管理(优雅关闭) │
├─────────────────────────────────────────────┤
│ 核心编排层(UXDBMCPServer) │
│ 工具实例管理 / MCP 标准处理器绑定 / │
│ 协议版本协商 / 传输层适配 │
├─────────────────────────────────────────────┤
│ 传输层 │
│ stdio(本地) / SSE(遗留) / │
│ Streamable HTTP(推荐) │
├─────────────────────────────────────────────┤
│ 工具层 │
│ 15 款 ux_* 数据库管理工具 │
├─────────────────────────────────────────────┤
│ 安全与认证层 │
│ Token 认证 / 参数化查询 / 操作语义校验 / │
│ 数据库标识符格式验证 │
├─────────────────────────────────────────────┤
│ 连接管理层(DatabaseConnection) │
│ 线程安全连接池 / 事务自动 commit-rollback / │
│ 连接健康检查 / 错误智能分类与脱敏 │
└─────────────────────────────────────────────┘
4.2 逻辑组件职责
| 组件层 | 核心职责 |
|---|---|
| CLI 入口层 | 命令行参数解析、.env 环境变量加载、配置初始化、操作系统信号管理(优雅关闭) |
| 核心编排层 | 工具实例管理、MCP 标准处理器绑定(9 个方法)、协议版本协商、传输层适配 |
| 传输层 | 三种传输通道:本地 stdio、Web SSE、Web Streamable HTTP,共享初始化/工具调用/资源读取/日志管理等核心逻辑 |
| 工具层 | 15 款数据库管理工具,覆盖 Schema、数据、查询、索引、用户、约束、函数、触发器、注释、分析、调试、监控、迁移 |
| 安全与认证层 | HTTP 传输 Token 认证、SQL 参数化查询防注入、操作语义校验(如 DELETE 强制 WHERE 条件)、数据库标识符格式验证 |
| 连接管理层 | 线程安全数据库连接池、事务自动 commit/rollback、连接健康检查、错误智能分类与脱敏 |
4.3 核心设计模式
- 工具抽象基类:所有工具继承
UXDBToolABC,实现name、description、inputSchema、execute(),确保工具实现的统一性和可发现性。 - 连接字符串解析链:
_get_connection_string()按优先级解析——工具调用参数显式传入 → 服务初始化默认值 →UXDB_CONNECTION_STRING环境变量。 - 配置优先级链(CLI):显式参数 > 环境变量 > 硬编码默认值。
- 单例连接池:
DatabaseConnection采用双重检查锁的单例模式 +ThreadedConnectionPool,确保连接安全复用。 - 共享传输基类:SSE 与 Streamable HTTP 两种传输的核心逻辑抽象到
_IntegratedTransportBase,避免逻辑重复。
5. 核心技术设计
5.1 核心编排器(UXDBMCPServer)
UXDBMCPServer 是整个系统的中央调度器,负责:
- 工具注册:初始化 15 款工具实例,注册到 MCP Server;
- 处理器绑定:绑定 9 个 MCP 标准处理器:
tools/list、tools/call、resources/list、resources/templates/list、resources/read、prompts/list、prompts/get、subscriptions/listen、server/discover; - 协议协商:根据客户端请求版本与服务器支持版本自动协商;
- 传输适配:通过
SSETransportIntegrated/StreamableHTTPTransportIntegrated包装类,将工具处理逻辑注入传输层。
共享传输基类 _IntegratedTransportBase 承载两种 HTTP 传输的公共逻辑:
initialize响应构建(旧版协议协商、能力公告)与server/discover处理(2026-07-28)tools/list、tools/call处理resources/list、resources/templates/list、resources/read处理prompts/list、prompts/get处理subscriptions/listen处理ping与logging/setLevel返回 Method not found(stdio 下由 SDK 处理)
5.2 连接管理(DatabaseConnection)
采用线程安全单例 + 连接池设计:
DatabaseConnection
├── 双重检查锁单例(_instance + _lock)
├── ThreadedConnectionPool(minconn=1, maxconn=10)
├── RealDictCursor(结果以字典形式返回)
├── 连接字符串解析(URL → ConnectionConfig)
├── 查询方法:query() / query_single() / query_scalar()
├── 执行方法:execute() # DML/DDL
├── 事务支持:transaction() 异步上下文管理器
└── 智能错误分类:认证失败 / 连接拒绝 / 权限不足 / 外键冲突 / 超时
连接安全机制:
- 每次操作后自动归还连接到池,防止连接泄漏;
- 事务自动 commit / rollback;
- autocommit 状态在操作后还原;
- 连接测试:
connect()时执行SELECT 1验证。
5.3 配置体系(Config)
分层级联的配置数据类:
ServerConfig
├── name: "uxdb-mcp-server"
├── version: "1.1.0"
├── connection_string: str | None
├── log_level: "INFO"
├── TransportConfig
│ ├── transport_type: "stdio" | "sse" | "streamable_http"
│ ├── host: "127.0.0.1"
│ ├── port: 8080
│ ├── cors_origins: ["*"]
│ └── enable_cors: True
├── ProtocolConfig
│ ├── supported_versions: ["2026-07-28", "2025-11-25", "2025-06-18", "2024-11-05"]
│ ├── default_version_by_transport: {stdio → 2026-07-28, sse → 2025-11-25, streamable_http → 2026-07-28}
│ └── negotiate_version(client_version) → negotiated_version
└── AuthConfig
├── auth_token: str | None
└── enabled: bool # 设置 token 后自动启用
5.4 资源与提示系统
除工具外,服务器还通过 MCP 标准机制暴露资源与提示模板。
资源(Resources):
| URI | 名称 | 描述 |
|---|---|---|
uxdb://schemas | Database Schemas | 所有 Schema 列表 |
uxdb://health | Server Health | 健康状态与连接信息 |
uxdb://{schema}/tables | Schema Tables | 指定 Schema 的表列表(模板) |
uxdb://{schema}/{table} | Table Details | 指定表的详细信息(模板) |
提示模板(Prompts):
| 名称 | 参数 | 用途 |
|---|---|---|
analyze_database | scope | 数据库综合分析(配置/性能/安全) |
optimize_query | query(必填) | SQL 查询优化分析 |
monitor_database | focus | 数据库实时监控 |
6. 工具参考
UXDB MCP Server 提供 15 款标准化工具,每个工具均实现 UXDBTool 抽象基类,包含 name(以 ux_ 为前缀)、description、inputSchema(JSON Schema)和 execute() 方法。
6.1 工具全景
| # | 工具名称 | 领域 | 核心操作 |
|---|---|---|---|
| 1 | ux_manage_schema | Schema 管理 | get_info / create_table / alter_table / drop_table / get_enums / create_enum |
| 2 | ux_execute_query | 数据查询 | select / count / exists |
| 3 | ux_execute_mutation | 数据变更 | insert / update / delete / upsert |
| 4 | ux_execute_sql | 原生 SQL | 任意 DDL/DML、事务模式 |
| 5 | ux_manage_query | 查询分析 | explain / get_slow_queries / get_stats / reset_stats |
| 6 | ux_analyze_database | 数据库分析 | configuration / performance / security |
| 7 | ux_monitor_database | 实时监控 | Database / Table / Query / Lock / Replication 五层 |
| 8 | ux_debug_database | 问题调试 | connection / performance / locks / replication |
| 9 | ux_manage_indexes | 索引管理 | get / create / drop / analyze / reindex |
| 10 | ux_manage_users | 用户与权限 | get_users / create_user / drop_user / grant / revoke |
| 11 | ux_manage_constraints | 约束管理 | get / add / drop |
| 12 | ux_manage_functions | 函数与 RLS 管理 | get / create / drop / RLS 策略管理 |
| 13 | ux_manage_triggers | 触发器管理 | get / create / drop / enable / disable |
| 14 | ux_manage_comments | 注释管理 | get / set / delete |
| 15 | ux_manage_data_migration | 数据迁移 | export / import / copy |
6.2 ux_manage_schema — Schema 管理
| 操作 | 描述 | 关键参数 |
|---|---|---|
get_info | 获取 Schema 内表列表或指定表的列/约束/索引详情 | schemaName, tableName |
create_table | 创建新表 | tableName, columns[] |
alter_table | 修改表结构(增/改/删列) | tableName, operations[] |
drop_table | 删除表 | tableName, ifExists, cascade |
get_enums | 列出 ENUM 类型及值 | schemaName, enumName |
create_enum | 创建新的 ENUM 类型 | enumName, values[], ifNotExists |
6.3 ux_execute_query — 数据查询
三合一查询工具,统一处理不同查询场景:
| 操作 | SQL 包装 | 返回 | 安全特性 |
|---|---|---|---|
select | 追加 LIMIT/OFFSET | {rows, rowCount, hasMore} | 仅允许 SELECT/WITH 开头 |
count | 包装为 SELECT COUNT(*) FROM (...) AS sub | {count} | 参数化防注入 |
exists | 包装为 SELECT EXISTS(...) | {exists} | 参数化防注入 |
6.4 ux_execute_mutation — 数据变更
| 操作 | SQL 生成 | 安全约束 |
|---|---|---|
insert | INSERT INTO "{schema}"."{table}" (...) VALUES (...) | data 自动参数化 |
update | UPDATE ... SET ... WHERE ... | data 与 where 均参数化 |
delete | DELETE FROM ... WHERE ... | 强制要求 WHERE 条件 |
upsert | INSERT ... ON CONFLICT (...) DO UPDATE/NOTHING | 冲突列必填 |
6.5 ux_execute_sql — 原生 SQL
灵活性最高的 SQL 执行能力:
- 支持任意 DDL / DML / 复合语句;
- 可选事务模式(
transactional=true); - 可选期望返回行(
expectRows=true); - 参数化查询支持;
- 可选执行超时(
timeout,秒)。
注意:该工具无操作类型限制,生产环境应通过数据库账号权限控制其影响面(见 10.1)。
6.6 ux_manage_query — 查询分析
| 操作 | 功能 | 依赖 |
|---|---|---|
explain | EXPLAIN / EXPLAIN ANALYZE 执行计划分析 | — |
get_slow_queries | 从 ux_stat_statements 获取慢查询 Top N | ux_stat_statements 扩展 |
get_stats | 查询统计(含缓存命中率) | ux_stat_statements 扩展 |
reset_stats | 重置统计信息 | ux_stat_statements 扩展 |
EXPLAIN 选项矩阵:
| 选项 | 说明 |
|---|---|
analyze | 实际执行查询(获取真实耗时) |
buffers | 缓冲区使用详情 |
verbose | 详细输出 |
costs | 成本估算 |
format | text / json / xml / yaml |
6.7 ux_analyze_database — 数据库分析
三维度分析引擎:
| 分析类型 | 检测项 | 推荐逻辑 |
|---|---|---|
configuration | shared_buffers、work_mem、checkpoint_completion_target 等 12 项参数 | 低于推荐阈值自动建议调整 |
performance | 缓存命中率、连接使用率、未使用索引、活跃查询数 | 命中率 < 95% 建议扩容;连接 > 80% 告警 |
security | 超级用户数、SSL 状态、空密码用户、信任认证条目 | 多维度安全检查 + 改进建议 |
6.8 ux_monitor_database — 实时监控
五层监控体系(各层均可通过开关参数按需启用):
Database 层(默认)
├── 数据库名称、大小、运行时间
├── 连接统计(active / idle / total / max)
├── 事务统计(committed / rolledBack)
└── 缓存命中率
Table 层(includeTables=true)
├── 表大小、行数、死元组数
├── 上次 VACUUM / ANALYZE 时间
├── 扫描计数、索引使用率
└── 长期未 VACUUM 告警
Query 层(includeQueries=true)
├── 活跃查询列表(PID、用户、耗时、状态)
├── 等待事件详情
└── 长查询告警(可配置阈值)
Lock 层(includeLocks=true)
├── 锁关系、模式、授予状态
├── 阻塞锁检测
└── 阻塞告警
Replication 层(includeReplication=true)
├── 复制客户端状态
├── LSN 进度(sent / write / flush / replay)
├── 复制延迟(write / flush / replay lag)
└── 同步状态 + 延迟告警
可配置告警阈值参数:
| 阈值参数 | 类型 | 触发条件 |
|---|---|---|
connectionPercentage | 0–100 | 连接使用率超限 |
longRunningQuerySeconds | ≥ 0 | 查询运行时间超限 |
cacheHitRatio | 0–1 | 缓存命中率低于阈值 |
deadTuplesPercentage | 0–100 | 死元组比例超限 |
vacuumAge | ≥ 1(天) | 距上次 VACUUM 天数超限 |
6.9 ux_debug_database — 问题调试
| 问题类型 | 诊断内容 |
|---|---|
connection | 连接池状态、当前连接详情、认证配置 |
performance | 慢查询、缺失索引、表膨胀、统计信息过期 |
locks | 锁等待链、死锁检测、阻塞会话 |
replication | 复制槽状态、WAL 积压、延迟分析 |
6.10 ux_manage_indexes — 索引管理
| 操作 | 功能 |
|---|---|
get | 获取指定表或 Schema 全部索引信息 |
create | 创建索引(支持 B-tree / Hash / GiST / SP-GiST / GIN / BRIN) |
drop | 删除索引 |
analyze | 索引使用率分析,识别未使用索引 |
reindex | 重建索引,消除膨胀 |
6.11 ux_manage_users — 用户与权限
| 操作 | 功能 |
|---|---|
get_users | 列出所有用户/角色及其属性 |
create_user | 创建用户/角色(密码、超级用户、可登录等属性) |
drop_user | 删除用户/角色 |
grant | 授予权限(表级 / Schema 级 / 全局) |
revoke | 回收权限 |
get_permissions | 查看用户/角色的权限分配 |
6.12 ux_manage_constraints — 约束管理
| 操作 | 功能 |
|---|---|
get | 获取表的约束列表 |
create | 添加主键 / 唯一 / 检查约束 |
create_fk / drop_fk | 添加 / 删除外键约束 |
drop | 删除约束 |
6.13 ux_manage_functions — 函数与行级安全(RLS)管理
| 操作 | 功能 |
|---|---|
get | 获取函数/存储过程信息 |
create | 创建函数(SQL / PLpgSQL / PLPython 等) |
drop | 删除函数 |
enable_rls / disable_rls | 启用 / 禁用表行级安全(RLS) |
create_policy / drop_policy / edit_policy / get_policies | RLS 策略的创建 / 删除 / 编辑 / 查询 |
6.14 ux_manage_triggers — 触发器管理
| 操作 | 功能 |
|---|---|
get | 获取触发器详情(含关联函数、事件、时机) |
create | 创建触发器 |
drop | 删除触发器 |
enable / disable | 启用 / 禁用触发器 |
6.15 ux_manage_comments — 注释管理
| 操作 | 功能 |
|---|---|
get | 获取表 / 列注释 |
set | 为表 / 列设置注释 |
remove | 删除注释 |
bulk_get | 批量获取 Schema 内全部对象注释 |
6.16 ux_manage_data_migration — 数据迁移
| 操作 | 功能 |
|---|---|
export | 将表数据导出为 JSON / CSV 文件 |
import | 从 JSON / CSV 文件导入数据到表 |
copy | 在不同数据库实例间复制数据 |
7. 传输层
7.1 传输方式对比
| 特性 | stdio | SSE | Streamable HTTP |
|---|---|---|---|
| 协议版本 | 2026-07-28 | 2025-11-25 | 2026-07-28 |
| 适用场景 | 本地 MCP 客户端 | Web 客户端(遗留) | Web 客户端(推荐) |
| 认证支持 | 系统级 | Bearer Token | Bearer Token |
| CORS 支持 | N/A | 基础 | 可配置 |
| 会话管理 | 进程内 | 连接级(sessionId) | 无状态(无会话) |
| 端点自定义 | N/A | 固定 | 可配置 path |
| 通知广播 | N/A | ✓ | N/A(无状态) |
注:表中协议版本为各传输的默认版本。Streamable HTTP 同时兼容
2025-11-25/2025-06-18/2024-11-05旧版客户端;SSE 不支持2026-07-28。
选型建议:
- 本地开发、IDE 插件、桌面 AI 助手 → stdio(最低延迟,客户端自动管理进程生命周期);
- 新建 Web 部署 → Streamable HTTP(多客户端共享、无状态设计易于横向扩展、符合 MCP 最新规范);
- 已有旧版 Web 客户端无法升级 → SSE(仅为兼容保留)。
7.2 stdio 传输(本地开发)
- 客户端将 MCP Server 作为子进程启动;
- 服务器从标准输入(stdin)读取 JSON-RPC 消息,向标准输出(stdout)写出消息,消息以换行分隔;
- 标准错误(stderr)用于日志输出,客户端可选择捕获或忽略;
- stdout 不会输出任何非 MCP 消息内容,保证协议流干净。
7.3 SSE 传输(遗留兼容)
保持与早期 MCP 客户端的兼容性;默认协议版本为 2025-11-25(不支持 2026-07-28);支持查询参数传递认证凭证,适配无法设置 HTTP Header 的 SSE 客户端。
7.4 Streamable HTTP 传输(推荐)
基于 MCP 2026-07-28 规范的无状态实现:
- 无状态设计:不维护会话,无
Mcp-Session-Id;每个请求自包含,现代客户端通过请求体_meta(io.modelcontextprotocol/protocolVersion与clientCapabilities)声明协议版本与能力; - 消息交换:客户端所有 JSON-RPC 消息以 HTTP POST 发送至 MCP 端点(GET 已移除);服务器返回单个 JSON 响应,通知类消息返回 202 Accepted;
- 协议版本头校验:携带
MCP-Protocol-Version头的请求按 2026-07-28 规则校验:Mcp-Method头须与请求体方法一致,tools/call/resources/read/prompts/get请求须携带匹配的Mcp-Name头;头与请求体不一致返回 HeaderMismatch(-32020),版本不受支持返回 UnsupportedProtocolVersion(-32022);未携带该头的请求按旧版客户端处理(仅校验版本); - CORS 与来源校验:CLI 默认仅允许
http://localhost/http://127.0.0.1来源(可用--allowed-origins扩展),非允许来源的请求返回 403; - 认证集成:Bearer Token 验证嵌入请求处理流程;
- 健康检查:
/health端点绕过认证,便于负载均衡探活; - Protected Resource Metadata:
/.well-known/oauth-protected-resource端点,符合 MCP Authorization 规范(RFC 9728)。
8. 安全与认证
8.1 认证架构
HTTP 传输层采用 Token 认证机制,所有到达 MCP 端点的请求均需携带有效凭证:
AI 客户端 UXDB MCP Server
│ │
│ initialize / server/discover(协商) │
│ ───────────────────────────────────► │
│ ◄───── InitializeResult ─────────── │
│ │
│ tools/call │
│ Authorization: Bearer <token> │
│ ───────────────────────────────────► │
│ ┌───────┴────────┐
│ │ Token 验证 │
│ │ 语义校验 │
│ │ 参数化执行 │
│ └───────┬────────┘
│ ◄───── 工具执行结果 ──────────────── │
- 认证在
AuthConfig中配置:设置auth_token后自动启用; /health端点绕过认证,供探活使用;- SSE 传输额外支持查询参数传递凭证,适配无法设置 HTTP Header 的旧客户端。
8.2 多层安全机制
| 层级 | 机制 | 说明 |
|---|---|---|
| 传输层 | Token 认证 | HTTP 传输强制认证(可配置开关) |
| 查询层 | 参数化查询 | 所有工具使用参数占位符防 SQL 注入 |
| 操作层 | 语义校验 | SELECT-only 检查、DELETE 条件强制、标识符格式验证 |
| 连接层 | 连接池 + 自动归还 | 每次操作后归还连接,防止连接泄漏 |
| 错误层 | 信息脱敏 | 错误消息不暴露数据库内部细节 |
8.3 Protected Resource Metadata
服务器在 /.well-known/oauth-protected-resource 返回符合 MCP Authorization 规范(RFC 9728)的元数据:
{
"resource": "/mcp",
"authorization_servers": [],
"scopes_supported": ["mcp:tools", "mcp:resources"]
}
支持未来接入外部 OAuth 2.0 授权服务器。
8.4 部署侧安全要求
生产部署 HTTP 传输时,除产品内置机制外,还需遵守 MCP 规范的传输层安全要求:
- 校验 Origin 头:所有入站连接应验证
Origin头,防止 DNS 重绑定攻击; - 仅绑定本机地址:本地运行时绑定
127.0.0.1而非0.0.0.0,确需对外提供服务时应置于反向代理 / API 网关之后; - 强制认证:对外暴露的端点必须启用 Token 认证;
- 收紧 CORS:将
cors_origins从*收敛为明确的客户端来源列表; - 网络隔离:MCP Server 与数据库实例之间建议部署于内网,仅开放必要端口。
9. 典型使用场景
以下示例均为直接对 AI 客户端发出的自然语言指令,AI 将自动选择并调用对应工具。
9.1 日常开发
"帮我创建一张 orders 表,包含 id 主键、customer_id、amount、status 和创建时间。"
→ ux_manage_schema / create_table
"给 orders 表批量插入 1000 条测试数据。"
→ ux_execute_mutation / insert
"查询最近 7 天金额最高的 10 笔订单。"
→ ux_execute_query / select
"orders.status 的值改成 'PAID',条件是 id 等于 1001。"
→ ux_execute_mutation / update
9.2 查询性能调优
"这条 SQL 为什么慢?SELECT * FROM orders JOIN customers ON ... WHERE ..."
→ ux_manage_query / explain(含 EXPLAIN ANALYZE 选项)
"找出数据库里最慢的前 10 条查询。"
→ ux_manage_query / get_slow_queries
"分析 orders 表的索引使用情况,哪些索引没被用到?"
→ ux_manage_indexes / analyze
"给 orders.customer_id 建一个 B-tree 索引。"
→ ux_manage_indexes / create
9.3 DBA 日常巡检
"对数据库做一次全面体检。"
→ ux_analyze_database(configuration + performance + security)
"当前有多少活跃连接?有没有长事务?"
→ ux_monitor_database(Query 层)
"检查一下复制延迟和 WAL 积压情况。"
→ ux_monitor_database(Replication 层)/ ux_debug_database(replication)
"哪些表死元组比例过高,需要 VACUUM?"
→ ux_monitor_database(Table 层,deadTuplesPercentage 阈值)
9.4 故障诊断
"数据库连不上了,帮我排查。"
→ ux_debug_database(connection)
"系统卡住了,是不是有锁阻塞?"
→ ux_debug_database(locks,锁等待链分析)
9.5 数据迁移
"把 public.orders 表导出为 CSV 文件。"
→ ux_manage_data_migration / export
"把这批 JSON 数据导入到新库的 orders 表。"
→ ux_manage_data_migration / import
10. 部署与运维最佳实践
10.1 最小权限原则
MCP Server 让 AI 获得了直接操作数据库的能力,权限边界务必由数据库账号控制:
- 为 MCP 接入创建专用数据库账号,不要复用 DBA 超级用户账号;
- 按实际需要授权:只读场景仅授予
SELECT;开发场景授予目标 Schema 的 DML;DDL 与用户管理权限仅在确有需要时授予; ux_execute_sql无操作类型限制,账号权限是其唯一约束——生产库上该账号不应拥有危险权限(如超级用户、批量删除整表的隐式能力);- 定期通过
ux_manage_users(get_users)审计账号与权限分配。
10.2 凭据管理
- 连接字符串优先通过服务初始化默认值或环境变量注入,避免在工具调用参数中动态传入凭据——经工具参数传入的内容会进入 AI 对话上下文;
.env文件应加入版本控制忽略清单;- HTTP 部署时,Token 与数据库凭据均应通过密钥管理系统下发,避免明文落盘。
10.3 传输与暴露面
- 本地开发:stdio,凭据经环境变量注入子进程;
- Web 生产:Streamable HTTP + Token 认证 + 反向代理(TLS 终止、来源校验);
- 服务器默认绑定
127.0.0.1,对外服务需显式配置并配合防火墙 / 安全组; - CORS 收敛为明确的客户端来源。
10.4 监控接入建议
- 将
/health端点纳入负载均衡 / 监控系统探活; - 利用
ux_monitor_database的阈值参数(连接使用率、长查询秒数、缓存命中率、死元组比例、VACUUM 间隔)建立周期性巡检; - 慢查询统计依赖
ux_stat_statements扩展,需在实例参数中预加载并在目标库中启用后,get_slow_queries/get_stats才能返回数据; - 告警阈值初始建议:连接使用率 80%、长查询 60 秒、缓存命中率 95%、死元组比例 20%,再依据业务负载调整。
10.5 连接池与容量
- 默认连接池为 1–10 连接;多客户端共享同一 MCP Server(HTTP 传输)时,需结合数据库
max_connections评估,避免与业务应用争抢连接配额; - 每次工具调用后连接自动归还,长事务通过
transaction()上下文管理器包裹,异常自动 rollback; - 若出现连接耗尽类错误,优先排查是否有未归还的长会话或并发过高的 AI 客户端。
11. 故障排查
| 症状 | 可能原因 | 处理方法 |
|---|---|---|
| 启动即报连接失败 | 连接字符串错误 / 数据库未启动 / 网络不通 | 用 uxsql 等客户端工具以相同凭据直连验证;检查 UXDB_CONNECTION_STRING |
| 认证失败(401) | Token 未配置或不匹配 | 核对 AuthConfig.auth_token 与客户端 Authorization: Bearer 头 |
| 客户端看不到工具 | 协议版本不兼容 / 传输方式不匹配 | 确认客户端 MCP 版本;stdio 客户端勿配置 HTTP URL,反之亦然 |
| 查询统计/慢查询返回空 | ux_stat_statements 扩展未启用 | 在实例参数中预加载扩展并重启,再在目标库执行扩展启用 |
| HTTP 请求 404 | MCP 端点路径不正确或使用了 GET 方法 | 核对客户端 URL 与服务端 --path 配置一致,并确认使用 POST 发送 JSON-RPC 消息 |
| DELETE 操作被拒绝 | 未提供 WHERE 条件 | 语义校验强制要求条件;如确需全表删除,先确认影响面再补充条件或使用原生 SQL 工具 |
| 连接池耗尽 | 并发过高 / 连接未释放 | 检查活跃会话与连接统计;评估调整连接池上限与数据库 max_connections |
| 误操作风险担忧 | 权限过大 | 收紧数据库账号权限(见 10.1),开启 Token 认证 |
排查时可结合内置诊断工具:
"帮我诊断连接问题。" → ux_debug_database(connection)
12. 常见问题(FAQ)
Q1:AI 客户端不支持 MCP,能用吗? 不能直接使用。UXDB MCP Server 只通过 MCP 协议暴露能力,客户端需支持 MCP(stdio 或 Streamable HTTP / SSE 任一传输)。
Q2:一个 MCP Server 实例能连多个数据库吗? 服务器通过连接字符串定位单一默认目标库;工具调用也支持显式传入连接串参数切换目标,但推荐一库一实例部署,便于权限与审计隔离。
Q3:AI 会不会误删数据? 产品内置多层防护:DELETE 强制 WHERE 条件、参数化查询、标识符格式校验、Token 认证。但语义校验不能替代权限控制,生产环境务必遵循最小权限原则(见 10.1)。
Q4:查询结果会泄露敏感数据给 AI 吗? 查询结果会进入 AI 对话上下文,这是 MCP 工具调用机制的固有特性。对敏感库表,应在数据库侧通过权限、行级安全(RLS)或脱敏视图控制 AI 账号可见范围。
Q5:stdio 和 Streamable HTTP 该选哪个? 本地开发选 stdio(客户端自动管理进程,延迟最低);需要多客户端共享、远程访问或 Web 集成时选 Streamable HTTP(需配置认证)。SSE 仅用于兼容旧客户端。
Q6:升级 MCP 协议版本有什么影响?
服务器支持四个协议版本并自动协商,客户端无需固定版本。新客户端建议协商至 2026-07-28 以获得无状态 Streamable HTTP 的完整特性;注意 2026-07-28 不支持 SSE 传输。
Q7:生产环境能开 ux_execute_sql 吗? 可以但需谨慎。该工具无操作类型限制,安全性完全取决于数据库账号权限。生产库若开放,建议配合只读账号、变更审批流程与操作审计使用。
13. 参考资料
- MCP 规范:Model Context Protocol(传输、生命周期、授权等规范章节):https://modelcontextprotocol.io/
- MCP Authorization 规范与 RFC 9728(Protected Resource Metadata):https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization
- UXDB MCP Server 发行包:
README与.env.example(以包内实际配置项为准)