Lakebase MCP服务器
生产准备就绪 模型上下文协议(MCP) 服务器 copula湖基 --Rancher上的托管PostgreSQL服务,具有自动缩放、分支和Unity Catalog治理功能。
该服务器使AI代理(Claude、GPT、Copilot等)能够完全控制Lakebase数据库:查询、模式探索、计算管理、分支、迁移、增量同步、数据质量分析和功能服务——所有这些都是通过标准MCP接口实现的。
______________________________________________________________________
关键能力
- 46工具 跨越13个类别——查询、模式、项目、分支、计算、迁移、同步、同步表、端点、监控、质量、功能存储、统一通信治理
- 4个提示模板 --用于探索、迁移、同步和自动缩放调整的指导性工作流程
- 1个会话资源 —
memo://insights用于在分析过程中积累观测值 - 交互式UI仪表板 --5页React+FastAPI应用程序,带有工具浏览器、治理矩阵、连接向导和定价计算器
- 自动缩放感知 --指数回退重试,用于扩展到零、读取副本路由、计算生命周期管理
- 安全第一 --写保护、危险功能阻止、生产分支保护、只读事务执行
- 双输出 --每个工具的markdown表(人性化)或JSON(程序化)
- 完全异步 --基于FastMCP构建
psycopg3.x异步连接池 - 查询成本归属 --SQL注释标记(
/* lakebase_mcp:tool_name */) +application_name对于pg_stat活动 - 运输灵活性 --可流式传输的http(默认,生产)或stdio(
--transport stdio克劳德桌面)
______________________________________________________________________
工具参考(46个工具)
查询工具(3)
| 工具 | 描述 | 只读 |
|---|---|---|
lakebase_read_query | 执行只读SQL(如果可用,则路由到副本)。包裹在 READ ONLY 交易 | 是 |
lakebase_execute_query | 执行读/写SQL。由SQL配置文件管理(LAKEBASE_SQL_PROFILE 或 LAKEBASE_ALLOW_WRITE).积木 pg_terminate_backend, pg_cancel_backend, pg_reload_conf | 没有 |
lakebase_explain_query | 显示PostgreSQL执行计划(EXPLAIN FORMAT JSON, VERBOSE).可选的 ANALYZE + BUFFERS 用于实际计时 | 是 |
架构发现工具(4)
| 工具 | 说明 |
|---|---|
lakebase_list_schemas | 列出用户模式(不包括 pg_catalog, information_schema, pg_toast)与业主 |
lakebase_list_tables | 在具有行估计的架构中列出表/视图(pg_stat_get_live_tuples)和尺寸(pg_total_relation_size) |
lakebase_describe_table | 全表架构:列、类型、可空性、默认值、长度/精度、带定义的索引 |
lakebase_object_tree | 分层JSON树:模式->表->列。包括表格、视图、实体化视图 |
项目管理工具(7)
| 工具 | 说明 |
|---|---|
lakebase_list_projects | 通过Databricks API列出工作区中的所有Lakebase项目。可选目录筛选器 |
lakebase_describe_project | 详细项目信息:配置、分支、计算大小、存储使用情况、同步管道 |
lakebase_get_connection_string | 获取PostgreSQL连接字符串与临时凭据通过copula凭据自动售货。支持主端点和副本端点。 默认情况下已编辑密码 |
lakebase_create_project | 通过Databricks REST API创建一个新的Lakebase项目。指定目录、层和初始计算配置 |
lakebase_delete_project | 删除Lakebase项目(不可逆)。需要确认参数以防止意外删除 |
lakebase_rotate_credentials | 轮换Lakebase项目的PostgreSQL凭据。通过凭证自动售货生成新的短期代币 |
lakebase_list_credentials | 列出Lakebase项目的活动凭据/会话。显示凭证的有效期和过期时间 |
分支工具(3)
| 工具 | 说明 |
|---|---|
lakebase_create_branch | 在写分支(即时共享存储)上创建副本。可选父分支选择 |
lakebase_list_branches | 列出所有分支,包括创建时间、父级、计算状态、CU分配 |
lakebase_delete_branch | 删除分支(不可逆)。 无法删除生产/主 --强制服务器端 |
计算管理工具(6)
| 工具 | 说明 |
|---|---|
lakebase_get_compute_status | 当前状态(active/suspended/scaling_up/scaling_down)CU分配、连接、正常运行时间 |
lakebase_configure_autoscaling | 设置最小/最大CU范围。规则:每个CU=2 GB RAM,最大扩展=16 CU,0.5-32 CU范围。无需重新启动 |
lakebase_configure_scale_to_zero | 启用/禁用带非活动超时(60–3600秒)的自动挂起。设备:60秒,分段:300秒,产品:禁用 |
lakebase_get_compute_metrics | 时间序列:CPU百分比、内存百分比、工作集、连接、状态转换。回顾:5-1440分钟 |
lakebase_restart_compute | 重新启动计算(中断活动连接)。用于配置更改、性能问题或扩展更新 |
lakebase_create_read_replica | 创建具有独立自动缩放功能的读取副本。共享存储(无数据复制) |
迁移工具(2)
| 工具 | 说明 |
|---|---|
lakebase_prepare_migration | 从生产中创建临时分支,在分支上执行DDL迁移SQL,并在升级前验证结果 |
lakebase_complete_migration | apply=true:在生产分支上重放DDL并清理迁移分支。 apply=false:删除分支,放弃更改 |
同步工具(2)
| 工具 | 说明 |
|---|---|
lakebase_create_sync | 创建Delta\Lakebase同步管道。方向: delta_to_lakebase, lakebase_to_delta.频率: snapshot, triggered, continuous |
lakebase_list_syncs | 列出所有同步管道,包括源、目标、方向、频率、状态、上次同步时间 |
同步表工具(4)
| 工具 | 说明 |
|---|---|
lakebase_list_synced_tables | 通过同步表API列出Lakebase项目的所有同步表。显示源增量表、同步状态和上次同步时间 |
lakebase_create_synced_table | 通过以下方式创建新的同步表(Delta到Lakebase反向同步) /api/2.0/lakebase/projects/{name}/synced_tables。指定源目录、架构和表 |
lakebase_delete_synced_table | 删除已同步的表配置。停止正在进行的同步并清理Lakebase侧副本 |
lakebase_get_synced_table_status | 获取特定同步表的详细同步状态:延迟、吞吐量、上次同步时间、错误状态 |
端点管理工具(4)
| 工具 | 说明 |
|---|---|
lakebase_list_endpoints | 列出Lakebase项目的所有端点(主端点和副本端点)以及连接详细信息和状态 |
lakebase_create_endpoint | 通过REST API为Lakebase项目创建一个新的端点(例如,读取副本端点) |
lakebase_update_endpoint | 更新端点配置:自动缩放CU范围、允许的IP列表、SSL模式 |
lakebase_delete_endpoint | 删除非主要端点。无法删除主要端点 |
监控工具(3)
| 工具 | 说明 |
|---|---|
lakebase_replication_status | 查询 pg_stat_replication 对于活动复制槽、WAL延迟、重播延迟和副本状态 |
lakebase_wal_statistics | 查询 pg_stat_wal 用于WAL生成速率、缓冲区、同步度量。可用于规模和CDC吞吐量估算 |
lakebase_cdc_monitor | 基于WAL的CDC监控(wal2delta)管道:插槽状态、确认的刷新LSN、复制延迟、消费者健康状况 |
数据质量工具(1)
| 工具 | 说明 |
|---|---|
lakebase_profile_table | 每列统计信息:空%、基数、最小/最大值、平均值、stddev(数字)、不同计数。可配置的样本量(100-1M行) |
功能存储工具(2)
| 工具 | 说明 | |
|---|---|---|
lakebase_lookup_features | 按实体键查找低延迟(\ list_tables -> describe_table -> read_query -> profile_table -> append_insight | |
lakebase_safe_migration | 基于分支的模式迁移 | prepare_migration -> read_query (测试)-> explain_query (验证)-> complete_migration |
lakebase_setup_sync | Delta\湖基同步 | create_sync -> list_syncs |
lakebase_autoscaling_tuning | 监控和调整计算自动缩放 | get_compute_status -> get_compute_metrics -> configure_autoscaling -> configure_scale_to_zero -> create_read_replica |
克劳德代码中的用法:
Use the lakebase_explore_database prompt to guide your exploration of my database.Python MCP客户端中的用法:
prompt = await session.get_prompt("lakebase_autoscaling_tuning")
print(prompt.messages[0].content.text)______________________________________________________________________
自动缩放感知设计
此服务器专为Lakebase自动缩放计算而构建:
缩放到零重试
当计算暂停时,第一次连接尝试失败。服务器以指数回退重试:
- 尝试次数:5次(可通过以下方式配置
LAKEBASE_S2Z_RETRY_ATTEMPTS) - 延迟:0.5秒->1.0秒->2.0秒->4.0秒->8.0秒(上限为
LAKEBASE_S2Z_MAX_DELAY) - 捕捉:
OperationalError,ConnectionException,ConnectionRefusedError,OSError
读取副本路由
lakebase_read_query电话execute_readonly()哪个更喜欢副本池lakebase_execute_query始终使用主池- 如果副本不可用,则自动回退到主副本
连接健康状况
- 结账前健康检查(
AsyncConnectionPool.check_connection) - 最大生存期:300秒--回收陈旧连接
- 最大空闲时间:60s--空闲连接被清除
- 重新连接超时:30s
自动缩放感知错误消息
| 条件 | 消息 |
|---|---|
| 缩放到零唤醒 | “计算正在唤醒…重试已用尽。请稍后重试。” |
| 连接被拒绝 | “无法连接。可能:挂起、重新启动、正在进行自动缩放。” |
| 连接已终止 | “重新启动/扩展期间连接已终止。池将重新连接。” |
| 权限被拒绝 | “UC权限不允许此操作。” |
| 找不到表 | “使用 lakebase_list_tables 以发现可用的表。" |
| 语法错误 | “SQL语法错误--{details}。” |
| 查询超时 | “尝试使用LIMIT限制行或简化查询。” |
______________________________________________________________________
查询成本归属
灵感来自雪花 QUERY_TAG 模式,Lakebase MCP为成本跟踪和可观察性提供了两层查询属性:
1.应用程序级标记
所有连接包括 application_name=lakebase_mcp 在连接字符串中。这出现在:
pg_stat_activity.application_name--在活动查询中识别MCP会话- PostgreSQL日志——在日志分析中过滤MCP流量
2.工具级SQL注释
每个查询前面都有一个SQL注释,用于标识发起工具:
/* lakebase_mcp:lakebase_read_query */ SELECT * FROM users LIMIT 10;这出现在:
pg_stat_statements--按工具划分的总成本- 查询日志——跟踪单个工具调用
______________________________________________________________________
安全控制
| 控制 | 详细信息 |
|---|---|
| 写防护 | 所有写/DDL查询都被阻止,除非 LAKEBASE_ALLOW_WRITE=true (遗产)或受其管辖 LAKEBASE_SQL_PROFILE |
| SQL治理 | 基于sqlglot的AST解析对所有17种SQL语句类型进行分类,每种类型允许/拒绝 |
| 工具访问控制 | 每个工具都有预构建配置文件的允许/拒绝列表(只读、分析师、开发人员、管理员) |
| 只读交易 | lakebase_read_query 包裹 SET TRANSACTION READ ONLY |
| 危险功能阻塞 | pg_terminate_backend, pg_cancel_backend, pg_reload_conf 在验证时被拒绝 |
| 生产分支保护 | lakebase_delete_branch 拒绝删除 production 或 main |
| 行限制 | 查询上限为 LAKEBASE_MAX_ROWS (默认值:1000) |
| 查询超时 | connect_timeout 通过强制执行 LAKEBASE_QUERY_TIMEOUT (默认值:30秒) |
| 凭证编辑 | get_connection_string 默认情况下编辑密码--返回 **** 除非 show_password=true 明确传递 |
| 输入验证 | Pydantic模型对所有参数(CU范围、超时、样本大小)强制执行边界 |
______________________________________________________________________
精细治理
服务器提供 双层治理 用于控制AI代理可以做什么——匹配并超越Snowflake MCP的访问控制能力。
建筑
Request: lakebase_execute_query("DROP TABLE users")
Layer 1 — Tool Access Control
Is "lakebase_execute_query" permitted? → check tool profile/allow/deny
Layer 2 — SQL Statement Governance
Parse "DROP TABLE users" via sqlglot → SQLStatementType.DROP
Is DROP in allowed types? → check SQL profile/allow/deny
Both layers must PASS for execution to proceed.SQL语句配置文件
服务器使用以下方式对SQL进行分类 sqlglot AST解析 (不是正则表达式)来准确处理CTE、子查询、多语句SQL和Postgres特定的语法。
| 配置文件 | 允许的语句类型 |
|---|---|
read_only | 选择、显示、描述、解释 |
analyst | 只读+插入、设置 |
developer | 分析员+更新、删除、创建、更改、调用 |
admin | 所有17种类型(SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER、MERGE、TRUNCATE、GRANT、REVOKE、USE、SHOW、DESCRIBE、EXPLAIN、SET、CALL) |
工具访问配置文件
| 配置文件 | 允许的工具类别 |
|---|---|
read_only | sql_query、schema_read、project_read、branch_read、compute_read、sync_read、synced_tables_read、endpoint_read、监控、质量、特征_read、洞察 |
analyst | 与read_only相同 |
developer | 只读+分支写入、计算写入、迁移、同步写入、同步表写入、端点写入 |
admin | 全部16个类别 |
快速入门示例
只读代理 (限制性最强——非常适合编码助理):
export LAKEBASE_SQL_PROFILE=read_only
export LAKEBASE_TOOL_PROFILE=read_only
export LAKEBASE_TOOL_DENIED=lakebase_execute_query # force read_query only分析师代理 (SELECT+INSERT用于暂存):
export LAKEBASE_SQL_PROFILE=analyst
export LAKEBASE_TOOL_PROFILE=analyst开发商代理 (完全CRUD,无管理员):
export LAKEBASE_SQL_PROFILE=developer
export LAKEBASE_TOOL_PROFILE=developer传统模式 (向后兼容——无治理环境变量):
export LAKEBASE_ALLOW_WRITE=false # same behavior as beforeYAML配置(可选)
对于复杂的策略,请使用YAML文件而不是env-vars:
export LAKEBASE_GOVERNANCE_CONFIG=/path/to/governance.yaml看 governance.yaml.example 以获取完整参考。
治理环境变量
| 变量 | 值 | 默认值 | 描述 |
|---|---|---|---|
LAKEBASE_SQL_PROFILE | read_only, analyst, developer, admin | *(空=遗留)* | SQL权限配置文件 |
LAKEBASE_TOOL_PROFILE | read_only, analyst, developer, admin | *(空=遗留)* | 工具访问配置文件 |
LAKEBASE_SQL_ALLOWED_TYPES | 逗号分隔类型 | *(空)* | 允许的其他SQL类型 |
LAKEBASE_SQL_DENIED_TYPES | 逗号分隔类型 | *(空)* | 拒绝SQL类型(覆盖配置文件) |
LAKEBASE_TOOL_ALLOWED_CATEGORIES | 逗号分隔的类别 | *(空)* | 其他允许的工具类别 |
LAKEBASE_TOOL_DENIED_CATEGORIES | 逗号分隔的类别 | *(空)* | 拒绝的工具类别 |
LAKEBASE_TOOL_ALLOWED | 逗号分隔的工具名称 | *(空)* | 个人工具允许列表 |
LAKEBASE_TOOL_DENIED | 逗号分隔的工具名称 | *(空)* | 个人工具拒绝列表 |
LAKEBASE_GOVERNANCE_CONFIG | 文件路径 | *(空)* | 治理之路.yaml |
______________________________________________________________________
Unity目录集成
Lakebase MCP在三个层面上与Unity Catalog治理集成:
第一级:权限反思
代理可以在尝试操作之前查询自己的UC权限:
> What can I access in the hls_amer_catalog?
Agent calls: lakebase_governance_summary(catalog="hls_amer_catalog")
Result:
SQL Governance: read_only (SELECT, SHOW, DESCRIBE, EXPLAIN)
Tool Access: all read-only tools
UC Privileges: SELECT, USE_CATALOG, USE_SCHEMA
Recommended profile: read_only or analyst第二级:联合目录
Lakebase数据库注册为 国外目录 在Unity目录中:
- 模式和表出现在目录资源管理器中
- UC授权(SELECT、MODIFY等)控制元数据访问
- 凭证自动售货尊重UC权限
- 可以应用行过滤器和列掩码
第三级:三层访问控制
Agent Request → MCP Tool Governance → SQL Statement Governance → UC Permission Check
(tool_guard.py) (sql_guard.py) (PostgreSQL + UC grants)
Layer 1: Is the tool allowed? (LAKEBASE_TOOL_PROFILE)
Layer 2: Is the SQL type allowed? (LAKEBASE_SQL_PROFILE)
Layer 3: Does UC permit this object? (Unity Catalog grants)所有三层都必须允许操作成功。
______________________________________________________________________
UI仪表板
一个功能齐全的React+FastAPI web应用程序,用于探索、配置和估算Lakebase MCP服务器的成本。已部署为copula应用程序。
第(5)页
| 页面 | 路径 | 描述 |
|---|---|---|
| 家 | / | 统计数据概述(46个工具、16个类别、4个配置文件、4个提示)、快速链接 |
| 工具资源管理器 | /tools | 按类别、搜索、筛选、查看参数和注释浏览所有46个工具 |
| 连接 | /connect | 带有Claude Desktop、Claude Code、Python、curl配置片段的连接向导 |
| 治理 | /governance | SQL配置文件和工具配置文件的交互式访问控制矩阵 |
| 定价计算器 | /pricing | 代币成本估算器、计算/存储计算器、竞争比较 |
定价计算器
定价页面提供了三个维度的交互式成本估算:
- 代币成本计算器 --选择Claude模型(Opus/Sonet/Haiku),调整每个会话的工具调用,请参阅每个调用和每个会话的成本。包括型号推荐横幅(例如,“切换到Sonnet可节省40%”)
- 计算成本估算师 --选择CU大小(0.5-32)、地区和使用模式(始终与比例为零)。计算每月DBU成本
- 存储成本估算师 --输入数据库大小和分支。强调分支是免费的(写时复制)
- 月度总估算 --结合令牌+计算+存储,可调整会话/月
- 竞争比较 --并排的Lakebase vs Snowflake MCP vs Teradata MCP:计算成本、会话成本、工具数量、治理层和关键差异化因素
- 成本优化技巧 -可操作的建议(即时缓存、模型选择、缩放为零、批量API)
构建和部署
# Build frontend
python ui/build.py
# Deploy to Databricks Apps
python ui/deploy_to_databricks.py --app-name lakebase-mcp-ui
# Hard redeploy (delete and recreate)
python ui/deploy_to_databricks.py --app-name lakebase-mcp-ui --hard-redeployUI测试(44个测试)
cd ui/frontend
npx vitest run| 测试套件 | 测试 | 覆盖范围 |
|---|---|---|
| App.test.jsx | 7 | 路线、导航,共5页 |
| PricingCalculator.test.jsx | 10 | 全部6个部分,模型选择器,优化提示 |
| ConnectionWizard.test.jsx | 7 | 配置生成、复制按钮、选项卡 |
| ToolCard.test.jsx | 6 | 工具渲染、参数、注释 |
| GovernanceMatrix.test.jsx | 5 | 配置文件矩阵,SQL/工具治理 |
| 类别According.test.jsx | 4 | 类别分组、扩展、工具计数 |
| ProfileSelector.test.jsx | 5 | 配置文件切换,徽章计数 |
______________________________________________________________________
快速开始
先决条件
- Python 3.11+
- 紫外线 (推荐)或pip
- 启用了Lakebase的copula工作区
- Rancher CLI已通过身份验证(
databricks auth login)
1.克隆和安装
git clone https://github.com/suryasai87/lakebase-mcp.git
cd lakebase-mcp
uv sync2.配置环境
创建一个 .env 文件或导出这些环境变量:
# Required — Lakebase connection
export LAKEBASE_HOST="ep-your-endpoint.database.us-east-1.cloud.databricks.com"
export LAKEBASE_DATABASE="databricks_postgres"
# Optional — Databricks workspace (for compute/project/branching tools)
export DATABRICKS_HOST="https://your-workspace.cloud.databricks.com"
# Optional — Read replica
export LAKEBASE_REPLICA_HOST=""
# Optional — Safety (defaults shown)
export LAKEBASE_ALLOW_WRITE="false"
export LAKEBASE_MAX_ROWS="1000"
export LAKEBASE_QUERY_TIMEOUT="30"
# Optional — Scale-to-zero retry (defaults shown)
export LAKEBASE_S2Z_RETRY_ATTEMPTS="5"
export LAKEBASE_S2Z_RETRY_DELAY="0.5"
# Optional — Pool lifecycle (defaults shown)
export LAKEBASE_POOL_MAX_LIFETIME="300"
export LAKEBASE_POOL_MAX_IDLE="60"3.本地运行
# Default: Streamable HTTP (production, stateless, horizontal scaling)
uv run lakebase-mcp
# Alternative: stdio transport (for Claude Desktop direct integration)
uv run lakebase-mcp --transport stdio服务器启动于 http://localhost:8000/mcp 默认情况下使用Streamable HTTP传输。
4.连接AI代理
克劳德桌面(claude_desktop_config.json)
{
"mcpServers": {
"lakebase": {
"url": "http://localhost:8000/mcp"
}
}
}克劳德代码(.claude/mcp.json)
{
"mcpServers": {
"lakebase": {
"type": "streamable_http",
"url": "http://localhost:8000/mcp"
}
}
}任何MCP客户端(Python)
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client("http://localhost:8000/mcp") as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# List all 46 tools
tools = await session.list_tools()
# Run a query
result = await session.call_tool(
"lakebase_read_query",
arguments={"sql": "SELECT current_database(), version()"}
)
print(result.content[0].text)______________________________________________________________________
部署到ViewModel
选项A:copula应用程序(推荐)
- 创建应用程序
databricks apps create lakebase-mcp-server --profile DEFAULT- 设置秘密 用于Lakebase连接
databricks apps set-secret lakebase-mcp-server LAKEBASE_HOST \
"ep-your-endpoint.database.us-east-1.cloud.databricks.com" --profile DEFAULT
databricks apps set-secret lakebase-mcp-server LAKEBASE_DATABASE \
"databricks_postgres" --profile DEFAULT- 同步和部署
DATABRICKS_USERNAME=$(databricks current-user me --profile DEFAULT | jq -r .userName)
databricks sync . "/Users/$DATABRICKS_USERNAME/lakebase-mcp-server" --profile DEFAULT
databricks apps deploy lakebase-mcp-server \
--source-code-path "/Workspace/Users/$DATABRICKS_USERNAME/lakebase-mcp-server" \
--profile DEFAULT- 访问MCP端点
https://lakebase-mcp-server-.aws.databricksapps.com/mcp选项B:Unity目录MCP目录注册
部署后,在UC MCP目录中注册服务器,以便所有工作区用户都可以发现它:
uv run python deploy/register_mcp_catalog.py编辑 deploy/register_mcp_catalog.py 在运行之前设置实际的应用程序URL。
______________________________________________________________________
建筑
lakebase-mcp/
├── server/
│ ├── main.py # FastMCP server, lifespan, tool registration, governance wiring
│ ├── config.py # Environment-based configuration (19 vars)
│ ├── db.py # Async connection pool (S2Z retry + replica routing + query tagging)
│ ├── auth.py # Databricks SDK auth (OBO + standard) + UC permissions
│ ├── governance/
│ │ ├── sql_guard.py # sqlglot-based SQL statement classification (17 types)
│ │ ├── tool_guard.py # Per-tool access control (16 categories, 4 profiles)
│ │ └── policy.py # Unified policy engine (env vars + YAML)
│ ├── tools/
│ │ ├── query.py # 3 tools: read, execute, explain
│ │ ├── schema.py # 4 tools: schemas, tables, describe, tree
│ │ ├── instance.py # 7 tools: projects, describe, connection string, create/delete project, credentials
│ │ ├── branching.py # 3 tools: create, list, delete branches
│ │ ├── compute.py # 6 tools: autoscaling, S2Z, metrics, replicas
│ │ ├── migration.py # 2 tools: prepare, complete
│ │ ├── sync.py # 2 tools: create sync, list syncs
│ │ ├── synced_tables.py # 4 tools: list, create, delete, status for synced tables
│ │ ├── endpoints.py # 4 tools: list, create, update, delete endpoints
│ │ ├── monitoring.py # 3 tools: replication status, WAL stats, CDC monitor
│ │ ├── quality.py # 1 tool: profile table
│ │ ├── feature_store.py # 2 tools: lookup, list feature tables
│ │ └── uc_governance.py # 4 tools: UC permissions, access check, governance summary, catalog grants
│ ├── resources/
│ │ └── insights.py # memo://insights resource + append tool
│ ├── prompts/
│ │ └── templates.py # 4 prompt templates
│ └── utils/
│ ├── errors.py # Autoscaling-aware error handling
│ ├── formatting.py # Markdown/JSON response formatting
│ └── pagination.py # Cursor-based pagination
├── ui/
│ ├── backend/
│ │ ├── app.py # FastAPI app serving React SPA + API
│ │ └── routers/
│ │ └── metadata.py # 12 API endpoints (tools, governance, pricing)
│ ├── frontend/
│ │ ├── src/
│ │ │ ├── App.jsx # Router with 5 animated pages
│ │ │ ├── components/
│ │ │ │ └── Layout.jsx # Sidebar navigation, app bar
│ │ │ ├── pages/
│ │ │ │ ├── Home.jsx # Dashboard with stats and quick links
│ │ │ │ ├── ToolExplorer.jsx # Tool browser with search and filters
│ │ │ │ ├── ConnectionWizard.jsx # MCP client connection setup
│ │ │ │ ├── GovernanceDashboard.jsx # Access control matrices
│ │ │ │ └── PricingCalculator.jsx # Cost estimators and comparison
│ │ │ └── hooks/
│ │ │ └── useApi.js # Shared fetch hook
│ │ └── __tests__/ # 44 Vitest tests (7 suites)
│ ├── build.py # Frontend build script
│ ├── deploy_to_databricks.py # Staging-based deployment
│ └── app.yaml # Databricks App config for UI
├── tests/
│ ├── test_unit/ # 39+ unit tests (no connection needed)
│ ├── test_integration/ # Live connection tests
│ └── test_e2e/ # Full MCP protocol tests
├── deploy/
│ └── register_mcp_catalog.py # Unity Catalog registration
├── eval/
│ └── evaluation.xml # 10 evaluation Q&A pairs
├── app.yaml # Databricks App configuration (MCP server)
├── pyproject.toml # Project metadata (v0.2.0)
├── requirements.txt # Pip-compatible requirements (includes sqlglot for SQL governance)
└── TESTING_SCENARIOS.md # Comprehensive test scenarios for all 46 tools______________________________________________________________________
运行测试
# Unit tests (no Lakebase connection needed)
uv run pytest tests/test_unit/ -v
# Integration tests (requires LAKEBASE_LIVE_TEST=true + connection)
LAKEBASE_LIVE_TEST=true uv run pytest tests/test_integration/ -v
# E2E tests (requires running MCP server)
LAKEBASE_E2E_TEST=true MCP_SERVER_URL=http://localhost:8000/mcp \
uv run pytest tests/test_e2e/ -v______________________________________________________________________
配置参考
| 环境变量 | 默认值 | 描述 |
|---|---|---|
LAKEBASE_HOST | *(必填)* | Lakebase端点主机名 |
LAKEBASE_DATABASE | *(必填)* | 数据库名称 |
LAKEBASE_PORT | 5432 | PostgreSQL端口 |
DATABRICKS_HOST | *(可选)* | 工作区URL(用于计算/项目/分支工具) |
LAKEBASE_REPLICA_HOST | *(空)* | 读取副本主机名 |
LAKEBASE_REPLICA_PORT | 5432 | 读取副本端口 |
LAKEBASE_PG_USER | *(来自.pgpass)* | 显式PostgreSQL用户名 |
LAKEBASE_PG_PASSWORD | *(来自.pgpass)* | 显式PostgreSQL密码 |
LAKEBASE_ALLOW_WRITE | false | 允许写/DDL查询 |
LAKEBASE_MAX_ROWS | 1000 | 每个查询结果的最大行数 |
LAKEBASE_QUERY_TIMEOUT | 30 | 查询超时/连接超时(秒) |
LAKEBASE_S2Z_RETRY_ATTEMPTS | 5 | 扩展到零连接重试 |
LAKEBASE_S2Z_RETRY_DELAY | 0.5 | 基本重试延迟(秒,每次尝试加倍) |
LAKEBASE_S2Z_MAX_DELAY | 10.0 | 最大重试延迟上限(秒) |
LAKEBASE_POOL_MIN | 2 | 最小池连接数 |
LAKEBASE_POOL_MAX | 10 | 最大池连接数 |
LAKEBASE_POOL_MAX_LIFETIME | 300 | 最大连接时间(秒) |
LAKEBASE_POOL_MAX_IDLE | 60 | 驱逐前的最大空闲时间(秒) |
______________________________________________________________________
对话示例
探索数据库
你:我的Lakebase数据库中有哪些表?给我看看最大的那个。 代理: *呼叫lakebase_list_schemas->lakebase_list_tables->lakebase_describe_table* 您的数据库有3个模式(公共、分析、暂存),总共有24个表。最大的是public.transactions约240万行。..
调整自动缩放
你:我的开发数据库太贵了。你能把刻度调到零吗? 代理: *呼叫lakebase_get_compute_status->lakebase_get_compute_metrics->lakebase_configure_scale_to_zero* 完成。您的开发分支现在会在60秒不活动后挂起,并在下一次查询时在约200毫秒后唤醒。根据您的指标,计算有78%的时间处于空闲状态——这应该会大大降低成本。
安全架构迁移
你:添加alast_login将列添加到用户表中,但请先对其进行测试。 代理: *呼叫lakebase_prepare_migration->lakebase_describe_table(在分支上)->lakebase_complete_migration(apply=true)* 迁移已应用。这last_login时间戳列现在已投入生产users桌子。我首先在一个分支上测试了它,以验证没有现有的查询被破坏。
设置功能服务
你:将customer_features表从Delta Lake同步到Lakebase以进行实时服务。 代理: *呼叫lakebase_create_sync方向=delta_to_lakebase,频率=连续* 已创建连续同步管道。这analytics.ml.customer_featuresDelta表将把更改流式传输到Lakebase。使用lakebase_lookup_features用于亚毫秒级查找。
配置文件数据质量
你:检查订单表的数据质量。 代理: *呼叫 lakebase_profile_table 其中table_name=“public.orders”* |列|类型|空值%|不同值|最小值|最大值|平均值| |--------|------|--------|----------|-----|-----|-----| |order_id |整数|0%|50000|1|50000|25000.5| |金额|数字|2.3%|4521|0.99|9999.99 |142.87| |状态|文本|0%|5||||______________________________________________________________________
认证
服务器支持多种身份验证模式:
| 模式 | 何时 | 如何 |
|---|---|---|
| 代表(OBO) | 部署为copula应用程序 | ModelServingUserCredentials() --继承用户身份 |
| 标准SDK | 本地开发、CLI | WorkspaceClient() --用途 ~/.databrickscfg 或环境变量 |
.pgpass 文件 | 使用OAuth轮换的本地开发 | 标准PostgreSQL .pgpass 用于连接凭据 |
| 显式凭据 | CI/CD、服务帐户 | LAKEBASE_PG_USER + LAKEBASE_PG_PASSWORD 环境变量 |
Unity目录权限在数据库层强制执行——服务器不会绕过访问控制。
______________________________________________________________________
已知限制和路线图
通过将MCP实现与最新的copula Lakebase API(2026年4月)进行比较,发现了以下差距:
| # | 严重性 | 差距 | 状态 |
|---|---|---|---|
| GAP-1 | MEDIUM | CU扩展验证使用8个CU最大值——copula文档显示16个CU最大扩展值 | 在v0.3.0中修复 --最大点差更新为16 CU |
| GAP-2 | 低 | 自动缩放最小/最大CU未根据特定层的约束进行验证 | 在v0.3.0中修复 --添加了层感知验证 |
| GAP-3 | HIGH | 迁移工具是部分存根-- prepare_migration 创建分支但不执行DDL; complete_migration(apply=true) 返回成功,而无需在生产环境中重放DDL | 在v0.3.0中修复 --迁移现在在分支上执行DDL,并在生产上重播 |
| GAP-4 | HIGH | 无同步表API支持(通过 /api/2.0/lakebase/projects/{name}/synced_tables) | 在v0.3.0中修复 --添加了4个同步表工具 |
| GAP-5 | 中级 | 无端点管理工具(通过REST API创建/更新/删除端点) | 在v0.3.0中修复 --添加了4个端点管理工具 |
| GAP-6 | 中等 | 没有通过Lakebase REST API的凭证/连接状态管理 | 在v0.3.0中修复 — rotate_credentials 和 list_credentials 添加了工具 |
| GAP-7 | 低 | 缺失 pg_stat_replication 和 pg_stat_wal 监视查询 | 在v0.3.0中修复 — replication_status 和 wal_statistics 添加了工具 |
| GAP-8 | 中等 | SQL/工具治理仅连接到查询工具——分支、计算和同步工具绕过治理检查 | 在v0.3.0中修复 --对所有工具类别实施治理 |
| GAP-9 | 高 | get_connection_string 以明文响应返回凭据--应编辑或使用短寿命令牌 | 在v0.3.0中修复 --默认情况下已编辑密码, show_password=true 选择加入 |
| GAP-10 | 低 | 无基于WAL的CDC(wal2delta)监控集成 | 在v0.3.0中修复 — cdc_monitor 工具已添加 |
| GAP-11 | LOW | 无项目级CRUD(通过API创建/删除项目) | 在v0.3.0中修复 — create_project 和 delete_project 添加了工具 |
| GAP-12 | LOW | 没有通过REST API进行Lakehouse同步状态轮询 | 在v0.3.0中修复 — get_synced_table_status 该工具提供同步状态轮询 |
全面差距分析并提出建议: 汇流——Lakebase MCP服务器
______________________________________________________________________
许可证
Apache 2.0
