Techsy
문의하기
시작하기
블로그로 돌아가기
ai-machine-learning

Model Context Protocol: 오늘 바로 첫 MCP 서버 구축하기

작성자 Mert Batur Gürbüz
Mar 17, 2026
15 분 읽기
목차
Model Context Protocol: 오늘 바로 첫 MCP 서버 구축하기

**Model Context Protocol(MCP)**는 AI 모델이 외부 도구, 데이터 소스 및 서비스에 연결할 수 있는 범용적인 방법을 제공하는 오픈 표준입니다. 모든 모델-도구 조합마다 맞춤형 통합 코드를 작성하는 대신, 하나의 MCP 서버만 작성하면 호환되는 모든 모델이 이를 사용할 수 있습니다. Anthropic은 2024년 말 MCP를 만들었고, 현재는 리눅스 재단(Linux Foundation)이 관리하며 OpenAI, Google 및 기타 에이전트 AI 생태계가 이를 채택했습니다. 다음은 MCP를 이해하고, 구축하며, 배포하는 데 필요한 모든 내용입니다.

한눈에 보는 MCP

6,000자의 상세한 내용을 읽기 전에 빠른 요약이 필요하다면 여기 있습니다.

속성세부 정보
전체 이름Model Context Protocol (MCP)
제작자Anthropic (2024년 11월), 현재 리눅스 재단 / AAIF 관리 (2025년 12월)
기능AI 모델을 도구, 데이터 및 서비스에 연결하는 범용 표준
해결 문제USB-C가 AI를 위한 것처럼 M x N 맞춤형 통합 제거
핵심 프리미티브Tools(도구), Resources(리소스), Prompts(프롬프트), Sampling(샘플링)
전송 계층stdio(로컬 개발), Streamable HTTP(프로덕션)
인증OAuth 2.1 (HTTP 전송 시 필수)
SDKPython (FastMCP), TypeScript, Java, Kotlin, C#
생태계 규모10,000개 이상의 활성 서버 (리눅스 재단 기준, 2025년 12월)
주요 채택 기업Claude, ChatGPT, Gemini, Cursor, VS Code Copilot, Windsurf
스펙 상태오픈 표준, 활발히 진화 중 (2026 로드맵 진행 중)
최적 용도실제 세계의 도구 및 데이터와 상호작용해야 하는 AI 에이전트

이제 각 항목을 자세히 살펴보고, MCP가 실제로 무엇이며 왜 필요하게 되었는지부터 시작해 보겠습니다.

Model Context Protocol이란 무엇인가?

Model Context Protocol은 AI 모델이 외부 도구와 데이터를 발견하고 상호작용하는 방식을 표준화하는 오픈 JSON-RPC 기반 프로토콜입니다. 이를 AI 통합을 위한 HTTP, 즉 모든 모델과 도구가 구사할 수 있는 공통 언어라고 생각하면 됩니다.

USB-C 비유를 들어본 적이 있을 것이며, 이는 일정 부분 유용합니다. USB-C 이전에는 모든 기기가 자체 케이블을 필요로 했습니다. MCP도 AI에 대해 동일한 역할을 하지만, 이 비유는 MCP의 가치를 과소평가합니다. USB-C는 데이터와 전력만 전달하지만, MCP는 도구 정의, 데이터 액세스 패턴, 재사용 가능한 프롬프트 템플릿을 전달하며 심지어 서버가 모델로부터 완성을 요청할 수도 있게 합니다. 이는 단순한 케이블 비유가 시사하는 것보다 훨씬 풍부한 프로토콜입니다.

MCP가 해결하는 M x N 문제

MCP 없이는 M개의 모델을 N개의 도구에 연결하려면 M x N개의 맞춤형 통합이 필요합니다. 예를 들어 5개의 LLM(Claude, GPT-4, Gemini, Llama, Mistral)을 지원하고 이들이 10개의 도구(GitHub, Postgres, Slack, Jira 등)에 접근해야 한다고 가정해 봅시다. 이는 각각 고유한 인증, 오류 처리 및 데이터 형식을 갖춘 50개의 맞춤형 통합 계층을 의미합니다.

MCP를 사용하면 각 모델은 MCP 클라이언트 프로토콜을 한 번 구현하고, 각 도구는 MCP 서버를 한 번 구현하면 됩니다. 이제 50개가 아닌 5 + 10 = 15개의 구현만으로 충분합니다. 새로운 모델을 추가하나요? 즉시 모든 10개 도구와 작동합니다. 새로운 도구를 추가하나요? 모든 5개 모델이 사용할 수 있습니다.

MCP의 간략한 역사

Anthropic은 2024년 11월 Python 및 TypeScript용 SDK와 Claude Desktop용 커넥터와 함께 MCP를 오픈소스로 공개했습니다. 채택 속도는 빨랐습니다. OpenAI는 2025년 3월 ChatGPT에 MCP 지원을 추가했고, Google은 2025년 4월 Gemini에 이어갔습니다. 2025년 12월까지 Anthropic은 Block 및 OpenAI와 공동 설립한 리눅스 재단의 새로운 Agentic AI Foundation(AAIF)에 MCP를 기부하여, 업계 전반의 거버넌스를 갖춘 벤더 중립적 표준으로 만들었습니다.

MCP가 아닌 것:

  • 모델이나 AI 프레임워크가 아닙니다 (HTTP와 같은 프로토콜입니다)
  • LangChain이나 LlamaIndex를 대체하지 않습니다 (those are orchestration layers; MCP sits below them)
  • Anthropic이나 Claude에 한정되지 않습니다 (설계상 모델에 구애받지 않습니다)
  • 함수 호출(Function Calling)과 동일하지 않습니다 (비교 섹션에서 자세히 설명)

MCP는 어떻게 작동하는가? 아키텍처 심층 분석

MCP에는 세 가지 역할이 있으며, 이를 혼동하는 것이 초보자가 가장 많이犯하는 실수입니다. 차이를 명확히 해봅시다.

<!-- IMAGE: MCP architecture diagram showing host, client, server roles with real examples like Claude Desktop, GitHub MCP Server, Postgres MCP Server -->

Host, Client, Server, 차이점은 무엇인가?

구성 요소역할예시기능
Host사용자가 상호작용하는 애플리케이션Claude Desktop, Cursor, VS CodeUI 제공, 클라이언트 인스턴스 관리
Client호스트 내부의 프로토콜 핸들러호스트 앱에 내장됨하나의 MCP 서버와 1:1 연결 유지
ServerMCP를 통해 도구와 데이터 노출GitHub 서버, Postgres 서버, Slack 서버외부 API/데이터를 MCP 호환 엔드포인트로 감싸기

구체적인 예시를 들어보겠습니다. Claude Desktop에게 열려 있는 GitHub 풀 리퀘스트를 확인해 달라고 요청합니다. Claude Desktop은 호스트입니다. 내장된 MCP 클라이언트가 GitHub MCP 서버에 연결을 엽니다. 서버는 GitHub API를 호출하여 PR을 가져오고 결과를 클라이언트에 반환하며, 클라이언트는 이를 모델에 전달합니다.

하나의 호스트는 각각 다른 서버에 연결된 여러 클라이언트를 실행할 수 있습니다. 이것이 Claude Desktop이 GitHub, Postgres 데이터베이스, Slack이라는 세 개의 별도 MCP 서버에 동시에 접근할 수 있는 방식입니다. 세 개의 별도 클라이언트 연결, 하나의 호스트입니다.

메시지 흐름 (JSON-RPC 2.0)

모든 MCP 통신은 경량 요청/응답 프로토콜인 JSON-RPC 2.0을 사용합니다. 와이어 상에서 tools/list 교환이 어떻게 이루어지는지 살펴보겠습니다.

json
// Client request: "What tools do you have?"
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}

// Server response: one tool available
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "get_weather",
        "description": "Get current weather for a city",
        "inputSchema": {
          "type": "object",
          "properties": {
            "city": { "type": "string" }
          },
          "required": ["city"]
        }
      }
    ]
  }
}

모델은 이러한 도구 정의를 읽고 사용자의 요청에 따라何时 호출할지 결정하며, 클라이언트는 적절한 인수와 함께 tools/call 요청을 서버로 다시 보냅니다.

연결 라이프사이클

모든 MCP 세션은 동일한 라이프사이클을 따릅니다.

  1. Initialize, 클라이언트가 기능을 보내고 서버가 자체 기능으로 응답
  2. Capability negotiation, 양측이 지원되는 기능(도구, 리소스, 프롬프트, 샘플링)에 동의
  3. Ready, 연결이 활성화됨; 요청이 양방향으로 흐름
  4. Requests/responses, tools/call, resources/read 등
  5. Shutdown, 깔끔한 연결 종료

이 핸드셰이크는 하위 호환성을 보장합니다. 서버가 새로운 프리미티브를 추가하면, 이전 클라이언트는 충돌하지 않고 이를 우아하게 무시합니다.

MCP 프리미티브: Tools, Resources, Prompts, Sampling

MCP는 네 가지 프리미티브를 정의하며, 좋은 MCP 서버를 설계하는 핵심은 각 프리미티브를 누가 제어하는지 이해하는 것입니다.

프리미티브제어 주체방향예시사용 사례
Tools모델이 호출 시기 결정Client -> Servercreate_github_issueAI가 자율적으로 수행하는 작업
Resources애플리케이션/사용자가 선택Client -> Serverfile://project/README.md컨텍스트에 첨부된 데이터
Prompts사용자가 트리거Client -> Servercode_review 템플릿재사용 가능한 상호작용 패턴
Sampling서버가 완성 요청Server -> Client서버가 모델에 요약 요청서버가 LLM을 사용하는 에이전트 루프

Tools (모델 제어)

도구는 모델이 호출할 수 있는 함수입니다. 서버는 이름, 설명 및 JSON Schema 입력 정의로 이를 선언합니다. 모델은 이러한 정의를 읽고, 사용자의 요청이 필요할 때 도구를 호출하기로 결정합니다.

json
// Client sends tools/call request
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_weather",
    "arguments": { "city": "Berlin" }
  }
}

OpenAI 함수 호출을 사용해 본 적이 있다면 도구가 익숙하게 느껴질 것입니다. 하지만 이는 모든 MCP 호환 모델에서 표준화되어 있습니다.

Resources (애플리케이션 제어)

리소스는 읽기 전용 데이터 엔드포인트입니다. 도구와 달리 모델은 스스로 리소스를 가져오기로 결정하지 않으며, 호스트 애플리케이션이나 사용자가 명시적으로 리소스를 대화 컨텍스트에 첨부합니다. 이를 GET 엔드포인트처럼 생각하십시오. postgres://mydb/users/schema, file://docs/api-reference.md.

리소스는 resources/subscribe를 통해 구독을 지원하므로, 데이터가 변경될 때 클라이언트에 알림을 보낼 수 있습니다.

Prompts (사용자 제어)

프롬프트는 MCP 서버가 노출하는 재사용 가능한 템플릿입니다. code_review 프롬프트는 파일 경로를 받아 구조화된 검토 요청을 생성할 수 있습니다. 사용자(또는 호스트 UI)가 프롬프트를 명시적으로 트리거하며, 모델에 의해 자동 호출되지 않습니다.

Sampling (서버 주도), 고급

대부분의 가이드가 건너뛰는 프리미티브입니다. Sampling은 서버가 클라이언트에게 LLM을 사용하여 완성을 생성하도록 요청할 수 있게 합니다. 이는 일반적인 흐름을 반전시킵니다. 모델이 도구를 호출하는 대신, 도구가 모델을 호출하는 것입니다.

왜일까요? 에이전트 루프 때문입니다. 지원 티켓을 처리하는 MCP 서버를 상상해 보십시오. 티켓(리소스)을 읽고, sampling/createMessage를 사용하여 모델에 요약을 요청한 다음, 해당 요약을 사용하여 도구를 통해 티켓을 라우팅합니다. 서버는 모델의 지능을 사용하여 다단계 워크플로우를 조정합니다.

샘플링은 호스트 애플리케이션에 의해 게이트되며, 사용자는 이를 승인해야 하며 호스트는 서버가 요청할 수 있는 내용을 제어합니다. 이는 무한 루프를 방지하고 인간의 감독을 유지합니다.

첫 MCP 서버 구축하기: Python과 TypeScript 병렬 비교

이론은 충분합니다. get_weather 도구를 노출하는 작동하는 MCP 서버를 구축해 봅시다. 개발자 경험을 비교하고 프로젝트에 맞는 스택을 선택할 수 있도록 Python과 TypeScript 모두를 보여드리겠습니다.

FastMCP를 사용한 Python

FastMCP는 공식 고수준 Python SDK입니다. 모든 프로토콜 배관 작업을 처리하므로 도구 로직에 집중할 수 있습니다.

bash
# Install FastMCP
pip install fastmcp
python
# weather_server.py
from fastmcp import FastMCP

mcp = FastMCP("Weather Server")

@mcp.tool()
def get_weather(city: str) -> str:
    """Get the current weather for a city."""
    # In production, call a real weather API here
    weather_data = {
        "Berlin": "Cloudy, 12°C",
        "Tokyo": "Sunny, 22°C",
        "New York": "Rainy, 8°C",
    }
    return weather_data.get(city, f"No data for {city}")

if __name__ == "__main__":
    mcp.run()

끝입니다 -- 15줄이면 됩니다. FastMCP는 Python 타입 힌트와 docstring으로부터 도구의 입력 스키마를 추론합니다. JSON Schema 보일러플레이트가 필요 없습니다.

공식 SDK를 사용한 TypeScript

TypeScript SDK (@modelcontextprotocol/sdk)는 조금 더 명시적이지만 스키마 정의에 대한 완전한 제어를 제공합니다.

bash
# Install the SDK and Zod for schema validation
npm install @modelcontextprotocol/sdk zod
typescript
// weather-server.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

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

server.tool(
  "get_weather",
  "Get the current weather for a city",
  { city: z.string() },
  async ({ city }) => {
    const weatherData: Record<string, string> = {
      Berlin: "Cloudy, 12°C",
      Tokyo: "Sunny, 22°C",
      "New York": "Rainy, 8°C",
    };
    return {
      content: [
        { type: "text", text: weatherData[city] ?? `No data for ${city}` },
      ],
    };
  }
);

const transport = new StdioServerTransport();
await server.connect(transport);

TypeScript 버전은 타입 힌트 대신 Zod 스키마를 사용하며 구조화된 콘텐츠 블록을 반환합니다. 더 장황하지만 타입 안전성이 뛰어납니다.

Claude Desktop에 연결하기

두 서버 중 하나를 Claude Desktop에 연결하려면 claude_desktop_config.json에 추가하십시오.

json
{
  "mcpServers": {
    "weather-python": {
      "command": "python",
      "args": ["weather_server.py"],
      "cwd": "/path/to/your/project"
    },
    "weather-typescript": {
      "command": "npx",
      "args": ["tsx", "weather-server.ts"],
      "cwd": "/path/to/your/project"
    }
  }
}

Claude Desktop을 재시작하면 두 날씨 서버가 도구 목록에 나타납니다. "베를린의 날씨는 어때?"라고 물어보면 모델이 자동으로 get_weather 도구를 호출합니다.

MCP Inspector로 테스트하기

서버를 호스트에 연결하기 전에 MCP Inspector로 격리 상태에서 테스트하십시오.

bash
npx @modelcontextprotocol/inspector python weather_server.py

Inspector는 검색된 도구를 보고, 수동으로 호출하며, 주고받는 JSON-RPC 메시지를 검사할 수 있는 브라우저 UI를 엽니다. 이는 MCP 생태계에서 최고의 디버깅 도구이므로 초기부터 자주 사용하십시오.

MCP 전송 계층: 개발용 stdio, 프로덕션용 Streamable HTTP

MCP 메시지는 클라이언트와 서버 사이를 이동할 방법이 필요합니다. 이것이 전송 계층이며, 올바른 것을 선택하는 것이 중요합니다.

전송 계층사용 사례장점단점상태
stdio로컬 개발, 개인 도구설정 없음, 단순함, 빠름동일 머신만 가능활성
Streamable HTTP프로덕션, 원격 서버, 다중 사용자네트워크 عبر 작동, SSE 통해 스트리밍 지원, 무상태 친화적HTTP 서버 필요, 인증 필요활성 (2025 스펙)
HTTP+SSE (구)레거시 원격 전송원래의 원격 옵션이었음Streamable HTTP로 대체됨권장 중단

stdio는 MCP 서버를 서브프로세스로 생성하고 stdin/stdout을 통해 통신함으로써 작동합니다. 위의 튜토리얼에서 사용한 방식으로, 포트, TLS, 인증이 필요 없습니다. 개발 및 단일 사용자 로컬 도구에 완벽합니다.

Streamable HTTP는 2025 스펙 업데이트에 추가된 프로덕션 전송 계층입니다. 클라이언트는 서버에 표준 HTTP POST 요청을 보냅니다. 서버는 동기적으로 응답하거나 긴 작업에 대해 SSE 스트림을 열 수 있습니다. 무상태 친화적이며, 로드 밸런서 뒤에서 작동하며 표준 HTTP 인증을 지원합니다.

오래된 튜토리얼에서 "HTTP+SSE"를 두 개의 별도 전송 계층(하나는 송신용, 하나는 수신용)으로 언급하는 것을 본다면, 이는 권장 중단된 접근 방식입니다. Streamable HTTP는 둘 다 단일하고 더 깔끔한 메커니즘으로 통합합니다.

결정은 간단합니다. 로컬에서 개발할 때는 stdio를 사용하고, 다른 사람을 위해 배포할 때는 streamable-http로 전환하십시오.

typescript
// Switching from stdio to Streamable HTTP in TypeScript
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";

const transport = new StreamableHTTPServerTransport({ port: 3001 });
await server.connect(transport);

MCP vs 함수 호출 vs REST API, 언제 무엇을 사용할까?

이는 모든 MCP 논의에서 나오는 질문이므로 직접 비교로 해결해 봅시다.

기능MCP함수 호출 (Function Calling)REST APIs
표준화오픈 프로토콜, 모델 중립제공업체별 (OpenAI, Anthropic 각각 고유)범용
도구 검색내장 (tools/list)없음, 요청마다 스키마 전송없음, 문서 또는 OpenAPI 스펙 필요
데이터 액세스Resources 프리미티브지원 안 됨표준 엔드포인트
프롬프트 템플릿Prompts 프리미티브지원 안 됨해당 없음
인증OAuth 2.1 (스펙 수준)제공업체 API 키다양함 (API 키, OAuth 등)
스트리밍Streamable HTTP عبر SSE제공업체 의존다양함
다중 모델모든 MCP 호환 모델과 작동하나의 제공업체 API에 잠김모델 중립 (글루 코드 필요)
서버 생태계10,000개 이상의 사전 구축 서버해당 없음수백만 개의 API
설정 복잡도MCP 서버 실행API 호출에서 JSON 전송HTTP 클라이언트
최적 용도다중 모델, 다중 도구 에이전트 환경몇 가지 도구를 가진 간단한 단일 모델 앱서비스 간 통신

함수 호출로 충분한 경우

도구가 5개 미만이고 하나의 모델을 사용한다면, 함수 호출이 더 간단합니다. 각 API 호출과 함께 도구 스키마를 인라인으로 정의하고, 모델은 함수 이름과 인수를 반환하며, 애플리케이션 코드에서 이를 실행합니다. 실행할 서버도 없고 배울 프로토콜도 없습니다. 주문 상태를 확인하고 FAQ를 조회하는 챗봇의 경우 함수 호출로 충분합니다.

MCP가 가치 있는 경우

다음과 같은 경우 MCP의 복잡성은 그만한 가치가 있습니다.

  • 여러 LLM을 지원하며 각 제공업체마다 도구 정의를 다시 작성하지 않으려는 경우
  • 도구 검색이 필요한 경우, 모델이 스키마를 하드코딩하는 대신 사용 가능한 것을 쿼리할 수 있음
  • 도구 호출뿐만 아니라 리소스와 프롬프트를 원하는 경우
  • 자율적으로 조정하는 AI 에이전트를 구축하고 표준화된 통합 계층이 필요한 경우
  • 팀이 성장하고 다양한 엔지니어가 다양한 도구를 구축하며, MCP가 독립적인 작업을 가능하게 하는 경우

결론: 표준화된 다중 모델 도구 액세스가 필요하면 MCP가 승리합니다. 간단한 단일 모델 사용 사례에는 함수 호출이 승리합니다. REST API는 LLM과 관련되지 않은 전통적인 서비스 간 통신에 여전히 올바른 선택입니다.

2026년 MCP 생태계: 누가 지원하며 무엇이_available한가

MCP는 18개월도 채 되지 않아 Anthropic의 사이드 프로젝트에서 업계 표준으로 발전했습니다. 현재 상황은 다음과 같습니다.

어떤 LLM이 MCP를 지원하는가?

LLMMCP 지원시작 시기비고
Claude네이티브, 전체 지원2024년 11월MCP 제작; 가장 깊은 통합
ChatGPT공식 지원2025년 3월OpenAI의 MCP 통합 عبر
Gemini공식 지원2025년 4월Google 서비스를 위한 Google Cloud MCP 서버
Llama / 오픈소스어댑터経由2025년LangChain, LlamaIndex 및 custom 어댑터
Copilot (VS Code)에이전트 모드에서 네이티브2025년Microsoft가 VS Code에 MCP 지원 포함

알아두면 좋은 인기 MCP 서버

카테고리서버기능
코드GitHubPR, 이슈, 저장소, 코드 검색
코드GitLab머지 요청, 파이프라인, 프로젝트 관리
데이터베이스PostgreSQL스키마 검사, 쿼리 실행
데이터베이스MySQL쿼리 및 스키마 액세스
SaaSSlack채널 메시지, 검색, 알림
SaaSGoogle Drive파일 액세스, 검색, 문서 읽기
SaaSNotion페이지 읽기, 데이터베이스 쿼리
검색Brave Search웹 검색 결과
DevOpsDocker컨테이너 관리
인프라AWS클라우드 리소스 관리

리눅스 재단의 AAIF 발표에 따르면, 2025년 12월 MCP 기부 당시 10,000개 이상의 활성 서버와 월 9,700만 건의 SDK 다운로드가 있었습니다. 생태계는 더 이상 실험적이지 않으며, 프로덕션 등급입니다.

MCP Apps는 2026년 1월에 도입된 새로운 프리미티브입니다. 서버가 호스트 애플리케이션 내부에서 렌더링되는 상호작용형 UI 컴포넌트를 제공할 수 있게 합니다. 아직 초기 단계이지만, 이는 MCP가 데이터 프로토콜에서 완전한 에이전트-애플리케이션 프레임워크로 진화하고 있음을 시사합니다. 주목할 만합니다.

거버넌스: Anthropic에서 리눅스 재단으로

MCP는 Anthropic, Block 및 OpenAI가 공동 설립한 리눅스 재단 산하 Agentic AI Foundation (AAIF)에 의해 관리됩니다. 이는 기업 채택에 중요합니다. MCP는 한 벤더의 로드맵에 묶여 있지 않습니다. 2026 로드맵 우선순위는 전송 계층 진화, 에이전트 간 통신(새로운 "Tasks" 프리미티브), 거버넌스 성숙도 및 기업 준비 상태입니다.

프로덕션 AI 시스템을 구축하는 팀을 위해, OpenClaw와 같은 자율 AI 에이전트 프레임워크는 이미 MCP 서버와 통합되어 에이전트에 실제 세계의 능력을 부여합니다.

MCP 보안: OAuth 2.1, 위협 및 실전 체크리스트

보안은 MCP 생태계가 가장 많이 보완해야 할 부분입니다. 그리고 숫자는 냉정한 현실을 보여줍니다.

88% 문제: 왜 대부분의 MCP 서버가 안전하지 않은가

Astrix Security는 5,200개 이상의 오픈소스 MCP 서버 구현을 분석했으며, **88%**가某种 형태의 자격 증명을 요구하지만 **53%**는 구성 파일에 하드코딩된 API 키 및 개인 액세스 토큰과 같은 안전하지 않은 장기 정적 비밀에 의존한다는 사실을 발견했습니다. OAuth를 구현한 것은 불과 **8.5%**에 불과합니다.

즉, 야생의 압도적인 다수의 MCP 서버는 현관 문에 집 열쇠를 테이프로 붙여 놓은 것과 같은 인증 방식을 사용하고 있습니다.

MCP 서버를 위한 OAuth 2.1

MCP 사양은 2025년 6월 업데이트 이후 모든 HTTP 기반 서버에 OAuth 2.1을 요구합니다. 흐름은 다음과 같습니다. MCP 클라이언트가 서버와 OAuth 2.1 인증 흐름을 시작하고, 스코프가 지정된 액세스 토큰을 얻으며, 이후 모든 요청에 이를 포함합니다. PKCE(Proof Key for Code Exchange)는 모든 클라이언트에 필수이며 예외는 없습니다.

Streamable HTTP über 실행되는 MCP 서버를 구축하는 경우, OAuth 2.1은 선택 사항이 아닙니다. 스펙에서 mandated됩니다.

위협 모델: 무엇이 잘못될 수 있는가

네 가지 위협은 모든 MCP 배포에서 주목할 가치가 있습니다.

  • 도구를 통한 프롬프트 인젝션, 악의적이거나 손상된 데이터 소스가 모델을 조작하도록 설계된 콘텐츠를 반환합니다. 도구가 웹페이지를 가져오고 해당 페이지에 숨겨진 지침이 포함되어 있으면 모델이 이를 실행할 수 있습니다.
  • 혼란스러운 대리인 공격, 모델이 사용자가 의도한 것보다 더 넓은 권한으로 도구를 호출합니다. MCP 서버가 데이터베이스에 관리자 액세스 권한을 가지고 있으면, 모델이 이론적으로 테이블을 삭제할 수 있습니다.
  • 토큰 집중 위험, GitHub, Slack 및 프로덕션 데이터베이스의 API 키를 보유한 MCP 서버는 단일 고가치 표적입니다. 하나의 서버를 침해하면 연결된 모든 것이 침해됩니다.
  • 안전하지 않은 전송, TLS 없이 HTTP MCP 서버를 실행하면 OAuth 토큰 및 민감한 데이터를 포함한 모든 요청이 평문으로 노출됩니다.

프로덕션 MCP를 위한 보안 체크리스트

  1. HTTP über 노출되는 모든 서버에 OAuth 2.1을 구현하십시오. 구성 파일에 정적 API 키를 사용하지 마십시오.
  2. 최소 권한 스코핑을 적용하십시오. 도구가 데이터만 읽는다면 서버의 자격 증명은 읽기 전용이어야 합니다. 보고 도구에 쓰기 액세스 권한을 부여하지 마십시오.
  3. 자격 증명을 격리하십시오. 각 MCP 서버는 자체 스코프 토큰을 가져야 합니다. 서버 간에 단일 "god token"을 공유하지 마십시오.
  4. 모든 곳에서 TLS를 강제하십시오. HTTPS 없는 Streamable HTTP는 프로덕션에서 자동 불가 사항입니다.
  5. 도구 출력을 검증 및 sanitize하십시오. 도구에서 반환된 데이터를 사용자 입력과 동일하게 취급하고 맹목적으로 신뢰하지 마십시오.
  6. 도구 호출을 속도 제한하십시오. 수천 번 도구를 호출하는 runaway 에이전트 루프는 API 할당량을 소진하거나 의도하지 않은 부작용을 일으킬 수 있습니다.
  7. 모든 도구 호출을 감사 및 로깅하십시오. 요청 ID, 타임스탬프, 호출 모델 및 도구 인수를 포함하십시오. 디버깅 및 보안 인시던트 대응을 위해 필요합니다.

MCP 디버깅: Inspector, 로깅 및 일반적인 오류

오류가 발생할 것입니다. 모든 개발자가 겪는 일입니다. 빠르게 해결하는 방법은 다음과 같습니다.

MCP Inspector는 공식 디버깅 도구이며 최전선 방어 수단입니다. 모든 MCP 서버에 연결하고, 도구/리소스/프롬프트를 검색하며, raw JSON-RPC 트래픽을 보여주는 동안 수동으로 호출할 수 있게 합니다.

bash
# Launch Inspector against your Python server
npx @modelcontextprotocol/inspector python weather_server.py

# Or against a TypeScript server
npx @modelcontextprotocol/inspector npx tsx weather-server.ts

Inspector는 Tools, Resources, Prompts 탭과 알림 창이 있는 브라우저 기반 UI를 엽니다. custom 인수로 모든 도구를 호출하고 와이어를 통해 정확히 어떤 JSON이 이동하는지 볼 수 있습니다. 호스트 애플리케이션에 연결하기 전에 사용하십시오. 서버를 격리 상태에서 디버깅하는 것이 훨씬 쉽습니다.

일반적인 오류 및 수정

  • Claude Desktop에서 "Server not found", 거의 항상 claude_desktop_config.json의 경로 문제입니다. command가 실제 바이너리로 해결되고 cwd가 올바른 디렉토리를 가리키는지 다시 확인하십시오. macOS에서는 절대 경로를 사용하십시오.
  • 도구 스키마 검증 실패, 모델이 도구의 inputSchema와 일치하지 않는 인수를 보내면 서버가 호출을 거부합니다. 스키마 유형이 모델이 기대하는 것과 일치하는지 확인하십시오. Zod (TypeScript) 및 타입 힌트 (Python)는 정의 시점에 대부분을 잡아냅니다.
  • 전송 연결 끊김, stdio의 경우 일반적으로 서버 프로세스가 충돌했음을 의미합니다. stderr 출력을 확인하십시오. Streamable HTTP의 경우 시간 초과 설정을 확인하십시오. long-running 도구는 기본 HTTP 시간 초고를 초과할 수 있습니다.
  • "Permission denied" 또는 401 오류, OAuth 스코프가 너무 좁습니다. 서버가 필요한 권한이 없으므로 토큰을 거부하고 있습니다. 스코프를 넓히되, 도구가 실제로 필요한 만큼만 넓히십시오.

로깅 모범 사례

요청 ID로 로그를 구조화하여 MCP 클라이언트, 서버 및 하위 API 전반에 걸쳐 단일 사용자 요청을 추적할 수 있게 하십시오. 도구 이름, 인수, 응답 시간 및 결과 상태를 포함하여 모든 tools/call 호출을 로깅하십시오. 프로덕션에서는 이러한 로그를 관찰 가능성 플랫폼으로 전송하십시오. 새벽 3시에 문제가 발생했을 때 감사하게 될 것입니다.

Techsy가 MCP로 구축하는 방법

우리는 2025년 초부터 클라이언트 프로젝트에 MCP를 통합해 왔으며, 가장 흔히 보는 패턴은 다음과 같습니다. 팀은 하나의 모델과 몇 가지 도구로 작동하는 AI 기능을 가지고 있지만, 확장할 계획입니다. 더 많은 모델, 더 많은 데이터 소스, 더 많은 에이전트 능력. 이것이 MCP가 빛을 발하기 시작하는 변곡점입니다.

우리의 접근 방식은 세 단계를 따릅니다.

  1. 적합성 평가. 모든 프로젝트가 MCP를 필요로 하는 것은 아닙니다. 단일 모델에서 두 가지 도구를 호출하는 경우, 함수 호출이 더 간단하며 그렇게 말씀드릴 것입니다. MCP는 3개 이상의 데이터 소스를 연결하거나, 여러 모델을 지원하거나, 도구를 검색할 수 있어야 하는 에이전트 워크플로우를 구축할 때 의미가 있습니다.
  2. 서버를 격리 상태에서 구축 및 테스트. 각 데이터 소스(내부 데이터베이스, SaaS API, 독점 서비스)에 대해 custom MCP 서버를 개발하고, 호스트에 연결하기 전에 MCP Inspector로 검증합니다.
  3. Streamable HTTP 및 OAuth 2.1로 배포. 프로덕션의 경우,第一天부터 스코프된 OAuth 토큰과 구조화된 로깅을 갖춘 TLS 뒤의 컨테이너화 된 서비스로 MCP 서버를 실행합니다. 정적 비밀은 없습니다.

AI 기반 도구가 인프라에 연결되어야 합니까? 우리는 팀이 MCP 통합을 아키텍처하고 구현하는 것을 돕습니다. 무료 상담 받기

MCP에 관한 자주 묻는 질문

Model Context Protocol (MCP)이란 무엇인가?

MCP는 원래 Anthropic이 만들고 현재 리눅스 재단이 관리하는 오픈 표준으로, AI 모델이 외부 도구, 데이터 소스 및 서비스에 연결하는 방식을 정의합니다. 하나의 MCP 서버가 호환되는 모든 모델에서 작동하도록 통합 계층을 표준화합니다. AI를 위한 범용 플러그와 같습니다.

MCP는 어떻게 작동하는가?

MCP는 세 부분으로 구성된 아키텍처를 사용합니다. 호스트 애플리케이션(Claude Desktop 또는 Cursor 등), 연결을 관리하는 호스트 내부의 MCP 클라이언트, 그리고 도구와 데이터를 노출하는 MCP 서버. 모든 통신은 stdio(로컬) 또는 Streamable HTTP(원격)를 통해 JSON-RPC 2.0 메시지를 사용합니다.

MCP는 무엇에 사용되는가?

일반적인 사용 사례에는 AI 어시스턴트를 데이터베이스(Postgres, MySQL)에 연결하고, 코드 플랫폼(GitHub, GitLab)과 통합하며, SaaS 도구(Slack, Notion, Google Drive)에 액세스하고, 실제 서비스와 상호작용해야 하는 자율 AI 에이전트를 구축하는 것이 포함됩니다.

MCP는 함수 호출과 동일한가?

아닙니다. 함수 호출은 모델별이며(OpenAI의 형식은 Anthropic의 형식과 다름) 요청별입니다. 모든 API 호출과 함께 도구 스키마를 보냅니다. MCP는 모델 간에 작동하는 표준화된 프로토콜로, 도구 검색을 지원하며 함수 실행 beyond 리소스와 프롬프트를 포함합니다.

MCP 서버란 무엇인가?

MCP 서버는 MCP 프로토콜을 통해 AI 모델에 도구, 리소스 및 프롬프트를 노출하는 프로그램입니다. 외부 API 및 데이터 소스를 표준화된 인터페이스로 감쌉니다. 예시로는 GitHub MCP 서버(PR 및 이슈 관리용)와 Postgres MCP 서버(데이터베이스 쿼리용)가 있습니다.

MCP 서버를 어떻게 구축하는가?

FastMCP(pip install fastmcp)를 사용한 Python 또는 공식 SDK(npm install @modelcontextprotocol/sdk)를 사용한 TypeScript를 사용하십시오. 도구를 데코레이팅된 함수(Python) 또는 등록된 핸들러(TypeScript)로 정의한 다음 서버를 실행하십시오. 완전한 작동 코드는 위의 튜토리얼 섹션을 참조하거나, 전체 walkthrough를 위해 스크래치부터 MCP 서버 구축하는 단계별 가이드를 따르십시오.

MCP는 안전한가?

프로토콜 자체는 인증 및 스코프된 권한을 위해 OAuth 2.1을 지원합니다. 그러나 Astrix Security 연구에 따르면 기존 MCP 서버 구현의 88%가 OAuth 대신 정적 비밀에 의존합니다. 프로토콜은 설계상 안전하지만, 대부분의 실제 배포는 아직 따라가지 못하고 있습니다.

어떤 LLM이 MCP를 지원하는가?

Claude는 2024년 11월 생성 이후 네이티브 MCP 지원을 가지고 있습니다. ChatGPT는 2025년 3월에 지원을 추가했고, Gemini는 2025년 4월에 이어갔습니다. 오픈소스 모델은 LangChain 및 LlamaIndex의 어댑터를 통해 MCP를 사용할 수 있습니다.

MCP와 REST API의 차이점은 무엇인가?

REST API는 일반적인 서비스 간 통신을 위해 설계되었습니다. MCP는 specifically AI 모델 상호작용을 위해 설계되었으며, REST가 가지고 있지 않은 도구 검색, 스키마 협상, 리소스 액세스 및 프롬프트 템플릿을 포함합니다. REST API를 MCP로 대체하지 않을 것입니다. 서로 다른 계층을 담당합니다.

현재 MCP를 누가 유지하는가?

2025년 12월에 형성된 리눅스 재단의 Agentic AI Foundation (AAIF)이 MCP를 관리합니다. Anthropic, Block 및 OpenAI가 공동 설립했습니다. 이 벤더 중립적 거버넌스는 기업이 MCP를 채택하는 주요 이유입니다.

MCP의 Streamable HTTP란 무엇인가?

Streamable HTTP는 2025년 MCP 스펙 업데이트에 추가된 프로덕션 전송 메커니즘입니다. 더 깔끔한 디자인으로 이전 HTTP+SSE 전송을 대체합니다. 클라이언트는 HTTP POST 요청을 보내고, 서버는 동기적으로 또는 SSE 스트리밍을 통해 응답할 수 있습니다. 로드 밸런서 뒤에서 작동하며 표준 HTTP 인증을 지원합니다.

얼마나 많은 MCP 서버가 존재하는가?

리눅스 재단은 2025년 12월 MCP가 AAIF에 기부될 당시 10,000개 이상의 활성 서버와 월 9,700만 건의 SDK 다운로드를 인용했습니다. 생태계는 데이터베이스, 코드 도구, SaaS 통합, 검색 엔진 및 클라우드 인프라 제공업체를 포괄합니다.

결론

MCP는 1년 남짓한 시간 동안 Anthropic의 오픈소스 실험에서 AI 모델을 도구에 연결하는 업계 표준 프로토콜로 발전했습니다. 중요한 내용은 다음과 같습니다.

  • MCP는 M x N 문제를 해결합니다, 하나의 서버는 모든 호환 모델과 작동하며, 하나의 클라이언트는 모든 서버와 작동합니다
  • Python (FastMCP) 또는 TypeScript로 50줄 미만의 코드로 작동하는 MCP 서버를 구축할 수 있습니다
  • 개발에는 stdio를, 프로덕션에는 Streamable HTTP를 사용하십시오, 전송 계층 선택은 직관적입니다
  • 서버를 OAuth 2.1로 보호하십시오 -- 현재 구현의 88%가 그렇지 않으며, 이는 실제 위험입니다
  • 생태계는 프로덕션 준비 완료입니다 -- 10,000개 이상의 서버, 모든 주요 LLM, 리눅스 재단 산하의 벤더 중립적 거버넌스

앞으로 2026 로드맵은 새로운 Tasks 프리미티브를 통한 에이전트 간 통신, 강화된 기업 보안 및 상호작용형 서버 주도 UI를 위한 MCP Apps에 초점을 맞출 것입니다. MCP는 더 이상 도구 액세스를 위한 프로토콜이 아닙니다. 에이전트 AI를 위한 인프라 계층이 되고 있습니다.

위의 튜토리얼 코드로 시작하여 MCP Inspector에서 테스트하고 Claude Desktop에 연결하십시오. 1시간 이내에 작동하는 MCP 통합을 갖게 될 것입니다.

출처

  • MCP Specification (2025-11-25)
  • MCP Authorization Specification
  • MCP Transports Specification
  • MCP Inspector Documentation
  • Introducing the Model Context Protocol, Anthropic
  • Donating MCP to the Linux Foundation, Anthropic
  • Linux Foundation AAIF Announcement
  • Google Cloud MCP Support
  • FastMCP Python SDK
  • MCP TypeScript SDK
  • Astrix Security: State of MCP Server Security 2025
  • MCP 2026 Roadmap

태그

model context protocolmcpmcp serverai agentsmcp tutorialmcp architecturefastmcpai development

이 기사 공유하기

관련 글

더 많은 글 보기 ai-machine-learning

ai-machine-learning
Jul 24, 2026

Claude Opus 5 출시: Fable 5에 근접한 지능, 가격은 절반

Anthropic이 2026년 7월 24일 Claude Opus 5를 출시했습니다. Frontier-Bench에서 Opus 4.8을 두 배 이상 앞서면서도 Opus 가격을 유지하지만, 일부 테스트에서는 Fable 5와 Mythos 5에 뒤처집니다. 벤치마크 표, 가격, 전환/대기/유지 판단을 정리했습니다.

10 min read 분 읽기
읽어보기
ai-machine-learning
Jul 20, 2026

2026년 최고의 AI 웹 스크래핑 API 8선 (자체 에이전트 스택으로 직접 테스트)

자체 에이전트 스택으로 실제 2026년 요금을 확인하며 AI 웹 스크래핑 API 8종을 테스트했습니다. Firecrawl, Bright Data, ScrapingBee 외 5종을 LLM 최적화 출력, 안티봇, MCP 지원 기준으로 순위를 매겼습니다.

9 min read 분 읽기
읽어보기
ai-machine-learning
Jul 20, 2026

코딩을 위한 프롬프트 엔지니어링: Claude Code와 Cursor에서 매일 사용하는 7가지 패턴 (2026)

대부분의 'AI 코딩 프롬프트' 글은 복사해서 쓸 수 있는 템플릿 50개를 제시합니다. 이 글은 우리가 16개 에이전트 Claude Code 파이프라인을 운영하는 데 매일 사용하는 7가지 패턴을 가르쳐주며, 각 패턴별 실제 Before/After 예시와 2026년 기준 Claude Code, Cursor, Copilot에서 각 패턴이 어떻게 적용되는지 설명합니다.

11 min read 분 읽기
읽어보기
모든 글 보기
프로젝트 시작하기

새로운 것을 만들 준비가 되었다면 특별함은?

여러분의 비전을 현실로 만들어 보세요. 차이를 만드는 소프트웨어, 우리 팀이 함께 만들겠습니다.

30분 스코핑 미팅 예약프로젝트 보기

라이브러리에서 인기 있는 도구

Claude 스킬

전체 보기
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

AI 자동화

전체 보기
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

라이브러리에서 인기 있는 도구

Claude 스킬

전체 보기
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

AI 자동화

전체 보기
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

서비스

  • 엔터프라이즈 솔루션
  • 모바일 앱
  • 웹 애플리케이션

솔루션

  • CRM 시스템
  • AI 통합
  • ERP 솔루션
  • 음성 에이전트
  • 프로세스 자동화
  • 사이버 보안

라이브러리

  • 블로그
  • 포트폴리오

커뮤니티

  • AI 자동화
  • Claude 스킬

도구

  • 모바일 앱 비용 계산기
  • OpenAI / LLM API 비용 계산기
  • MVP 비용 계산기
  • 음성 AI 에이전트 비용 계산기

회사 소개

  • 소개
  • 파트너
  • 문의하기

법적 고지사항

  • 개인정보 처리방침
  • 서비스 약관
  • 쿠키 정책

서비스

  • 엔터프라이즈 솔루션
  • 모바일 앱
  • 웹 애플리케이션

솔루션

  • CRM 시스템
  • AI 통합
  • ERP 솔루션
  • 음성 에이전트
  • 프로세스 자동화
  • 사이버 보안

라이브러리

  • 블로그
  • 포트폴리오

커뮤니티

  • AI 자동화
  • Claude 스킬

도구

  • 모바일 앱 비용 계산기
  • OpenAI / LLM API 비용 계산기
  • MVP 비용 계산기
  • 음성 AI 에이전트 비용 계산기

회사 소개

  • 소개
  • 파트너
  • 문의하기
법적 고지사항개인정보 처리방침서비스 약관쿠키 정책
TECHSY
© 2026 Techsy. 무단전재 및 재배포 금지.