数据库AI访问控制工具

DB-MCP是一个通过模型上下文协议为AI助手提供受治理数据库访问的工具,支持多种数据库并允许定义治理规则以确保数据查询安全。

  • by scrappymonkey
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 anupom/db-mcp

使用说明

DB-MCP

通过 模型上下文协议连接任何支持的数据库,定义治理规则,让AI安全地查询您的数据。

支持的数据库: PostgreSQL、MySQL、BigQuery、Snowflake、Redshift、ClickHouse

快速开始

演示数据(2分钟后尝试)

git clone https://github.com/syam/db-mcp.git
cd db-mcp
docker compose up
  1. 打开 http://localhost:3000 然后单击 试用演示数据
  2. 该演示使用预先配置的多维数据集和治理规则建立了一个示例电子商务数据库
  3. 您的MCP端点位于 http://localhost:3000/mcp/default

添加到克劳德桌面(设置>MCP服务器):

{
  "mcpServers": {
    "db-mcp": {
      "url": "http://localhost:3000/mcp/default"
    }
  }
}

您自己的数据库

git clone https://github.com/syam/db-mcp.git
cd db-mcp
cp .env.example .env   # optionally set ANTHROPIC_API_KEY for AI chat
docker compose up
  1. 打开 http://localhost:3000 然后单击 添加数据库
  2. 填写连接表单并单击 测试连接 验证
  3. 生成多维数据集 --前往 表格 页面,单击 生成所有立方体 (或按表生成)。这创建了告诉语义层什么是可查询的YAML定义。
  4. 配置治理 (可选)--转到 治理 用于标记PII字段、控制成员暴露和设置查询限制的页面
  5. 您的MCP端点位于 http://localhost:3000/mcp/{your-database-id}

重要提示: 如果不生成多维数据集(步骤3),MCP工具将不会返回任何数据。语义层自动拾取新的和更改的多维数据集文件,无需重新启动。

运作原理

Your Database → Cube Definitions (YAML) → Semantic Layer → Governance Rules → MCP Tools → AI Assistant
  • 多维数据集定义 将数据库表映射到可查询的度量和维度
  • 治理规则 控制AI可以访问哪些成员(PII阻止、暴露、查询限制)
  • MCP工具 将受管语义层暴露给任何与MCP兼容的AI助手

多维数据集定义

立方体是定义AI可以查询什么的YAML文件。每个多维数据集都将数据库表映射到类型化度量值(聚合)和维度(属性)。

地点: data/databases/{id}/cube/model/cubes/*.yml

如何创建: 使用 表格 在管理UI中的页面中单击 生成所有立方体如果你有 ANTHROPIC_API_KEY 设置后,生成器将添加丰富的描述,以帮助AI理解您的数据。您还可以手动编写多维数据集YAML。

例子:

cubes:
  - name: orders
    sql_table: orders
    measures:
      - name: count
        type: count
      - name: total_amount
        type: sum
        sql: "{CUBE}.amount"
    dimensions:
      - name: status
        sql: "{CUBE}.status"
        type: string
      - name: created_at
        sql: "{CUBE}.created_at"
        type: time

支持的度量类型: count, sum, avg, min, max, count_distinct

支持的维度类型: string, number, time, boolean

语义层自动检测新的和更改的多维数据集文件,无需重新启动。

治理

治理控制着AI可以访问哪些成员以及如何访问。通过配置 治理 管理UI中的页面,或编辑 data/databases/{id}/agent_catalog.yaml 直接。

例子:

version: "1.0"
defaults:
  exposed: true
  pii: false
members:
  Users.email:
    exposed: false
    pii: true
  Orders.total_amount:
    allowedGroupBy:
      - Orders.status
      - Orders.created_at

特征:

  • PII保护 --标记敏感字段以阻止它们进行所有查询
  • 会员曝光 --控制哪些度量和维度是可查询的
  • 查询限制 --强制每个查询的最大行数
  • 按限制分组 --限制可用于分组的维度
  • 默认筛选器 --自动对所有查询应用安全过滤器(例如租户隔离)
  • 默认分段 --将预定义段应用于所有查询

连接到AI助手

每个数据库在以下位置都有自己的MCP端点 /mcp/{databaseId}.

克劳德桌面版 --添加到“设置”>“MCP服务器”:

{
  "mcpServers": {
    "db-mcp": {
      "url": "http://localhost:3000/mcp/default"
    }
  }
}

游标/其他MCP客户端 --指向 http://localhost:3000/mcp/{databaseId} 作为HTTP MCP端点。

内置AI聊天 --设置 ANTHROPIC_API_KEY 在你的 .env 并使用 聊天 管理UI中的页面,以对话方式查询您的数据。

MCP工具

工具 说明
catalog_search 使用模糊匹配搜索度量值、维度和分段
catalog_describe 获取详细的成员信息,包括治理状态
query_semantic 对语义层执行受控查询

配置

对于Docker,请在您的 .env 运行前的文件或shell docker compose up:

变量 必需 目的
CUBE_JWT_SECRET 自动设置 与Cube.js共享的JWT密钥(默认在docker compose.yml中提供)
ANTHROPIC_API_KEY 否 启用AI聊天和LLM增强的多维数据集生成
ADMIN_SECRET 否 使用AES-256-GCM加密存储的数据库凭据(最少32个字符)

复制 .env.example 到 .env 查看所有可用变量。

本地开发

对于致力于db-mcp本身的贡献者:

# Start infrastructure with exposed ports
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d postgres cube

# Install dependencies
npm install

# Copy and edit env file
cp .env.example .env

# Start backend (port 3000)
npm run dev

# Start frontend (port 3001, in another terminal)
cd admin/frontend && npm install && npm run dev
npm run test             # Run tests
npm run lint             # Lint
npm run build            # Build for production
npx playwright test      # E2E tests

建筑

看 docs/architecture.md 了解详细的体系结构、API参考和故障排除。

localhost:3000 (nginx)
├── /api/*          Admin REST API
├── /mcp/:id        MCP endpoints (Streamable HTTP + SSE)
├── /health         Health check
└── /*              Admin UI (React SPA)
        │
        ▼
    Express Backend
        │
        ▼
    Semantic Layer (Cube.js)
        │
        ▼
    Your Databases

许可证

麻省理工学院