databridge-kit
README.md
# databridge-kit
databridge-kit is a small bridge between an agent (or a terminal) and
one configured PostgreSQL database. It can run a single SQL statement
and answer the seven inspection questions that come up constantly
while exploring an unfamiliar database: which tables, views, schemas,
triggers, indexes, sequences and stored procedures exist.
The toolset mirrors the documented prebuilt Postgres toolset of a
config-defined database toolbox: the tools are fixed, the database is
whatever the connection string points at. There is no bundled
database driver — statements run through the `psql` command-line
client, so a machine that wants live answers needs `psql` on its
`PATH`. Without it — or without a connection string — the server
still starts and lists its tools; only the calls themselves report
the problem.
## Install
```bash
npx @reneturcios/databridge-kit list-tables postgres://user@localhost:5432/mydb
```
Or run the container image:
```bash
docker run -i ghcr.io/cloudcorprecords/databridge-kit
```
The container defaults to the MCP server (see below). Pass CLI
arguments to use it as a CLI instead.
## CLI
```bash
# Run one SQL statement; rows print as JSON
databridge-kit execute-sql postgres://alice@localhost/shop "SELECT id, name FROM products ORDER BY id"
# Inspection commands; each prints its rows as JSON
databridge-kit list-tables postgres://alice@localhost/shop
databridge-kit list-views postgres://alice@localhost/shop
databridge-kit list-schemas postgres://alice@localhost/shop
databridge-kit list-triggers postgres://alice@localhost/shop
databridge-kit list-indexes postgres://alice@localhost/shop
databridge-kit list-sequences postgres://alice@localhost/shop
databridge-kit list-stored-procedures postgres://alice@localhost/shop
# Start the MCP server (connection string optional, see below)
databridge-kit mcp postgres://alice@localhost/shop
databridge-kit --version
```
Exit codes: `0` on success, `1` when the statement, the connection
string, or `psql` itself fails (the error says which), `2` for usage
errors.
The connection string is a normal PostgreSQL URL: `postgres://` or
`postgresql://`, with host, optional port (default 5432), database
name from the path, and optional user and password in the userinfo.
For the `mcp` command the string can be left off the command line and
supplied through the `DATABRIDGE_DATABASE_URL` environment variable
instead (plain `DATABASE_URL` works too).
## How statements and inspections work
`execute_sql` accepts exactly one statement per call. Semicolons
inside string literals and comments do not count as statement
boundaries, but a second real statement is rejected before anything
reaches the database. The statement type is not restricted — this is
a general bridge, so a caller who can reach it can write as well as
read; point it only at databases where that is intended.
Each inspection tool runs one fixed catalogue query:
| Tool | Catalogue read |
| --- | --- |
| `list_tables` | `information_schema.tables` (base tables) |
| `list_views` | `information_schema.views` |
| `list_schemas` | `information_schema.schemata` |
| `list_triggers` | `information_schema.triggers` |
| `list_indexes` | `pg_indexes` |
| `list_sequences` | `information_schema.sequences` |
| `list_stored_procedure` | `information_schema.routines` |
Statements run as `psql -v ON_ERROR_STOP=1 --csv -c <sql>` and the CSV
output is parsed into row objects. Values come back as the strings
psql rendered.
## MCP server
One bin serves both faces. The `mcp` subcommand starts a stdio MCP
server:
```bash
npx -y @reneturcios/databridge-kit mcp postgres://alice@localhost/shop
```
MCP client configuration:
```json
{
"mcpServers": {
"databridge-kit": {
"command": "npx",
"args": ["-y", "@reneturcios/databridge-kit", "mcp"],
"env": { "DATABRIDGE_DATABASE_URL": "postgres://alice@localhost/shop" }
}
}
}
```
### Tools
| Tool | Input | What it returns |
| --- | --- | --- |
| `execute_sql` | `sql` (string, required) — one SQL statement | The result rows as a JSON array of objects keyed by column name. |
| `list_tables` | — | Rows describing the base tables in the configured source. |
| `list_views` | — | Rows describing the views in the configured source. |
| `list_schemas` | — | Rows describing the schemas in the configured source. |
| `list_triggers` | — | Rows describing the triggers in the configured source. |
| `list_indexes` | — | Rows describing the indexes in the configured source. |
| `list_sequences` | — | Rows describing the sequences in the configured source. |
| `list_stored_procedure` | — | Rows describing the stored procedures (routines) in the configured source. |
A missing connection, a missing `psql`, a multi-statement
`execute_sql`, and database errors all come back as tool errors —
never as made-up rows.
## Development
```bash
npm install
npm run build # tsc -> dist/
npm test # node test runner over test/*.test.ts, no network, no live database
npm run dev # run the CLI from source via tsx
```
The core logic sits behind an injectable executor interface, which is
what the test suite drives: connection-string parsing, the
single-statement check, pass-through execution, error propagation,
and the exact catalogue SQL behind every inspection tool are all
covered with a fake executor.
## License
MIT — see `LICENSE`.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues