Windsurf에서 MCP 서버 연동해 프로젝트 컨텍스트 관리하기

배경

최근 Windsurf를 메인 에디터로 사용하면서 프로젝트가 커질수록 AI가 오래된 스키마나 변경된 API를 참조하는 문제가 반복됐다. 매번 프롬프트에 스키마를 붙여넣는 것도 한계가 있어서 MCP 서버 연동을 시도했다.

MCP 서버 구성

PostgreSQL 스키마와 내부 API 문서를 제공하는 간단한 MCP 서버를 구축했다.

// mcp-server.js
import { MCPServer } from '@modelcontextprotocol/sdk';
import { readFileSync } from 'fs';
import { Client } from 'pg';

const server = new MCPServer({
  name: 'project-context',
  version: '1.0.0'
});

server.resource('database/schema', async () => {
  const client = new Client();
  await client.connect();
  const result = await client.query(`
    SELECT table_name, column_name, data_type 
    FROM information_schema.columns 
    WHERE table_schema = 'public'
  `);
  await client.end();
  return JSON.stringify(result.rows, null, 2);
});

server.resource('api/docs', async () => {
  return readFileSync('./docs/api-reference.md', 'utf-8');
});

server.listen(3001);

Windsurf 설정

.windsurf/mcp.json에 서버 정보를 추가했다.

{
  "servers": {
    "project-context": {
      "url": "http://localhost:3001",
      "resources": ["database/schema", "api/docs"]
    }
  }
}

실사용 경험

설정 후 "users 테이블에 email_verified 컬럼 추가"라고 요청하면 현재 스키마를 정확히 참조해서 마이그레이션 코드를 생성했다. API 엔드포인트 수정 시에도 문서를 기반으로 일관된 형식을 유지하는 코드를 제안받았다.

특히 팀원들과 동일한 MCP 설정을 공유하니 누가 작업하든 같은 컨텍스트를 유지할 수 있어서 코드 리뷰가 수월해졌다.

개선 포인트

스키마 변경 시 MCP 서버를 재시작해야 반영되는 점은 불편했다. 파일 워처를 추가하거나 캐시 TTL을 짧게 설정하는 방식으로 개선이 필요해 보인다.