어떤 어시스턴트든 테이블을 예약할 수 있도록 MCP 서버를 구축했습니다
요약
AI 어시스턴트가 웹 브라우징의 한계를 넘어 실제 예약 작업을 수행할 수 있도록 Anthropic의 MCP(Model Context Protocol)를 활용한 서버 구축 사례를 소개합니다. 기존 브라우저 에이전트 방식의 한계를 극복하고, 도구 호출(Tool Calling)을 통해 안정적인 예약 프로세스를 구현하는 방법을 다룹니다.
핵심 포인트
- 브라우저 에이전트의 웹 예약 성공률은 매우 낮음
- MCP를 통해 어시스턴트가 직접 호출 가능한 도구 제공
- 검색, 가용성 확인, 예약 생성 등 최소한의 도구로 설계 권장
- 사람용 UI가 아닌 소프트웨어용 인터페이스(API)의 중요성
한 달 동안 저는 하나의 간극(gap)에 대해 글을 써왔습니다. 그래서 이제 그 간극을 메우는 조각에 대해 쓰고 싶습니다.
저희는 암스테르담의 레스토랑 200곳을 대상으로 한 가지 질문을 던져 측정해 보았습니다. 'AI 어시스턴트가 예약을 완료할 수 있는가?' 브라우저 에이전트(browser agent)가 최종 예약 단계까지 도달할 수 있었던 곳은 200곳 중 16곳뿐이었습니다. 운영 중인 163개 사이트 중 어시스턴트가 직접 호출할 수 있는 인터페이스를 공개한 곳은 단 한 곳도 없었습니다. 이 간극은 기술의 문제도, 모델 품질의 문제도 아니었습니다. 행동할 수 있는 수단 자체가 없었던 것입니다.
그래서 저희는 하나를 만들었습니다.
그 조각은 바로 MCP 서버입니다. Model Context Protocol (MCP)은 Anthropic이 2024년 말에 발표한 프로토콜로, 어시스턴트가 호출할 수 있는 도구(tools)를 노출하기 위한 것입니다. 현재 주요 에이전트 플랫폼들은 모두 어떤 형태로든 이를 사용하고 있습니다. 만약 현실 세계에서 행동을 취해야 하는 어시스턴트를 구축한다면, MCP는 오늘날 어시스턴트에게 통로를 제공하는 가장 신뢰할 수 있는 방법입니다.
저희는 예약 시스템의 전면에 배치될 작은 MCP 서버를 작성했습니다. 세 가지 도구가 있습니다: 업체 검색, 날짜 및 인원수에 따른 예약 가능 여부 확인, 예약 생성. 전송 방식은 단순한 JSON입니다. MCP 클라이언트를 가진 어시스턴트라면 페이지를 전혀 보지 않고도 도구 목록을 나열하고, 입출력을 확인하며, 이를 사용할 수 있습니다. 구동해야 할 위젯도, 조사해야 할 iframe도, 돌파해야 할 캡차(captcha)도 없습니다. 어시스턴트가 테이블을 요청하면, 테이블이 있을 경우 이를 예약하고 고객에게 전달할 수 있는 확인 ID를 받아옵니다.
어시스턴트가 이를 처음 사용하는 모습을 지켜보는 것은 가장 좋은 의미에서 허탈할 정도입니다. 사이트가 어떻게 배치되어 있는지 추론할 필요도 없고, 여기저기 클릭할 필요도 없으며, 4단계에서 오류가 발생하지도 않습니다. 어시스턴트는 사용 가능한 도구를 읽고, 호출하고, 결과를 얻습니다. 이것이 바로 마지막 단계가 소프트웨어를 위해 설계되었을 때 테이블을 예약하는 모습입니다.
이것을 구축하면서 이전의 한 순간이 비로소 이해되었습니다.
이번 여름 초에 저는 단순한 HTML 페이지 뒤에 작은 예약 API (Booking API)를 우리 데모 인스턴스에 구축했습니다. 엔드포인트 (Endpoint), 필수 필드 (Required fields), 응답 형태 (Response shape)까지 말이죠. 위젯이 아니라 그냥 페이지였습니다. 저는 ChatGPT에게 이를 통해 예약을 진행해 달라고 요청했습니다. ChatGPT는 페이지를 주의 깊게 읽었습니다. API를 이해했습니다. 필수 필드들을 나열했습니다. 그러더니 사과했습니다. 자신의 웹 도구로는 POST 요청을 보낼 수 없다고 말이죠. ChatGPT는 동작을 완벽하게 설명할 수는 있었지만, 그것을 실행할 수는 없었습니다.
우리 연구에 포함된 모든 장소에서 이 장면이 200번 넘게 반복되었습니다. 사람을 위한 정보는 페이지에 있습니다. 소프트웨어를 위한 인터페이스는 없습니다. 어시스턴트(Assistant)는 그 둘 사이에 앉아 있지만, 어느 쪽도 연결하지 못합니다.
해결책은 어시스턴트에게 사람이 되는 법을 가르치는 것이 아닙니다. 해결책은 어시스턴트에게 호출할 수 있는 무언가를 주는 것입니다. 그것이 바로 MCP (Model Context Protocol)입니다.
유사한 도구를 구축하려는 분들을 위한 몇 가지 실무적인 참고 사항입니다.
작게 유지하세요. 예약에는 세 가지 도구(Tool)면 충분합니다. 검색 (Search), 가용성 (Availability), 생성 (Create). 나중에 취소 (Cancel)와 수정 (Modify)을 추가할 수도 있겠지요. 우리는 어시스턴트에게 필요하지 않은 기능에 대한 도구를 추가하는 것을 지양했습니다. 왜냐하면 추가되는 도구 하나하나가 모델이 추론해야 하는 또 다른 실패 모드 (Failure mode)가 되며, 추가되는 설명 하나하나가 모델이 기억해야 하는 또 다른 문단이 되기 때문입니다.
구조화된 에러 (Structured errors)를 반환하세요. "해당 시간대는 더 이상 예약할 수 없습니다"는 자연어 문장이 아니라 데이터 필드여야 합니다. 어시스턴트가 해석해야 하는 모든 문자열은 동일한 요청이 서로 다른 결과를 초래할 수 있는 또 다른 지점이 됩니다.
인터페이스에 버전을 부여하세요. MCP 서버는 계약 (Contract)이며, 계약은 변경됩니다. 도구 설명 (Tool description)과 모든 응답에 버전을 포함하세요.
기계가 찾을 수 있는 어딘가에 URL을 게시하세요. .well-known 엔트리, 해당 장소 웹사이트의 MCP 엔드포인트를 가리키는 ReserveAction 블록, 또는 향후 등장할 공개 디스커버리 레지스트리 (Public discovery registry) 등이 될 수 있습니다. 단순히 존재하는 것만으로는 부족합니다. 발견 가능해야 (Findable) 합니다.
장소 측에서 자사의 웹사이트와 어시스턴트(Assistants)가 경쟁하는 것을 원하지 않는다고 가정해 봅시다. 이는 타당한 입장입니다. 오직 에이전트(Agents)들만 사용할 수 있는 시스템을 만들지 마세요. 고객들은 여전히 기존 방식대로 웹사이트에서 예약할 수 있어야 합니다. MCP 서버는 두 번째 문이며, 그 존재는 정문으로 들어오는 사람에게는 보이지 않아야 합니다.
라이브 데모가 있습니다. 어시스턴트를 데모로 향하게 하고 테이블 예약을 요청해 보세요. 그러면 바로 작동할 것입니다. MCP 엔드포인트(Endpoint)는 데모 페이지에 나열되어 있습니다.
레스토랑 예약 레이어 (Booking layer): https://g-lab.studio/g-guest
암스테르담 연구: https://g-lab.studio/research/amsterdam-restaurants-2026
만약 여러분이 현실 세계의 행동을 수행해야 하는 어시스턴트를 구축한다면, 여러분이 제공한 도구들이 여전히 어떤 부분에서 부족한지 듣고 싶습니다. 다음 에세이는 바로 그 지점에서 시작될 것입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기