MCP 서버 전송
MCP는 Bob과 MCP 서버 간의 통신을 위한 전송 메커니즘을 지원합니다.
개요
MCP는 각각 다른 배포 시나리오에 적합한 세 가지 전송 옵션을 제공합니다:
- STDIO 전송(로컬 서버)
- Streamable HTTP 전송(원격 서버를 위한 최신 표준)
- SSE 전송(레거시 원격 옵션)
각 전송에는 서로 다른 특성, 장점 및 사용 사례가 있습니다.
STDIO 전송
STDIO 전송은 컴퓨터에서 로컬로 실행되며 표준 입출력 스트림을 통해 통신합니다.
STDIO 전송 작동 방식
- Bob이 MCP 서버를 자식 프로세스로 시작
- 통신은 프로세스 스트림을 통해 발생: Bob은 서버의 STDIN에 쓰고 서버는 STDOUT에 응답
- 각 메시지는 개행 문자로 구분
- 메시지는 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 전송 작동 방식
- 서버는 POST 및 GET 메서드를 모두 지원하는 단일 HTTP 엔드포인트(MCP 엔드포인트) 제공
- Bob은 HTTP POST로 이 MCP 엔드포인트에 요청 전송
- 서버가 요청을 처리하고 응답 반환
- 선택적으로 서버는 동일한 연결을 통해 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 전송 작동 방식
- Bob이 HTTP GET 요청을 통해 서버의 SSE 엔드포인트에 연결
- 서버가 Bob에게 이벤트를 보낼 수 있는 영구 연결 설정
- 클라이언트-서버 통신의 경우 Bob은 별도의 엔드포인트에 HTTP POST 요청 전송
- 통신은 두 채널을 통해 발생:
- 이벤트 스트림(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)는 원격 서버에 배포되고 네트워크를 통해 호출될 수 있습니다:
- 설치: 서버에 한 번 설치되고 많은 사용자가 호출
- 배포: 단일 배포가 여러 클라이언트 제공
- 업데이트: 중앙 집중식 업데이트가 모든 사용자에게 즉시 영향
- 리소스: 로컬 머신 리소스가 아닌 서버 리소스 사용
- 액세스 제어: 인증 및 권한 부여 시스템을 통해 관리
- 통합: 사용자별 리소스와의 더 복잡한 통합
- 실행: 독립 서비스로 실행(종종 지속적으로)
- 종속성: 사용자 머신이 아닌 서버에서 관리
예제 사용 사례:
원격 전송을 사용하는 데이터베이스 쿼리 도구는:
- 중앙 서버에서 실행
- 서버 측 자격 증명으로 데이터베이스에 연결
- 여러 사용자에게 지속적으로 사용 가능
- 적절한 네트워크 보안 구성 필요
- 컨테이너 또는 클라우드 기술로 배포
하이브리드 접근 방식
일부 시나리오는 하이브리드 접근 방식의 이점을 누립니다:
- 네트워크 액세스가 있는 STDIO: 원격 서비스의 프록시 역할을 하는 로컬 STDIO 서버
- 로컬 명령이 있는 원격: 콜백을 통해 클라이언트 머신에서 작업을 트리거할 수 있는 원격 서버
- 게이트웨이 패턴: 전문화된 기능을 위해 원격 서버에 연결하는 로컬 작업용 STDIO 서버
전송 비교
| 고려 사항 | STDIO | Streamable HTTP / SSE |
|---|---|---|
| 위치 | 로컬 머신만 | 로컬 또는 원격 |
| 클라이언트 | 단일 클라이언트 | 여러 클라이언트 |
| 성능 | 낮은 지연 시간 | 높은 지연 시간(네트워크 오버헤드) |
| 설정 복잡성 | 더 간단함 | 더 복잡함(HTTP 서버 필요) |
| 보안 | 본질적으로 안전 | 명시적 보안 조치 필요 |
| 네트워크 액세스 | 불필요 | 필요 |
| 확장성 | 로컬 머신으로 제한 | 네트워크를 통해 배포 가능 |
| 배포 | 사용자당 설치 | 중앙 집중식 설치 |
| 업데이트 | 분산 업데이트 | 중앙 집중식 업데이트 |
| 리소스 사용 | 클라이언트 리소스 사용 | 서버 리소스 사용 |
| 종속성 | 클라이언트 측 종속성 | 서버 측 종속성 |
Bob에서 전송 구성
예제 구성을 포함하여 Bob에서 전송을 구성하는 방법에 대한 자세한 내용은 Bob의 MCP를 참조하세요.