import mcp가 필요 없는 이유최근 로컬 LLM 환경에서 MCP(Model Context Protocol)를 직접 구현하는 사례가 늘고 있다. 특히 LM Studio를 사용하는 경우, 많은 개발자들이 한 가지 질문을 던진다.
“MCP를 사용하려면
import mcp를 해야 하는 것 아닌가?”
결론부터 말하면, LM Studio에서는 import mcp가 전혀 필요하지 않다.
그 이유를 이해하려면 먼저 MCP의 본질을 알아야 한다.
MCP(Model Context Protocol)는 특정 Python 라이브러리가 아니라,
LLM과 외부 시스템이 통신하기 위한 JSON-RPC 기반 통신 규격이다.
즉,
MCP = 통신 규약 (Protocol)
mcp = 특정 환경에서 제공하는 SDK (선택사항)
우리가 반드시 사용해야 하는 것은 “라이브러리”가 아니라,
프로토콜 규격을 따르는 JSON 메시지 구조다.
LM Studio는 외부 MCP 서버를 다음과 같이 실행한다:
LM Studio
↕ (stdin/stdout JSON-RPC)
외부 Python 프로세스
즉, LM Studio는:
이 구조에서는 특정 Python SDK가 필요 없다.
JSON-RPC 메시지만 정확히 주고받으면 된다.
따라서 다음과 같은 코드만으로도 완전한 MCP 서버가 된다:
import sys
import json
while True:
line = sys.stdin.readline()
request = json.loads(line)
response = handle_request(request)
print(json.dumps(response), flush=True)
이것이 바로 MCP의 로우레벨 구현이다.
반면, Anthropic의 Claude Desktop 환경에서는 공식 MCP Python SDK를 제공한다.
이 경우 우리는 보통 다음처럼 작성한다:
from mcp.server import Server
server = Server("time-aware")
@server.tool()
def get_current_time():
...
이 SDK는 다음을 자동 처리한다:
즉, Claude 환경에서는 MCP 추상화 레이어 위에서 개발한다.
| 항목 | LM Studio | Claude Desktop |
|---|---|---|
| MCP 실행 방식 | subprocess + stdin/stdout | 공식 MCP 런타임 |
| SDK 필요 여부 | ❌ 필요 없음 | ✅ SDK 권장 |
| JSON-RPC 처리 | 직접 구현 | SDK가 자동 처리 |
| 제어 수준 | 매우 높음 | 추상화되어 있음 |
| 학습 난이도 | 상대적으로 높음 | 비교적 쉬움 |
로우레벨 구현이란:
initializetools/listtools/call을 수동으로 처리하는 방식이다.
예를 들어:
if method == "tools/list":
return {
"jsonrpc": "2.0",
"id": id_,
"result": {"tools": TOOLS}
}
이처럼 우리가 직접 응답 구조를 작성한다.
이는 단순히 “라이브러리를 쓰지 않는 것”이 아니라,
MCP 프로토콜을 직접 구현하는 것
이라는 점에서 큰 의미가 있다.
그 이유는 단순하다.
LM Studio는:
즉, LM Studio는 다음만 요구한다:
입력: JSON-RPC 요청
출력: JSON-RPC 응답
그 이상도, 그 이하도 아니다.
따라서 import mcp가 없어도
프로토콜을 정확히 구현하면 완전한 MCP 서버가 된다.
LM Studio에서 import mcp가 필요 없는 이유는 명확하다.
MCP는 라이브러리가 아니라 통신 프로토콜이기 때문이다.
Claude 환경에서는 SDK가 MCP를 추상화하지만,
LM Studio에서는 우리가 직접 JSON-RPC를 구현함으로써
MCP 서버 그 자체를 만드는 것이다.
이 차이를 이해하는 순간,
우리는 단순한 “LLM 사용자”가 아니라
LLM과 시스템을 연결하는 프로토콜 설계자가 된다.