mcpField
B
Boyce

Boyce

本地服务
convergentmethods.com数据库126 周前更新

关于 Boyce

Boyce 是面向生成或检查 SQL 的 Agent 的 MCP 服务和数据库安全层。它结合模式上下文、确定性 SQL 构造、NULL 风险检查和 EXPLAIN 验证,并可解析常见数据与建模来源。

主要功能

  1. 01根据结构化筛选条件生成确定性 SQL
  2. 02检查实时模式和数据概况
  3. 03检查 NULL 风险并用 EXPLAIN 验证
  4. 04解析 10 种数据库和建模来源
  5. 05执行只读 SELECT 查询
  6. 06检查 SQL 的 Redshift 兼容性

适用场景

  1. 01在生成查询前为 Agent 提供模式上下文
  2. 02执行数据库查询前验证 SQL
  3. 03分析列数据以发现质量问题
  4. 04导入 dbt、LookML 或 DDL 项目定义

MCP 相关

Boyce 提供用于导入模式来源和定义、获取模式上下文、生成与验证 SQL、查询数据库、分析数据及检查运行状态的工具。MCP 主机可使用其模式和确定性 SQL 工具,无需为 Boyce 单独配置 LLM 提供商。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"boyce": {
"command": "uvx",
"args": [
"boyce"
],
"env": {
"BOYCE_DB_URL": "<BOYCE_DB_URL>",
"BOYCE_PROVIDER": "<BOYCE_PROVIDER>",
"ANTHROPIC_API_KEY": "<ANTHROPIC_API_KEY>"
}
}
}
}
启动命令uvx boyce
需要配置的环境变量
BOYCE_DB_URLPostgreSQL or Redshift connection string. Optional — tools work without live DB; required for live profiling and EXPLAIN pre-flight.
BOYCE_PROVIDERLLM provider for the NL→StructuredFilter planner (anthropic, openai). MCP hosts using their own model should not set this — the host's model does the reasoning and Boyce receives a pre-built StructuredFilter.
ANTHROPIC_API_KEY密钥Required only when BOYCE_PROVIDER=anthropic and the host does not supply its own model. MCP hosts (Claude Desktop, Cursor, Claude Code, Codex, Cline, Windsurf, JetBrains) do not need this.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiboyce0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Boyce:面向 Agent 数据库工作流的语义协议与安全层

面向 Agent 数据库工作流的语义安全层。 Boyce 将大模型连接到实时数据库上下文,并内置安全护栏。

Boyce 以 Raymond F. Boyce 命名。他是 SQL 的共同发明者(1974 年),也是 Boyce-Codd 范式(BCNF)的合著者。

缺少适当上下文的 AI Agent 查询数据库时,会生成不可靠的 SQL——依赖不完整的架构、臆测列名、猜测联接路径。Boyce 为 Agent 提供所需的结构化数据库信息,让它们每次都能生成正确、安全的 SQL,具体通过三个相互关联的系统实现:

层级功能
SQL 编译器ask_boyce — NL → StructuredFilter → 确定性 SQL。SQL 构建器中不使用大模型。每次输入相同,输出的 SQL 就完全相同,逐字节一致。
数据库检查器query_database / profile_data — 实时 Postgres/Redshift 适配器让你的 Agent 在编写任何筛选条件前查看真实架构和实际数据分布。
查询验证对每个生成的查询执行预检 EXPLAIN 循环。错误的 SQL 会在规划阶段被发现,而不是等到凌晨 2 点轮值响应时才发现。

为什么这很重要? → 空值陷阱:你的 AI Agent 编写的 SQL 是正确的,但答案仍然错误。


安装

需要 Python 3.10+

pip install boyce

# With live Postgres/Redshift adapter (enables EXPLAIN pre-flight + column profiling)
pip install "boyce[postgres]"
# uv (recommended)
uv pip install boyce
uv pip install "boyce[postgres]"

从源代码安装:

git clone https://github.com/boyce-io/boyce
uv pip install -e "boyce/"

快速入门

安装后,运行 boyce init 自动配置 MCP 主机:

boyce init

该向导会检测 Claude Desktop、Cursor、Claude Code 和 JetBrains(DataGrip、IntelliJ 等),并为每个主机写入正确的配置块。

从源代码进行开发? 仓库中附带了一个设置脚本:

./quickstart.sh   # detects uv or python, installs package, writes .env template

配置 MCP 主机

最快捷的方法是运行 boyce init——它会检测你的 MCP 主机并自动写入配置:

boyce init

你也可以手动配置。根据主机的不同,有两种设置方式:


方式 1 — MCP 主机(无需 LLM 密钥)

如果你使用的是 Claude Desktop、Cursor、Claude Code、Codex、Cline、Windsurf、JetBrains(DataGrip、 IntelliJ)或任何兼容 MCP 的主机,则无需为 Boyce 配置 LLM 提供商。 主机自带的模型负责推理——Boyce 则通过 get_schema 和 ask_boyce 提供架构上下文和确定性 SQL 编译器。只需要 BOYCE_DB_URL(而且它也是可选的)。

Claude Desktop(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "boyce": {
      "command": "boyce",
      "env": {
        "BOYCE_DB_URL": "postgresql://user:pass@host:5432/db"
      }
    }
  }
}

Cursor(项目根目录中的 .cursor/mcp.json):

{
  "mcpServers": {
    "boyce": {
      "command": "boyce",
      "env": {
        "BOYCE_DB_URL": "postgresql://user:pass@host:5432/db"
      }
    }
  }
}

方式 2 — 使用 Boyce 内置的 NL→SQL

如果你使用命令行(boyce ask)、HTTP API 或非 MCP 客户端(例如 VS Code 扩展),请使用你的 LLM 提供商配置 Boyce 内部的查询规划器:

{
  "mcpServers": {
    "boyce": {
      "command": "boyce",
      "env": {
        "BOYCE_PROVIDER": "anthropic",
        "BOYCE_MODEL": "claude-sonnet-4-6",
        "ANTHROPIC_API_KEY": "sk-ant-...",
        "BOYCE_DB_URL": "postgresql://user:pass@host:5432/db"
      }
    }
  }
}

Boyce 支持所有可通过 LiteLLM 使用的 LLM 提供商: Anthropic、OpenAI、Ollama(本地)、vLLM(本地)、Azure、Bedrock、Vertex、Mistral 等。


两种方式下,BOYCE_DB_URL 都是可选的。未设置时,Boyce 将以仅架构模式运行——仍可生成 SQL;EXPLAIN 预检和实时查询工具则会返回 "status": "unchecked"。


环境变量

变量何时需要示例用途
BOYCE_PROVIDER仅路径 2(CLI/HTTP/非 MCP)anthropicLiteLLM 提供商名称
BOYCE_MODEL仅路径 2(CLI/HTTP/非 MCP)claude-sonnet-4-6传递给 LiteLLM 的模型 ID
ANTHROPIC_API_KEY使用 Anthropic 时sk-ant-...Anthropic 凭据
OPENAI_API_KEY使用 OpenAI 时sk-...OpenAI 凭据
BOYCE_DB_URL可选(任一路径)postgresql://user:pass@host:5432/dbasyncpg DSN — 启用 EXPLAIN 预检和实时查询工具
BOYCE_HTTP_TOKEN仅路径 2 的 HTTP APImy-secret-tokenboyce serve --http 的 Bearer 令牌
BOYCE_STATEMENT_TIMEOUT_MS可选30000每条语句的超时时间,单位为 ms(默认:30s)

MCP 工具

工具描述
ingest_source从 dbt manifest、dbt 项目、LookML、DDL、SQLite、Django、SQLAlchemy、Prisma、CSV 或 Parquet 解析 SemanticSnapshot。
ingest_definition存储经过认证的业务定义 — 在查询时自动注入。
get_schema返回完整的架构上下文和 StructuredFilter 格式文档。供 MCP 主机使用,以便主机 LLM 无需 Boyce API 密钥即可构建查询。
ask_boyce完整的自然语言 → SQL 流程:查询规划器(LiteLLM)→ 确定性内核 → NULL 陷阱检查 → EXPLAIN 预检。
validate_sql验证手写 SQL — 执行 EXPLAIN 预检、Redshift 检查和 NULL 风险检查,但不执行查询。
query_database对实时数据库执行只读 SELECT。写操作会在两个独立层级被拒绝。
profile_data获取任意列的空值百分比、不同值计数、最小值/最大值 — 在数据质量问题影响查询结果前发现它们。
check_health运行状态健康检查 — 检查数据库连接、快照时效性,并提供可执行的修复命令。查询意外失败时调用。

架构

SemanticSnapshot (JSON)
        │
        ▼  ingest_source
 ┌─────────────────────────────────────────────┐
 │          SemanticGraph (NetworkX)            │  ← in-memory, loaded per session
 │  nodes = entities (tables/views/dbt models) │
 │  edges = joins  (weighted by confidence)    │
 └─────────────────────────────────────────────┘
        │                         │
        ▼  ask_boyce              ▼  (internal)
  QueryPlanner                 Dijkstra
  (LiteLLM)                    join resolver
  NL → StructuredFilter             │
        │                           │
        └──────────┬────────────────┘
                   ▼
           kernel.process_request()          ← ZERO LLM HERE
           SQLBuilder (dialect-aware)
                   │
                   ▼
           EXPLAIN pre-flight                ← Query Verification
           (PostgresAdapter)
                   │
                   ▼
            SQL + validation result

方言支持: redshift、postgres、duckdb、bigquery

Redshift 安全防护(safety.py):自动检查 LATERAL、JSONB、REGEXP_COUNT、前瞻正则表达式模式,并为 Redshift 1.0(PG 8.0.2)重写数值类型转换。


Scan CLI

# Scan a single file
boyce scan demo/magic_moment/manifest.json

# Scan a directory (auto-detects all parseable sources)
boyce scan ./my-project/ -v

# Save snapshots for MCP server use
boyce scan ./my-project/ --save

10 种解析器:dbt manifest、dbt 项目、LookML、SQLite、DDL、CSV、Parquet、Django、SQLAlchemy、Prisma。


验证安装

# Unit tests — no DB required, runs in ~4 seconds
python boyce/tests/verify_eyes.py

# Expected output:
# Ran 15 tests in 3.5s
# OK
# ✅  All checks passed.

SemanticSnapshot 格式

ingest_source 工具接受 SemanticSnapshot JSON 字典。最简示例:

{
  "snapshot_id": "<sha256>",
  "source_system": "dbt",
  "entities": {
    "entity:orders": {
      "id": "entity:orders",
      "name": "orders",
      "schema": "public",
      "fields": ["field:orders:order_id", "field:orders:revenue"]
    }
  },
  "fields": {
    "field:orders:order_id": {
      "id": "field:orders:order_id",
      "entity_id": "entity:orders",
      "name": "order_id",
      "field_type": "ID",
      "data_type": "INTEGER"
    }
  },
  "joins": []
}

完整的字段/实体示例见 boyce/tests/live_fire/mock_snapshot.json。


项目布局

boyce/                          ← PRIMARY — headless FastMCP server + pip package
├── boyce/
│   ├── server.py               ← MCP entry point (8 tools)
│   ├── kernel.py               ← Deterministic SQL kernel
│   ├── graph.py                ← SemanticGraph (NetworkX)
│   ├── safety.py               ← Redshift compatibility rails
│   ├── types.py                ← Protocol contract (Pydantic)
│   ├── scan.py                 ← Scan CLI (boyce scan)
│   ├── connections.py          ← DSN persistence (ConnectionStore)
│   ├── doctor.py               ← Environment diagnostics (boyce doctor)
│   ├── sql/                    ← SQLBuilder, dialect layer, join resolver
│   ├── parsers/                ← 10 parsers (dbt, lookml, ddl, sqlite, csv, etc.)
│   ├── planner/                ← QueryPlanner (LiteLLM → StructuredFilter)
│   └── adapters/               ← PostgresAdapter (Eyes)
└── tests/
    ├── verify_eyes.py          ← 15-test suite, no DB required
    ├── test_parsers.py         ← Parser tests (all 10 parsers)
    ├── test_scan.py            ← Scan CLI tests
    └── live_fire/              ← Docker Compose integration tests

状态

功能状态
自然语言 → SQL(确定性内核)正常运行
SemanticGraph(连接解析)正常运行
10 种数据源解析器正常运行
Scan CLI(boyce scan)正常运行
PostgresAdapter(只读)正常运行
EXPLAIN 预检验证正常运行
NULL 陷阱检测正常运行
Redshift 1.0 安全检查正常运行
重启后保留快照正常运行
审计日志(仅追加 JSONL)正常运行
业务定义(ingest_definition)正常运行
DSN 持久化(ConnectionStore)正常运行
环境诊断(boyce doctor / check_health)正常运行
多快照合并计划中

支持


版权所有 2026 Convergent Methods, LLC。MIT 许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。