@cocaxcode/database-mcp
빠른 개요
데이터베이스를 위한 가장 완벽한 MCP 서버입니다. PostgreSQL, MySQL, SQLite 등 3가지 엔진에서 33개의 도구를 제공하며, 연결 그룹, 명명된 연결 관리, 자동 롤백, 덤프/복원, MCP Resources를 통한 스키마 자동 검색, 전체 쿼리 기록을 모두 자연어로 처리할 수 있습니다.
이것은 단순한 쿼리 실행기가 아닙니다. 완전한 데이터베이스 작업 도구입니다. 프로젝트 디렉터리 범위로 연결을 그룹에 정리하고, 세션 간 유지되는 기본값을 설정하며, 세 가지 상세 수준으로 스키마를 검사하고, 모든 쓰기 작업 전에 사전 변경 스냅샷을 가져오며, 역 SQL로 실수를 되돌리고, 전체 데이터베이스를 덤프/복원하며, 프로젝트별, 연결별로 실행한 모든 쿼리를 추적할 수 있습니다.
모든 연결은 그룹에 속합니다. 그룹에는 범위(디렉터리), 기본 연결, 활성 연결이 있습니다. 범위가 지정된 디렉터리에서 작업하면 해당 그룹의 연결만 표시됩니다. 지저분하지 않고 혼란스럽지 않습니다.
필요한 것을 설명하세요. AI가 스키마를 읽고 SQL을 작성한 다음 자동 LIMIT 주입, 사전 변경 스냅샷, 파괴적 작업 전 확인을 통해 안전하게 실행합니다. 클라우드 계정도, ORM도, 설정 파일도 필요 없습니다. 자격 증명은 기기를 벗어나지 않습니다. 모든 것이 로컬에서 실행됩니다.
Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, Codex CLI, Gemini CLI 및 모든 MCP 호환 클라이언트에서 작동합니다.
Related MCP server: Database MCP Server
그냥 말하세요
도구 이름이나 SQL 문법을 외울 필요가 없습니다. 원하는 것을 말하기만 하면 됩니다.
> "Connect to my local PostgreSQL on port 5432, database myapp, user admin"
> "Create a group called backend and add this directory"
> "Connect to my PostgreSQL on localhost, put it in the backend group"
> "Set local-pg as the default connection"
> "Show me all tables"
> "What columns does the users table have?"
> "Show me the last 10 orders with the customer name"
-> AI reads FKs from schema, builds the JOIN, applies LIMIT 10
> "Insert a test user called Alice"
-> Snapshot captured for rollback
> "Oops, undo that"
-> Rows restored via reverse SQL
> "Switch to the production database for this session"
-> Instant context change, all queries now go to prod
> "Delete all inactive users"
-> "This will affect N rows. Call again with confirm=true to proceed."
> "What did I run today?"
-> Full query history with timestamps and execution times
> "Dump the database — structure and data"
-> SQL file generated, ready for restoreAI는 MCP Resources를 통해 이미 스키마를 알고 있습니다. db://schema를 읽어 테이블을 발견하고, db://tables/{name}/schema를 읽어 열, 외래 키, 인덱스를 파악합니다. 테이블 간 데이터를 요청하면 올바른 JOIN을 자동으로 생성합니다.
연결 그룹
모든 연결은 그룹에 속합니다. 그룹은 데이터베이스 연결을 구성하는 단위로, 작업 범위를 유지하고 깔끔하며 자동화된 상태로 만들어 줍니다.
그룹에는 세 가지 핵심 개념이 있습니다.
범위(Scopes): 그룹의 연결을 공유하는 디렉터리입니다. 범위가 지정된 디렉터리에서 작업하면 해당 그룹의 연결만 표시됩니다. 전역적인 지저분함이 없습니다.
기본(Default): 범위가 지정된 디렉터리에 들어가면 자동으로 활성화되는 연결입니다. 세션 간 유지됩니다.
활성(Active): 현재 사용 중인 연결입니다. 세션 전용이며, 재시작하면 기본값으로 돌아갑니다.
실용적인 워크플로는 다음과 같습니다.
"Create a group called backend"
"Add this directory as scope"
"Create a PostgreSQL connection called local-dev in the backend group" <- auto-default (first connection)
"Create another called production in backend"
"List connections" <- shows local-dev (active, default)
"Switch to production" <- session only
"Set production as default" <- persists between sessions그룹에 추가한 첫 번째 연결은 자동으로 기본 연결이 됩니다. 연결을 전환하면 현재 세션의 활성 연결만 변경되며, 재시작하면 기본 연결로 돌아갑니다. 변경 사항을 유지하려면 새 기본 연결을 명시적으로 설정하세요.
즉, 빠른 쿼리를 위해 프로덕션으로 안전하게 전환한 다음, 다음에 프로젝트를 열면 개발 데이터베이스로 돌아와 있게 됩니다.
설치
Claude Code
claude mcp add --scope user database -- npx -y @cocaxcode/database-mcp@latestClaude Desktop
구성 파일에 추가하세요(macOS의 ~/Library/Application Support/Claude/claude_desktop_config.json, Windows의 %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"database": {
"command": "npx",
"args": ["-y", "@cocaxcode/database-mcp@latest"]
}
}
}프로젝트 루트의 .cursor/mcp.json 또는 .windsurf/mcp.json에 추가하세요:
{
"mcpServers": {
"database": {
"command": "npx",
"args": ["-y", "@cocaxcode/database-mcp@latest"]
}
}
}.vscode/mcp.json에 추가하세요:
{
"servers": {
"database": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cocaxcode/database-mcp@latest"]
}
}
}codex mcp add database -- npx -y @cocaxcode/database-mcp@latest또는 ~/.codex/config.toml에 추가하세요:
[mcp_servers.database]
command = "npx"
args = ["-y", "@cocaxcode/database-mcp@latest"]~/.gemini/settings.json에 추가하세요:
{
"mcpServers": {
"database": {
"command": "npx",
"args": ["-y", "@cocaxcode/database-mcp@latest"]
}
}
}드라이버 설치
필요한 드라이버만 설치하세요. 런타임에 동적으로 로드됩니다.
npm install -g postgres # PostgreSQL (postgres.js)
npm install -g mysql2 # MySQL
npm install -g sql.js # SQLite (runs in-process, no native bindings)참고:
npx를 사용할 때 드라이버는 전역으로 설치해야 합니다. 서버를 전역으로 설치하는 경우(npm install -g @cocaxcode/database-mcp) 드라이버는 로컬 또는 전역으로 설치할 수 있습니다.
기능
멀티 데이터베이스, 하나의 인터페이스
대부분의 데이터베이스 MCP 서버는 매 세션마다 자격 증명을 다시 구성하게 합니다. 하지만 이 서버는 그렇지 않습니다. 명명된 연결은 그룹 안에 유지되며, 한 번 만들면 계속 사용할 수 있습니다.
명명된 연결은 git 브랜치처럼 작동합니다. 그룹 안에 dev, staging, prod를 한 번 만들어 두면 항상 존재합니다. 전환은 즉각적입니다. 명령 하나, 재구성 없음:
"Create a group called my-project and add this directory as scope"
"Create a connection called dev with host localhost, database myapp, user admin in my-project"
"Create a read-only connection called analytics pointing to ./data/metrics.db in my-project"
"Switch to dev" -> queries go to PostgreSQL
"Switch to analytics" -> queries go to SQLite
"Duplicate dev as dev-readonly with read-only mode"그룹 범위 연결은 프로젝트마다 다른 데이터베이스를 자동으로 볼 수 있게 합니다. 프로젝트 A에서 작업 중인가요? 프로젝트 A의 그룹과 연결이 표시됩니다. 프로젝트 B의 디렉터리로 전환하면 자체 기본값을 가진 프로젝트 B의 그룹을 불러옵니다. 수동 전환이 필요 없고 프로젝트 간 간섭도 없습니다:
"Create a group called frontend with scope /home/user/frontend"
"Create a group called backend with scope /home/user/backend"이제 각 디렉터리에는 고유한 격리된 연결 집합이 있습니다.
100% 로컬 자격 증명. 모든 연결은 ~/.database-mcp/connections/에 JSON 파일로 저장됩니다. 비밀번호는 기기를 벗어나지 않습니다. 클라우드로 전송되는 것도 없고 git에 커밋되는 것도 없습니다. 자격 증명은 당신의 것입니다.
실시간 관리. 대화 중에 연결을 생성, 복제, 이름 변경, 테스트, 내보내기, 전환할 수 있습니다. 재시작이 필요 없고, 설정 파일을 편집할 필요도 없으며, 맥락이 손실되지 않습니다.
내장된 안전장치
보호 기능 | 작동 방식 |
읽기 전용 모드 | 연결 수준에서 적용 — 모든 변경을 차단 |
확인 필요 | 파괴적 작업은 명시적 |
자동 LIMIT | 읽기 쿼리는 기본적으로 |
비밀번호 마스킹 |
|
사전 변경 스냅샷 | 모든 INSERT/UPDATE/DELETE가 롤백을 위해 행 상태를 캡처 |
자동 gitignore | 첫 쓰기 시 |
롤백 스냅샷
모든 변경 작업은 사전 상태 스냅샷을 캡처합니다. 무엇이든 되돌릴 수 있습니다.
"Show me available rollbacks"
"Rollback the last delete"
-> "This will INSERT 47 rows back into orders. Confirm?"
-> Rows restored via reverse SQL원래 작업 | 롤백 결과 생성 |
|
|
|
|
|
|
DDL (CREATE, ALTER, DROP) | 로그만 남고 되돌릴 수 없음 |
스키마 인트로스펙션
패턴 필터링을 지원하는 세 가지 상세 수준:
"List all tables" -> names only (fast)
"Show me the users table with columns" -> columns + types + nullable
"Full schema for orders including FKs" -> columns + foreign keys + indexes
"Tables starting with user" -> pattern: 'user%'MCP Resources(db://schema 및 db://tables/{name}/schema)는 AI 에이전트가 스키마에 자동으로 접근할 수 있게 합니다. 다중 테이블 쿼리에 수동 SQL이 필요하지 않습니다.
EXPLAIN을 사용한 쿼리 실행
"Show me all users"
-> SELECT * FROM users LIMIT 100 <- auto LIMIT
"Show the execution plan for this query"
-> EXPLAIN ANALYZE with dialect-specific syntax (PostgreSQL/MySQL/SQLite)압축 모드(v0.3+)
SQL 결과에는 행당 수 킬로바이트에 달하는 TEXT / JSON / HTML 열이 포함되는 경우가 많습니다. AI 에이전트는 컨텍스트 창에 도달하는 모든 바이트에 대해 비용을 지불합니다. execute_query, execute_mutation, explain_query는 행과 구조를 유지하면서 해당 토큰의 60-95%를 줄여주는 네 가지 선택적 매개변수를 지원합니다.
매개변수 | 값 | 기능 |
|
| 상세 수준을 제어합니다 |
|
| 이 열만 반환합니다(클라이언트 측 프로젝션) |
| number (기본값 |
|
| number | SQL LIMIT 이후 추가 행 상한 |
모드:
minimal—rowCount,executionTimeMs,affectedRows및 첫 번째 행의 미리보기만 포함합니다. INSERT/UPDATE/DELETE 확인, COUNT 쿼리, 폴링에 적합합니다. 토큰 약 90-95% 절약.normal(기본값) — 전체 행을 포함하지만 각 셀은…(+NB)표시와 함께max_cell_bytes로 잘립니다. 테이블 구조를 유지합니다. 넓은 행에서 토큰 약 60-80% 절약.full— 결과를 전혀 수정하지 않습니다. 모든 셀의 전체 값이 필요할 때 사용하세요.
SELECT * FROM blog_posts LIMIT 100의 일반적인 절감 효과 여기서 content는 행당 ~2KB HTML(~200KB 전체)입니다:
모드 | 소비된 토큰 | 절감 효과 |
| ~50,000 | 0% (기준) |
| ~12,500 | ~75% |
| ~2,500 | ~95% |
| ~300 | ~99% |
측정된 수치로 원시
psql과의 직접 비교를 보려면 아래 네이티브 대안을 참조하세요.
전체 결과 복구: 모든 압축 응답에는 call_id가 포함됩니다. 나중에 전체 셀이 필요하면 inspect_last_query({ call_id })를 호출하세요 — SQL을 다시 실행하지 않으므로 DB 부하와 부작용이 발생하지 않습니다. 결과는 20개 슬롯 링 버퍼에 보관되며 1시간 TTL로 ~/.database-mcp/last-queries/에 저장됩니다.
// Example: normal (default) response
{
"call_id": "k3m9a2xp",
"columns": ["id", "title", "content"],
"rows": [
{ "id": 1, "title": "Hello", "content": "<h1>Long HTML…(+1847B)" }
],
"rowCount": 1,
"executionTimeMs": 12,
"cells_truncated": 1,
"hint": "1 cell(s) truncated to 500 bytes. Use inspect_last_query({ call_id: \"k3m9a2xp\" }) for full values.",
"tokens_saved_estimate": 462
}네이티브 대안: 실제 토큰 비용
database를 사용할 수 없을 때 Claude Code가 가진 네이티브 옵션(Bash + psql, sqlite3, mysql CLI 등)과 이 MCP를 비교한 내용입니다.
요약: 원시 psql과 비교할 때 execute_query는 모드에 따라 컨텍스트 토큰을 78%에서 96% 절약하며 디버깅 정보 손실이 없습니다. 행당 ~1KB HTML의 content 열이 있는 PostgreSQL 테이블에서 SELECT * FROM blog_posts LIMIT 5를 실제 호출하여 측정했습니다:
에이전트가 호출하는 방식 | MCP 사용? | 토큰 소비량 | psql 대비 차이 |
| ❌ 네이티브 | ~1,800 | 기준 |
| ❌ 네이티브 | 취약, 에이전트 조립 | 측정 어려움 |
| ✅ MCP | ~1,500 | −17% (형식 오버헤드 감소) |
| ✅ MCP | ~400 | −78% |
| ✅ MCP | ~80 | −96% |
| ✅ MCP | ~130 | −93% |
이 표의 수치가 위의 "압축 모드" 섹션과 다른 이유: 이 수치는 5행짜리 실제 쿼리에서 나온 것이고, 이전 표는 더 무거운 콘텐츠의 100행 결과로 외삽한 것입니다. 추세와 규모의 차수는 동일합니다.
참고:
원시
psql출력은 행이 늘어날수록 나빠집니다. JSONB와 긴 TEXT 열에는 기본 필터가 없습니다. MCP 셀 잘림은 구조(행 수 + 열 목록)를 보존하면서 무거운 셀을…(+NB)마커로 축약합니다.inspect_last_query는 SQL을 다시 실행하지 않고 전체 결과를 복구합니다.psql을 사용하면 다시 실행해야 하므로 DB CPU를 다시 소비하고RETURNING절의 부작용이 다시 발생할 위험이 있습니다.MCP는 또한 기본 기능으로는 직접 대응할 수 없는 기능들을 추가합니다: 프로젝트 디렉터리 범위의 연결 그룹, 변경 시 자동 롤백 스냅샷, 쿼리 기록, MCP Resources를 통한 스키마 인트로스펙션, 덤프/복원.
해당되는 경우 응답 끝에 스키마 컨텍스트가 추가됩니다(
normal/full의 기본값은true). 에이전트가 이미 스키마를 알고 있다면include_schema_context: false로 비활성화하세요.등록된 MCP 하나마다 세션당 ~300-600 토큰의 고정 오버헤드를 추가합니다(해당 지침 블록 + 도구 이름). 일반적인 손익분기점: 세션당 실제 쿼리 1개.
덤프 및 복원
SQL 형식의 전체 데이터베이스 백업 — 구조만 또는 구조 + 데이터.
"Dump the database"
-> Choose: structure only or full
-> Choose: all tables or specific ones
-> SQL file saved to .database-mcp/dumps/
"Restore from the last dump"
-> Lists available dumps, asks for confirmation, executes생성된 SQL은 DROP TABLE IF EXISTS, FK 비활성화/활성화, 방언 인식 DDL을 처리합니다.
쿼리 기록
모든 쿼리는 타임스탬프, 연결, 실행 시간, 결과 유형과 함께 프로젝트별로 기록됩니다.
"What queries did I run today?"
"Show me only mutations"
"History for the prod connection"연결 내보내기 및 가져오기
"Export all connections" -> JSON with masked passwords
"Export with secrets included" -> JSON with real credentials
"Import these connections: { ... }" -> creates missing connections도구 참조
8개 카테고리에 33개 도구와 2개의 MCP Resources:
카테고리 | 도구 | 수 |
연결 |
| 11 |
그룹 |
| 7 |
스키마 |
| 1 |
쿼리 |
| 3 |
덤프 |
| 3 |
롤백 |
| 2 |
기록 |
| 2 |
구성 |
| 2 |
리소스: db://schema · db://tables/{tableName}/schema
팁: 이 도구들을 직접 호출할 필요가 없습니다. 원하는 것을 설명하기만 하면 AI가 올바른 도구를 선택합니다.
저장소
저장소는 설계상 두 위치로 분리됩니다. 이 분리는 의도적이며 실제 문제를 해결합니다. 자격 증명은 사용자 소유이고, 프로젝트 기록은 프로젝트 소유입니다.
전역: ~/.database-mcp/ — 그룹, 연결, 자격 증명 및 설정. 홈 디렉터리에 있습니다. 프로젝트 안에 두지 않습니다. git에도 두지 않습니다. 명시적으로 내보내지 않는 한 누구와도 공유되지 않습니다.
프로젝트별: {project}/.database-mcp/ — 쿼리 기록, 롤백 스냅샷 및 데이터베이스 덤프. 프로젝트 디렉터리 안에 있으며, 최초 쓰기 시 .gitignore에 자동으로 추가됩니다.
~/.database-mcp/ # Global (configurable via DATABASE_MCP_DIR)
├── groups/ # Connection groups with scopes and defaults
├── connections/ # Connection configs (credentials, chmod 600)
├── project-conns.json # Session-only active connections (cleared on restart)
└── config.json # Server config (limits)
{your-project}/.database-mcp/ # Per-project (auto-gitignored)
├── history.json # Query history (max 5000)
├── rollbacks.json # Pre-mutation snapshots (max 1000)
└── dumps/
└── {conn}-{timestamp}-{mode}.sql # Database dumps결과적으로 프로젝트 저장소를 자유롭게 공유할 수 있습니다. 협업자는 기록과 롤백 구조를 받지만 자격 증명은 전혀 받지 못합니다. 협업자는 로컬에서 자신만의 연결과 그룹을 만듭니다.
구성
대화에서 또는 환경 변수를 통해 구성할 수 있습니다:
변수 | 설명 | 기본값 |
| 전역 저장소 디렉터리 |
|
| 프로젝트당 최대 롤백 스냅샷 수 |
|
| 프로젝트당 최대 기록 항목 수 |
|
"Set max rollbacks to 2000"
"Set max history to 10000"우선순위: 환경 변수 > 저장된 구성 > 기본값.
경고:
DATABASE_MCP_DIR을 git 저장소 내부 경로로 재정의하는 경우, 자격 증명이 푸시되지 않도록.gitignore에.database-mcp/를 추가하세요.
아키텍처
src/
├── index.ts # Entry point (StdioServerTransport)
├── server.ts # createServer() factory
├── tools/ # 33 tool handlers (one file per category)
├── resources/ # MCP Resources (schema auto-discovery)
├── services/ # Business logic
│ ├── connection-manager # Lazy connect, driver caching
│ ├── schema-introspector # Multi-dialect introspection (3 detail levels)
│ ├── query-executor # Read/mutation/explain with safety
│ ├── rollback-manager # Snapshot capture + reverse SQL
│ ├── history-logger # Per-project query log
│ └── dump-manager # Dump/restore (SQL generation)
├── drivers/ # Database adapters (postgres, mysql, sqlite)
├── lib/ # Types, storage, sanitization
└── utils/ # SQL classifier, parser, formatter런타임 의존성 제로 —
@modelcontextprotocol/sdk와zod외에는 없음엄격한 TypeScript —
any없음동적 드라이버 로딩 — 런타임에
import('postgres')/import('mysql2/promise')/import('sql.js')< 60KB — tsup으로 번들됨
팩토리 패턴 — 격리된 테스트 인스턴스를 위한
createServer(storageDir?, projectDir?)
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA modular MCP server that enables interaction with multiple database types including PostgreSQL, MySQL, SQLite, Redis, MongoDB, and LDAP. It provides tools for executing queries, managing SQL commands, and exploring database schemas with configurable read-only security.29MIT
- AlicenseNot gradedqualityCmaintenanceAn extensible MCP server for database operations that supports PostgreSQL for managing schemas, tables, data, and user permissions. It features automatic migration recording for DDL changes and integrates with various AI-powered editors like Cursor, Zed, and Claude Code.222MIT
- FlicenseNot gradedqualityDmaintenanceA secure multi-database MCP server supporting MySQL, PostgreSQL, and SQLite with read-only enforcement, SQL injection prevention, and tools for schema analysis, performance optimization, and visualization.4
- AlicenseAqualityDmaintenanceA multi-database MCP server supporting MySQL, PostgreSQL, MongoDB, and SQLite with read-only and read-write query capabilities, schema inspection, and SSH tunneling, all without Docker.52MIT
Related MCP Connectors
GibsonAI MCP server: manage your databases with natural language
MCP server for managing Prisma Postgres.
Butterbase MCP server — manage your backend: schemas, auth, functions, storage, RAG, deploys.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/cocaxcode/database-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server