db2toon-mcp
Extracts schema from DuckDB database files, with support for tables, columns, indexes, and sample data, to produce Toon format schema definitions.
Extracts schema from MariaDB databases, with support for tables, columns, constraints, and other objects, to generate Toon format schema documentation.
Extracts schema from MySQL databases, including tables, columns, constraints, indexes, and other metadata, to produce Toon format schema definitions.
Extracts schema information from PostgreSQL databases, including tables, columns, constraints, indexes, routines, triggers, and sample rows, to generate Toon schema documentation.
Extracts schema from SQLite databases, capturing tables, columns, constraints, and optional sample rows, to generate Toon schema documentation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@db2toon-mcpConvert the PostgreSQL dump schema.sql to Toon format"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
db2toon
A CLI tool that converts database schemas into the Toon schema definition format.
Overview
db2toon connects to a database and extracts schema information (tables, columns, types, constraints, indexes, routines, triggers, and examples), then converts it into the human-readable Toon format for database design documentation and visualization. PostgreSQL, SQLite, DuckDB, MySQL/MariaDB, CockroachDB, Microsoft SQL Server, and Oracle are supported. pg2toon remains a PostgreSQL compatibility command.
Related MCP server: db-tools-mcp
Features
Schema Extraction: Automatically extracts tables, columns, and metadata from PostgreSQL, SQLite, DuckDB, MySQL/MariaDB, CockroachDB, Microsoft SQL Server, and Oracle
Type Normalization: Simplifies PostgreSQL types (e.g.,
character varying→varchar)Relationship Mapping: Converts foreign key constraints to inline references or multi-column references
Comment Preservation: Includes comments where the database exposes them; SQLite does not have catalog comments
Index Documentation: Extracts and documents database indexes
Database Objects: Preserves supported enums, types, sequences, synonyms, triggers, routines, extensions, materialized views, packages, and other vendor-specific objects in explicit TOON sections
Cross-Platform: Builds without CGO for Linux, macOS, and Windows (amd64 and arm64)
DBML Adapter: Converts DBML files (or standard input) into the same TOON format
Installation
From Source
git clone https://github.com/kamil5b/db2toon.git
cd db2toon
CGO_ENABLED=0 go build -o output/db2toon ./cmd/db2toon
CGO_ENABLED=0 go build -o output/pg2toon ./cmd/pg2toon
CGO_ENABLED=0 go build -o output/dbml2toon ./cmd/dbml2toonFrom Releases
Download pre-built binaries from the releases page for your platform.
Go package
The module also exposes a public Go API for callers that want the canonical schema model instead of invoking a command:
import (
"context"
"os"
"github.com/kamil5b/db2toon"
)
func extract() error {
db, err := db2toon.Extract(context.Background(), db2toon.Request{
Dialect: "postgres",
Dump: "./schema.sql",
Options: db2toon.Options{ExampleSample: 2},
})
if err != nil {
return err
}
return db2toon.Encode(os.Stdout, db)
}Set exactly one of Request.DB or Request.Dump. Dump contents are parsed
offline and never executed. The public API returns *schema.Database, so
callers may inspect or transform the model before encoding it.
Usage
LLM tool integration
Build and run the MCP-compatible stdio server:
CGO_ENABLED=0 go build -o output/db2toon-mcp ./cmd/db2toon-mcp
./output/db2toon-mcpThe server exposes db2toon.extract_schema. Its required argument is
dialect (postgres, sqlite, duckdb, mysql, mariadb, cockroachdb, mssql, sqlserver, or oracle).
Provide exactly one of db or dump; optional extraction settings are
supplied in an options object. Dump files are parsed offline and never
executed. The tool is read-only, uses a 30-second default timeout, and limits
responses to 4 MiB. Set options.timeout and options.max_output_bytes to
lower limits when needed. Connection strings are never included in tool errors
or results.
Basic Usage
./db2toon postgres -db "postgresql://user:password@localhost/dbname"
# SQLite database file
./db2toon sqlite -db ./schema.db
# Plain-text SQL dump
./db2toon postgres -dump ./schema.sql
./db2toon sqlite -dump ./schema.sql
./db2toon mysql -dump ./schema.sql
./db2toon mssql -dump ./schema.sql
./db2toon oracle -dump ./schema.sql
# DuckDB database file (requires libduckdb at runtime)
./db2toon duckdb -db ./analytics.duckdb
# Microsoft SQL Server (defaults to dbo)
./db2toon mssql -db 'sqlserver://sa:password@localhost:1433?database=app&encrypt=disable'
# Oracle Database; the current schema is used unless -schema/-schemas is set.
# go-ora accepts an EZConnect-style URL.
./db2toon oracle -db 'oracle://app:password@localhost:1521/FREEPDB1'
# Compatibility command; PostgreSQL is selected automatically.
./pg2toon -db "postgresql://user:password@localhost/dbname"
# Convert DBML, either from a file or standard input.
./dbml2toon schema.dbml
cat schema.dbml | ./dbml2toon -out schema.toonSave to File
./db2toon postgres -db "postgresql://user:password@localhost/dbname" -out schema.toonInclude up to two sample rows per PostgreSQL table in the TOON output, using a stable ordering and a reproducible sample seed:
./db2toon postgres -db "postgresql://user:password@localhost/dbname" \
-example-sample=2 -example-sample-ordered=true -seed=42The default -example-sample=0 omits @example sections.
SQLite and DuckDB also support -example-sample, but currently use a simple
LIMIT query. -example-sample-ordered and -seed are currently effective
only for PostgreSQL.
Select multiple schemas, include partitioned tables, and change the default 30-second operation timeout with:
./db2toon postgres -db "$DATABASE_URL" -schema audit
./db2toon postgres -db "$DATABASE_URL" -schemas public,audit -include-partitioned -timeout 1m
# SQLite and DuckDB default to the `main` schema. SQL Server defaults to `dbo`.
# Oracle defaults to the session's CURRENT_SCHEMA.
./db2toon sqlite -db ./schema.db -schema main
./db2toon duckdb -db ./analytics.duckdb -schema analytics
./db2toon oracle -db 'oracle://app:password@localhost:1521/FREEPDB1' -schema APPFlags
-db string: Database connection URL or local database path; mutually exclusive with-dump-dump string: Plain-text SQL dump path; mutually exclusive with-dbdialect:postgres,sqlite,duckdb,mysql,mariadb,cockroachdb,mssql,sqlserver, ororaclefordb2toon;pg2toonalways uses PostgreSQL-out string: Output file path (optional, defaults to stdout)-schema string: A single schema to extract (defaults topublicfor PostgreSQL,mainfor SQLite/DuckDB,dbofor SQL Server, and the sessionCURRENT_SCHEMAfor Oracle)-schemas string: Comma-separated schemas to extract; cannot be combined with-schema-include-partitioned: Include PostgreSQL partitioned tables-include-views: Include supported views-exclude-tables string: Comma-separated tables to exclude entirely; acceptstableorschema.table-exclude-example-tables string: Comma-separated tables to exclude from@examplesampling-exclude-example-fields string: Comma-separated qualified fields to exclude from examples, such aspublic.users.password_hash-example-sample int: Number of sample rows to include per table (defaults to0)-example-sample-ordered: Select sample rows using deterministic ordering for PostgreSQL (defaults tofalse)-seed int: Seed for reproducible PostgreSQL sample selection (defaults to0; currently ignored by SQLite/DuckDB)-timeout duration: Connection and extraction timeout (defaults to30s)
Dump mode supports plain-text SQL exports for PostgreSQL, SQLite, DuckDB,
MySQL/MariaDB, CockroachDB, SQL Server, and Oracle. Common tables, columns, constraints,
indexes, comments, and bounded INSERT examples are parsed without executing
the dump. PostgreSQL retains native enums, sequences, views, functions,
procedures, and triggers, including dollar-quoted routine bodies. MySQL/MariaDB
supports DELIMITER-based routine and trigger declarations. SQL Server and
Oracle retain supported views, functions, procedures, triggers, sequences,
types, synonyms, and selected vendor objects. Complex vendor-specific PL/SQL/
T-SQL bodies are preserved as available statement text; unsupported declarations
are ignored rather than executed.
Output Format
The Toon format provides a clean, human-readable schema definition:
@database app {dialect=postgres}
[users]
# User accounts table
id int {pk}
email varchar {req}
name varchar
created_at timestamptz {req}
@indices
idx_email: ON users USING btree (email)
@example[2]{id,email,name,created_at}:
1,alice@example.com,Alice,2026-01-10T09:00:00Z
2,bob@example.com,Bob,2026-01-11T10:30:00Z
[posts]
# Blog posts
id int {pk}
user_id int {req} -> users(id)
title varchar {req}
content text
published_at timestamptz
[comments]
# Post comments
id int {pk}
post_id int {req} -> posts(id)
user_id int {req} -> users(id)
content text {req}
created_at timestamptz {req}Format Elements
@database name {dialect=dialect}: Source database metadata. Live connections derive the name from the connection string; dump mode uses the dump filename without its extension.[TableName]: Table definition# comment: Table or column commentsname type {tags}: Column definition with optional tags{pk}: Primary key{req}: Required (NOT NULL)Multiple tags:
{pk,req}
-> table(column): Foreign key reference (inline for single columns)@indices: Section for database indexes@enum: Enumerated type values@type: User-defined type metadata@sequence: Sequence configuration@synonym: Alternate object name@routine: Function or procedure metadata and definition where available@triggers: Table trigger metadata@objects: Vendor-specific schema objects, including Oracle materialized views, packages, partitioned tables, scheduler jobs, and database links@example[n]{columns}:: Up tonsampled rows from the table// comment: Inline column comment
Oracle coverage
Oracle extraction uses user-visible ALL_* catalog views, so the output is
limited to objects the connected account can inspect. It supports tables,
views, columns and comments, primary/unique/foreign-key/check constraints,
independent indexes, triggers, standalone functions and procedures, user
sequences, object types, synonyms, materialized views, packages/package bodies,
partitioned-table markers, scheduler jobs, and database links. Oracle-generated
identity sequences and system-generated NOT NULL checks are omitted because
their information is already represented by the column model.
Package/type source bodies, materialized-view refresh settings, detailed partition definitions, grants/roles, VPD policies, tablespace/storage details, specialized spatial/domain index options, and Oracle SQL dump parsing are not yet represented in the canonical model.
Microsoft SQL Server coverage
Microsoft SQL Server extraction uses sys.* catalog views and defaults to the
dbo schema unless -schema or -schemas is supplied. It supports tables and
views, columns and MS_Description comments, defaults, identity/computed
columns, primary/unique/foreign-key/check constraints, independent indexes,
triggers, functions/procedures, alias/table types, sequences, synonyms, and
sample rows. View definitions and vendor-specific schema objects are emitted in
the TOON object sections where applicable.
SQL Server dump parsing is not supported. The current model also does not yet represent partition functions/schemes, filegroups, temporal or memory-optimized table settings, graph tables, full-text/spatial/XML index internals, permissions, extended properties other than descriptions, Agent jobs, or server-level objects.
Requirements
Go 1.26.0 or later
PostgreSQL 9.4+ (for JSON aggregation functions), SQLite, DuckDB, MySQL/MariaDB, CockroachDB, Microsoft SQL Server 2022+, or Oracle Database
A valid database connection string or local database path
DuckDB also requires a compatible
libduckdbshared library at runtimeOracle uses the pure-Go
go-oradriver and does not require Oracle Instant Client or CGO
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only PostgreSQL, MySQL, SQL Server access via MCP — 24 dialect-aware hosted tools.
Turn any website into structured JSON data matching your custom schema.
Generate, edit, and export data-architecture diagrams from your AI. Column lineage, PNG in chat.
Turn any PDF into structured JSON via AI + OCR: invoices, bank statements, contracts.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables extraction and querying of database schema metadata from PostgreSQL, Snowflake, SQL Server, BigQuery, and Oracle databases, saving results locally for analysis.MIT
- AlicenseAqualityCmaintenanceExposes SQL Server and Snowflake schema metadata to AI coding agents, enabling schema search, join path discovery, and stored procedure metadata retrieval without live queries.18GPL 3.0
- AlicenseNot gradedqualityDmaintenanceMCP server providing read-only access to SQL Server databases for AI assistants, enabling schema exploration, query execution, and foreign key inference with token-efficient TOON responses.1MIT
- FlicenseAqualityCmaintenanceTurns relational schemas into editable entity-relationship diagrams in draw.io, supporting live databases, SQL DDL, YAML/JSON specs, and existing .drawio files, with tools for managing tables, columns, and relations.16
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kamil5b/db2toon'
If you have feedback or need assistance with the MCP directory API, please join our Discord server