책쓰자. Part1 - 5 5.3 부분

Category: Private
Donghyuk Kim

5.3 MCP SDK 설치 및 환경 구성

MCP SDK(Model Context Protocol Software Development Kit)는 생성형 AI 기반 에이전트 시스템에서 도구 호출과 실행 흐름을 자동화하는 핵심 구성 요소다. 이 SDK를 활용하면, LLM이 단순한 응답 생성자 역할을 넘어 복잡한 외부 시스템 호출과 워크플로우 실행을 담당하는 '실행 주체'로 확장될 수 있다. 하지만 이러한 기능을 안정적이고 효율적으로 구현하려면, 언어별 개발 환경 설정, 의존성 관리, 도구 등록, 트랜스포트 구성 등 MCP SDK의 실행 기반을 철저하게 이해하고 준비해야 한다.

본 절에서는 MCP SDK를 실무에서 제대로 활용하기 위한 기반 환경을 다룬다. 특히 Python과 TypeScript(Node.js) 환경은 가장 널리 쓰이며, 각 언어에 맞는 설치 요건과 디버깅 전략, 프로젝트 구조에 대한 실전적인 가이드를 제공한다. Python은 mcp-use, fastapi_mcp와 같은 실습용 CLI 및 서버 프레임워크가 잘 갖춰져 있어 API 중심의 서버형 에이전트를 구축하기에 적합하고, TypeScript는 Electron, Vite 등 프론트엔드와 자연스럽게 연결되며, 경량형 MCP 클라이언트 및 도구 서버 구현에 용이하다.

MCP는 언어 불가지론적(model-agnostic) 아키텍처를 갖고 있지만, SDK와 런타임의 성격상 각 언어의 런타임 특징—예를 들어 Python의 asyncio, TypeScript의 ESM 및 fetch 지원—에 따라 도입 전 고려해야 할 요소들이 달라진다. 이 절에서는 MCP SDK의 설치 및 환경 설정을 Python 기반 개발 환경, TypeScript 기반 개발 환경, 트랜스포트 구성 전략, 권장 프로젝트 구조, 자동 도구 등록 메커니즘, 디버깅/테스트 전략 등 세부 항목으로 나눠 체계적으로 설명한다.

이를 통해 독자는 다음과 같은 내용을 익힐 수 있다:

  • MCP SDK를 작동시키기 위한 언어별 실행 환경 및 필수 요건
  • Python과 TypeScript 환경에서의 SDK 설치 및 초기화 절차
  • 자동 도구 등록, JSON-RPC 호출 흐름, 입력 스키마 구성 방식
  • 커스텀 트랜스포트 구현 및 확장 전략
  • 실전 프로젝트에서 유지보수성과 확장성을 확보하는 디렉토리 구조 설계

또한 MCP SDK는 빠르게 진화하고 있기 때문에, 본 절에 포함된 모든 설치 및 구성 가이드는 2025년 4월 기준 최신 버전에 맞춰 작성되었다. 각 언어의 권장 버전, 트랜스포트 방식별 적용 예, CLI 기반 테스트 방법까지 포함하여, 실무 환경에서 바로 사용할 수 있도록 내용을 구성하였다.

1. Python 기반 개발 환경 설정

Python 기반 개발 환경을 구성하려면 MCP SDK가 요구하는 Python 버전을 준비하고, 가상환경 및 의존성 설치, SDK 설치를 포함한 일련의 단계를 거쳐야 한다. 아래는 각 단계에 대한 설명이다.

Python은 가장 널리 사용되는 MCP SDK 언어 중 하나로, 특히 fastapi_mcp, mcp-use, mcp-dev 등의 도구가 이 언어로 작성되어 있다. Python을 기반으로 개발하려는 경우, 다음 단계들을 순차적으로 진행해야 한다.

Python 버전 확인 및 설치

MCP SDK는 Python 3.9 이상을 요구하며, 권장 버전은 Python 3.10 또는 3.11이다. 최신 버전을 사용할 경우, async 기능과 typing 개선, 성능 최적화 등에서 이점을 누릴 수 있다.

  • 버전 확인:

    python --version
    

    또는

    python3 --version
    
  • 최신 버전 설치 (macOS):

    brew install python@3.11
    brew link python@3.11 --force
    
  • Ubuntu:

    sudo add-apt-repository ppa:deadsnakes/ppa
    sudo apt update
    sudo apt install python3.11 python3.11-venv python3.11-dev
    

가상 환경 설정 및 활성화

python3.11 -m venv .venv
source .venv/bin/activate  # Windows는 .venv\Scripts\activate

가상 환경은 의존성 충돌 방지 및 프로젝트별 관리에 매우 유용하다.

의존성 도구 설치

MCP Python SDK를 설치하기 전, Python 패키지 의존성을 안전하고 빠르게 관리하기 위한 도구를 설치해야 한다. MCP 개발 환경에서는 일반적으로 pip 또는 uv를 사용하며, 특히 uv의 사용이 권장된다.

uv는 Rust로 구현된 고성능 패키지 관리자이며, pip보다 의존성 해석 속도가 빠르고, 설치 과정 중의 병렬 처리 최적화, 디스크 캐싱 전략, 잠금 파일 기반 재현 가능한 환경 구축 등 다양한 장점을 제공한다. 또한 uvvirtualenv 없이도 자체 격리된 환경 실행이 가능해, devcontainer나 CI 환경에서도 효과적이다.

  • 최신 pip:

    pip install --upgrade pip
    
  • uv 설치 (권장):

    pip install uv
    

    또는 (Linux/macOS):

    curl -Ls https://astral.sh/uv/install.sh | sh
    

MCP SDK 설치

MCP Python SDK는 mcp[cli]로 설치 가능하다.

  • uv 사용:
    uv pip install "mcp[cli]"
    
  • pip 사용:
    pip install "mcp[cli]"
    

mcp[cli] 옵션에는 다음이 포함된다:

  • MCP Core
  • FastMCP 서버 프레임워크
  • CLI 도구 (mcp dev, mcp run 등)

설치 확인 및 테스트

mcp --help

기본 명령 목록이 출력되어야 설치가 정상적으로 완료된 것이다.

FastAPI MCP 서버 테스트

FastAPI MCP 서버는 FastMCPServer 클래스를 통해 간단히 실행할 수 있다. 아래 예시는 "echo"라는 도구를 정의하고 이를 MCP 서버에 등록하여 HTTP 기반으로 외부 호출이 가능하도록 구성하는 코드이다. 이 도구는 입력값으로 이름을 받아, "Hello, 이름!" 형태의 응답을 반환하는 가장 단순한 구조의 MCP 도구다. 이 예제를 통해 도구의 정의, JSON Schema 기반 입력 명세, 서버 구동 방식을 익힐 수 있다.

  • server.py 예시:
    from mcp.server.fastmcp import FastMCPServer
    from mcp.types import Tool
    
    async def echo_tool(name: str) -> str:
        return f"Hello, {name}!"
    
    tools = [Tool(name="echo", description="간단한 인사", input_schema={"type": "object", "properties": {"name": {"type": "string"}}}, func=echo_tool)]
    
    server = FastMCPServer(tools=tools)
    server.run_http()
    

실행:

python server.py

이제 JSON-RPC 포맷으로 echo 도구를 실행할 수 있다. 예를 들어 다음과 같은 형식의 JSON 메시지를 HTTP POST로 전송하면 도구가 실행된다:

{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "echo",
  "params": {
    "name": "Alice"
  }
}

서버는 이에 대한 응답으로 다음과 같은 형식의 메시지를 반환한다:

{
  "jsonrpc": "2.0",
  "id": "1",
  "result": "Hello, Alice!"
}

이처럼 MCP 서버는 JSON-RPC 2.0 프로토콜을 사용하여 도구 호출 요청을 받고, 실행 결과 또는 오류를 표준 포맷으로 반환한다.

uv 사용 팁

  • uv venv로 가상 환경 없이 실행 가능
  • uv pip sync requirements.txt로 빠른 의존성 설치 가능

2. TypeScript(Node.js) 기반 개발 환경 설정

TypeScript SDK는 @modelcontextprotocol/sdk 패키지로 제공되며, MCPClient 및 MCPServer를 TypeScript로 개발할 수 있다.

Node.js 설치 및 nvm 권장

MCP SDK는 Node.js 18 이상을 요구하며, Node.js 20 이상을 권장한다. 그 이유는 다음과 같다:

  • Async Context 및 AbortController 안정성: MCP SDK는 비동기 도구 호출과 스트리밍 처리를 내부적으로 수행한다. Node.js 18 이상에서는 AbortController, fetch, EventTarget 등 브라우저 호환 API가 기본 내장되어 있어 별도 polyfill 없이 안정적인 실행이 가능하다.

  • Native Fetch API 지원: MCP SDK는 일부 트랜스포트 계층에서 fetch를 기본 통신 모듈로 사용한다. Node.js 18 이전에는 node-fetch 등의 외부 의존성에 의존해야 했으나, 이후 버전부터는 기본 탑재되어 성능과 안정성이 높아진다.

  • Edge 환경 호환성: MCP SDK는 Cloudflare Workers, Vercel Edge Functions 등과의 통합도 고려한다. 이러한 플랫폼은 Node 18 이상 또는 Node 20 LTS 환경에 맞춰 설계되어 있어, 최신 버전의 사용이 MCP 프로젝트 이식성 측면에서도 유리하다.

  • ESM 지원 및 호환성: MCP SDK는 ECMAScript Modules(ESM) 구조를 기본으로 제공한다. Node.js 18 이후 버전에서는 ESM 사용 시 발생하던 경고나 호환성 문제가 대부분 해결되었으며, 특히 Node.js 20은 가장 안정된 ESM 런타임 환경을 제공한다.

이러한 이유로 MCP SDK는 최소 Node.js 18 이상을 요구하며, 실무 및 배포 환경에서는 Node.js 20 LTS 사용이 권장된다.

  • 버전 확인:

    node -v
    npm -v
    
  • nvm 설치 (macOS/Linux):

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash
    source ~/.bashrc
    nvm install 20
    nvm use 20
    

TypeScript 프로젝트 초기화 및 샘플 실행

TypeScript 환경에서 MCP SDK를 기반으로 프로젝트를 시작하려면 Node.js를 설치한 후 프로젝트 초기화를 진행해야 한다. 다음은 프로젝트 디렉토리 생성부터 SDK 설치, TypeScript 설정, 샘플 코드 실행까지 전체 초기 흐름이다.

먼저 MCP SDK를 사용할 새 프로젝트 디렉토리를 만들고, npm 초기화를 진행한다. 이후 SDK 패키지를 설치한다:

mkdir mcp-project && cd mcp-project
npm init -y
npm install @modelcontextprotocol/sdk

이후 TypeScript 실행 환경을 구성하기 위해 TypeScript, ts-node, 타입 정의를 설치하고 tsconfig.json을 초기화한다:

npm install -D typescript ts-node @types/node
npx tsc --init

다음은 MCPClient를 단순히 초기화해보는 기본 샘플 코드이다. src/index.ts 파일을 만들고 다음과 같이 작성한다:

// src/index.ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js";

const client = new Client();
console.log("MCP SDK initialized");

이 코드를 실행해 SDK가 정상적으로 작동하는지 확인한다:

npx ts-node src/index.ts

초기화가 완료되면 MCP 도구를 직접 서버로 구동할 수 있다. 최신 MCP SDK에서는 runServer가 아닌 McpServer 클래스를 사용한다. 아래는 echo 도구를 등록하고 HTTP 서버로 실행하는 최신 방식의 예시이다. 이 코드는 TypeScript 환경에서 @modelcontextprotocol/sdk 패키지와 zod 입력 유효성 검증기를 함께 사용한다.

// src/server.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";

const server = new McpServer({
  name: "Echo",
  version: "1.0.0"
});

server.tool(
  "echo",
  { message: z.string() },
  async ({ message }) => ({
    content: [
      { type: "text", text: `Tool echo: ${message}` }
    ]
  })
);

await server.run();

이 MCP 서버는 JSON-RPC 기반의 HTTP API를 통해 외부 요청을 처리하며, 도구 실행 결과를 LLM 또는 클라이언트에게 반환한다.

zod는 타입 안전성과 입력 유효성 검사를 위한 스키마 정의 라이브러리로, TypeScript 환경에서 널리 사용된다. MCP에서는 도구의 입력 스키마를 정의하는 데 사용되며, JSON Schema보다 직관적인 구문으로 런타임 타입 검사를 제공한다. 예를 들어 z.string()은 문자열 타입을 요구하는 입력값을 정의하며, 유효하지 않은 값은 MCP 서버에서 자동으로 거부된다. 이를 통해 도구 실행 전 입력값의 안정성을 확보할 수 있다. 도구 입력 스키마는 zod를 사용해 정형화되며, 이를 통해 유효성 검사 및 문서화 자동화가 가능하다.

이 서버를 실행하면 MCP 클라이언트가 HTTP(SSE) 또는 STDIO를 통해 도구를 호출할 수 있는 준비가 완료된다. 실행 환경에 따라 JSON-RPC 포맷으로 요청을 보내면 위 도구가 실행된다.

3. 통신 구조와 트랜스포트 확장 전략

MCP는 기본적으로 STDIO, HTTP/SSE, WebSocket 등의 트랜스포트를 공식 지원하지만, 개발자가 직접 커스텀 트랜스포트를 정의해 추가할 수도 있다. 이는 MCP 프로토콜이 전송 계층과 분리된 구조이기 때문에 가능한 설계이다.

커스텀 트랜스포트란?

커스텀 트랜스포트는 JSON-RPC 메시지를 송수신하는 새로운 채널을 직접 정의하는 기능을 의미한다. 예를 들어 MQTT, gRPC, Named Pipe, IPC, Bluetooth 등 다양한 통신 방식에 맞게 MCP 통신을 구현할 수 있다.

커스텀 트랜스포트는 다음을 충족해야 한다:

  • JSON-RPC 2.0 메시지를 정확하게 직렬화/역직렬화할 수 있어야 함
  • MCPServer에서 handle_message(message: str) 형식으로 메시지를 전달할 수 있어야 함
  • 요청과 응답을 ID 기반으로 매칭할 수 있어야 함

예시: Python에서 커스텀 WebSocket 트랜스포트 구현

import asyncio
import websockets
from mcp.server.core import MCPServer

server = MCPServer(...)

async def websocket_handler(websocket, path):
    async for message in websocket:
        response = await server.handle_message(message)
        await websocket.send(response)

async def main():
    async with websockets.serve(websocket_handler, "localhost", 8765):
        await asyncio.Future()  # Run forever

asyncio.run(main())

이 예제는 MCP 서버의 handle_message()를 사용해 WebSocket을 통해 수신된 JSON-RPC 메시지를 처리하고, 그 결과를 다시 클라이언트로 전송하는 방식이다.

사용 예시와 확장성

  • 사내 IoT 장비와 Bluetooth 통신으로 MCP 도구 호출
  • 서버 간 gRPC 통신을 통해 MCP 클러스터 구성
  • Kafka 기반 트랜스포트로 비동기 MCP 실행 파이프라인 구성

MCP는 전송 방식에 독립적이며, 메시지 구조만 지키면 자유롭게 확장 가능하다. 커스텀 트랜스포트를 통해 각 조직의 인프라, 보안 요구사항, 실시간성 등에 맞게 유연하게 MCP 시스템을 구성할 수 있다.

MCP는 다음 트랜스포트를 지원하며 환경별 요구 조건이 다르다:

트랜스포트 설명 포트 요구사항
STDIO CLI에서 subprocess 실행 - 로컬 CLI 가능 환경
HTTP/SSE 서버-클라이언트 간 실시간 3000/8080 등 CORS 허용, REST 이해 필요
WebSocket 양방향 실시간 8000 이상 지속 연결 허용 환경

공통적으로 JSON-RPC 2.0 기반 메시지 교환이므로, 전송 계층에 무관하게 메시지 구조는 동일하다.

4. 권장 프로젝트 구조 및 파일 구성

MCP 공식 문서에서 특정 디렉토리 구조를 엄격히 강제하진 않지만, 실제 SDK 내부 구현과 커뮤니티 사례를 살펴보면 다음과 같은 구조가 사실상 '권장 패턴'으로 자리잡아 있다. 특히 MCP SDK는 FastMCP 기반 Python 서버와 TypeScript SDK 모두에서 tools/ 또는 src/tools/ 폴더 내 도구 정의를 자동으로 탐색하고 로딩하는 기능을 내장하고 있다.

이는 다음과 같은 이유로 권장된다:

  • 자동 등록 메커니즘과 연계: MCP 서버는 서버 구동 시 특정 경로 내 도구를 자동 등록하도록 설계되어 있어, 이 구조를 따르면 명시적 등록 없이도 서버가 모든 도구를 인식하고 동작할 수 있다.
  • 모듈화된 유지보수: 도구와 서버 실행 코드를 분리함으로써 유지보수성과 가독성이 향상된다. 도구 파일을 별도 모듈로 두면 각 기능의 독립성이 보장되고, 협업이나 테스트도 용이하다.
  • 문서화/테스트/버전 관리 최적화: 도구 단위로 파일이 분리되어 있으면 자동 문서 생성(OpenAPI 등), 단위 테스트 구성, CI/CD 버전 추적 등 개발 전반의 관리 효율이 높아진다.
  • 플랫폼 간 호환성 강화: 동일한 구조를 유지하면 MCP SDK의 다양한 언어 버전과 도구 간 공유 및 재사용성이 높아진다.

따라서 MCP 프로젝트는 이러한 구조를 기본으로 채택하는 것이 좋으며, 실제 커뮤니티 기반 에이전트, OpenAI Agents SDK 샘플, fastapi_mcp 예제 등에서도 동일한 구성이 채택되고 있다. , Python SDK와 TypeScript SDK 모두 일반적인 관례와 내부 자동 등록 로직에 기반한 구조를 권장한다. 특히 MCP 도구 자동 등록 기능은 tools/ 또는 src/tools/ 디렉토리를 기준으로 도구를 탐색하고 로딩하도록 설계되어 있다. 이러한 구조는 개발자가 도구를 쉽게 관리하고, 서버 실행 시 자동으로 도구를 등록할 수 있게 해준다.

또한, 실행 파일과 도구 정의를 분리함으로써 유지보수성과 협업 효율이 크게 향상되며, 도구 단위 테스트 및 문서화를 개별적으로 수행하는 데에도 유리하다. 따라서 다음과 같은 구조를 사용하는 것이 실무에서 널리 채택되고 있다.

Python 구조 예시
my-agent/
├── tools/
│   └── summarize.py
├── server.py
├── requirements.txt
├── .venv/
TypeScript 구조 예시
mcp-agent/
├── src/
│   ├── index.ts
│   └── server.ts
├── package.json
├── tsconfig.json

권장 사항:

  • 도구는 /tools 또는 /src/tools 디렉토리에 구성

    • Python SDK에서는 fastapi_mcp.FastMCPServer가 실행 시 해당 디렉토리 내 .py 파일을 자동 탐색하여 Tool 객체를 등록할 수 있도록 설계되어 있다.
    • TypeScript SDK에서도 @modelcontextprotocol/sdksrc/tools/ 경로를 기준으로 도구를 불러오는 유틸리티 구조가 포함되어 있어, ESM 기반 프로젝트에서 자연스럽게 구성 가능하다.
  • 서버, 클라이언트 실행 코드는 별도로 관리

    • server.py 또는 server.ts와 같이 서버 실행 로직은 루트에 배치하고, 클라이언트용 인터페이스(LangChain, OpenAI SDK 등)는 별도 디렉토리(client/)에서 관리하면 협업 및 구조 분리가 용이하다.
  • .env 또는 config.ts/json 파일을 통해 환경 분리

    • Python에서는 python-dotenv를 통해 .env를 로드하고, API 키 및 비밀 값을 분리하여 관리한다.
    • TypeScript에서는 dotenvconfig.ts 또는 config.json을 조합해 NODE_ENV 별 설정을 분리할 수 있다. 이는 클라우드 배포 또는 로컬 테스트 시 다양한 환경을 쉽게 전환할 수 있게 한다.

이러한 권장 구조는 MCP SDK의 자동 도구 등록 기능, 테스트 및 문서화, 협업 관리를 극대화하는 데 중점을 둔다. 실무에서는 이 구조를 기반으로 CI/CD와 연동하거나 다중 환경 배포를 설정하는 경우가 많다.

5. 디버깅, 테스트, 리플레이 전략

  • mcp run 명령어를 통해 CLI 기반 도구 실행 가능
  • FastAPI/Express 서버에 Swagger 또는 OpenAPI 추가 가능
  • 실행 로그 기록(mcp-log.json)을 통해 재현 가능

MCP SDK는 실행 시 LLM 호출 내역과 도구 선택 결과를 로그로 저장할 수 있어, 리플레이 기반 디버깅이 매우 용이하다. 이 기능은 복잡한 다단계 호출 흐름을 재현하거나, 모델 선택 오류를 검증할 때 특히 유용하다.

6. MCP 도구 자동 등록 및 탐색

MCP SDK는 도구의 정의를 자동으로 탐색하고 등록할 수 있는 기능을 제공한다. 이 기능은 개발자가 별도로 명시적인 등록 코드를 작성하지 않아도 되도록 하여, 대규모 도구 기반 시스템의 유지보수성과 확장성을 크게 높여준다.

자동 등록 메커니즘

Python(FastMCP)과 TypeScript SDK 모두 특정 디렉토리 구조와 도구 정의 규칙을 따를 경우, 서버 구동 시 자동으로 도구를 등록할 수 있도록 설계되어 있다. 이때 사용하는 주요 메커니즘은 다음과 같다:

  • 디렉토리 기반 탐색: tools/ 폴더나 src/tools/ 폴더 내의 .py 또는 .ts 파일을 재귀적으로 탐색
  • 도구 식별 기준:
    • Python: @tool() 데코레이터가 붙은 함수 또는 Tool 객체 인스턴스
    • TypeScript: tool 객체 export 또는 defineTool() 호출

도구 정의 예시 (Python):

from mcp.types import Tool

async def summarize(text: str) -> str:
    return text[:200]

tool = Tool(
    name="summarize",
    description="텍스트를 요약합니다",
    input_schema={"type": "object", "properties": {"text": {"type": "string"}}, "required": ["text"]},
    func=summarize
)

도구 정의 예시 (TypeScript):

export const summarize = {
  name: "summarize",
  description: "Summarize a given text",
  inputSchema: {
    type: "object",
    properties: {
      text: { type: "string" }
    },
    required: ["text"]
  },
  func: async ({ text }: { text: string }) => text.slice(0, 200)
}

문서화 및 자동 스키마 활용

도구는 inputSchema에 따라 JSON Schema 기반의 정형 입력 형식을 정의하게 되며, 이 구조는 다음과 같은 용도로 자동 활용 가능하다:

  • Swagger UI / OpenAPI 연동: 도구 설명을 기반으로 RESTful 문서 생성
  • LLM 입력 유효성 검사: LLM이 생성한 인자가 schema를 통과하지 않으면 자동 오류 처리
  • 자동 UI 생성: schema를 이용해 폼 입력 인터페이스 자동 구성 가능
  • 모델 문맥 제공용 명세: MCPClient는 tool 명세를 LLM 문맥에 삽입함으로써 자동 선택 기반 의사결정을 가능하게 한다

개발 워크플로우에서의 이점

  • 수십 개 이상의 도구를 일일이 등록하는 수고를 줄일 수 있다
  • 도구 변경이나 추가가 서버 재시작만으로 반영된다
  • 팀 개발 환경에서 도구별 테스트 및 문서화가 독립적으로 진행될 수 있다
  • 동일한 schema 기반으로 다양한 인터페이스를 구성할 수 있다 (CLI, 웹, 모바일 등)

MCP SDK의 자동 등록 기능은 단순한 편의성 이상으로, 확장성과 일관성을 동시에 확보하는 핵심 요소로 작동한다. 특히 도구 명세와 실행 로직이 하나의 모듈로 구성되어 있기 때문에 유지보수가 쉽고, LLM 기반 시스템에 최적화된 구조로 발전할 수 있다.

7. 언어별 MCP SDK 요약

MCP는 다양한 언어를 통해 에이전트 시스템 구축을 지원한다. 각 언어별 SDK는 MCP의 핵심 구성 요소인 MCPClient, MCPServer, Tool 구조를 구현하는 공통 기반을 제공하며, 언어별 환경에 맞는 최적화된 기능을 제공한다. 이 절에서는 MCP SDK의 주요 언어별 지원 현황과 사용 시 특징을 상세히 설명한다.

MCP는 Python과 TypeScript 외에도 다양한 언어 SDK를 제공하고 있다. 각 언어별 특징은 다음과 같다:

언어 특징
Python MCP 개발의 기준 언어로, 가장 완성도가 높다. FastAPI 기반 MCPServer 구현에 최적화되어 있으며, fastapi_mcp, mcp-use, mcp-dev 등 핵심 도구 대부분이 Python으로 작성되어 있다. CLI 툴도 포함되어 있어 빠른 테스트 및 실습에 유리하다. uv를 이용한 설치 속도와 환경 격리 기능도 강력하다.
TypeScript 브라우저 및 Node.js 환경에서 경량형 MCP 클라이언트를 구현하기에 적합하다. Type-safe한 개발 환경과 함께 Promise 기반의 비동기 흐름을 완벽히 지원하며, Electron, Vite 기반 UI와의 통합도 자연스럽다. runServer()Client 클래스 기반의 추상화가 잘 되어 있어 프론트엔드 연계에 적합하다.
Java Spring Boot 및 Spring AI 통합에 특화되어 있다. 기업 내부 시스템, ERP, CRM 등과의 안정적인 연결이 가능하며, ToolRegistry, ToolInvoker 등 도구 관리 유틸리티가 명확하게 구조화되어 있다. 자바 기반 마이크로서비스와의 통합이 중요한 경우에 유용하다.
C# (.NET) Microsoft 기반 애플리케이션, 특히 Windows 데스크탑 앱 및 Azure 환경에서 활용 가능하다. McpClient, McpToolServer 등 명확한 클래스를 통해 WPF, Blazor, ASP.NET Core 등과 쉽게 통합된다. NuGet 패키지로도 제공되어 설치가 간편하다.