Atlas / MCP servers / bytebase / Dbhub

DbhubBLOCK

mcp/bytebase/dbhub

Token conscious database MCP server for Postgres, MySQL, SQL Server, Oracle, MariaDB, SQLite.

Verdict
BLOCK
Grade
F
Trust score
53 /100
Exposed tools
1 0r · 1w · 0d
Transport
stdio
License
MIT
Stars
3,549
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[!NOTE] If you need an enterprise-level database MCP server with built-in guardrails like approval flow, access control, data masking, and audit logging beyond what DBHub offers, check out Bytebase.
+------------------+    +--------------+    +------------------+
|                  |    |              |    |                  |
|  Claude Desktop  +--->+              +--->+    PostgreSQL    |
|                  |    |              |    |                  |
|  Claude Code     +--->+              +--->+    SQL Server    |
|                  |    |              |    |                  |
|  Cursor          +--->+    DBHub     +--->+    Oracle        |
|                  |    |              |    |                  |
|  VS Code         +--->+              +--->+    SQLite        |
|    
Read from source at commit c07ef8c455b2OBSERVED · 2026-09-22
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add dbhub --env DSN=${DSN} --env DB_PASSWORD=${DB_PASSWORD} -- npx -y @bytebase/[email protected]
03

Exposed tools (1)

0 read · 1 write · 0 destructive.

ToolRiskDescription
update_statuswriteUpdate user status
04

Trust audit

BLOCKgrade F · trust 53/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (5 observation(s))
Shell
declared (2 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/connectors/mariadb/index.ts:92
connectionConfig.ssl = { rejectUnauthorized: false };
Why it matters. certificate verification is disabled
Fix. leave verification on
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
dbhub.toml.example:22
dsn = "postgres://postgres:postgres@localhost:5432/myapp"
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
dbhub.toml.example:39
# dsn = "postgres://postgres:postgres@localhost:5432/myapp"
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
dbhub.toml.example:45
# dsn = "postgres://dev_user:[email protected]:5432/myapp_dev?sslmode=require"
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
dbhub.toml.example:76
# dsn = "postgres://app_user:[email protected]:5432/myapp_prod?sslmode=require"
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
dbhub.toml.example:91
# dsn = "postgres://app_user:[email protected]:5432/myapp_prod?sslmode=require"
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
src/utils/__tests__/ssh-config-parser.test.ts:591
writeFileSync(keyPath, '-----BEGIN OPENSSH PRIVATE KEY-----\n');
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
src/utils/__tests__/ssh-config-parser.test.ts:614
writeFileSync(keyPath, '-----BEGIN OPENSSH PRIVATE KEY-----\n');
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
src/utils/__tests__/ssh-config-parser.test.ts:632
writeFileSync(keyPath, '-----BEGIN OPENSSH PRIVATE KEY-----\n');
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
src/utils/__tests__/ssh-tunnel.test.ts:145
const fakeKey = '-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBg==\n-----END PRIVATE KEY-----\n';
LOWInventory / provenance · inv.hidden_file · CWE-1104
.prettierrc.json
.prettierrc.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/utils/__tests__/allowed-keywords.test.ts:269
expect(isReadOnlySQL("EXEC('DELETE FROM users')", "sqlserver")).toBe(false);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/utils/__tests__/allowed-keywords.test.ts:281
expect(isReadOnlySQL("WITH cte AS (SELECT 1) EXEC('DELETE FROM users')", "sqlserver")).toBe(false);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/utils/__tests__/allowed-keywords.test.ts:301
expect(isReadOnlySQL("/* EXEC('DROP TABLE users') */ SELECT 1", "sqlserver")).toBe(true);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/utils/__tests__/allowed-keywords.test.ts:305
expect(areAllStatementsReadOnly("SELECT 1; EXEC('DELETE FROM users')", "sqlserver")).toBe(false);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/config/__tests__/ssh-config-integration.test.ts:52
privateKey: '/home/user/.ssh/id_rsa'
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/config/__tests__/ssh-config-integration.test.ts:65
privateKey: '/home/user/.ssh/id_rsa'
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/config/__tests__/ssh-config-integration.test.ts:77
privateKey: '/home/user/.ssh/id_rsa'
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/config/__tests__/ssh-config-integration.test.ts:90
privateKey: '/home/user/.ssh/id_rsa'
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
src/config/__tests__/ssh-config-integration.test.ts:101
privateKey: '/home/user/.ssh/id_rsa'
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
frontend/src/components/Gutter/Gutter.tsx:6
import type { DataSource } from '../../types/datasource';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
frontend/src/components/Gutter/GutterIcon.tsx:3
import { cn } from '../../lib/utils';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
frontend/src/components/Gutter/GutterSourceItem.tsx:3
import { cn } from '../../lib/utils';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
frontend/src/components/Gutter/GutterSourceItem.tsx:4
import { DB_LOGOS } from '../../lib/db-logos';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
frontend/src/components/Gutter/GutterSourceItem.tsx:5
import type { DataSource } from '../../types/datasource';

Gates applied: no_behavioural_pass.

Audited 2026-09-22 · audit v0.4.1 · source sha c07ef8c455b2full audit observations/trust-audit/mcp-server/bytebase__dbhub.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-09-22c07ef8c455b2BLOCKF53source changed, verdict held
2026-09-18444f412f74adBLOCKF53first audit
06

Questions

What is the Dbhub MCP server?

Token conscious database MCP server for Postgres, MySQL, SQL Server, Oracle, MariaDB, SQLite.

What tools does Dbhub expose?

1 in total: 0 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Dbhub safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (53/100) and found 6 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does Dbhub need?

It reads DBHUB_AUTH_TOKEN, DB_PASSWORD, DSN, SSH_KEY, SSH_PASSPHRASE, SSH_PASSWORD, TEST_DB_PASSWORD and TEST_SSH_PASSWORD from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Dbhub run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as dbhub at 1.3.1.

How current is this page?

The grade is for one exact copy of the source (c07ef8c455b2), read on 2026-09-22. The repository is watched and re-audited when it changes.

Advertisement