구성MCP

MCP 서버 전송

MCP는 Bob과 MCP 서버 간의 통신을 위한 전송 메커니즘을 지원합니다.

개요

MCP는 각각 다른 배포 시나리오에 적합한 세 가지 전송 옵션을 제공합니다:

각 전송에는 서로 다른 특성, 장점 및 사용 사례가 있습니다.

STDIO 전송

STDIO 전송은 컴퓨터에서 로컬로 실행되며 표준 입출력 스트림을 통해 통신합니다.

STDIO 전송 작동 방식

  1. Bob이 MCP 서버를 자식 프로세스로 시작
  2. 통신은 프로세스 스트림을 통해 발생: Bob은 서버의 STDIN에 쓰고 서버는 STDOUT에 응답
  3. 각 메시지는 개행 문자로 구분
  4. 메시지는 JSON-RPC 2.0으로 형식화
Client                    Server
  |                         |
  |---- JSON 메시지 ---->| (STDIN을 통해)
  |                         | (요청 처리)
  |<---- JSON 메시지 ----| (STDOUT을 통해)
  |                         |

STDIO 특성

  • 로컬성: Bob과 동일한 머신에서 실행
  • 성능: 매우 낮은 지연 시간 및 오버헤드(네트워크 스택 관련 없음)
  • 단순성: 네트워크 구성 없이 직접 프로세스 통신
  • 관계: 클라이언트와 서버 간 일대일 관계
  • 보안: 네트워크 노출 없이 본질적으로 더 안전

STDIO를 사용하는 경우

STDIO 전송은 다음에 이상적입니다:

  • 동일한 머신에서 실행되는 로컬 통합 및 도구
  • 보안이 중요한 작업
  • 낮은 지연 시간 요구 사항
  • 단일 클라이언트 시나리오(서버당 하나의 Bob 인스턴스)
  • 명령줄 도구 또는 IDE 확장

STDIO 구현 예제


const server = new Server({name: 'local-server', version: '1.0.0'});
// 도구 등록...

// STDIO 전송 사용
const transport = new StdioServerTransport(server);
transport.listen();

Streamable HTTP 전송

Streamable HTTP 전송은 원격 MCP 서버 통신을 위한 최신 표준이며 이전 HTTP+SSE 전송을 대체합니다. HTTP/HTTPS를 통해 작동하며 더 유연한 서버 구현을 허용합니다.

Streamable HTTP 전송 작동 방식

  1. 서버는 POST 및 GET 메서드를 모두 지원하는 단일 HTTP 엔드포인트(MCP 엔드포인트) 제공
  2. Bob은 HTTP POST로 이 MCP 엔드포인트에 요청 전송
  3. 서버가 요청을 처리하고 응답 반환
  4. 선택적으로 서버는 동일한 연결을 통해 Server-Sent Events(SSE)를 사용하여 Bob에게 여러 메시지 또는 알림을 스트리밍할 수 있음

이를 통해 기본 요청-응답 상호 작용과 고급 스트리밍 및 서버 시작 통신이 모두 가능합니다.

Client                             Server
  |                                  |
  |---- HTTP POST /mcp_endpoint ---->| (클라이언트 요청)
  |                                  | (요청 처리)
  |<--- HTTP Response / SSE Stream --| (서버 응답 / 스트림)
  |                                  |

Streamable HTTP 특성

  • 최신 표준: 새로운 원격 MCP 서버 구현을 위한 선호 방법
  • 원격 액세스: Bob과 다른 머신에서 호스팅 가능
  • 확장성: 여러 클라이언트 연결을 동시에 처리 가능
  • 프로토콜: 표준 HTTP/HTTPS를 통해 작동
  • 유연성: 간단한 요청-응답 및 고급 스트리밍 지원
  • 단일 엔드포인트: 모든 MCP 통신에 단일 URL 경로 사용
  • 인증: 표준 HTTP 인증 메커니즘 사용 가능
  • 하위 호환성: 서버는 이전 HTTP+SSE 클라이언트와의 호환성 유지 가능

Streamable HTTP를 사용하는 경우

Streamable HTTP 전송은 다음에 이상적입니다:

  • 모든 새로운 원격 MCP 서버 개발
  • 강력하고 확장 가능하며 유연한 통신이 필요한 서버
  • 스트리밍 데이터 또는 서버 전송 알림을 포함할 수 있는 통합
  • 공개 서비스 또는 중앙 집중식 도구
  • 레거시 SSE 전송 구현 교체

Streamable HTTP 구현 예제

settings.json의 구성:

{
  "mcpServers": {
    "StreamableHTTPMCPName": {
      "type": "streamable-http",
      "url": "http://localhost:8080/mcp"
    }
  }
}

서버 측 구현은 StreamableHTTPClientTransport에 대한 MCP SDK 문서를 참조하세요.

HTTP+SSE와의 하위 호환성

클라이언트와 서버는 레거시 HTTP+SSE 전송과의 하위 호환성을 유지할 수 있습니다.

이전 클라이언트를 지원하려는 서버는 Streamable HTTP 전송을 위해 정의된 새 MCP 엔드포인트 외에도 이전 전송의 SSE(/events) 및 POST 엔드포인트(/message)를 계속 호스팅해야 합니다.

SSE 전송(레거시)

Server-Sent Events(SSE) 전송은 원격 서버에서 실행되며 HTTP/HTTPS를 통해 통신합니다. 새 원격 서버의 경우 대신 Streamable HTTP 전송을 사용하세요.

SSE 전송 작동 방식

  1. Bob이 HTTP GET 요청을 통해 서버의 SSE 엔드포인트에 연결
  2. 서버가 Bob에게 이벤트를 보낼 수 있는 영구 연결 설정
  3. 클라이언트-서버 통신의 경우 Bob은 별도의 엔드포인트에 HTTP POST 요청 전송
  4. 통신은 두 채널을 통해 발생:
    • 이벤트 스트림(GET): 서버-클라이언트 업데이트
    • 메시지 엔드포인트(POST): 클라이언트-서버 요청
Client                             Server
  |                                  |
  |---- HTTP GET /events ----------->| (SSE 연결 설정)
  |<---- SSE 이벤트 스트림 -----------| (영구 연결)
  |                                  |
  |---- HTTP POST /message --------->| (클라이언트 요청)
  |<---- 응답이 있는 SSE 이벤트 ---| (서버 응답)
  |                                  |

SSE 특성

  • 원격 액세스: Bob과 다른 머신에서 호스팅 가능
  • 확장성: 여러 클라이언트 연결을 동시에 처리 가능
  • 프로토콜: 표준 HTTP를 통해 작동(특수 프로토콜 불필요)
  • 지속성: 서버-클라이언트 메시지를 위한 영구 연결 유지
  • 인증: 표준 HTTP 인증 메커니즘 사용 가능

SSE를 사용하는 경우

SSE 전송은 다음에 적합합니다:

  • 네트워크를 통한 원격 액세스
  • 다중 클라이언트 시나리오
  • 공개 서비스
  • 많은 사용자가 액세스해야 하는 중앙 집중식 도구
  • 웹 서비스와의 통합

SSE 구현 예제

import express from 'express';

const app = express();
const server = new Server({name: 'remote-server', version: '1.0.0'});
// 도구 등록...

// SSE 전송 사용
const transport = new SSEServerTransport(server);
app.use('/mcp', transport.requestHandler());
app.listen(3000, () => {
  console.log('MCP 서버가 포트 3000에서 수신 대기 중');
});

배포 고려 사항

STDIO와 원격 전송(Streamable HTTP 또는 SSE) 중 선택은 MCP 서버를 배포하고 관리하는 방법에 직접적인 영향을 미칩니다.

STDIO: 로컬 배포

STDIO 서버는 Bob과 동일한 머신에서 로컬로 실행됩니다:

  • 설치: 서버 실행 파일을 각 사용자의 컴퓨터에 설치해야 함
  • 배포: 다양한 운영 체제에 대한 설치 패키지 제공 필요
  • 업데이트: 각 인스턴스를 개별적으로 업데이트해야 함
  • 리소스: 로컬 머신의 CPU, 메모리 및 디스크 사용
  • 액세스 제어: 로컬 머신의 파일 시스템 권한에 의존
  • 통합: 로컬 시스템 리소스(파일, 프로세스)와 쉽게 통합
  • 실행: Bob과 함께 시작 및 중지(자식 프로세스 수명 주기)
  • 종속성: 모든 종속성을 사용자의 컴퓨터에 설치해야 함

예제 사용 사례:

STDIO를 사용하는 로컬 파일 검색 도구는:

  • 사용자의 컴퓨터에서 실행
  • 로컬 파일 시스템에 직접 액세스
  • 필요에 따라 Bob에 의해 시작
  • 네트워크 구성 불필요
  • Bob과 함께 또는 패키지 관리자를 통해 설치 필요

원격: 호스팅 배포

원격 서버(Streamable HTTP 또는 SSE)는 원격 서버에 배포되고 네트워크를 통해 호출될 수 있습니다:

  • 설치: 서버에 한 번 설치되고 많은 사용자가 호출
  • 배포: 단일 배포가 여러 클라이언트 제공
  • 업데이트: 중앙 집중식 업데이트가 모든 사용자에게 즉시 영향
  • 리소스: 로컬 머신 리소스가 아닌 서버 리소스 사용
  • 액세스 제어: 인증 및 권한 부여 시스템을 통해 관리
  • 통합: 사용자별 리소스와의 더 복잡한 통합
  • 실행: 독립 서비스로 실행(종종 지속적으로)
  • 종속성: 사용자 머신이 아닌 서버에서 관리

예제 사용 사례:

원격 전송을 사용하는 데이터베이스 쿼리 도구는:

  • 중앙 서버에서 실행
  • 서버 측 자격 증명으로 데이터베이스에 연결
  • 여러 사용자에게 지속적으로 사용 가능
  • 적절한 네트워크 보안 구성 필요
  • 컨테이너 또는 클라우드 기술로 배포

하이브리드 접근 방식

일부 시나리오는 하이브리드 접근 방식의 이점을 누립니다:

  1. 네트워크 액세스가 있는 STDIO: 원격 서비스의 프록시 역할을 하는 로컬 STDIO 서버
  2. 로컬 명령이 있는 원격: 콜백을 통해 클라이언트 머신에서 작업을 트리거할 수 있는 원격 서버
  3. 게이트웨이 패턴: 전문화된 기능을 위해 원격 서버에 연결하는 로컬 작업용 STDIO 서버

전송 비교

고려 사항STDIOStreamable HTTP / SSE
위치로컬 머신만로컬 또는 원격
클라이언트단일 클라이언트여러 클라이언트
성능낮은 지연 시간높은 지연 시간(네트워크 오버헤드)
설정 복잡성더 간단함더 복잡함(HTTP 서버 필요)
보안본질적으로 안전명시적 보안 조치 필요
네트워크 액세스불필요필요
확장성로컬 머신으로 제한네트워크를 통해 배포 가능
배포사용자당 설치중앙 집중식 설치
업데이트분산 업데이트중앙 집중식 업데이트
리소스 사용클라이언트 리소스 사용서버 리소스 사용
종속성클라이언트 측 종속성서버 측 종속성

Bob에서 전송 구성

예제 구성을 포함하여 Bob에서 전송을 구성하는 방법에 대한 자세한 내용은 Bob의 MCP를 참조하세요.

이 주제는 어떤가요?