MCP 서버를 쓰면 커스텀 데이터 소스에 연결하고, 그걸 Cursor 안에서 바로 쓸 수 있어. 브라우저, 데이터베이스, 오류·시스템 로그 같은 곳의 컨텍스트가 필요할 때 특히 유용해. MCP 서버 설정은 간단하고, Cursor에서라면 금방 끝낼 수 있어.이 가이드에선 Postgres용 MCP 서버를 만드는 방법을 차근차근 살펴볼게. 목표는 Cursor가 Postgres 데이터베이스에 직접 SQL 쿼리를 실행하고, 테이블 스키마를 구조화된 형태로 제공하도록 하는 거야.
MCP 서버는 Cursor와 통신하고 외부 데이터나 작업에 접근할 수 있게 해주는 프로세스야. 구현 방법은 여러 가지가 있지만, 여기서는 가장 단순한 방법을 쓸 거야: 네 컴퓨터에서 stdio (표준 입력/출력 스트림)로 로컬 실행되는 서버. 이렇게 하면 복잡한 보안 이슈를 피하고 MCP 로직 자체에 집중할 수 있어.MCP의 가장 흔한 사용 사례 중 하나는 데이터베이스 액세스야. 대시보드를 만들거나, 분석을 돌리거나, 마이그레이션을 만들 때는 데이터베이스를 쿼리하고 살펴봐야 할 때가 많지. 우리가 만들 Postgres MCP 서버는 핵심 기능 두 가지를 지원해: 임의 쿼리 실행과 테이블 스키마 나열.이 작업들은 순수 SQL만으로도 할 수 있지만, MCP는 이를 더 강력하고 범용적으로 유용하게 만들어주는 기능을 제공해. 툴은 쿼리 실행 같은 작업을 노출하는 수단을 제공하고, 리소스는 스키마 정보 같은 표준화된 컨텍스트를 공유할 수 있게 해줘. 이 가이드 뒤에서는 더 고급 워크플로를 가능하게 하는 프롬프트도 살펴볼 거야.내부적으로는 postgres npm 패키지를 사용해 데이터베이스에 SQL 문을 실행할 거야. MCP SDK는 이런 호출을 감싸는 래퍼로 동작해서 Postgres 기능을 Cursor에 자연스럽게 통합할 수 있게 해줄 거야.
이제 서버가 어떻게 동작하길 원하는지 정의하자. 그러려면 spec.md를 만들고 상위 수준의 목표를 작성할 거야
Copy
Ask AI
# 사양- MCP 환경 설정을 통해 DATABASE_URL 정의 허용- 도구를 통해 Postgres 데이터 쿼리 - 기본값은 읽기 전용 - ENV `DANGEROUSLY_ALLOW_WRITE_OPS=true|1` 설정 시 쓰기 작업 허용- 테이블에 `resources`로 접근- 스키마 정의에 Zod 사용
보다시피, 이건 꽤 가벼운 스펙이야. 필요하면 더 자세한 내용을 자유롭게 추가해줘. README 링크들과 함께 최종 프롬프트를 구성할 거야.
Copy
Ask AI
우리가 원하는 바를 파악하려면 아래 내용을 읽고 @spec.md를 따르자. 필요한 종속성은 모두 설치되어 있어- @https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/refs/heads/main/README.md- @https://raw.githubusercontent.com/porsager/postgres/refs/heads/master/README.md
이 세 가지 구성 요소(스펙, MCP SDK 문서, Postgres 라이브러리 문서)가 준비됐으니, Cursor로 서버 구현을 스캐폴딩할 수 있어. Cursor가 MCP SDK와 Postgres를 연결하는 코드를 생성해서, 각각의 조각을 잘 엮어 줄 거야.몇 번의 프롬프트 주고받기를 거쳐 이제 MCP 서버의 첫 버전이 돌아가고 있어. 직접 써 보려면 MCP Inspector를 사용하면 돼
Copy
Ask AI
npx @modelcontextprotocol/inspector bun run index.ts
초기 구현이 끝나면 MCP Inspector로 테스트할 수 있어. Inspector는 서버가 어떤 기능을 노출하는지 확인하고, 도구와 리소스가 기대대로 동작하는지 검증할 수 있는 방법을 제공해. 쿼리가 실행되는지, 스키마 정보가 정확히 반환되는지 확인하자.모든 게 괜찮아 보이면, 서버를 Cursor에 직접 연결해서 실제 환경에서 테스트해 봐. 이 시점부터 Cursor는 Postgres MCP 서버를 기본 제공 기능처럼 사용할 수 있어서, 데이터베이스를 직접 쿼리하고 살펴볼 수 있어.
stdio로 로컬에서 MCP 서버를 실행하는 건 좋은 시작이지만, 팀에선 종종 MCP 서버를 통해 같은 데이터베이스에 공동으로 접근할 필요가 있어. 이런 상황에선 MCP 서버를 중앙집중식 HTTP 서비스로 배포하는 게 필요해.배포된 MCP 서버는 개별 stdio 인스턴스보다 여러 가지 장점이 있어:
공유 데이터베이스 접근: 여러 팀원이 Cursor를 통해 동일한 데이터베이스 인스턴스를 조회할 수 있어
중앙집중식 구성: 스키마 업데이트와 권한 변경을 한 곳에서 관리할 수 있어
강화된 보안: 적절한 인증, 레이트 리미팅, 접근 제어를 적용할 수 있어
가시성: 팀 전반의 사용 패턴과 성능 지표를 모니터링할 수 있어
이걸 달성하려면 전송 방식을 stdio에서 HTTP로 전환하면 돼.전체 설정을 전부 다루진 않지만, Cursor에 이렇게 시작하기 좋은 프롬프트를 줄 수 있어
Copy
Ask AI
기존 MCP 서버를 기반으로 HTTP 프로토콜을 구현하는 새 파일을 만들어.공유 로직은 mcp-core로 옮기고, 각 전송 구현은 이름으로 분리해 (mcp-server-stdio, mcp-server-http)@https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/refs/heads/main/README.md