← ClaudeAtlas

build-mcp-serverlisted

외부 서비스(메일·채팅·드라이브·이슈 트래커 등)를 에이전트에 붙일 때, 범용 API 통로 대신 목적별 도구만 노출하는 작은 MCP 서버를 처음부터 끝까지 만든다. 서버·설치 스크립트·게이트 테스트 작성, 변형 주입으로 게이트 실증, 실제 응답으로 출력 검증, 자격 증명을 코드 밖에 600 권한으로 보관, 쓰는 하네스 전부에 등록하고 목록 대조까지 한 흐름으로 처리한다. 사용자가 "MCP 서버 만들어줘", "내가 직접 MCP 만들게", "슬랙/드라이브/캘린더 붙여줘", "이 API를 MCP로 감싸줘", "에이전트가 아무거나 못 하게 도구를 좁히고 싶다", "커스텀 MCP 서버" 같은 표현을 쓰면 반드시 이 스킬을 사용한다. 이미 있는 MCP 서버를 설치·등록만 하는 일(그건 각 하네스의 mcp 명령), 스킬을 만드는 일(build-skill)에는 쓰지 않는다.
gagip/gagip-dev · ★ 0 · API & Backend · score 63
Install: claude install-skill gagip/gagip-dev
# build-mcp-server 외부 서비스를 에이전트에 붙이는 방법은 둘이다. 공식 MCP 서버를 깔아 API 전체를 여는 것, 그리고 필요한 일만 하는 작은 서버를 직접 만드는 것. 이 스킬은 **두 번째**를 위한 것이다. 사람이 이걸 택하는 이유는 대개 능력을 넓히려는 게 아니라 **좁히려는** 것이다 — "알림 채널의 서버 경보만 모아 줘"는 원하지만, 그 대가로 에이전트가 워크스페이스 전체를 뒤지고 메시지를 보낼 수 있게 되는 건 원하지 않는다. **핵심 원칙**: - **도구 목록이 곧 권한이다.** 범용 조회 도구(`call_api(method, params)` 같은 것)를 하나라도 두면 좁히기는 전부 무효다. 노출하는 도구는 사람이 실제로 시킬 일 2~4개로 끝낸다. - **막는 자리는 한 곳이 아니다.** 목록 조회만 막으면 다른 데서 알아낸 ID로 상세를 열 수 있다. 들어오는 경로마다 같은 기준으로 막는다. - **자격 증명은 코드 밖, 대화 밖.** 값이 에이전트의 대화 기록을 지나가면 그 기록에 영원히 남는다. 사용자가 직접 실행하는 설치 스크립트로 받아, 서버 코드 폴더 **밖**에 권한 600으로 둔다. - **셸에 토큰을 남겨 두면 서버는 장식이다.** 환경 변수로도 같은 API를 부를 수 있으면 좁힌 게 아니다. 서버가 돌기 시작하면 셸 쪽 자격 증명은 걷어낸다. --- ## 실행 절차 ### 1. 무엇을 좁힐지 먼저 정한다 코드를 쓰기 전에 **허용 목록의 축**을 정한다. 이게 서버 전체의 모양을 결정한다. 축은 그 서비스가 이미 가지고 있는 분류를 빌리는 게 가장 좋다 — 메일이면 라벨, 채팅이면 채널, 드라이브면 폴더, 이슈 트래커면 프로젝트. 사람이 그 서비스의 화면에서 이미 쓰는 단위라 "뭘 열어 뒀는지"를 나중에도 안 헷갈린다. 사용자에게 확인할 것은 대개 하나다 — **어느 항목을 열 것인가.** 후보를 추측하지 말고 실제 목록을 조회해 보여준다. 다만 아직 못 읽는 항목의 내용을 이름만 보고 단정하지 말고, 근거가 이름뿐이면 그렇다고 밝힌다. 권한(스코프)도 여기서 정한다. 읽기만 시킬 거면 읽기 전용 스코프만 받는다 — 나중에 도구를 안 만들면 그만이라고 미루면, 자격 증명 자체가 쓰기 가능한 상태로 남는다. ### 2. 파일 세 개를 만든다 서버 모음 폴더(예: `~/mcp-servers/`) 아래 서비스별 폴더를 만들고 세 파일을 둔다. | 파일 | 하는 일 | |---|---| | `server.py` | stdio JSON-RPC 루프 + 도구 구현 + 게이트 | | `setup.py` | 사용자가 직접 실행해 자격 증명을 만든다 | | `test_gate.py` | 허용 목록 밖이 막히는지 검사 | `assets/server.template.py`와 `assets/setup.template.py`��� 복사해 시작한다. 표준 라이브러리만 쓴다 — 의존성이 없으면 설치 절차도 없고, 파이썬 경로만 맞으면 어느 하네스에서든 그대로 돈다.