MCP 서버를 구축하며 얻은 교훈
요약
Anthropic의 MCP(Model Context Protocol)를 활용하여 프로젝트 관리 자동화 서버를 구축하며 얻은 최적화 경험을 공유합니다. 도구의 세분화와 페이로드 최적화를 통해 실행 시간과 토큰 비용을 획기적으로 줄이는 방법을 다룹니다.
핵심 포인트
- 도구를 세분화(Granular tools)하여 에이전트의 페이로드 부담을 줄여야 함
- 전체 구조 대신 필요한 부분만 처리하도록 설계하여 실행 시간을 단축함
- MCP 서버 내에 프롬프트 형태의 기술(skills)을 내장하여 최신 상태 유지 가능
- 리소스(resources) 제공을 통해 도구 설명을 보완하고 사용자 경험 개선
저는 제가 작업해 온 프로젝트인 nuzur를 위한 MCP 서버를 구축했습니다. 이는 제 워크플로우에 자연스럽게 녹아들어 스키마 설계부터 데이터 변경까지의 흐름을 자동화하는 데 도움을 줍니다. 이 포스트에서는 그 과정 동안 제가 배운 것들을 공유하고자 합니다.
MCP란 무엇인가 (간략한 문맥)
MCP (Model Context Protocol)는 2024년 Anthropic이 만든 개방형 표준으로, AI 모델을 외부 도구 및 데이터 소스에 연결하기 위한 것입니다. 어떤 AI 어시스턴트나 에이전트와도 통합할 수 있는 범용 어댑터라고 생각하면 됩니다.
배운 점들
세분화된 도구 (Granular tools)
저는 MCP 서버에 CRUD 작업 도구를 구축하는 것부터 시작했습니다. 이것들도 작동은 하지만, 비용이 많이 들고 (특히 페이로드 (payload)가 큰 경우), 에이전트가 작업을 완료하는 데 몇 분이 걸릴 수 있습니다. 더 구체적인 예시는 다음과 같습니다:
nuzur는 프로젝트를 관리하며, 각 프로젝트는 n개의 프로젝트 버전을 가질 수 있습니다. 각 프로젝트 버전은 엔티티 (entities) (및 해당 필드 (fields)), 관계 (relationships), 그리고 열거형 (enums)을 보유합니다.
저는 에이전트에게 프로젝트에 몇 가지 변경 사항을 적용하도록 요청했습니다: 새로운 프로젝트 버전을 생성하고, 엔티티를 추가하며, 다른 것을 수정하는 작업입니다. 저의 초기 설계는 에이전트에게 최신 프로젝트 버전을 가져오는 도구와 버전을 생성하거나 업데이트하는 도구를 제공했습니다. 작동은 했지만, 모든 토큰을 소모했고 완료하는 데 약 15분이 걸렸습니다.
문제점은 모델들이 일반적으로 큰 페이로드를 처리하는 데 어려움을 겪으며, 깊게 중첩된 구조 (deeply nested structures)에 특정 변경을 가하는 것이 비용이 많이 든다는 것입니다.
해결책은 에이전트가 전체 페이로드를 읽고 파싱할 필요가 없도록 세분화된 도구 (granular tools)를 만드는 것입니다. 서버가 전체 구조를 추적하고, 에이전트는 필요한 부분만 받게 됩니다.
위의 예시에 어떻게 적용될까요? 저는 엔티티, 필드, 관계, 그리고 열거형을 관리하기 위한 세분화된 도구들을 구축했으며, 에이전트에게 필요할 때 전체적인 문맥을 제공하기 위해 프로젝트 버전의 가벼운 버전을 반환하는 도구도 추가했습니다. 이를 통해 동일한 변경 사항에 대해 실행 시간을 15분에서 1분 미만으로 단축했으며, 토큰 사용량 또한 극적으로 감소했습니다.
핵심 요약 (The takeaway): 도구(tools)를 세분화하고, 페이로드(payloads)를 간결하게 유지하며, 꼭 필요한 데이터로만 제한하세요. 또 다른 유용한 팁은 귀하의 MCP 서버를 사용한 에이전트(agent)에게 도구에 대한 피드백을 요청하는 것입니다. 어떤 작업이 오래 걸렸는지, 그리고 과정을 더 매끄럽게 만들기 위해 무엇을 개선할 수 있는지 물어보세요.
기술(skills)을 내장하고 리소스(resources)를 제공하기
작지만 유용한 방법입니다. MCP 서버에 기술(skills)을 프롬프트(prompts) 형태로 내장할 수 있습니다. 그렇게 하면 기술이 코드와 함께 최신 상태로 유지되며, 사용자는 클라이언트에서 기술을 수동으로 다운로드하거나 업데이트할 필요 없이 최신 버전을 사용할 수 있습니다.
같은 맥락에서, 도구 설명(tool descriptions)을 보완하기 위해 MCP 서버로부터 리소스(resources)를 제공할 수 있습니다. 이는 사용자 경험을 개선하고, 워크플로(workflows)를 효율화하며, 재작업을 줄여줍니다. 또한 프롬프트와 마찬가지로 리소스는 클라이언트를 수정하지 않고도 동적으로 업데이트할 수 있습니다.
내가 다르게 했을 점
만약 처음부터 다시 시작한다면, CRUD 도구는 아예 만들지 않을 것입니다. 기존 API를 그대로 반영하고 싶은 유혹이 생기지만, 에이전트는 프로그램이 API를 사용하는 방식과는 다르게 소비합니다. 에이전트는 읽는 모든 토큰(token)에 대해 비용을 지불하기 때문입니다. 첫날부터 에이전트를 위해 설계한다는 것은 세분화된 상태로 시작하고, 응답을 가볍게 유지하며, 컨텍스트(context)를 하나의 예산으로 취급하는 것을 의미합니다.
또한 에이전트의 피드백을 개발 루프(development loop)의 더 이른 단계에 포함시켰을 것입니다. 제가 얻은 가장 좋은 도구 개선 사항 중 일부는 세션이 끝난 후 에이전트에게 무엇이 속도를 늦췄는지 단순히 물어보는 것에서 나왔습니다. 이는 여러분이 수행할 수 있는 가장 저렴한 사용성 테스트(usability testing)입니다.
MCP 서버는 단순히 제품을 감싸는 래퍼(wrapper)가 아닙니다. 그것은 매우 다른 종류의 사용자를 위해 설계된 인터페이스입니다. 일단 그런 방식으로 생각하기 시작하자, 모든 설계 결정이 더 쉬워졌습니다.
이러한 아이디어들이 실제로 어떻게 적용되는지 보고 싶다면, nuzur MCP server가 공개되어 있으니 직접 사용해 보시고 의견을 알려주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기