Skip to main content

MCP 전송 메커니즘

MCP(Model Context Protocol)는 Cline과 MCP 서버 간의 통신을 위한 두 가지 주요 전송 메커니즘인 표준 입출력(STDIO) 및 서버 전송 이벤트(SSE)를 지원합니다. 각 메커니즘은 고유한 특성, 장점 및 사용 사례를 가집니다.

STDIO 전송

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

STDIO 전송 작동 방식

  1. 클라이언트(Caret)는 MCP 서버를 자식 프로세스로 생성합니다.
  2. 통신은 프로세스 스트림을 통해 이루어집니다. 클라이언트는 서버의 STDIN에 쓰고, 서버는 STDOUT에 응답합니다.
  3. 각 메시지는 줄 바꿈 문자로 구분됩니다.
  4. 메시지는 JSON-RPC 2.0으로 서식 지정됩니다.
클라이언트                    서버
| |
|<---- JSON 메시지 ----->| (STDIN을 통해)
| | (요청 처리)
|<---- JSON 메시지 ------| (STDOUT을 통해)
| |

STDIO 특성

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

STDIO 사용 시기

STDIO 전송은 다음을 위해 이상적입니다.

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

STDIO 구현 예시

import { Server } from "@modelcontextprotocol/sdk/server/index.js"
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"

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

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

SSE 전송

SSE(Server-Sent Events) 전송은 원격 서버에서 실행되며 HTTP/HTTPS를 통해 통신합니다.

SSE 전송 작동 방식

  1. 클라이언트(Caret)는 HTTP GET 요청을 통해 서버의 SSE 엔드포인트에 연결합니다.
  2. 이는 서버가 클라이언트에 이벤트를 푸시할 수 있는 영구 연결을 설정합니다.
  3. 클라이언트-서버 통신의 경우 클라이언트는 별도의 엔드포인트에 HTTP POST 요청을 합니다.
  4. 통신은 두 채널을 통해 이루어집니다.
    • 이벤트 스트림 (GET): 서버-클라이언트 업데이트
    • 메시지 엔드포인트 (POST): 클라이언트-서버 요청
클라이언트                             서버
| |
|---- HTTP GET /events ----------->| (SSE 연결 설정)
|<---- SSE 이벤트 스트림 -----------| (영구 연결)
| |
|---- HTTP POST /message --------->| (클라이언트 요청)
|<---- 응답이 포함된 SSE 이벤트 ----| (서버 응답)
| |

SSE 특성

  • 원격 액세스: Caret 인스턴스와 다른 머신에서 호스팅될 수 있습니다.
  • 확장성: 여러 클라이언트 연결을 동시에 처리할 수 있습니다.
  • 프로토콜: 표준 HTTP를 통해 작동합니다(특별한 프로토콜 필요 없음).
  • 영구성: 서버-클라이언트 메시지에 대한 영구 연결을 유지합니다.
  • 인증: 표준 HTTP 인증 메커니즘을 사용할 수 있습니다.

SSE 사용 시기

SSE 전송은 다음을 위해 더 좋습니다.

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

SSE 구현 예시

import { Server } from "@modelcontextprotocol/sdk/server/index.js"
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"
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에서 수신 중입니다.")
})

로컬 vs 호스팅: 배포 측면

STDIO 및 SSE 전송 간의 선택은 MCP 서버를 배포하고 관리하는 방식에 직접적인 영향을 미칩니다.

STDIO: 로컬 배포 모델

STDIO 서버는 Cline과 동일한 머신에서 로컬로 실행되며, 이는 몇 가지 중요한 의미를 가집니다.

  • 설치: 서버 실행 파일은 각 사용자 머신에 설치되어야 합니다.
  • 배포: 다른 운영 체제에 대한 설치 패키지를 제공해야 합니다.
  • 업데이트: 각 인스턴스는 별도로 업데이트되어야 합니다.
  • 리소스: 로컬 머신의 CPU, 메모리 및 디스크를 사용합니다.
  • 액세스 제어: 로컬 머신의 파일 시스템 권한에 의존합니다.
  • 통합: 로컬 시스템 리소스(파일, 프로세스)와의 쉬운 통합
  • 실행: Cline과 함께 시작 및 중지됩니다(자식 프로세스 수명 주기).
  • 종속성: 모든 종속성은 사용자 머신에 설치되어야 합니다.

실제 예시

STDIO를 사용하는 로컬 파일 검색 도구는 다음을 수행합니다.

  • 사용자 머신에서 실행
  • 로컬 파일 시스템에 직접 액세스
  • Cline이 필요할 때 시작
  • 네트워크 구성 필요 없음
  • Cline과 함께 또는 패키지 관리자를 통해 설치해야 함

SSE: 호스팅 배포 모델

SSE 서버는 원격 서버에 배포되고 네트워크를 통해 액세스할 수 있습니다.

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

실제 예시

SSE를 사용하는 데이터베이스 쿼리 도구는 다음을 수행합니다.

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

하이브리드 접근 방식

일부 시나리오는 하이브리드 접근 방식의 이점을 얻습니다.

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

STDIO와 SSE 중에서 선택

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

Caret에서 전송 구성

예시를 포함하여 Cline에서 STDIO 및 SSE 전송을 구성하는 방법에 대한 자세한 내용은 MCP 서버 구성을 참조하십시오.