
dbprint
io.github.jakubro由 GitHub 账号 jakubro 发布v0.19.0更新于 Nov 7, 2026
A database's schema, value lists and joins, from a snapshot in your repo - no database connection.
概览
提供已提交到仓库的数据库离线快照,包含结构、关联和列统计,让助手无需连接数据库即可回答数据问题。
- 可以做什么
- 列出数据表,并读取单表的上下文:DDL、关联、列取值、范围与分布
- 搜索列,并依据已测量的取值列表解析某个值或代码
- 读取快照清单以及上次剖析产生的漂移差异
- 读取说明各字段可信范围的参考指南
- 将快照中的每个产物作为资源提供
- 适用场景
- 当仓库中已有 dbprint 快照,且希望编码助手在离线状态下编写 SQL 或理解列含义、无需数据仓库凭据或反复查询时使用。适合先剖析一次、提交结果、之后各会话直接读取的团队。
- 运行要求
- 通过 uvx 从 dbprint 包(含 mcp 附加组件)启动的本地进程,需要 Python 3.13 或更高版本。需要已提交的快照目录,并用 project 选项显式指定,也可以是 git 地址。客户端无需数据库连接或凭据。
安装
在 SourceWeft 中
- 打开 控制台中的 dbprint,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
dbprint
[PyPI] [Docs] [License: Apache 2.0] [Status] [dbprint MCP server – quality and maintenance score on Glama]
Example · Quickstart · Using dbprint · Compared with other tools · The format
dbprint measures a database and writes each table's DDL, its joins and per-column statistics as plain text to commit beside the code, next to the notes on what the values mean that a person or an agent writes. A coding agent reads both offline, with no database connection.
Migrations and models record a database's shape, not what its values mean: that revenue_cents is gross and every report uses the net column, that status is spelled two ways, how often orders joins shipments one-to-many, that legacy_uid has been unused since a migration. An agent without a database connection cannot find these out. An agent with one re-runs the same queries in every session, at a cost in warehouse time, budget and tokens, and can still misread the result: a count does not say that a code is unused or that a column is gross.
What dbprint does, and what an agent adds:
- It measures the database once. Each table's DDL, its joins — declared, and inferred where the schema declares none — and per-column statistics: null shares, complete value lists with every spelling, ranges, distributions, value shapes and more. On PostgreSQL, MySQL, Snowflake, BigQuery, Databricks, Redshift, ClickHouse, duckdb or SQLite.
- An agent writes down what the numbers mean.
dbprint annotatehands an agent one table's measurements and the questions they leave open — what a code means, what a sentinel date stands for, which rows a report leaves out — and the agent answers them from the project's code and read-only queries, into files dbprint never overwrites.dbprint annotate --checkflags a note the data contradicts. - Every later session reads it offline. Through an MCP server, a packaged skill or
dbprint context, with no database connection and no credentials at the agent. Because it is text in git, a schema or data change shows up in review, anddbprint checkgates it in CI.
With dbprint, agents get more answers right, for less. In our tests across multiple codebases, coding agents reading an annotated print got 80% fewer answers wrong than without one, at 17% lower cost per correct answer, and 90% fewer on questions whose catch only the print stated.
Example
An excerpt of dbprint context --purpose query on a table from the reference print in this repo — the fragment an agent gets before it writes SQL:
Three things here no migration states: medium holds exactly these values and no others, sand tray is stored in two spellings, so a filter on one misses 25 rows, and control is not a medium at all. dbprint measured the first two; a person or an agent wrote the third once, and every later session reads it.
The same command runs with no database and no configuration, given only uv:
Quickstart
Requires Python 3.13+. Install with the driver extra for the database's engine:
Add [mcp], [docs] or [dbt] in the same install — uv tool install 'dbprint[postgres,mcp]', or 'dbprint[all]' for every extra — since a later install replaces the earlier one.
The Postgres adapter shells out to pg_dump for DDL, so the PostgreSQL client binaries must be on PATH.
Scaffold a project in the repository root:
That writes .dbprint.yaml (commit it), creates prints/, and writes a credentials template to ~/.dbprint/connections.yaml — outside the repo, so secrets never sit next to the config.
Put the connection details in the credentials file:
and tell .dbprint.yaml which adapter to use and which tables to read:
Credentials resolve from DBPRINT_<CONNECTION>_<KEY> environment variables first, then ~/.dbprint/connections.yaml, then a project-root .env. Every key of both files is in docs/CONFIG.md.
Profile it:
Commit the result beside the code. Then inspect it with no database in reach:
Then have an agent annotate a table — the brief carries the annotation skill's steps, so any agent CLI can follow it:
and connect an agent to the result.
Using dbprint
The full documentation is on the dbprint site.
What dbprint does to the database
- It reads. A role that can
SELECTthe profiled tables is enough; each engine's adapter page, linked from your first print, lists the exact grants. The one write is a temporary copy of a sampled table's drawn rows, gone when the session ends (on BigQuery, when its expiration passes), and only for a sampled table —read.tables.materializeturns it off. - It publishes real values. Value lists, ranges and percentiles are cell values, and they are committed to the repository. Nothing is withheld by default: redaction masks, drops or hashes them by column name, by detected sensitivity (
personal_name,national_id, ...) or by shape, keeping every count. A password or key written into the schema itself — a view body, a default, a comment — is masked inddl.sqlon every run, whatever the rules say. - It costs one profiling run, then whatever later runs re-read. A table is re-read when its print is older than its freshness threshold or its settings changed; sampling, row filters and catalog-only reads bound the cost on a warehouse — see choosing what to profile.
What a print looks like
Under the context an agent reads are plain YAML files. An excerpt of one table's statistics.yaml, some fields elided, from the same reference print:
values_coverage: 1.0 marks those ten values as the entire domain, not the top ten, so an eleventh value is ruled out without querying the database. (When a table is profiled from a sample rather than in full, coverage is measured over the rows that were actually read — see Scoped profiling below.)
inferred is what dbprint concluded rather than read: looks_like: country_code is a verdict, and sampled/matched are the evidence for it, so a shape confirmed by ten values never looks like one confirmed by ten thousand.
Alongside it, relationships.yaml carries the join graph:
Those two files are measured. Notes are written beside them, by a person or an agent, in the same directory and the same commit — statistics.annotations.yaml for a column:
and description.md for table-level narrative that no statistic can express.
dbprint never writes to either file, and both are read alongside the statistics — but on anything the statistics can answer, the statistics win; the narrative is authoritative only on what a number can't.
Print directory layout
reading.md is written fresh on every run: it teaches a consumer which fields to trust for what, so a print explains itself to an agent that has never seen the format.
dbprint never overwrites the four files a person or an agent writes — description.md and the three .annotations.yaml — and all four are folded into what agents read.
Commands
Full reference: docs/CLI.md.
Connecting an agent
In Claude Code, install the plugin, which carries the MCP server and both skills and serves the print of the directory Claude Code is opened in:
To serve a print kept elsewhere, set the plugin's project option to the directory holding .dbprint.yaml, that file itself, or a git address — in /plugin configure dbprint@dbprint, or from a shell:
Any other MCP client launches the server itself, so the client picks the working directory. Name the project explicitly:
The server reads the committed print and never connects to a database, so the client needs no credentials.
Giving a print to an agent covers the skills on their own, the server's tools and how an agent reads a reply.
Reading a remote project
--project also accepts a git address, so a print committed to another repository reads without a manual clone:
dbprint clones it and asks for no credentials of its own — the existing SSH agent or git credential helper covers a private repository. A remote project is read-only: every command that connects to a database — generate, diff, and the --online forms of check and config explain — refuses a remote locator; every other command works against it exactly as it does locally.
Configuration
.dbprint.yaml holds project config (committed); ~/.dbprint/connections.yaml holds credentials (never committed). Every key of both, with types, defaults and resolution order, is in docs/CONFIG.md. Internals are documented in docs/ARCHITECTURE.md.
Further features
- Semantic inference. Every column gets a classification (
categorical,numeric,temporal,foreign_key_candidate,json, ...). Text, categorical and foreign-key columns are matched against a closed set of shape patterns (uuid,email,phone,ip,country_code, ...), published with the sample size and match count behind the verdict. Columns that hold data that must not leave the database get asensitivityaxis (personal_name,postal_address,national_id,credential, ...). Columns effectively unique (cardinality ratio >= 0.9999) are markedcandidate_key, with acandidate_key_exceptionalongside whenever that threshold admits measured or estimated duplicates rather than true uniqueness. Foreign keys the schema never declares are inferred from naming and stampeddetection: inferred. Each of these is published as a guess, and a wrong one can be withdrawn in the annotations so agents stop seeing it. - Redaction. Withhold cell values with
mask,drop, orhash(salted), targeting columns by glob or by inferred sensitivity or by shape — so a rule written now also covers apersonal_namecolumn added later. Counts, cardinality and distributions survive intact; only literals are withheld. The salt lives with the credentials, never in the committed config. - Assertions. Write data-quality checks in YAML against any statistic, or as raw SQL. Statistic assertions are evaluated against the committed print by plain
dbprint check, with no database in reach; SQL assertions needdbprint check --online. Seedocs/ASSERTIONS.md. - CI exit codes.
0ok,1malformed print or unusable config,2stale,3drift,4connection failure,5partial run,6assertion failure,7total failure.diff,checkandcontextall speak--format json|yaml. - Scoped profiling. Per-table rules can sample (seeded from the table name, where the engine supports seeding), apply a row filter, or change what's measured — gated on table size, so one rule covers every fact table not yet named. A table read this way carries a
scopeblock and a per-columnrows_scanned, and every count in the file is denominated in the rows actually read, never silently in the whole table. - MCP server.
dbprint serveexposes the toolsget_table_context,list_tables,search_columns,resolve_value,get_manifest,get_diff,get_reference— plus every artifact as a resource. It reads the committed print only and never opens a database connection. Seedocs/MCP.md. - Markdown skills. For clients that take markdown rules or custom instructions, a drop-in skill file tells an agent what a committed print answers, which tool answers it, and what each number covers — no process to run. A second skill has an agent write the annotation files from the code that writes each table and read-only queries, checked with
dbprint annotate --check. Both sit atplugin/skills/and read without installing anything; the Claude Code plugin installs them with the server. - dbt lineage. Point a connection's
dbt_manifestat a compiled dbtmanifest.jsonandgeneraterecords each model column's source columns asderived_from, so a note written once on a source column reaches every model built from it (the[dbt]extra). Seedocs/CONFIG.md. - Token-budgeted context.
dbprint context arboretum.seedbank.accession --budget 4000fits the Markdown view into a token budget, dropping the lowest-priority sections first.
Compared with other tools
Closest neighbours
What dbprint is not
- Not a migration tool. It doesn't author, apply or version DDL changes. Use Alembic, Flyway, Liquibase, sqldef, Atlas.
- Not a schema-management or ORM layer. A print is generated from the database; it is never the source of truth the database is built from.
- Not a live query interface. Nothing in a print executes SQL for an agent.
- Not a data-quality platform. The assertion DSL is a CI gate over a print, not monitoring, alerting or lineage. Use Soda, Great Expectations, Elementary.
- Not a data catalog. No hosted service, no shared search index, no business glossary.
dbprint docsserves a local read-only view of a committed print, bound to loopback, with nothing to administer.
The format
A print is a portable, git-committed snapshot of a database's structure and column-level data distributions, consumable offline by humans, AI coding agents, and CI. The on-disk format — not the CLI — is the durable artifact here: specified, versioned independently of the tool, and designed for other producers to emit.
The format is specified in docs/format/v1/SPEC.md.
The JSON Schemas ship inside the installed package at src/dbprint/spec/v1/ — one for each generated artifact and each annotation file — and the conformance validator is a public API with no database, config or CLI required:
The reference print at docs/format/v1/examples/ is real dbprint output, not a hand-written illustration.
License
Copyright 2026 Jakub Roman. Distributed under the Apache License 2.0.
来源:README.md,提交 3bc4ddd
工具
0版本历史
7- v0.19.0最新Nov 7, 2026
- v0.18.0Nov 6, 2026
- v0.17.0Nov 5, 2026
- v0.16.0Oct 29, 2026
- v0.15.0Oct 26, 2026
- v0.14.0Oct 16, 2026
- v0.13.0Oct 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分