MotherDuck MCP Server
공식MotherDuck 및 로컬 DuckDB로 데이터를 쿼리하고 분석합니다.
문서
DuckDB / MotherDuck 로컬 MCP 서버
AI 어시스턴트 및 IDE를 위한 SQL 분석 및 데이터 엔지니어링.
DuckDB의 강력한 분석 SQL 엔진을 사용하여 AI 어시스턴트를 데이터에 연결하세요. 로컬 DuckDB 파일, 인메모리 데이터베이스, S3 호스팅 데이터베이스 및 MotherDuck 연결을 지원합니다. SQL 읽기 및 쓰기 쿼리 실행, 데이터베이스 카탈로그 탐색, 여러 데이터베이스 연결 간 실시간 전환을 허용합니다.
완전 관리형 원격 MCP 서버를 찾고 계신가요? → MotherDuck 원격 MCP 문서로 이동
원격 vs 로컬 MCP
| 원격 MCP | 로컬 MCP (이 저장소) | |
|---|---|---|
| 호스팅 | MotherDuck에서 호스팅 | 로컬/자체 호스팅 실행 |
| 설정 | 설정 불필요 | 로컬 설치 필요 |
| 접근 | 읽기-쓰기 지원 | 읽기-쓰기 지원 |
| 로컬 파일 시스템 | - | 로컬 및 원격 데이터베이스 간 쿼리, 로컬 파일 시스템에서 데이터 수집/내보내기 |
📝 v0.x에서 마이그레이션하시나요?
- 기본적으로 읽기 전용: 서버가 이제 기본적으로 읽기 전용 모드로 실행됩니다. 쓰기 접근을 활성화하려면
--read-write를 추가하세요. 프로덕션 보안을 참조하세요.- 기본 데이터베이스 변경됨:
--db-path기본값이md:에서:memory:로 변경되었습니다. MotherDuck을 명시적으로 사용하려면--db-path md:를 추가하세요.- MotherDuck 읽기 전용에는 읽기 스케일링 토큰 필요: 읽기 전용 모드의 MotherDuck 연결에는 읽기 스케일링 토큰이 필요합니다. 일반 토큰에는
--read-write가 필요합니다.
빠른 시작
사전 요구 사항: uv를 pip install uv 또는 brew install uv를 통해 설치하세요.
인메모리 DuckDB에 연결 (개발 모드)
{
"mcpServers": {
"DuckDB (in-memory, r/w)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", ":memory:", "--read-write", "--allow-switch-databases"]
}
}
}
가드레일 없는 완전한 유연성 — 읽기-쓰기 접근 및 런타임에 모든 데이터베이스(로컬 파일, S3 또는 MotherDuck)로 전환할 수 있는 기능.
읽기 전용 모드로 로컬 DuckDB 파일에 연결
{
"mcpServers": {
"DuckDB (read-only)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", "/absolute/path/to/your.duckdb"]
}
}
}
읽기 전용 모드로 특정 DuckDB 파일에 연결합니다. 파일 잠금을 유지하지 않으므로 동일한 DuckDB 파일에 대한 쓰기 연결과 함께 사용하기 편리합니다. s3://bucket/path.duckdb를 사용하여 S3의 원격 DuckDB 파일에도 연결할 수 있습니다 — S3 인증에 대한 환경 변수를 참조하세요. MCP에 대한 제3자 접근을 고려 중이라면 프로덕션 보안을 참조하세요.
읽기-쓰기 모드로 MotherDuck에 연결
{
"mcpServers": {
"MotherDuck (local, r/w)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", "md:", "--read-write"],
"env": {
"motherduck_token": "<YOUR_MOTHERDUCK_TOKEN>"
}
}
}
}
더 많은 옵션은 명령줄 매개변수, 배포 지침은 프로덕션 보안, 문제 발생 시 문제 해결을 참조하세요.
클라이언트 설정
| 클라이언트 | 설정 위치 | 원클릭 설치 |
|---|---|---|
| Claude Desktop | 설정 → 개발자 → 설정 편집 | .mcpb (MCP 번들) |
| Claude Code | 아래 CLI 명령 사용 | - |
| Codex CLI | 아래 CLI 명령 또는 ~/.codex/config.toml 사용 | - |
| Gemini CLI | 아래 CLI 명령 또는 ~/.gemini/settings.json 사용 | - |
| Cursor | 설정 → MCP → 새 글로벌 MCP 서버 추가 | |
| VS Code | Ctrl+Shift+P → "기본 설정: 사용자 설정 열기(JSON)" | |
| Kiro | ~/.kiro/settings/mcp.json (글로벌) 또는 .kiro/settings/mcp.json (프로젝트) |
모든 MCP 호환 클라이언트는 이 서버를 사용할 수 있습니다. 빠른 시작의 JSON 구성을 클라이언트의 MCP 구성 파일에 추가하세요. 구성 파일 위치는 클라이언트 문서를 참조하세요.
Claude Code CLI 명령
인메모리 DuckDB (개발 모드):
claude mcp add --scope user duckdb --transport stdio -- uvx mcp-server-motherduck --db-path :memory: --read-write --allow-switch-databases
로컬 DuckDB (읽기 전용):
claude mcp add --scope user duckdb --transport stdio -- uvx mcp-server-motherduck --db-path /absolute/path/to/db.duckdb
MotherDuck (읽기-쓰기):
claude mcp add --scope user motherduck --transport stdio --env motherduck_token=YOUR_TOKEN -- uvx mcp-server-motherduck --db-path md: --read-write
Codex CLI 명령
인메모리 DuckDB (개발 모드):
codex mcp add duckdb -- uvx mcp-server-motherduck --db-path :memory: --read-write --allow-switch-databases
로컬 DuckDB (읽기 전용):
codex mcp add duckdb -- uvx mcp-server-motherduck --db-path /absolute/path/to/db.duckdb
MotherDuck (읽기-쓰기):
codex mcp add motherduck --env motherduck_token=YOUR_TOKEN -- uvx mcp-server-motherduck --db-path md: --read-write
Gemini CLI 명령
인메모리 DuckDB (개발 모드):
gemini mcp add -s user duckdb uvx mcp-server-motherduck --db-path :memory: --read-write --allow-switch-databases
로컬 DuckDB (읽기 전용):
gemini mcp add -s user duckdb uvx mcp-server-motherduck --db-path /absolute/path/to/db.duckdb
MotherDuck (읽기-쓰기):
gemini mcp add -s user -e motherduck_token=YOUR_TOKEN motherduck uvx mcp-server-motherduck --db-path md: --read-write
Kiro 수동 JSON 구성
Kiro MCP 구성 파일(글로벌의 경우 ~/.kiro/settings/mcp.json, 프로젝트 범위의 경우 .kiro/settings/mcp.json)에 다음을 추가하세요. 자세한 내용은 Kiro MCP 문서를 참조하세요.
인메모리 DuckDB (개발 모드):
{
"mcpServers": {
"DuckDB (in-memory, r/w)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", ":memory:", "--read-write", "--allow-switch-databases"]
}
}
}
MotherDuck (읽기-쓰기):
{
"mcpServers": {
"MotherDuck (local, r/w)": {
"command": "uvx",
"args": ["mcp-server-motherduck", "--db-path", "md:", "--read-write"],
"env": {
"motherduck_token": "<YOUR_MOTHERDUCK_TOKEN>"
}
}
}
}
도구
| 도구 | 설명 | 필수 입력 | 선택적 입력 |
|---|---|---|---|
execute_query | SQL 쿼리 실행 (DuckDB 방언) | sql | - |
list_databases | 모든 데이터베이스 나열 (MotherDuck 또는 여러 연결된 DB에 유용) | - | - |
list_tables | 테이블 및 뷰 나열 | - | database, schema |
list_columns | 테이블/뷰의 열 나열 | table | database, schema |
switch_database_connection* | 다른 데이터베이스로 전환 | path | create_if_not_exists |
*--allow-switch-databases 플래그 필요
모든 도구는 JSON을 반환합니다. 결과는 기본적으로 1024행 / 50,000자로 제한됩니다 (--max-rows, --max-chars를 통해 구성 가능).
프로덕션 보안
제3자에게 자체 호스팅 MCP 서버에 대한 접근 권한을 부여할 때 읽기 전용 모드만으로는 충분하지 않습니다 — 여전히 로컬 파일 시스템 접근, DuckDB 설정 변경 및 기타 잠재적으로 민감한 작업을 허용합니다.
제3자 접근이 있는 프로덕션 배포의 경우 **MotherDuck 원격 MCP**를 권장합니다 — 설정 불필요, 읽기-쓰기 가능, MotherDuck에서 호스팅.
MotherDuck MCP 자체 호스팅: 이 저장소를 포크하여 필요에 맞게 사용자 정의하세요. **서비스 계정**과 **읽기 스케일링 토큰**을 사용하고 **SaaS 모드**를 활성화하여 로컬 파일 접근을 제한하세요.
DuckDB MCP 자체 호스팅: --init-sql를 사용하여 보안 설정을 적용하세요. 사용 가능한 옵션은 DuckDB 보안 가이드를 참조하세요.
명령줄 매개변수
| 매개변수 | 기본값 | 설명 |
|---|---|---|
--db-path | :memory: | 데이터베이스 경로: 로컬 파일(절대 경로), md: (MotherDuck), 또는 s3:// URL |
--motherduck-token | motherduck_token 환경 변수 | MotherDuck 접근 토큰 |
--read-write | False | 쓰기 접근 활성화 |
--motherduck-saas-mode | False | MotherDuck SaaS 모드 (로컬 접근 제한) |
--allow-switch-databases | False | switch_database_connection 도구 활성화 |
--max-rows | 1024 | 반환되는 최대 행 수 |
--max-chars | 50000 | 반환되는 최대 문자 수 |
--query-timeout | -1 | 쿼리 제한 시간(초) (-1 = 비활성화) |
--init-sql | None | 시작 시 실행할 SQL |
--motherduck-connection-parameters | session_hint=mcp&dbinstance_inactivity_ttl=0s | 추가 MotherDuck 연결 문자열 매개변수 (&로 구분된 key=value 쌍) |
--ephemeral-connections | True | 읽기 전용 로컬 파일에 임시 연결 사용 |
--transport | stdio | 전송 유형: stdio 또는 http |
--stateless-http | False | 프로토콜 호환성 전용 (예: AWS Bedrock AgentCore Runtime과 함께). 서버는 여전히 공유 DatabaseClient를 통해 전역 상태를 유지합니다. |
--port | 8000 | HTTP 전송용 포트 |
--host | 127.0.0.1 | HTTP 전송용 호스트 |
환경 변수
| 변수 | 설명 |
|---|---|
motherduck_token 또는 MOTHERDUCK_TOKEN | MotherDuck 접근 토큰 (--motherduck-token의 대안) |
HOME | DuckDB에서 확장 및 구성에 사용됩니다. 설정되지 않은 경우 --home-dir로 재정의하세요. |
AWS_ACCESS_KEY_ID | S3 데이터베이스 연결용 AWS 액세스 키 |
AWS_SECRET_ACCESS_KEY | S3 데이터베이스 연결용 AWS 비밀 키 |
AWS_SESSION_TOKEN | 임시 자격 증명용 AWS 세션 토큰 (IAM 역할, SSO, EC2 인스턴스 프로필) |
AWS_DEFAULT_REGION | S3 연결용 AWS 리전 |
AWS_ENDPOINT | S3 연결용 AWS 엔드포인트 |
문제 해결
spawn uvx ENOENT:uvx의 전체 경로를 지정하세요 (실행하여 찾으려면which uvx실행)- 파일 잠김:
--ephemeral-connections가 켜져 있는지 확인하고 (기본값: true) 읽기-쓰기 모드로 연결되어 있지 않은지 확인하세요.
리소스
- MotherDuck MCP 문서
- 루프 닫기: MCP, DuckDB 및 AI를 통한 더 빠른 데이터 파이프라인 (블로그)
- MCP 및 DuckDB를 통한 더 빠른 데이터 파이프라인 (YouTube)
개발
소스에서 실행하려면:
{
"mcpServers": {
"Local DuckDB (Dev)": {
"command": "uv",
"args": ["--directory", "/path/to/mcp-server-motherduck", "run", "mcp-server-motherduck", "--db-path", "md:"],
"env": {
"motherduck_token": "<YOUR_MOTHERDUCK_TOKEN>"
}
}
}
}
릴리스 프로세스
Release New VersionGitHub Action을 실행합니다.MAJOR.MINOR.PATCH형식으로 버전을 입력합니다.- 워크플로가 버전을 올리고, PyPI/MCP 레지스트리에 게시하고, MCPB 패키지와 함께 GitHub 릴리스를 생성합니다.
라이선스
MIT 라이선스 - LICENSE 파일을 참조하세요.
mcp-name: io.github.motherduckdb/mcp-server-motherduck