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 전송 구현 교체
프로토콜 협상
Bob이 Streamable HTTP 서버에 연결할 때 protocolNegotiation 옵션을 사용하여 프로토콜 버전을 협상하는 방법을 결정합니다. HTTP 서버의 기본값은 "auto"입니다.
| 값 | 설명 |
|---|---|
"auto" | Bob은 initialize 전에 server/discover 프로브를 전송하여 상호 지원되는 가장 높은 프로토콜 버전을 협상합니다. HTTP 서버의 기본값입니다. |
"legacy" | Bob은 프로브를 건너뛰고 initialize 핸드셰이크를 사용하여 직접 연결합니다. 모든 MCP 서버와 호환됩니다. |
{ "pin": "<버전>" } | Bob은 특정 프로토콜 버전을 사용하여 연결합니다(예: { "pin": "2024-11-05" }). |
HTTP 서버가 MCP connection timed out after 10000ms로 타임아웃되면 서버가 server/discover 프로브에 응답하지 않을 수 있습니다. 프로브를 건너뛰려면 "protocolNegotiation": "legacy"를 설정하세요:
{
"mcpServers": {
"my-server": {
"url": "https://your-server-url.com/mcp",
"protocolNegotiation": "legacy"
}
}
}자세한 내용은 "Bob에서 MCP 사용"의 프로토콜 협상을 참조하세요.
Streamable HTTP 구현 예제
settings.json의 구성:
{
"mcpServers": {
"StreamableHTTPMCPName": {
"type": "streamable-http",
"url": "http://localhost:8080/mcp"
}
}
}서버 측 구현은 StreamableHTTPClientTransport에 대한 MCP SDK 문서를 참조하세요.
HTTP+SSE와의 하위 호환성
Bob의 MCP 클라이언트는 HTTP+SSE 전송으로 폴백하지 않습니다. 아래 안내는 아직 Streamable HTTP를 지원하지 않는 이전 클라이언트가 자신의 Streamable HTTP 서버에 계속 접근할 수 있도록 하려는 _서버 작성자_를 위한 것입니다.
이전 클라이언트를 지원해야 하는 서버는 Streamable HTTP 전송을 위해 정의된 새 MCP 엔드포인트와 함께 이전 전송의 SSE(/events) 및 POST(/message) 엔드포인트를 계속 호스팅해야 합니다.
SSE 전송(제거됨)
Bob의 MCP 클라이언트는 더 이상 독립형 HTTP+SSE 전송(MCP 사양 2024-11-05)을 지원하지 않습니다. HTTP+SSE 전송만 사용하는 서버는 Bob에 연결할 수 없습니다.
Streamable HTTP 연결 내의 응답 채널로서의 SSE는 계속 지원됩니다. Bob은 Streamable HTTP 서버로부터 SSE 스트림을 수신할 수 있습니다. 별도의 /events 및 /message 엔드포인트를 갖는 독립형 HTTP+SSE 전송만 제거되었습니다.
SSE 전송에서 마이그레이션
HTTP+SSE 전송을 사용하는 기존 서버가 있는 경우 Streamable HTTP 전송 또는 STDIO 전송으로 마이그레이션하세요:
- Streamable HTTP: HTTP POST 요청을 수락하는 단일 MCP 엔드포인트를 노출합니다. 원격 서버에 권장되는 경로입니다. Streamable HTTP 전송을 참조하세요.
- STDIO: 서버가 Bob과 동일한 머신에서 로컬로 실행되는 경우 STDIO 서버로 변환하세요. STDIO 전송을 참조하세요.
배포 고려 사항
STDIO와 Streamable HTTP 전송 간의 선택은 MCP 서버를 배포하고 관리하는 방법에 직접적인 영향을 미칩니다.
STDIO: 로컬 배포
STDIO 서버는 Bob과 동일한 머신에서 로컬로 실행됩니다:
- 설치: 서버 실행 파일을 각 사용자의 컴퓨터에 설치해야 함
- 배포: 다양한 운영 체제에 대한 설치 패키지 제공 필요
- 업데이트: 각 인스턴스를 개별적으로 업데이트해야 함
- 리소스: 로컬 머신의 CPU, 메모리 및 디스크 사용
- 액세스 제어: 로컬 머신의 파일 시스템 권한에 의존
- 통합: 로컬 시스템 리소스(파일, 프로세스)와 쉽게 통합
- 실행: Bob과 함께 시작 및 중지(자식 프로세스 수명 주기)
- 종속성: 모든 종속성을 사용자의 컴퓨터에 설치해야 함
예제 사용 사례:
STDIO를 사용하는 로컬 파일 검색 도구는:
- 사용자의 컴퓨터에서 실행
- 로컬 파일 시스템에 직접 액세스
- 필요에 따라 Bob에 의해 시작
- 네트워크 구성 불필요
- Bob과 함께 또는 패키지 관리자를 통해 설치 필요
원격: 호스팅 배포
원격 서버(Streamable HTTP)는 원격 서버에 배포되고 네트워크를 통해 호출될 수 있습니다:
- 설치: 서버에 한 번 설치되고 많은 사용자가 호출
- 배포: 단일 배포가 여러 클라이언트 제공
- 업데이트: 중앙 집중식 업데이트가 모든 사용자에게 즉시 영향
- 리소스: 로컬 머신 리소스가 아닌 서버 리소스 사용
- 액세스 제어: 인증 및 권한 부여 시스템을 통해 관리
- 통합: 사용자별 리소스와의 더 복잡한 통합
- 실행: 독립 서비스로 실행(종종 지속적으로)
- 종속성: 사용자 머신이 아닌 서버에서 관리
예제 사용 사례:
원격 전송을 사용하는 데이터베이스 쿼리 도구는:
- 중앙 서버에서 실행
- 서버 측 자격 증명으로 데이터베이스에 연결
- 여러 사용자에게 지속적으로 사용 가능
- 적절한 네트워크 보안 구성 필요
- 컨테이너 또는 클라우드 기술로 배포
하이브리드 접근 방식
일부 시나리오는 하이브리드 접근 방식의 이점을 누립니다:
- 네트워크 액세스가 있는 STDIO: 원격 서비스의 프록시 역할을 하는 로컬 STDIO 서버
- 로컬 명령이 있는 원격: 콜백을 통해 클라이언트 머신에서 작업을 트리거할 수 있는 원격 서버
- 게이트웨이 패턴: 전문화된 기능을 위해 원격 서버에 연결하는 로컬 작업용 STDIO 서버
전송 비교
| 고려 사항 | STDIO | Streamable HTTP |
|---|---|---|
| 위치 | 로컬 머신만 | 로컬 또는 원격 |
| 클라이언트 | 단일 클라이언트 | 여러 클라이언트 |
| 성능 | 낮은 지연 시간 | 높은 지연 시간(네트워크 오버헤드) |
| 설정 복잡성 | 더 간단함 | 더 복잡함(HTTP 서버 필요) |
| 보안 | 본질적으로 안전 | 명시적 보안 조치 필요 |
| 네트워크 액세스 | 불필요 | 필요 |
| 확장성 | 로컬 머신으로 제한 | 네트워크를 통해 배포 가능 |
| 배포 | 사용자당 설치 | 중앙 집중식 설치 |
| 업데이트 | 분산 업데이트 | 중앙 집중식 업데이트 |
| 리소스 사용 | 클라이언트 리소스 사용 | 서버 리소스 사용 |
| 종속성 | 클라이언트 측 종속성 | 서버 측 종속성 |
Bob에서 전송 구성
예제 구성을 포함하여 Bob에서 전송을 구성하는 방법에 대한 자세한 내용은 Bob의 MCP를 참조하세요.