모든 앱에서 MCP 서버를 개별적으로 관리하는 것에 지쳐서, Claude Code를 이용해 이를 해결하는 무료 게이트웨이를 직접 만들었습니다.
요약
MCP 서버 설정을 개별 앱마다 관리해야 하는 번거로움을 해결하기 위해, Claude Code를 활용하여 개발한 오픈 소스 게이트웨이 'Toolport'를 소개합니다. Toolport는 중앙 집중식 서버 관리, OS 키체인을 통한 보안 강화, 그리고 도구 호출 승인 기능을 제공합니다.
핵심 포인트
- MCP 서버 설정을 한 곳에서 통합 관리하고 클라이언트별로 제어 가능
- OS 키체인 사용 및 파괴적 도구 호출에 대한 사용자 승인 계층 추가
- Claude Code를 활용해 Rust 게이트웨이와 Tauri 앱을 신속하게 구축
- 지연 발견(lazy discovery) 방식을 통해 도구 토큰 사용량을 최대 91% 절감
문제점: 만약 MCP (Model Context Protocol) 서버를 한 곳 이상의 장소(Claude Desktop, Claude Code, Cursor 등)에서 사용한다면, API 키가 평문 JSON으로 들어있는 별도의 설정 파일들을 각각 유지 관리해야 하며, 서버를 추가할 때마다 동일한 설정을 여러 번 반복해야 합니다. 서버가 12개를 넘어가자 정말 고통스러워졌습니다.
제가 만든 것: Toolport는 MCP 클라이언트와 서버 사이에 위치하는 데스크톱 앱 및 로컬 게이트웨이입니다. 서버를 한 번만 추가하고 클라이언트별로 토글(on/off)하면, 모든 앱이 동일한 서버 세트를 볼 수 있습니다. 키는 설정 파일 대신 OS 키체인(keychain)에 저장됩니다. 또한 에이전트(agent)를 위해 제가 원했던 안전 계층도 추가했습니다. 파괴적인 도구 호출(destructive tool calls)은 사용자의 승인을 위해 일시 중지될 수 있으며(데스크톱 알림이 오고, 거부하면 실제로 호출이 차단됩니다), 만약 서버의 도구 정의(tool definitions)가 예기치 않게 변경되면 사용자가 확인하기 전까지 격리됩니다.
이 프로젝트는 무료이며 오픈 소스입니다. 현재 Windows, Mac, Linux에서 Claude Desktop 및 Claude Code와 함께 작동합니다: https://github.com/tsouth89/toolport
Claude가 어떻게 도움을 주었나: "도움을 주었다"는 표현은 과소평가입니다. Claude Code가 거의 모든 것을 작성했습니다: Rust 게이트웨이, Tauri/React 데스크톱 앱, 테스트 스위트(test suites), CI (지속적 통합)까지 말이죠. 저의 솔직한 역할은 제품 결정, 리뷰, 그리고 돈이나 사용자 데이터와 관련된 부분에서 인간이 개입(human in the loop)하는 것이었습니다.
Claude를 사용하여 개발하는 다른 분들에게 유용할 수 있는 몇 가지 배운 점들:
- 지침(instructions)이 아닌 불변성(invariant)을 부여하세요. 단계별 지시보다는 "어떤 요청도 다른 요청을 차단해서는 안 되며, 이를 부하 테스트(load test)로 증명하라"와 같은 방식에서 가장 좋은 결과가 나왔습니다.
- 새로운 시각으로 자신의 작업물을 감사(audit)하게 하세요. 이전 세션의 코드에 대해 별도의 리뷰 세션을 실행한 결과, 원래 세션에서는 보지 못했던 실제 버그들을 잡아낼 수 있었습니다.
- 자신의 주장을 입증하게 하세요. 게이트웨이가 토큰을 절약한다고 말했을 때, 저는 이를 측정하기 위한 벤치마크 하네스(benchmark harness)를 구축하게 했습니다 (지연 발견(lazy discovery) 방식을 통해 대규모 서버 세트에서 도구 토큰을 최대 91%까지 절감했습니다).
유료 팀 티어(팀을 위한 공유 서버 세트)가 있지만, 위에 언급된 모든 것은 무료 부분이며, 무료 부분이 이 프로젝트의 핵심입니다.
빌드 과정이나 Claude Code 워크플로우에 대해 궁금한 점이 있다면 기꺼이 답변해 드리겠습니다.
제출자: /u/kydude
[link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기