/ 디렉터리 / 플레이그라운드 / DBHub
● 공식 bytebase 🔑 본인 키 필요

DBHub

제작: bytebase · bytebase/dbhub

하나의 MCP, 여러 데이터베이스 — Postgres, MySQL, SQL Server, SQLite, Oracle — 기본적으로 읽기 전용인 쿼리 인터페이스입니다.

Bytebase의 DBHub는 단일 npx @bytebase/dbhub 바이너리를 통해 여러 관계형 데이터베이스와 통신하는 의존성 없는 MCP입니다. 데이터베이스 종류에 맞는 DSN을 전달하면, 스키마 탐색, 테이블 샘플링, SQL 실행을 얻을 수 있습니다. 기본적으로 읽기 전용 모드로 실행되므로 탐색적인 프로덕션 세션에 안전합니다.

왜 쓰나요

핵심 기능

라이브 데모

실제 사용 모습

dbhub.replay ▶ 준비됨
0/0

설치

클라이언트 선택

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config 열기. 저장 후 앱 재시작.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

Cursor는 Claude Desktop과 동일한 mcpServers 스키마 사용. 프로젝트 설정이 전역보다 우선.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

Cline 사이드바의 MCP Servers 아이콘 클릭 후 "Edit Configuration" 선택.

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

Claude Desktop과 같은 형식. Windsurf 재시작 후 적용.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "dbhub",
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  ]
}

Continue는 맵이 아닌 서버 오브젝트 배열 사용.

~/.config/zed/settings.json
{
  "context_servers": {
    "dbhub": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@bytebase/dbhub"
        ]
      }
    }
  }
}

context_servers에 추가. 저장 시 Zed가 핫 리로드.

claude mcp add dbhub -- npx -y @bytebase/dbhub

한 줄 명령. claude mcp list로 확인, claude mcp remove로 제거.

사용 사례

실전 활용법: DBHub

한 번의 세션에서 3개의 다른 데이터베이스 쿼리

👤 스택에 관계형 DB가 2개 이상인 엔지니어 ⏱ ~20 min intermediate

언제 쓸까: 스택에 기본 데이터용 Postgres, 레거시 서비스용 MySQL, 보고 복사본용 SQL Server가 있고 모든 것에 걸쳐 하나의 AI 어시스턴트를 원하는 경우

사전 조건
  • 각 DB의 읽기 전용 자격증명이 있는 DSN — postgres://, mysql://, sqlserver://, sqlite://, oracle:// 형식
흐름
  1. 여러 DSN 구성
    현재 가리키고 있는 DB를 보여주세요. 필요하면 MySQL DSN으로 전환하세요.✓ 복사됨
    → 명확한 활성 DB 표시기
  2. 스키마 검사
    현재 DB의 테이블을 대략적인 행 수와 함께 나열하세요.✓ 복사됨
    → 테이블 카탈로그
  3. DB 전체에 걸쳐 교차 참조
    Postgres에서 사용자 이메일을 쿼리하고, MySQL legacy_users에서 동일한 이메일을 쿼리한 다음, 하나에만 있는 사용자를 알려주세요.✓ 복사됨
    → 조정 보고서

결과: 다양한 DB 전체에서 다양한 MCP 서버를 조작하지 않고도 단일 워크플로우

함정
  • SQL 방언 차이로 인해 Claude가 혼동됨 (예: LIMIT vs TOP) — Claude에 현재 쿼리가 대상으로 하는 DB 종류를 명시적으로 말하거나 DB별 턴으로 나누세요
함께 쓰기: filesystem

누군가 보낸 SQLite 파일 분석

👤 불투명한 .db 파일을 받은 엔지니어 / 분석가 ⏱ ~10 min beginner

언제 쓸까: 고객이 sqlite 덤프를 보냈고 한 눈에 보기를 원하는 경우

흐름
  1. DBHub를 파일에 가리키기
    DSN sqlite:///path/to/data.db를 사용하세요. 테이블 + 행 수를 나열하세요.✓ 복사됨
    → 테이블 인벤토리
  2. 각각 샘플링
    각 중요한 테이블에 대해 5개의 샘플 행을 표시하고 목적을 추론하세요.✓ 복사됨
    → 테이블별 요약
  3. 고객의 질문에 답변
    고객 질문: <question>. SQL을 작성하고, 실행하고, 답변을 반환하세요.✓ 복사됨
    → 쿼리 + 결과

결과: 다른 도구로 추출하지 않고 알 수 없는 sqlite 파일의 빠른 탐색

함정
  • 큰 sqlite 테이블에는 인덱스가 없음 — 전체 스캔이 파일을 잠글 수 있음 — 읽기 전용으로 열기; 단일 쿼리에서 100만 개 이상의 행에 걸친 집계 피하기
함께 쓰기: filesystem

읽기 전용 복제본에 대해 보고 쿼리를 안전하게 실행

👤 BI / 분석 ⏱ ~15 min beginner

언제 쓸까: 분석을 위한 복제본이 있고 기본을 노출하지 않고도 AI 기반 임시 보고서를 원하는 경우

사전 조건
  • 복제본에 대한 읽기 전용 DSN — 복제본 전용 자격증명; DSN에서 statement_timeout 적용
흐름
  1. 복제본임을 확인
    현재 연결이 읽기 전용이고 복제본 호스트를 가리키는지 확인하세요.✓ 복사됨
    → 호스트 문자열 + 읽기 전용 플래그 확인됨
  2. 보고서 실행
    [비즈니스 질문 붙여넣기]. SQL로 변환하고, 실행하고, 결과를 반환하세요.✓ 복사됨
    → 결과 집합
  3. 재사용을 위해 지속
    이 SQL을 /reports/<name>.sql에 질문을 설명하는 주석과 함께 저장하세요.✓ 복사됨
    → SQL 파일 저장됨

결과: 프로덕션 기본에 대한 위험 없이 임시 BI

함정
  • 무거운 쿼리가 복제본을 느리게 하고 복제 지연을 생성 — statement_timeout을 설정하고 사용량이 적은 시간에 큰 쿼리를 실행하세요
함께 쓰기: filesystem · antv-chart

마이그레이션을 위해 SQL Server 저장 프로시저 감사

👤 SQL Server에서 마이그레이션하는 팀 ⏱ ~30 min advanced

언제 쓸까: 모든 저장 프로시저, 코드 줄 수, 마지막 수정 날짜 목록이 필요한 경우

흐름
  1. 프로시저 나열
    sys.procedures + sys.sql_modules를 쿼리하여 이름, 스키마, 줄, 마지막 수정 날짜가 있는 모든 프로시저를 나열하세요.✓ 복사됨
    → 프로시저 인벤토리
  2. 복잡성 분류
    프로시저를 줄 수로 버킷으로 분류: 사소함 (<50), 중간 (50-300), 복잡함 (>300). 각 버킷을 세세요.✓ 복사됨
    → 복잡성 히스토그램
  3. MSSQL 특정 기능 표면화
    복잡한 프로시저의 경우 MSSQL 특정 구성(CROSS APPLY, CTE 재귀, TOP, GETDATE) 사용을 표시하세요 — 이것들이 어려운 마이그레이션 항목입니다.✓ 복사됨
    → 마이그레이션 위험 목록

결과: 실제 개수를 기반으로 한 저장 프로시저 마이그레이션 계획

함정
  • 일부 프로시저에는 분류하기 어려운 동적 SQL이 포함됨 — EXEC sp_executesql이 있는 모든 프로시저에 수동 검토를 표시하세요
함께 쓰기: filesystem

조합

다른 MCP와 조합해 10배 효율

dbhub + antv-chart

SQL을 실행한 다음 결과를 직접 차트로 표시

DBHub를 통해 Postgres 복제본에서 주간 수익을 쿼리한 다음 AntV 라인 차트로 렌더링하세요.✓ 복사됨
dbhub + filesystem

재현성을 위해 쿼리 + 결과 저장

주간 KPI 쿼리를 실행하고, SQL을 /sql/weekly.sql에 저장하고, 결과 CSV를 /data/weekly-<date>.csv에 저장하세요.✓ 복사됨
dbhub + notion

Notion에 SQL 기반 보고서 게시

상위 고객 쿼리를 실행하고, 결과를 테이블로 하는 Notion 페이지를 만드세요.✓ 복사됨

도구

이 MCP가 노출하는 것

도구입력언제 호출비용
list_databases 첫 번째 탐색 단계 무료
list_tables database? 쿼리 전 카탈로그 무료
describe_table table, schema? 쿼리 전 스키마 검사 무료
execute_sql sql, params? SQL ��기 또는 쓰기 (쓰기는 플래그 필요) 쿼리에 따라 다름
execute_read_sql sql, params? 명시적 읽기 전용 실행 다양함

비용 및 제한

운영 비용

API 쿼터
데이터베이스 연결 제한에 의해 제한됨
호출당 토큰
결과 크기에 따라 다름; LIMIT으로 한정
금액
무료 — 비용은 DB 호스팅만
DSN에서 statement_timeout을 설정하세요; AI가 작성한 쿼리는 전체 스캔에 열정적일 수 있습니다.

보안

권한, 시크릿, 파급범위

최소 스코프: 대상 테이블의 SELECT
자격 증명 저장: 환경의 DSN (DSN 또는 종류별 환경 변수)
데이터 외부 송신: 데이터베이스로 직접; 제3자 프록시 없음
절대 부여 금지: 세션에 필요하지 않으면 연결 역할의 CREATE/DROP/ALTER

문제 해결

자주 발생하는 오류와 해결

인증 실패 / 액세스 거부됨

DSN 자격증명이 잘못되었거나 SELECT가 없습니다. 각 종류에 대해 DSN 형식을 다시 확인하세요.

확인: 동일한 DSN을 사용하여 DB의 네이티브 클라이언트로 연결하세요
지원되지 않는 SQL 기능 / 구문 오류

종류 불일치 — Claude에 활성 DB 방언을 말하거나 DSN 접두사를 다시 확인하세요.

연결 풀 고갈

동시성을 낮추거나 풀 크기를 늘리세요; 장시간 실행 쿼리가 실제 원인인 경우가 많습니다.

쓰기 거부됨 (읽기 전용)

DBHub는 기본적으로 읽기 전용입니다. 이 세션에 대해 --readonly=false로 다시 시작하세요.

대안

DBHub 다른 것과 비교

대안언제 쓰나단점/장점
Postgres MCPPostgres만 사용하는 경우; 더 심화된 Postgres 특정 기능단일 종류
MongoDB MCP관계형 데이터베이스와 함께 Mongo가 필요한 경우다른 데이터 모델
Supabase MCPSupabase를 사용 중이고 프로젝트+DB 관리를 원하는 경우Supabase에 연결됨

더 보기

리소스

📖 GitHub에서 공식 README 읽기

🐙 열린 이슈 보기

🔍 400+ MCP 서버 및 Skills 전체 보기