Added
- Welcome window: "Check for Updates" link next to the version number
- Window menu: dedicated Integrations Activity window for the MCP activity log and connected clients. Sidebar, native search, filter, refresh, export. Position remembered across launches
- Sample database (Chinook) bundled. Open from welcome screen with one click; reset via File menu
- Connection string detection: paste a
postgres://,mysql://,redis://, ormongodb://URL to auto-fill the form - MCP: protocol versions
2025-06-18and2025-11-25(in addition to2025-03-26). Includes structured tool output (structuredContent), tool annotations (readOnlyHint,destructiveHint, etc.),completionscapability, and streaming progress notifications vianotifications/progress - MCP: pairing redirect carries
error=deniedwhen the user clicks Deny - MCP: re-pairing the same client name revokes the previous token
- Oracle 10G password verifier auth, matching DBeaver/JDBC/sqlplus (#483)
- Oracle Test Connection: diagnostic sheet on auth failure with copy-able info, suggested actions, and an issue link
- Oracle connection negotiation matches python-oracledb 23ai (TTC4 boundary, TTC5 token/pipelining/sessionless, OCI3 sync, dequeue selectors, sparse vectors)
- SSH tunnel resolves
~/.ssh/confighost aliases at connection time, with fullssh_config(5)semantics: globHostpatterns, allMatchtypes,ProxyJump, hostname canonicalization,Include. Live (no app restart). Applies to primary host and jump hosts (#977)
Changed
- Welcome window aligned to macOS HIG: subtle drop shadow on the app icon (no accent glow), dynamic text styles, "Sponsor" button removed, "Create connection" uses the bordered style, toolbar
+/ new-group buttons gain a hover background, native window vibrancy viaNSVisualEffectView - Settings > Integrations is a flat preferences pane per macOS HIG. Activity log and connected-clients moved to the new Integrations Activity window; setup snippets to a "Connect a Client…" sheet
- MCP: idle session timeout 5 → 15 minutes
- MCP: server, stdio bridge, and protocol dispatcher rewritten for spec compliance. Public API of
MCPServerManagerand the on-disk handshake format unchanged; clients do not need to re-pair - Security: non-syncing keychain items use
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly. Keeps local-only secrets out of unencrypted device backups. Existing items keep their accessibility class until you re-save - Settings > Sync > Passwords: caption clarifies the toggle only affects new saves
Removed
- SSH
useSSHConfigper-connection toggle.~/.ssh/configis always consulted now; explicit form values still take precedence - Legacy-keychain migration and password-sync-state migration. Both violated Apple's Data Protection keychain contract on sandboxed macOS and corrupted credentials. Stale items in the legacy keychain can be cleaned via Keychain Access
Fixed
- Welcome / connection form / feedback panel now remember position and size across launches (frame autosave was missing on the underlying
NSWindow/NSPanel) - Saved connection passwords no longer disappear after relaunch. The legacy-keychain migration was deleting the only copy on sandboxed macOS; removed entirely
- Cmd+Z after editing a cell now clears the yellow "modified" highlight (the coordinator's
dataTabDelegatewas being nilled too eagerly) - Tab switching: rapid Cmd+Number no longer leaves a tail of tab transitions after key release. AppKit switches now apply synchronously via
NSAnimationContextwithduration = 0 - Oracle: TIMESTAMP variants, INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH, DATE, RAW, and BLOB render through typed decoders. INTERVAL YEAR TO MONTH and BFILE no longer crash on row fetch. Unknown types show
<unsupported: type>instead of crashing (#965) - Oracle: 23ai cloud and container handshakes no longer fail with
uncleanShutdown. OOB urgent-byte send now requiresTNS_ACCEPT_FLAG_CHECK_OOBadvertisement (#483) - Plugin install prompt reopens when connecting to a downloadable database type whose plugin is disabled or uninstalled (#975)
- Redshift: schema switcher no longer empty for non-admin users. Reads from
pg_namespacefiltered byhas_schema_privilegeinstead ofinformation_schema.schemata(#971) - MCP: GET
/mcpopens a real SSE notification stream - MCP: concurrent tool calls no longer serialize at the dispatcher loop
- MCP: server validates
protocolVersionandMCP-Protocol-Version; rejects unknown versions with-32600 invalid_request - MCP: 429 responses include a real
Retry-Afterheader from the rate-limiter lockout - MCP: token revocation cancels in-flight requests and terminates sessions
- MCP: CORS reflects the request
Originagainst an allowlist (localhost,127.0.0.1,claude.ai,app.cursor.com) - MCP: stale
Mcp-Session-Idafter idle timeout returns JSON-RPC-32001 "Session not found"with HTTP 404, letting clients re-initialize cleanly instead of hanging until a 4-minute client timeout - MCP: stdio bridge uses
FileHandle.bytesAsyncBytes (no more silent exit on briefly empty stdin) - MCP: SSE responses stream incrementally instead of buffering
- MCP: rate limiter keys on
(client_address, principal_fingerprint)to close localhost auth-DoS - MCP: in-app setup snippets use the stdio command form for
tablepro-mcp(Claude Desktop rejected the URL form) - MCP: duplicate
initializereturnsinvalid_requestinstead of overwritingclientInfo - MCP:
xcodebuild testno longer leaves an orphanTablePro.apprunning - MCP: server start cleans stale handshake file from a crashed previous PID
- MCP: activity log auto-refreshes when new audit entries are written