Claude Code는 MCP 클라이언트이자 에이전트다 — 한 프로그램의 두 역할

MCP·에이전트 만들기 2026-07-20 10:35:33 mcp에이전트claude code개념

글 목록 →

“Claude Code는 MCP 클라이언트인가, 에이전트인가?” 답은 둘 다다. 모순처럼 들리지만, 두 단어가 서로 다른 층을 가리키기 때문이다. 하나의 프로그램이 두 역할을 동시에 겸하고 있을 뿐이고, 이걸 분리해서 보면 헷갈릴 일이 없어진다.

‘클라이언트’와 ‘에이전트’는 다른 축의 단어다

  • MCP 클라이언트프로토콜 상의 역할이다. MCP는 서버와 클라이언트로 나뉘는 통신 규격이고, 서버가 도구를 노출하면 그걸 연결해 가져오는 쪽이 클라이언트다. 순수하게 “누가 서버에 붙어 도구 목록을 받아오느냐”만 말한다.
  • 에이전트런타임 상의 역할이다. 모델을 루프로 돌리며 스스로 도구를 골라 목표를 향해 나아가는 행위자다. 이건 “무엇을 언제 실행할지 누가 결정하느냐”를 말한다.

한쪽은 연결 규격의 역할, 다른 쪽은 실행 흐름의 역할이다. 축이 다르니 한 소프트웨어가 둘을 동시에 가질 수 있다.

Claude Code 안에서 두 역할이 하는 일

Claude Code라는 한 프로그램 안에서 두 모자를 나눠 쓰면 이렇게 된다.

[에이전트 역할]  모델을 돌리는 루프
   ├─ 모델에게 "이런 도구들이 있다"고 알려주고
   ├─ 모델의 "이 도구 불러줘"를 받아 실행하고
   └─ 결과를 다시 모델에게 먹인다

        │ 이 "도구 목록"의 일부를 채우는 통로

[MCP 클라이언트 역할]  MCP 서버들에 접속
   ├─ blog-mcp 서버에 연결 → publish_post 등을 가져옴
   └─ 다른 서버에 연결 → 그 도구들을 가져옴

즉 에이전트 역할이 “무엇을 할지”를 결정하는 두뇌라면, MCP 클라이언트 역할은 그 두뇌가 쓸 수 있는 도구를 외부에서 조달해오는 조달 창구다. 앞서 하네스 이야기에서 “하네스가 도구를 얻어오는 표준 통로가 MCP”라고 했는데, 그 통로의 클라이언트 끝단이 바로 이 역할이다.

왜 이 구분이 실용적인가

두 역할을 분리해서 잡아두면 여러 오해가 정리된다.

  • MCP 없이도 에이전트다: 도구를 코드에 직접 박아넣고 MCP 서버를 하나도 안 붙여도, 루프가 돌면 에이전트다. MCP 클라이언트 역할은 도구를 늘리는 선택지일 뿐 에이전트의 필수 조건이 아니다.
  • MCP 서버는 에이전트가 아니다: 서버는 도구를 노출만 할 뿐 스스로 아무 판단도 하지 않는다. 결정하는 쪽은 언제나 클라이언트 뒤의 에이전트다.
  • 역할 교체가 자유롭다: Claude Code든 다른 AI 앱이든, MCP 클라이언트 역할만 규격을 지키면 같은 서버(blog-mcp 같은)를 그대로 붙여 쓸 수 있다.

정리하면 Claude Code는 “MCP 클라이언트를 내장한 에이전트”다. 두 단어가 부딪히는 게 아니라, 서로 다른 높이의 역할이 한 프로그램 안에 포개져 있는 것뿐이다.

댓글

이 글에 대한 의견은 아래 댓글로 남겨주세요 (GitHub 계정 필요). 로그인 없이 남기고 싶다면