PostgreSQL RDB MCP Server 템플릿
경로: Console → Agent Ops → Tool Management → + 도구 생성 → Quick Setup 에서 PostgreSQL (RDB) 선택
RDB MCP Server for PostgreSQL database query and management
Seahorse 내부 관리형 MCP 서버(rdb_server.py)로 PostgreSQL 에 연결해 스키마 탐색·쿼리 실행을 수행합니다.
이전 버전의 RDB Endpoint 기능은 이 템플릿으로 통합되었습니다. 별도 메뉴가 아닌 서비스 템플릿 의 하나로 제공됩니다.
시작 전 — PostgreSQL 이 준비되어 있어야 합니다
이 MCP 템플릿은 “Seahorse 가 접속할 수 있는 PostgreSQL 이 이미 구축·운영 중” 임을 전제로 합니다. 도구를 등록하는 이 화면에서 DB 를 새로 만들어주지 않습니다. DB 준비 → 접속값 준비 → Seahorse 연결 순서로 진행하세요.
일반적인 배포 흐름
대부분의 기업은 AWS RDS · GCP Cloud SQL · Azure Database 등 클라우드 관리형 PostgreSQL 에 이미 데이터가 올라가 있습니다. 아직 없다면 먼저 DB 부터 구축해야 합니다.
(1) DB 구축 (2) 접속 정보 준비 (3) Seahorse 연결
───────────────── ───────────────── ─────────────────
AWS RDS PostgreSQL host / port / user MCP Tools 연결란
GCP Cloud SQL → password / dbname → (Environment Vars)
Azure Database sslmode
자체 호스팅 DB (읽기 전용 계정)
선행 조건 체크리스트
- PostgreSQL 인스턴스 가동 중 — AWS RDS · GCP Cloud SQL · 자체 호스팅 어디든 가능
- Seahorse 에이전트 서버가 DB 에 네트워크로 도달 가능 — 방화벽·VPC·보안 그룹에서 포트(
5432 기본) 허용, 필요 시 Seahorse 서버 IP 를 허용 목록에 추가
- 전용 DB 사용자 발급 — 권장 권한은
GRANT SELECT 만 (읽기 전용). postgres · admin 같은 전역 계정 금지
- DB 이름·호스트·포트·SSL 모드 확정
- (SSL 사용 시) 인증서·CA 가 필요하면 운영자가 사전 배포
템플릿 등록 화면의 Environment Variables 는 DB 접속에 필요한 커넥션 정보 를 전부 요구합니다. 위에서 준비한 값을 그대로 넣으면 됩니다.
| 필요한 값 | 예 | 어디서 얻나 |
|---|
PG_HOST | mydb.xxxxx.ap-northeast-2.rds.amazonaws.com / 10.20.30.40 | AWS RDS 콘솔·GCP SQL 인스턴스 상세 / 자체 DB 서버 IP |
PG_PORT | 5432 (기본) | 동일 |
PG_USER | agent_ro | DBA 가 별도 발급 |
PG_PASSWORD | (시크릿) | DBA 가 별도 발급 |
PG_DBNAME | analytics | 접속 대상 DB 이름 |
PG_SSLMODE | require 권장 | 운영 정책 |
이 값들은 System Default 타입 이라 사용자 화면에서 직접 입력하지 않고 운영자가 Environment 에 세팅 합니다. 아래 Environment Variables 섹션 참고.
DB 가 아직 없으면?
- 클라우드 관리형 PostgreSQL (권장) — AWS RDS · GCP Cloud SQL · Azure Database 중 선택해 인스턴스 생성. 보안 그룹에서 Seahorse 에이전트 서버 IP 허용.
- 자체 호스팅 — VPC 내 EC2·Compute Engine 등에 PostgreSQL 설치. 네트워크 라우팅·방화벽 구성 필요.
- 임시 테스트만 — 로컬에
docker run postgres 로 임시 기동 (실제 운영 용도로는 부적합).
DB 가 준비되지 않은 상태로 템플릿을 Save 하면 도구는 등록되지만 호출 시 could not connect to server · authentication failed 같은 에러로 조용히 실패 합니다.
요약 순서
- DB 구축·계정 발급 (DBA / 인프라팀) — AWS RDS / GCP Cloud SQL / 자체 호스팅 중 택1 + 읽기 전용 계정
- 운영자가 Seahorse Environment 에 접속값 세팅
- 본 화면에서 PostgreSQL 템플릿으로 도구 등록 → Save
- 도구 상세 Test 로 연결 검증
Quick Setup 에서 PostgreSQL (RDB) 선택 시 자동 채워지는 값.
| 필드 | 값 |
|---|
| Name | postgresql |
| Transport | Standard I/O (stdio) |
| 설명 | PostgreSQL RDB MCP Server |
| Access | 기본 Private |
Run Settings
| 항목 | 값 |
|---|
| Command | python |
| Args | -u, /app/app/mcp_servers/rdb_server.py |
Environment Variables
템플릿 기본 제공 (전부 System Default)
PostgreSQL 템플릿의 사전 정의 7 개 변수는 모두 System Default 타입 으로 박혀 있습니다. Value 필드에는 Environment variable value 플레이스홀더가 보이지만 This value is fixed and automatically used at runtime 안내처럼 이 화면에서 값을 수정하지 않습니다 — 실제 값은 운영자가 Environment 에 세팅한 값이 런타임에 주입됩니다.
일부 변수는 기본 표시값 이 미리 보입니다 (PG_PORT = 5432, PG_SSLMODE = prefer). 이 표시값도 System Default 경로에서 관리됩니다.
| Key | 설명 | UI 기본 표시 |
|---|
| PG_HOST | PostgreSQL host address | 빈값 |
| PG_PORT | PostgreSQL port | 5432 |
| PG_USER | PostgreSQL username | 빈값 |
| PG_PASSWORD | PostgreSQL password | 빈값 |
| PG_DBNAME | PostgreSQL database name | 빈값 |
| PG_SSLMODE | PostgreSQL SSL mode | prefer (권장: require / verify-full) |
| TOOL_DESC | MCP 용 도구 설명 (LLM 호출 시 hint) | 빈값 |
사전 정의 7 개 변수의 값은 이 화면에서 변경 불가 합니다. 다른 DB · 계정으로 바꾸려면 운영자가 Environment 에서 해당 키의 값을 갱신해야 합니다.
추가 환경변수 (Add Environment Variable)
사전 정의 변수 아래 Add Environment Variable 버튼으로 추가 변수를 자유롭게 정의 할 수 있습니다. 추가 시 아래 두 타입 중 선택 하며, User Input 도 가능 합니다.
| 타입 | 이 화면에서 값 입력? | 용도 |
|---|
| User Input | ✓ 직접 입력 | 도구별 커스텀 설정 — 테넌트별 스키마·타임아웃 등을 개별 지정 |
| System Default | ✗ 입력 불가 — 운영자 Environment 에 세팅한 값이 주입 | 조직 전체 공통 추가 설정 (프록시 등) |
추가를 고려할 변수
| 변수 | 타입 권장 | 설명 |
|---|
PG_SCHEMA | User Input 또는 System Default | 기본 스키마 (public 외 특정 스키마 사용 시) |
PG_READONLY | User Input | true 로 설정해 UPDATE/DELETE 호출을 MCP 레벨에서 추가 차단 |
PG_STATEMENT_TIMEOUT_MS | System Default | 세션 쿼리 타임아웃 (ms) |
HTTP_PROXY / HTTPS_PROXY | System Default | 사내 프록시 경유 시 |
PostgreSQL 템플릿의 설계 의도
- 기본 7 개 변수는 “테넌트 공통 DB 한 개에 모두 붙는다” 전제로 System Default 고정.
- Add Environment Variable 로는 User Input 타입도 선택 가능 하므로, 테넌트별 다른 값을 쓰고 싶으면 추가 변수로 확장하면 됩니다.
- 다만 기본 7 개(
PG_HOST 등)를 테넌트별로 다르게 하려면 커스텀 도구 로 rdb_server.py 를 복사 등록 + 전체 환경변수를 User Input 으로 새로 구성하는 것이 영향 격리 관점에서 안전합니다.
제공 기능
| 기능 | 설명 |
|---|
| 스키마 탐색 | list_tables · get_table_schema — 테이블·컬럼·인덱스 목록 |
| 쿼리 실행 | execute_query — SELECT 중심 (DB 권한으로 쓰기 차단 권장) |
| 샘플·통계 | 상위 N 행 조회, 행 수·기본 통계 |
| 연결 검증 | 도구 상세 의 Test 버튼 |
권장 사용 패턴
운영 DB 에 읽기 전용 계정 발급
CREATE USER agent_ro WITH PASSWORD 'strong-pw';
GRANT CONNECT ON DATABASE mydb TO agent_ro;
GRANT USAGE ON SCHEMA public TO agent_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO agent_ro;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO agent_ro;
해당 계정 정보를 운영자에게 전달 → Environment 설정에 반영.SSL 설정
운영 환경은 PG_SSLMODE=require 또는 verify-full 권장.
템플릿에서 도구 생성
Quick Setup → PostgreSQL → Save. System Default 변수는 자동 주입되므로 자격 증명을 이 화면에서 입력하지 않습니다.
동작 확인
도구 상세 Test 로 연결 검증 → Agent Chat 에서 테이블 목록 알려줘 로 호출 확인.
활용 레시피
보안 주의
AI 가 데이터를 임의로 수정·삭제할 가능성이 있습니다. LLM 이 의도를 잘못 해석하거나 외부 프롬프트 인젝션(Slack·문서 등)에 영향받아 DELETE / UPDATE / DROP / TRUNCATE 같은 파괴적 쿼리를 실행할 수 있으며, 한 번 실행된 DML 은 백업 복원 전까지 되돌릴 수 없습니다. 읽기 전용 용도로만 연동하시고, 데이터 변경 파이프라인은 검증된 ETL 도구로 수행하세요.
핵심 안전장치
- 운영 DB 에 쓰기 권한 계정 연결 금지 —
GRANT SELECT 만 부여. INSERT/UPDATE/DELETE/DROP/TRUNCATE 는 DB 레벨에서 차단
- 가능하면 Read Replica · 분석 전용 DB 에 연결해 운영 DB 를 직접 건드리지 않기
- System Prompt 에 명시적 금지 규칙 —
SELECT 외 쿼리 생성 금지, 사용자가 쓰기 요청해도 거절 명시
- 민감 컬럼(PII·단가) 은 DB 뷰로 마스킹하거나 읽기 계정에서 컬럼 권한을 제한
- System Default 값은 전역 공유 — 이 템플릿으로 생성된 모든 테넌트의 PostgreSQL 도구가 동일한 DB 를 바라봅니다. 테넌트별 격리가 필요하면 커스텀 도구로 분리
- 퇴사자 계정 회수 — DB 계정 disable + Environment 값 갱신
다른 DBMS (MySQL / Oracle / MSSQL 등)
현재 Seahorse 공식 템플릿은 PostgreSQL 만 지원 합니다. 다른 DBMS 는 커스텀 도구 로 해당 MCP 서버(@modelcontextprotocol/server-mysql 등) 를 stdio / npx 방식으로 직접 등록해야 하며, 공식 지원이 아니라 안정적으로 동작하지 않을 수 있습니다.
- 커스텀 MCP 서버의 동작·호환성은 Seahorse 에서 보장하지 않습니다. 업스트림 변경·드라이버 버전·네트워크 구성에 따라 연결 실패·데이터 타입 불일치·인증 오류 등이 발생할 수 있습니다.
- 등록 직후 도구 상세 의 Test 로 핸드셰이크·
list_tools 응답이 정상인지 반드시 사전 검증 하세요.
- 공식 지원이 필요하면 고객지원 창구 로 요청해주세요 — 수요에 따라 향후 템플릿으로 추가될 수 있습니다.
일반적인 접근
- 간단 읽기 전용: 공식
@modelcontextprotocol/server-<dbms> 가 존재하면 npx 로 등록
- 커스텀 스키마·뷰 조합: 자체 래퍼 MCP 서버를 작성해 쿼리 화이트리스트와 함께 배포
- 대안: PostgreSQL Foreign Data Wrapper 로 다른 DB 를 PostgreSQL 뷰로 노출 후 본 템플릿으로 접근
Transport 필드에 관하여
Basic Information 의 Transport 드롭다운에서 Standard I/O 외에 Streamable HTTP 를 선택하는 것이 UI 상으로는 가능합니다. HTTP 선택 시 입력 필드는 다음과 같이 바뀝니다:
| stdio 필드 | → | HTTP 필드 |
|---|
| Command + Args + Environment Variables | → | Connection Settings (Endpoint URL · Timeout · Verify SSL) + Headers |
본 템플릿의 기본 Transport 는 Standard I/O 입니다. 업스트림 MCP 서버(@modelcontextprotocol/server-slack · @modelcontextprotocol/server-github · uvx mcp-atlassian · rdb_server.py) 는 모두 로컬 프로세스(stdio) 기반 으로 설계되어 있습니다.UI 에서 Streamable HTTP 로 전환할 수는 있지만, 그 경우 같은 기능을 HTTP 엔드포인트로 감싸서 별도 호스팅한 서버가 이미 준비되어 있어야 합니다 (공식 지원되는 HTTP 버전이 Seahorse 에 번들된 것은 아닙니다).
- 일반 사용자는 기본
Standard I/O 를 그대로 유지 하세요.
- HTTP 엔드포인트를 자체 운영 중이고 그걸 연결하려는 경우라면, 사실상 커스텀 도구 로 처음부터 등록하는 편이 깔끔합니다.
- HTTP 로 전환한 상태에서는 본 템플릿의 사전 주입 Command/Args/Env 가 더 이상 의미를 갖지 않습니다.
관련 문서