v0.13.0: Kubernetes Tunnels, a Quick Navigator, and MCP That Reaches Your Plugins TabularisDB released v0.13.0, adding Kubernetes port-forward tunnels as a first-class transport option, a Quick Navigator for schema browsing via Cmd+P, and MCP support for plugin-driven connections. The update also includes contributions from six external contributors and fixes a security hole in stacked queries. v0.13.0: Kubernetes Tunnels, a Quick Navigator, and MCP That Reaches Your Plugins v0.13.0 follows v0.12.0 /blog/v0120-per-connection-appearance-related-records-sql-splitter with a cycle about reach : reaching a database that lives inside a Kubernetes cluster without kubectl port-forward in a forgotten terminal tab, reaching any table in any schema with two keystrokes, and letting MCP agents reach the connections that run through plugin drivers — while closing the one hole that let a stacked query reach further than it should have. Six external contributors land in this tag — three of them new — plus a first-time co-author. Kubernetes Port-Forward Tunnels If your database lives inside a Kubernetes cluster, the ritual is familiar: kubectl port-forward svc/postgres 5433:5432 in a terminal you must remember to keep open, then a connection in your database client pointed at 127.0.0.1:5433 that silently breaks the moment that terminal dies. @metalgrid https://github.com/metalgrid Iskren Hadzhinedev — new to the contributor list — ships PR 246 https://github.com/TabularisDB/tabularis/pull/246 , which makes Kubernetes a first-class transport option alongside SSH tunnels . The connection modal grows a Kubernetes tab: pick a kubectl context, a namespace, a resource service or pod , and a container port — each dropdown discovered live from your kubeconfig and cascading into the next. How it works: - Tabularis runs kubectl port-forward as a managed child process , binds a local ephemeral port, and points the database driver at it — same pattern as the SSH tunnel, no port to pick manually. - Tunnels are reused across connections to the same resource keyed by context/namespace/resource/port , with health checks and lifecycle management. - Saved K8s configurations persist as reusable profiles in k8s connections.json — the same pattern as SSH profiles — and round-trip through connection Export / Import. - Connections with a tunnel get a blue K8s badge on the Connections page and in the sidebar. - K8s and SSH are mutually exclusive on a connection — enabling one disables the other. The only requirements are kubectl in your $PATH and a valid kubeconfig. The PR lands with 18 new Rust tests and 24 new TypeScript tests, and the tunnel expansion is wired through every database command path — including MCP, so an agent can query a cluster-resident database through the same tunnel you use. Full reference in the wiki: Kubernetes Tunneling /wiki/kubernetes-tunneling . If you've been keeping a kubectl port-forward alive in tmux just to browse a staging database, this is the upgrade. Quick Navigator: Cmd+P for Your Schema Every editor since Sublime has had a "jump to anything" key. Your database client now does too. PR 252 https://github.com/TabularisDB/tabularis/pull/252 — co-authored with lecndu , taking inspiration from Beekeeper Studio's Quick Search — adds a Quick Navigator overlay on Cmd+P / Ctrl+P : Video unavailable - Type to filter tables, views, routines, and triggers of the active connection. - All databases and schemas configured on the connection are indexed in the background when the overlay opens — a multi-database MySQL connection or a multi-schema Postgres one is searched whole, with results grouped under per-database/schema headers. - Hover any result for quick actions : Inspect Structure, New Console, Generate SQL, Count Rows, Run Query, and Copy Name — scoped to what makes sense for each object type. - Pick a result and the sidebar expands and scrolls to the table — including databases that were collapsed and hadn't loaded their table list yet. - The shortcut is customizable in Settings → Keyboard Shortcuts under Navigation. The follow-up commits are where it got interesting: on a connection with hundreds of tables, selecting a result used to freeze the UI, because every sidebar table item re-rendered on every render. SidebarTableItem is now memoized with a comparator that only re-renders the two items whose active-state actually changed, collapsed databases auto-expand and lazy-load when they become active, and the scroll-into-view retries across animation frames until the asynchronously-loaded item actually exists in the DOM. Large-schema sidebars get faster even if you never press Cmd+P . MCP: Plugin Drivers, a Closed Bypass, and Codex Three PRs this cycle touch the MCP server — two from @ymadd https://github.com/ymadd , who keeps pulling on threads until the whole seam is rebuilt. Plugin-driven connections now work over MCP The MCP server hardcoded dispatch for mysql/postgres/sqlite, so every connection running through a plugin driver — Hacker News, Redis, anything from the registry — failed with Unsupported driver . PR 256 https://github.com/TabularisDB/tabularis/pull/256 closes 255 https://github.com/TabularisDB/tabularis/issues/255 routes the schema resource, list tables , describe table , run query , and the pre-flight EXPLAIN through the shared driver registry — the same path the GUI uses — and registers built-in plus installed plugin drivers when the --mcp subprocess starts. Reaching plugins from a headless subprocess surfaced a pile of hardening, all shipped in the same PR: plugin RPC calls are bounded by timeouts so a wedged plugin can't block the request loop forever, plugin children are killed instead of orphaned when the subprocess exits, plugins claiming a built-in driver id are refused, resources/read resolves through the keychain/SSH-aware path, and the --mcp mode finally gets a logger stderr only so plugin-load errors are visible. The approval/read-only bypass, closed PR 261 https://github.com/TabularisDB/tabularis/pull/261 fixes the kind of bug a safety feature exists to not have. The read-only /wiki/mcp-readonly-mode and approval /wiki/mcp-approval-gates gates classified a query by its leading keyword — so a stacked payload like SELECT 1; DROP TABLE users was tagged as a clean read and sailed past both gates. Separately, an approver could edit an approved SELECT into a DELETE in the approval modal, and the edit was executed without being re-classified. The classifier now fails closed on multi-statement payloads : string literals are stripped under both the SQL-standard '' and MySQL backslash-escape \' readings, and a ; followed by more SQL under either reading trips the gate — so a payload can't hide a separator by exploiting whichever dialect the classifier doesn't assume. And the approver-edited query is re-classified and re-checked against read-only before execution, with the audit record updated to the effective query. The execution layer's prepared-statement protocol already rejected most stacked queries, but the classifier is the documented fail-closed contract — this restores it. If you point agents at anything you care about, update. Codex joins the client list @arsis-dev https://github.com/arsis-dev Julien Barbe — new to the contributor list — adds Codex as an MCP install target in PR 264 https://github.com/TabularisDB/tabularis/pull/264 . The MCP integration page already auto-detects Claude Desktop, Claude Code, Cursor, Windsurf, and Antigravity; Codex now appears alongside them, wired through codex mcp add tabularis --