깃허브 MCP 서버가 툴 100개를 넘기며 에이전트를 오히려 헷갈리게 만들던 시절, 툴셋과 동적 선택 같은 정교한 해법을 만들어놓고도 정작 다들 기본 설정만 썼다는 실패담부터 짚음. 목록 풀 리퀘스트 하나에서 출력 토큰 75%를 줄인 사례, 읽기 전용 모드를 쓰는 사용자가 17%인데 이를 노출하는 클라이언트가 없는 실태, 동적 클라이언트 등록을 거부한 이유, 주당 툴 호출 700만 건을 무상태 서버로 처리하는 구조까지 구체적으로 보여줌.
한줄 코멘트. 컨텍스트를 줄인 세 걸음이 이 발표의 알맹이다. 도구를 흔한 쓰임에 맞춰 좁혀 첫 적재를 49% 줄이고, 만들고 읽고 고치고 지우는 것을 묶어 기본 도구를 마흔 개쯤으로 낮추고, 응답에서 필요 없는 것을 걷어 목록 조회 하나에서 75%를 덜어냈다. 앞의 둘은 넣는 것을 줄이고 셋째는 나오는 것을 줄인다는 점이 갈린다.
깃허브에서 *MCP 서버 개발을 이끄는 사람이 발표한다. 원격 서버를 만들고 키우며 부딪힌 것과 그것을 어떻게 넘겼는지가 주제다.
시작은 도구를 너무 많이 낸 것이었다. 당시 100개가 넘는 도구를 골랐고 그것이 너무 많았다고 스스로 말한다.
컨텍스트를 줄인 세 걸음
첫 걸음은 도구를 흔한 쓰임에 맞춰 깎은 것이다. 이것으로 첫 적재가 49% 줄었다.
둘째는 묶는 것이다. 만들고 읽고 고치고 지우는 *CRUD 도구를 하나로 묶어 더 줄였다. 기본 설정으로 쓰면 도구가 약 40개가 된다.
셋째가 앞의 둘과 결이 다르다. 도구 목록이 아니라 응답이 컨텍스트를 먹고 있었다. 목록 조회 도구 하나에서 나오는 것을 필요한 것만 남기자 출력 토큰이 75% 넘게 줄었다.
발표에서 가장 값나가는 실패담이 이 대목이다.
도구가 많아 에이전트가 헷갈리는 것을 풀려고 도구 묶음이나 상황에 따라 고르는 방식 같은 장치를 만들어 뒀다. 그런데 정작 쓰는 사람들은 기본 설정만 썼다.
읽기 전용 모드도 같은 자리에 있다. 사용자의 약 17%가 쓰는데, 그 모드를 화면에 내주는 클라이언트가 없다고 말한다. 만들어 둔 것과 실제로 닿는 것 사이에 틈이 있다는 이야기다.
그래서 기본값을 잘 고르는 일이 정교한 선택지를 만드는 일보다 앞선다.
권한이 모자랄 때
권한을 다루는 방식도 같은 결이다. 에이전트가 도구를 부르는데 *스코프가 모자라면 거기서 실패로 끝내지 않는다.
모자란다는 신호를 돌려주고, 사용자에게 그 권한을 열어도 되는지 그 자리에서 묻는다. 허락이 오면 멈춰 있던 호출이 그대로 이어진다.
규모를 감당하는 구조도 단순하다. 요청이 올 때마다 새 서버 인스턴스를 만들고, 그 시작 시점에 그 사용자의 설정과 권한에 맞는 도구만 붙인다. 그래서 사용자는 자기가 요청한 것이나 쓸 수 있는 것만 받는다.
같은 사용자를 같은 서버로 보내는 장치는 두지 않는다고 한다. 이 방식으로 주간 도구 호출 약 700만 건을 처리하는 규모까지 왔다.
주간 도구 호출 수가 발표 안에서 갈린다. 중반에는 약 700만 건이라 하고 끝부분에서는 800만 건에 가까워지고 있다고 말한다. 어느 쪽이 맞는지는 발표만으로 알 수 없다.
49%와 75%가 무엇을 기준으로 잰 값인지 좁혀지지 않는다. 49%는 첫 적재를 줄인 폭이고 75%는 도구 하나의 출력에서 줄인 폭인데, 둘을 합쳐 실제 대화 하나에서 얼마가 줄었는지는 나오지 않는다.
도구를 줄여서 에이전트가 실제로 더 잘하게 됐는지가 없다. 헷갈렸다는 것이 문제의 출발이었으니 줄인 뒤 성공률이 어떻게 달라졌는지가 있어야 하는데, 성공률 이야기는 95%가 넘는다는 현재 값 하나로만 나온다.
발표자가 스스로 밝히는 것 둘은 적어 둘 만하다. 모든 실패를 막을 수는 없다고 말한다. 에이전트는 자기가 어느 저장소에 쓸 권한이 있는지 모르고 여전히 없는 것을 지어내기 때문이다. 그리고 특정 대목을 설명하며 이건 이제 낡은 이야기라고 스스로 못 박는다.
용어