hyunsu blog

홈AI 브리핑예시 글

주간 정리 · 2026년 9월 넷째 주

원격 MCP 서버, 붙이기 전에 볼 세 가지

분류
AI 브리핑 B-04
공개
갱신
—
읽는 시간
5분

요약

로컬에서 stdio 로 붙이던 MCP 도구를 원격으로 옮기면 세 가지가 달라진다. 전송은 Streamable HTTP, 인증은 OAuth, 그리고 재시도는 클라이언트가 챙긴다. 마지막은 직접 겪었다 — 같은 생성 요청이 두 번 들어가 비용이 두 배로 나갔다.

목차 · 4
  1. 01원격 서버는 무엇으로 말하나?
  2. 02인증은 누가 하나?
  3. 03같은 도구를 두 번 부르면?
  4. 04이번 주에 확인할 것

이번 주 정리는 원격 MCP 서버다. 결론은 짧다. 앞의 둘은 사양이 정해 두었고, 셋째는 사양이 정해 주지 않는다. 그래서 셋째가 가장 자주 사고를 낸다.

01 원격 서버는 무엇으로 말하나?

원격 서버는 Streamable HTTP 로 말한다. 요청은 HTTP POST 한 번이고, 응답이 길면 같은 연결에서 스트림으로 이어 보낸다. 예전의 "HTTP 와 SSE 두 엔드포인트" 방식은 사양 개정판에서 이것으로 바뀌었다.

stdioStreamable HTTP
어디서 도나같은 기기의 하위 프로세스원격 서버
인증프로세스 권한 그대로OAuth 토큰
끊기면프로세스와 함께 끝세션 ID 로 다시 붙는다

02 인증은 누가 하나?

원격 서버는 OAuth 로 보호된 자원이다. 클라이언트는 서버가 내놓는 메타데이터에서 인가 서버를 찾아 토큰을 받는다. 토큰은 그 서버 전용이어야 한다.

json
{
  "resource": "https://mcp.example.com",
  "authorization_servers": ["https://auth.example.com"],
  "scopes_supported": ["tools:read", "tools:call"]
}

서버가 받은 토큰을 그대로 다른 API 에 넘기는 "토큰 통과" 는 사양의 보안 권고가 금지한다. 서버 뒤의 API 는 서버가 자기 신원으로 부른다.

03 같은 도구를 두 번 부르면?

사양은 도구 호출이 한 번만 실행된다고 보장하지 않는다. 응답이 늦어 클라이언트가 다시 보내면, 서버는 같은 일을 두 번 한다. 읽기 도구면 괜찮지만 비용이 드는 도구면 곤란하다.

우리 환경에서 확인한 것

이미지 생성 도구를 명령줄 래퍼로 여러 장 부르다가, 응답을 기다리던 래퍼가 같은 요청을 한 번 더 보냈다. 네 장을 부탁했는데 여덟 장 값이 나갔다. 지금은 배치 도구 하나로 네 장을 한 번에 요청하고, 결과는 작업 ID 로 기다린다.

ts
// 재시도해도 한 번만 실행되게 — 도구가 받아 주면 호출마다 멱등 키를 붙인다
const key = crypto.randomUUID();
await client.callTool({
  name: "generate_batch",
  arguments: { prompts, idempotencyKey: key },
});

멱등 키는 서버가 받아 줄 때만 효과가 있다. 도구 설명에 없으면 클라이언트 쪽 자동 재시도를 끈다.

04 이번 주에 확인할 것

  • 완료: 붙인 원격 서버가 Streamable HTTP 인지 본다
  • 완료: 토큰이 서버마다 따로인지 본다
  • 할 일: 비용이 드는 도구의 재시도 설정을 점검한다

도구 설명의 주석(읽기 전용·파괴적 동작 표시)을 먼저 읽는다. 표시는 힌트일 뿐이라 믿지는 않되, 재시도 정책을 고르는 출발점으로 쓴다.