Agentic AI 구축

MCP 아키텍처 총정리 (MCP Host, MCP Server)

gksyb4235 2025. 11. 5. 12:50

MCP 아키텍처 총정리


가장 대표적인 MCP의 구조

 

 

 

일단 MCP 서버는 뭘까?


MCP 서버는 “AI가 접근할 수 있는 외부 데이터나 기능을 MCP 표준(JSON-RPC 프로토콜)로 제공하는 프로그램” 이다.

이는 곧 AI Application과 외부 도구들을 연결하는 표준화된 인터페이스를 제공한다.

즉, LLM이 직접 접근하지 못하는 시스템 (예를 들어 Databse, Web API, Local File, CLI 명령 등)을 대신해서 MCP 형식으로 열어주는 Gateway 서버이다.

 

MCP 서버는 오픈소스/플랫폼 제공자가 구현 및 제공하고 있다.

가장 대표적으로 Smithery는 파일 접근, 웹 검색 등 다양한 MCP 서버를 이미 제공하고 있고,

Anthropic(Cluade), OpenAI(ChatGPT) 역시 공식/서드파티 서버들을 MCP 생태계에 추가하고 있다.

특히 LangChain 팀은 LangChain 도구를 MCP Server로 변환한 Adapter를 제공하고 있다.

 

그렇다면 서버의 위치는 어떻게 될까? MCP 서버는 위치가 중요하지 않다.

서버는 다음 두 가지 형태로 동작할 수 있다.

 

  • Remote Server (원격 서버)
    –외부 네트워크나 클라우드 상에서 동작하며, 웹 검색이나 외부 DB 같은 인터넷 기반 리소스에 접근할 때 사용된다.
  • Local Server (로컬 서버)
    – 사용자의 로컬 환경(Localhost) 에서 실행되어, 내부 파일 시스템, 로컬 DB, 내부 API 등 외부 통신이 필요 없는 리소스와 연결할 때 사용된다.

 

즉, MCP 서버는 “인터넷이 끊겨도” 로컬 환경에서 동작 가능하며, 단순히 파일 구조 탐색이나 내부 DB 질의 같은 작업은 웹 통신 없이도 수행할 수 있다. 이렇게 MCP 서버는 AI 모델이 네트워크 상태와 무관하게 다양한 데이터 소스에 표준화된 방식으로 접근할 수 있도록 하는 핵심 구성 요소다.

 

서버는 LLM의 손발인 셈. LLM이 직접 데이터를 읽거나 API를 호출할 수 없으니까,

Server가 대신 그 일을 수행하고 결과를 돌려준다.

 

 

아래 Smithery에서 써드파티에서 개발된 MCP 서버를 확인할 수 있다.

 

 

 

MCP Host의 의미


MCP Host를 보면 LLM과 MCP Client가 들어 있다.

MCP Host가 이런 식으로 구축된 이유가 뭘까? Host가 직접 서버랑 통신하면 되지 않나?

 

MCP Host는 우리가 직접 사용하는 AI 애플리케이션(예: Claude, Cursor, LangGraph 등) 을 의미한다.
이 Host는 LLM(언어 모델)을 내장하고 있으며, 사용자의 입력을 받아서 자신의 언어(내부 명령 체계) 로 처리한다.
하지만 Host 자체는 MCP 서버들이 사용하는 “공용 언어(JSON-RPC 기반의 MCP 프로토콜)”를 직접 이해하지 못한다.

 

Host = LLM이 탑재된 주체 (AI 앱, IDE, 프레임워크 등)
Host의 언어 = 자체 명령어나 내부 API 언어
MCP의 언어 = JSON-RPC 형식의 통신 프로토콜

 

바로 이것이 MCP Host가 MCP Client를 내장해야 하는 이유이다.

MCP Client는 이 서로 다른 언어 모델간의 언어 차이를 메워주는 역할을 한다.

 

  • Host가 “파일 구조를 읽어와 줘”라고 요청하면,
    → Client는 이를 MCP 프로토콜(JSON-RPC) 형식으로 변환하여
    → “file-system” MCP 서버에게 전달한다.
  • 서버는 응답을 JSON 형식으로 돌려주고,
    → Client는 다시 이 결과를 Host가 이해할 수 있는 형태로 번역해
    → LLM 또는 사용자에게 전달한다.

즉, MCP Client는 Host 언어 ↔ MCP 언어(JSON-RPC) 사이의 양방향 변환기(Translator) 이다.
그래서 MCP Host가 외부 MCP 서버들과 소통하려면 반드시 Client를 포함해야 한다.

 

이런 구조로 인해 Host가 MCP 언어를 알고 있지 않아도, Client가 이를 변역해주는 역할을 하기 때문에,

Host는 여러 Server(Tool)들과 자연스럽게 소통할 수 있게 된다.

 

 

 

Client는 LLM Framework별로 따로 존재한다


결국 MCP Client는 Host와 MCP 서버의 통역을 담당한다고 할 수 있으니, Host마다 Client가 다를 수밖에 없다.

Claude가 쓰는 MCP Client와 LangChain이 쓰는 MCP Client는 서로 호환되지 않는다.

 

만약 MCP Client가 MCP Host 내에 있는 것이 아니라 Server 단에 있다면 어떻게 됐을까?

모든 서버마다 각각 Host와 통신하기 위한 MCP Client가 있어야 하므로 개발 부담이 장난이 아닐 것.

이처럼 MCP Client를 일일이 직접 구현하는 건 부담이 크기 때문에,

Framework 개발자들이 이를 미리 만들어 오픈소스로 공유한다.

  • LangChain MCP Adapter = LangChain용 MCP Client
  • Claude SDK Client = Anthropic용 MCP Client

 

 

MCP 생태계에서의 개발자의 역할


  • MCP 생태계에서 Host(Client 내장)Server 가 이미 구축되어 있다면,
    → 우리는 그 위에서 동작하는 Application Layer만 개발하면 된다.
  • 즉, “통역”이나 “프로토콜 변환”은 Adapter(Client)가 다 해주고,
    우리는 LLM과 연결된 로직(프롬프트, 워크플로우, UI 등)만 만들면 되는 것이다.

MCP가 없던 시절엔 각 서버마다 직접 연결 로직을 구현해야 했지만,
이제는 “Client(통역관)” 덕분에 그 부담이 사라진 셈이다.