mcpField
B

Basalt

本地服务
github.com数据库17 周前更新

关于 Basalt

Basalt 是面向开发者和编码 Agent 的本地 SQL 数据库与命令行工作区,支持结构化数据的持久存储和导入导出。其工作区写入可先预览,再按确切计划应用,并检查或撤销最近变更。

主要功能

  1. 01嵌入式 SQL 数据库与交互式 Shell
  2. 02快照隔离事务与崩溃恢复
  3. 03导入导出 CSV、JSON、JSONL 和 SQL
  4. 04以表格、CSV 或 JSON Lines 输出
  5. 05预览、应用、比较和撤销工作区变更
  6. 06提供本地 stdio MCP 服务

适用场景

  1. 01为 Agent 建立本地结构化数据工作区
  2. 02在应用变更前审查 SQL 写入计划
  3. 03导入 issue 导出或测试数据并查询
  4. 04通过命令行执行 SQL 文件

MCP 相关

Basalt 通过 stdio 提供本地 MCP 服务,暴露有界 SQL 工具、工作区导入导出工具和 `basalt://schema` 资源。工作区模式支持预览与明确审批后的应用;直接数据库模式默认只读。

配置

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

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
cargobasalt-db0.1.6

工具

还没有获取到工具列表

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

详细介绍

Basalt 徽标

Basalt

一款以命令行为先、面向结构化数据和编码 Agent 的本地 SQL 工作区。

CI MIT 许可证

Basalt 是一款从零开始用 Rust 构建的嵌入式 SQL 数据库和命令行应用。它提供小型库 API、交互式 shell、持久化存储、快照隔离事务、崩溃恢复、可移植的结构化数据工作区,以及面向本地 AI Agent 的 stdio MCP 服务。它并非兼容 SQLite 的替代品,也不是托管数据库。

亮点

  • SQL 词法分析器和递归下降解析器,支持表达式、联接、分组、聚合、别名和事务语句。
  • 原子语句执行,支持主键、UNIQUE 和用户创建的索引。
  • 采用乐观冲突检测的快照隔离事务。
  • 带校验和的页面快照和预写日志,可在进程崩溃后恢复已提交状态。
  • 简易查询规划,支持表扫描、等值索引和范围索引。
  • 交互式且可编写脚本的 CLI 输出,支持表格、CSV 和 JSON 行格式。
  • 可移植工作区,具有版本化元数据,并支持原子导入/导出 CSV、JSON/JSONL 和 SQL 转储。
  • 可安装的 MCP 服务,提供类型化 SQL 工具、受限的工作区导入和导出、引擎限制的 SQL、架构资源,以及可恢复的 Agent 更改。

安装

使用 Cargo 安装需要 Rust 1.88 或更高版本。

cargo install basalt-db --locked

发布的软件包名为 basalt-db;安装后的命令仍为 basalt。如需安装当前检出版本,请使用 cargo install --path . --locked。

带标签的版本包含带校验和的安装程序,以及适用于 Linux、macOS 和 Windows 的预编译二进制文件。请参阅 GitHub Releases,获取当前无需安装工具链的安装方式。最新的带标签版本已通过其发布的安装程序及校验和验证:

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/yoshiii-xyz/basalt/releases/latest/download/basalt-db-installer.sh | sh

从检出目录直接运行:

cargo run --release -- app.basalt

快速开始

打开数据库并以交互方式运行 SQL:

$ basalt app.basalt
basalt> CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL);
basalt> INSERT INTO users VALUES (1, 'Ada');
basalt> SELECT * FROM users;
id | name
---+-----
1  | Ada
1 row(s)

运行一次性命令:

basalt --json --command "SELECT * FROM users ORDER BY id;" app.basalt

使用 Database::in_memory() 创建临时数据库。持久化写入会立即追加到 WAL;调用 checkpoint() 可将当前状态合并到快照中并清除旧的 WAL 帧。持久化路径一次只能由一个进程拥有;克隆的 Database 句柄可在线程间安全地共享该所有权,而第二个进程会收到“已打开”的错误。

工作区

当 Agent 或脚本需要一个可随时丢弃的本地关系型工作区来处理 CSV、JSON、日志、问题导出文件或固定测试数据时,请使用工作区:

basalt init .basalt-workspace
basalt workspace import --table issues .basalt-workspace issues.csv
basalt workspace inspect --json .basalt-workspace
basalt workspace query --json .basalt-workspace "SELECT * FROM issues ORDER BY id"
basalt workspace export .basalt-workspace issues issues.jsonl

导入具有原子性、可恢复性,并会返回持久的 change_id;导出结果具有确定性。当 Agent 或脚本需要机器可读的操作报告时,可为工作区导入/导出命令添加 --json;导出到 - 的原始数据仍会保持为纯净的数据流。之后的写入可以预览、按精确的计划 ID 应用、在历史记录中检查、通过架构和行变更计数进行差异比较,并在最新变更仍有效时撤销。工作区打开期间由一个 Basalt 进程独占,因此从命令行使用该工作区或直接打开其 data.basalt 文件之前,请先停止工作区 MCP 服务。有关格式和边界,请参阅 docs/workspaces.md。

在 Agent 所有的数据场景中使用 Basalt 的理由在于其写入边界:先检查拟议变更,再使其持久化;只应用经过审核的确切计划;之后如有需要,可比较差异或撤销最新变更。

basalt workspace preview --json .basalt-workspace \
  "UPDATE issues SET status = 'closed' WHERE id = 42"
# Review the returned plan_id, then:
basalt workspace apply --json .basalt-workspace PLAN_ID
# Review the returned change_id, then:
basalt workspace diff --json .basalt-workspace CHANGE_ID
basalt workspace undo --json .basalt-workspace CHANGE_ID

如果你需要兼容性或分析性能,请使用 SQLite 或 DuckDB。Basalt 适用于本地结构化数据处理场景:有界且可恢复的写入比替换现有数据库更重要。

如果这符合你的工作流,请使用早期用户验证指南,配合可丢弃的非敏感输入,并记录具体任务和阻碍。只有当开发者使用自己现有的工具完成此工作流后,Basalt 才会宣称获得采用。

MCP 服务

Basalt 可通过 stdio 作为本地 Model Context Protocol 服务运行。请从此检出副本安装二进制文件:

cargo install --path . --locked

然后使用绝对工作区路径配置 MCP 主机。工作区模式是推荐的 Agent 集成方式:它限定数据访问范围,并要求写入遵循明确的预览/应用生命周期。

{
  "mcpServers": {
    "basalt": {
      "command": "basalt",
      "args": [
        "mcp",
        "--workspace",
        "/absolute/path/to/project-data",
        "--init-workspace"
      ]
    }
  }
}

--init-workspace 仅当配置的工作区路径不存在时才会创建工作区;绝不会替换现有目录或清单。如果工作区必须单独配置,请省略此选项。只有当主机具有明确的操作员审批策略,用于应用工作区计划和撤销变更时,才添加 "--allow-writes"。也可使用直接数据库模式:"args": ["mcp", "/absolute/path/to/app.basalt"],但默认是只读模式;execute 和 checkpoint 需要相同的标志。使用 "args": ["mcp", ":memory:"] 可启动临时的直接模式会话。主机配置优先使用已安装的二进制文件;也可以从检出副本运行:cargo run --quiet -- mcp --workspace /absolute/path/to/project-data。

当现代 MCP 主机声明支持表单征询时,Basalt 会在每次工作区导入、应用或撤销之前返回 input_required 审批请求,并且只有在主机重试并明确批准后才会执行。已初始化的旧版主机会收到 elicitation/create;未声明支持征询的主机则使用明确的 --allow-writes 启动策略。

发布元数据包含 MCP Registry 列表使用的可见 Cargo 所有权标记:

工作区模式提供 workspace_import、workspace_inspect、workspace_preview、workspace_plan、workspace_apply、workspace_history、workspace_diff、workspace_undo 和 workspace_export,以及有界的 query、list_tables 和 describe_table 工具。它还会在 basalt://schema 提供当前架构。有关完整的工具契约、配置详情、审批边界和故障排查,请参阅 docs/mcp.md。

命令行

执行 SQL 文件:

basalt --file schema-and-seed.sql app.basalt

在一个连接上按顺序运行命令,包括跨多个命令的事务:

basalt --command "BEGIN;" --command "INSERT INTO users VALUES (2, 'Grace');" --command "COMMIT;" app.basalt

使用 --file - 从标准输入读取 SQL。按需重复使用 --command 和 --file;它们会按出现顺序执行。表格输出便于阅读,CSV 输出查询行,--json 则为每条语句输出一个 JSON 对象。在 shell 中运行 .help,查看 .tables、.schema、.mode、.headers、.checkpoint、.show 和 .clear。每个 CLI SQL 操作以及待处理的交互缓冲区上限为 16 MiB;较大的脚本应拆分为较小的操作,或使用有大小限制的工作区导入格式。

库的用法

use basalt::{Database, db::StatementResult};

let database = Database::open("example.basalt")?;
database.execute_sql(
    "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); INSERT INTO users VALUES (1, 'Ada');",
)?;
let result = database.execute_sql("SELECT * FROM users WHERE id = 1")?;
assert!(matches!(result[0], StatementResult::Select { .. }));
database.checkpoint()?;
# Ok::<(), basalt::db::DbError>(())

当 SQL 事务语句需要跨多次调用时,使用 database.connect()。

项目结构

路径用途
src/sql/词法分析器、解析器、AST 和 SQL 方言
src/engine.rs语句执行和查询语义
src/planner.rs访问路径选择
src/db.rs, src/database.rs表、约束、事务和 API
src/storage.rs, src/wal.rs快照、校验和及恢复
src/cli.rs交互式和脚本化命令行前端
src/workspace.rs本地工作区生命周期和数据交换
src/mcp.rs标准输入/输出 MCP 服务、Agent 工具和架构资源
server.jsonMCP Registry 发布元数据
docs/sql.md支持的 SQL 方言和事务语义
docs/benchmark-results.md已记录的工作流基准测试快照
docs/compatibility.md文件格式边界和差分测试策略
docs/production-readiness.md技术发布约定、限制和证据
docs/early-user-validation.md五分钟切换测试和反馈模板
docs/fuzzing.md解析器和持久化模糊测试说明
docs/mcp.mdMCP 安装、配置和工具约定
docs/workspaces.md工作区结构和导入/导出约定
tests/集成和崩溃恢复覆盖
benches/进程内引擎吞吐量基准测试
scripts/benchmark_workspace.py可复现的工作流对比工具
scripts/differential_sql.py支持子集的 SQLite 差分检查
scripts/mcp-smoke.py已安装二进制文件的可写 MCP 冒烟测试
scripts/verify-release-artifacts.py发布归档校验和及内容检查
scripts/verify-registry-metadata.pyMCP Registry 软件包/版本一致性检查
scripts/release-check.sh打包 crate 和发布前检查
scripts/smoke-test.sh已安装二进制文件的 CLI 和只读 MCP 冒烟测试
fuzz/可选的 libFuzzer 解析器和快照目标

开发

cargo fmt --all -- --check
cargo check --all-targets --locked
cargo clippy --all-targets --all-features --locked -- -D warnings
cargo test --all-targets --locked
RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --locked
cargo bench --bench throughput
cargo package --locked
cargo build --release --locked
cargo audit
python3 scripts/benchmark_workspace.py --basalt target/release/basalt

要执行完整的 Unix 发布前检查,请使用:

bash scripts/release-check.sh

它会将精确的打包 crate 安装到临时前缀,并运行已安装二进制文件的冒烟测试流程。如果相关工具可用,它还会运行 cargo audit 和 dist plan。

有关贡献指南,请参阅 CONTRIBUTING.md;有关项目历史,请参阅 CHANGELOG.md。发布检查清单位于 docs/release.md,其中包括生成的发布工作流和干净二进制文件冒烟测试。

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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