모델 컨텍스트 프로토콜(MCP)은 Cline과 MCP 서버 간의 통신을 위해 표준 입력/출력(STDIO)과 서버 전송 이벤트(SSE)라는 두 가지 기본 전송 메커니즘을 지원합니다. 각 메커니즘은 고유한 특성, 장점 및 사용 사례를 가지고 있습니다.

STDIO 전송

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

STDIO 전송 작동 방식

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

STDIO 특징

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

STDIO 사용 시기

STDIO 전송은 다음에 이상적입니다.
  • 동일한 컴퓨터에서 실행되는 로컬 통합 및 도구
  • 보안에 민감한 작업
  • 낮은 지연 시간 요구 사항
  • 단일 클라이언트 시나리오(서버당 하나의 Cline 인스턴스)
  • 명령줄 도구 또는 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) 전송은 원격 서버에서 실행되며 HTTP/HTTPS를 통해 통신합니다.

SSE 전송 작동 방식

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

SSE 특징

  • 원격 액세스: Cline 인스턴스와 다른 컴퓨터에서 호스팅할 수 있습니다.
  • 확장성: 여러 클라이언트 연결을 동시에 처리할 수 있습니다.
  • 프로토콜: 표준 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에서 수신 대기 중입니다.")
})

로컬 대 호스팅: 배포 측면

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

STDIO: 로컬 배포 모델

STDIO 서버는 Cline과 동일한 컴퓨터에서 로컬로 실행되며 몇 가지 중요한 의미가 있습니다.
  • 설치: 서버 실행 파일을 각 사용자 컴퓨터에 설치해야 합니다.
  • 배포: 다른 운영 체제용 설치 패키지를 제공해야 합니다.
  • 업데이트: 각 인스턴스를 별도로 업데이트해야 합니다.
  • 리소스: 로컬 컴퓨터의 CPU, 메모리 및 디스크를 사용합니다.
  • 액세스 제어: 로컬 컴퓨터의 파일 시스템 권한에 의존합니다.
  • 통합: 로컬 시스템 리소스(파일, 프로세스)와 쉽게 통합됩니다.
  • 실행: Cline과 함께 시작하고 중지합니다(하위 프로세스 수명 주기).
  • 종속성: 모든 종속성을 사용자 컴퓨터에 설치해야 합니다.

실제 예시

STDIO를 사용하는 로컬 파일 검색 도구는 다음을 수행합니다.
  • 사용자 컴퓨터에서 실행됩니다.
  • 로컬 파일 시스템에 직접 액세스합니다.
  • Cline에서 필요할 때 시작합니다.
  • 네트워크 구성이 필요하지 않습니다.
  • Cline과 함께 또는 패키지 관리자를 통해 설치해야 합니다.

SSE: 호스팅된 배포 모델

SSE 서버는 원격 서버에 배포하고 네트워크를 통해 액세스할 수 있습니다.
  • 설치: 서버에 한 번 설치하면 많은 사용자가 액세스할 수 있습니다.
  • 배포: 단일 배포로 여러 클라이언트에 서비스를 제공합니다.
  • 업데이트: 중앙 집중식 업데이트는 모든 사용자에게 즉시 영향을 미칩니다.
  • 리소스: 로컬 컴퓨터 리소스가 아닌 서버 리소스를 사용합니다.
  • 액세스 제어: 인증 및 권한 부여 시스템을 통해 관리됩니다.
  • 통합: 사용자별 리소스와의 더 복잡한 통합
  • 실행: 독립적인 서비스로 실행됩니다(종종 계속 실행됨).
  • 종속성: 사용자 컴퓨터가 아닌 서버에서 관리됩니다.

실제 예시

SSE를 사용하는 데이터베이스 쿼리 도구는 다음을 수행합니다.
  • 중앙 서버에서 실행됩니다.
  • 서버 측 자격 증명을 사용하여 데이터베이스에 연결합니다.
  • 여러 사용자가 계속 사용할 수 있습니다.
  • 적절한 네트워크 보안 구성이 필요합니다.
  • 컨테이너 또는 클라우드 기술을 사용하여 배포됩니다.

하이브리드 접근 방식

일부 시나리오에서는 하이브리드 접근 방식이 유용합니다.
  1. 네트워크 액세스가 있는 STDIO: 원격 서비스에 대한 프록시 역할을 하는 로컬 STDIO 서버
  2. 로컬 명령이 있는 SSE: 콜백을 통해 클라이언트 컴퓨터에서 작업을 트리거할 수 있는 원격 SSE 서버
  3. 게이트웨이 패턴: 특수 기능을 위해 SSE 서버에 연결하는 로컬 작업용 STDIO 서버

STDIO와 SSE 간 선택

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

Cline에서 전송 구성

Cline에서 STDIO 및 SSE 전송 구성에 대한 자세한 정보(예시 포함)는 MCP 서버 구성을 참조하십시오.