16장: MCP와 CLI

MCP란 무엇인가

Claude Code는 코드를 작성하고 파일을 다루는 일은 잘 합니다. 하지만 기본 상태에서 직접 할 수 없는 것들이 있습니다. Supabase 데이터베이스에 접속해서 데이터를 조회하거나, 브라우저를 열어서 화면을 클릭하는 것입니다.

MCP(Model Context Protocol)는 Claude Code에 새로운 도구를 연결하는 방법입니다. 스마트폰에 앱을 설치하듯이, MCP를 추가하면 AI가 쓸 수 있는 도구가 늘어납니다.

MCP를 연결하면 Claude Code가 대화 중에 직접 도구를 호출합니다. 예를 들어 Supabase MCP를 연결하면 "일감 테이블 보여줘"라고 했을 때 Claude가 직접 데이터베이스에 쿼리를 날리고 결과를 가져옵니다. SQL을 쓰거나 대시보드를 열 필요가 없습니다.


Supabase MCP: 데이터베이스를 대화로 다루기

Supabase MCP를 연결하면 SQL 없이도 AI가 데이터베이스에 접속해서 테이블 구조를 보고, 데이터를 조회하고, 스키마를 수정할 수 있습니다.

프롬프트 창 옆의 + 버튼을 누르고 Connectors를 고릅니다. 목록에서 Supabase를 찾아 연결하면 브라우저가 열리면서 로그인을 요청합니다. 기존 Supabase 계정으로 로그인하면 연결이 끝납니다.

커넥터는 설정 화면을 갖춘 MCP 서버입니다. 목록에 없는 서비스는 직접 MCP 서버 주소를 등록해야 합니다.

연결하고 나면 이렇게 쓸 수 있습니다.

Supabase에 있는 테이블 목록을 보여줘.
일감 테이블에서 상태가 "미수금"인 항목만 보여줘.
일감 테이블에 "마감일" 컬럼을 추가해줘.

Playwright MCP: AI가 브라우저를 열어 테스트하기

Playwright MCP를 연결하면 AI가 직접 브라우저를 열어서 웹사이트를 테스트합니다. 버튼 클릭, 폼 입력, 결과 확인까지 직접 합니다.

커넥터 목록에는 없지만, 아래 설정을 붙여넣고 말로 시키면 Claude가 알아서 등록합니다.

아래 설정으로 Playwright MCP 연결해줘.
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"]
    }
  }
}

연결하고 나면 이렇게 씁니다.

브라우저를 열어서 http://localhost:3000 에 접속하고,
회원가입 → 로그인 → 일감 등록 순서로 테스트해줘.
문제가 있으면 알려줘.

MCP의 함정 — 컨텍스트를 먹는다

MCP는 편리하지만 대가가 있습니다. 컨텍스트 창을 빠르게 소모합니다.

컨텍스트 창은 Claude가 한 번의 대화에서 기억할 수 있는 내용의 총량입니다. 대화 내역, 코드, 파일 내용이 모두 여기 쌓이고, 꽉 차면 Claude가 오래된 내용을 밀어내고 앞에서 한 얘기를 잊기 시작합니다.

MCP를 켜두면 두 가지 방식으로 컨텍스트를 소모합니다.

첫째, 도구 목록 자체가 컨텍스트를 차지합니다. MCP를 연결하면 Claude는 매 대화마다 "이런 도구들을 쓸 수 있어"라는 목록을 읽어야 합니다. Supabase MCP만 해도 수십 가지 함수 정의를 끌고 옵니다. 대화를 시작하기도 전에 이미 컨텍스트가 줄어드는 겁니다.

둘째, 도구 호출 결과가 통째로 컨텍스트에 쌓입니다. MCP는 외부 서비스의 API 응답 전체를 컨텍스트에 추가합니다. 반면 CLI는 명령어 실행 결과만 올라옵니다. 같은 데이터를 조회해도 MCP 쪽이 훨씬 무겁습니다.

CLI를 쓰면 이 두 문제가 없습니다. Claude는 도구 목록을 따로 읽지 않고, 명령어 출력값만 컨텍스트에 씁니다.

그래서 요즘 추세는 MCP를 항상 켜두지 않고, 꼭 필요한 작업에만 쓰는 것입니다. 평소엔 CLI로 처리하는 쪽이 더 효율적입니다.


CLI로 같은 일 하기

CLI 방식도 사용자 입장에서는 MCP와 다르지 않습니다. 말로 시키면 Claude Code가 알아서 합니다. 차이는 내부 동작입니다. MCP는 프로토콜로 외부 서비스에 직접 연결하지만, CLI는 Claude Code가 터미널 명령어를 실행해서 같은 결과를 얻습니다. 컨텍스트에 올라가는 건 명령어 출력값뿐이라 훨씬 가볍습니다.

Supabase CLI

처음 한 번만 로그인해두면 됩니다.

npx supabase login

이후엔 요청 방식이 MCP 때와 같습니다. Claude Code가 CLI 명령어를 직접 실행합니다. 예를 들어 "테이블 목록 보여줘"라고 하면 내부적으로 이런 명령어를 실행합니다.

npx supabase db execute --project-ref <ref> \
  --sql "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' ORDER BY table_name;"

데이터 조회나 스키마 변경도 같습니다. 요청하면 Claude Code가 적절한 SQL을 만들어 실행합니다.

일감 테이블에서 상태가 "미수금"인 항목만 보여줘.
일감 테이블에 "마감일" 컬럼을 추가해줘.

Playwright CLI

Playwright도 말로 시키면 됩니다.

브라우저를 열어서 http://localhost:3000 에 접속하고,
회원가입 → 로그인 → 일감 등록 순서로 테스트해줘.
문제가 있으면 알려줘.

MCP는 AI가 브라우저를 직접 조종하지만, CLI 방식에서는 Claude Code가 Playwright 테스트 스크립트를 작성하고 npx playwright test를 실행합니다. 테스트가 실패하면 결과를 읽고 스스로 원인을 찾아 수정합니다. 결과는 같습니다.


언제 MCP, 언제 CLI

판단 기준은 하나입니다. CLI가 있느냐 없느냐.

CLI를 쓸 때가 대부분입니다. git, GitHub CLI, AWS CLI, Supabase CLI처럼 잘 알려진 CLI가 있다면 거의 항상 CLI가 낫습니다. Claude는 이런 도구들의 사용법을 이미 학습했기 때문에 MCP처럼 도구 목록을 컨텍스트에 올릴 필요가 없습니다. 컨텍스트 비용이 거의 0에 가깝습니다.

MCP가 필요한 경우는 세 가지입니다.

CLI 자체가 없는 도구. SSH로 접근할 수 없는 원격 시스템이나 사내 전용 서비스처럼 명령어 도구 자체가 없는 경우입니다.

세션 상태를 유지해야 할 때. MCP는 연결을 끊지 않고 상태를 유지하는 반면, CLI는 명령어를 실행할 때마다 새로 시작합니다.

복잡한 인증 흐름을 중앙에서 관리해야 할 때. OAuth나 SAML처럼 복잡한 인증을 매번 CLI에서 처리하기 어려운 경우입니다.

Supabase나 GitHub처럼 CLI가 잘 갖춰진 서비스라면 MCP보다 CLI 쪽이 더 효율적입니다.


✏️ 실습: Supabase MCP와 CLI 각각 써보기

1단계: Supabase MCP를 연결합니다.

claude mcp add --transport http supabase https://mcp.supabase.com/mcp

Claude Code를 실행하고 테이블 목록을 물어봅니다. 대화가 길어질수록 컨텍스트가 차는 걸 체감해보세요.

2단계: MCP 없이 CLI로 같은 작업을 해봅니다.

npx supabase login

로그인 후 테이블 목록을 다시 요청합니다. Claude Code가 어떤 명령어를 실행하는지 확인해보세요.

CLI를 쓰다 보면 자주 반복하는 명령 패턴이 생깁니다. 다음 장에서는 그걸 스킬로 만드는 방법을 다룹니다.

참고자료

© 2026 서울바이브. 본 콘텐츠의 무단 복제 및 재배포를 금합니다.