MCP Server 처음부터 개발하기:
AI 도구 호출 완전 가이드

FastMCP · 5 Tools · HTTP · Docker · 지식베이스 · 6단계 Runbook

MCP Server 처음부터 개발하기: AI 도구 호출 완전 가이드
Cursor나 Claude Desktop에서 AI가 GitHub, 데이터베이스, 사내 Wiki를 직접 호출하게 하려면 MCP Server를 작성해야 합니다. 본 글은 백엔드·풀스택 개발자를 위해 ① MCP 프로토콜 아키텍처와 Tools·Resources·Prompts 3대 역량, ② FastMCP로 Hello World부터 5가지 도구·리소스·프롬프트 구현, ③ HTTP 전송 계층과 디버깅 실전, ④ Docker 프로덕션과 지식베이스 MCP 프로젝트, ⑤ 생태계 수치·비교표·6단계 Runbook, ⑥ 7×24 호스트 제안을 정리합니다. 프로토콜 개념은 MCP HTTP 표준 가이드와 함께 읽으면 흐름이 명확해집니다.
01

MCP 프로토콜 아키텍처: Host·Client·Server와 Tools·Resources·Prompts

Model Context Protocol(MCP)은 AI 클라이언트와 외부 시스템 간 통신을 표준화하는 개방 프로토콜입니다. JSON-RPC 2.0 위에 양방향 메시지를 교환하며, 아키텍처는 3계층으로 구성됩니다.

Host(호스트)는 Cursor, Claude Desktop, VS Code 등 사용자가 상호작용하는 애플리케이션입니다. MCP Client는 Host 내부에서 각 Server와 1:1 세션을 유지합니다. MCP Server는 Tools, Resources, Prompts를 노출하고 데이터베이스·API·파일 시스템에 연결합니다.

역량RPC 메서드역할예시
Toolstools/list, tools/callAI가 실행할 수 있는 작업, JSON Schema 자기 설명 포함SQL 쿼리, 티켓 생성, Slack 전송
Resourcesresources/list, resources/read읽기 전용 컨텍스트, URI로 식별Wiki 페이지, 로그 파일, 설정 스냅샷
Promptsprompts/list, prompts/get재사용 가능한 프롬프트 템플릿, 인자 주입 지원코드 리뷰, 장애 분석, 릴리스 노트 초안

전송 계층에는 STDIO(표준 입출력, 로컬 자식 프로세스)와 HTTP(Streamable HTTP·SSE, 원격·팀 공유) 두 모드가 있습니다. Agent 시작 시 Client가 tools/list를 호출해 런타임에 도구를 발견하므로, REST API처럼 엔드포인트를 하드코딩할 필요가 없습니다.

JSON-RPC 2.0
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "search_knowledge_base",
    "arguments": { "query": "MCP HTTP transport", "limit": 5 }
  },
  "id": 42
}

Tools는 AI의 「손」, Resources는 「눈」, Prompts는 「운영 매뉴얼 초안」입니다. 세 역량을 조합하면 단순 API 래퍼를 넘어 Agent 워크플로 전체를 Server 한 곳에서 정의할 수 있습니다.

02

FastMCP Hello World: 5가지 도구·Resources·Prompts 구현

FastMCP는 Python MCP Server를 데코레이터 기반으로 빠르게 작성하는 프레임워크입니다. pip install fastmcp 후 아래 Hello World로 STDIO Server를 즉시 기동할 수 있습니다.

Python · server.py
from fastmcp import FastMCP

mcp = FastMCP("hello-mcp")

@mcp.tool()
def greet(name: str) -> str:
    return f"Hello, {name}! MCP Server is running."

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

Cursor MCP 설정에 python server.py를 등록하고 Agent를 재시작하면 greet 도구가 tools/list에 나타납니다. 실무에서는 아래 5가지 도구 패턴을 조합합니다.

01

search_knowledge_base: 벡터 DB 또는 키워드 인덱스에서 문서를 검색합니다. query, limit 파라미터와 함께 JSON Schema가 자동 생성됩니다.

02

query_database: 읽기 전용 SQL 또는 ORM 쿼리를 실행합니다. readOnlyHint 어노테이션으로 쓰기 작업을 차단할 수 있습니다.

03

create_support_ticket: Jira·Linear API에 티켓을 생성합니다. 멱등 키를 인자로 받아 중복 생성을 방지합니다.

04

send_slack_message: Slack Webhook 또는 Bot Token으로 채널에 메시지를 전송합니다. 채널 ID와 본문을 Schema로 명시합니다.

05

run_safe_script: 허용 목록에 등록된 스크립트만 subprocess로 실행합니다. 임의 셸 명령 실행은 보안상 금지합니다.

Python · 5 tools
from fastmcp import FastMCP

mcp = FastMCP("company-tools")

@mcp.tool()
def search_knowledge_base(query: str, limit: int = 5) -> list[dict]:
    return [{"title": "MCP Guide", "snippet": "..."}]

@mcp.tool()
def query_database(sql: str) -> str:
    return "[]"

@mcp.tool()
def create_support_ticket(title: str, body: str, idempotency_key: str) -> str:
    return "TICKET-1001"

@mcp.tool()
def send_slack_message(channel: str, text: str) -> str:
    return "ok"

@mcp.tool()
def run_safe_script(script_name: str, args: list[str]) -> str:
    return "done"

Resources는 읽기 전용 컨텍스트를 URI로 노출합니다. Wiki 페이지, 최근 배포 로그, 환경 변수 스냅샷 등 Agent가 참조만 하면 되는 데이터에 적합합니다.

Python · Resources
@mcp.resource("wiki://pages/{page_id}")
def get_wiki_page(page_id: str) -> str:
    return "# Architecture\n\n..."

@mcp.resource("logs://deploy/latest")
def get_latest_deploy_log() -> str:
    return "2026-06-16T09:00:00Z deploy succeeded"

Prompts는 반복되는 Agent 지시문을 템플릿으로 묶습니다. 코드 리뷰, 장애 RCA, 릴리스 노트 초안 등 팀 표준 워크플로를 Server에서 중앙 관리할 수 있습니다.

Python · Prompts
@mcp.prompt()
def code_review(diff: str, language: str) -> str:
    return f"Review this {language} diff:\n\n{diff}"

@mcp.prompt()
def incident_rca(summary: str, timeline: str) -> str:
    return f"Write RCA for:\n{summary}\n\nTimeline:\n{timeline}"
03

HTTP 전송 계층과 디버깅: 로컬에서 프로덕션까지

로컬 Cursor 연동에는 STDIO가 가장 단순합니다. 팀 공유·원격 Agent·Docker 배포에는 HTTP 전송이 필요합니다. 2026년 MCP 사양은 Streamable HTTP를 권장하며, SSE 기반 레거시 모드도 호환됩니다.

Python · HTTP
if __name__ == "__main__":
    mcp.run(transport="streamable-http", host="0.0.0.0", port=8000)

Cursor MCP 설정에서 URL을 http://localhost:8000/mcp로 지정하면 원격 Server에 연결됩니다. 프로덕션에서는 TLS 종료(Nginx·Caddy), Bearer Token 또는 OAuth 2.1 인증, rate limit을 앞단에 배치합니다.

디버깅은 세 단계로 진행합니다.

01

MCP Inspector: npx @modelcontextprotocol/inspector로 STDIO·HTTP Server에 연결해 tools/list, tools/call을 GUI에서 수동 호출합니다. Schema 오류를 Agent 없이 먼저 잡을 수 있습니다.

02

fastmcp dev: fastmcp dev server.py는 핫 리로드와 Inspector 연동을 제공합니다. 도구 시그니처 변경 후 재시작 없이 반복 테스트가 가능합니다.

03

구조화 로깅:tools/call에 correlation ID, latency, 인자(민감 필드 마스킹)를 JSON 로그로 남깁니다. Cursor Agent 로그와 대조하면 「도구를 호출하지 않음」「잘못된 인자」 패턴을 구분할 수 있습니다.

흔한 오류: JSON Schema 타입 불일치(예: limit을 문자열로 전달), Resource URI 템플릿 오타, HTTP 세션 타임아웃(SSE idle disconnect)이 상위 3건입니다. Inspector에서 재현 후 Server 로그와 Client 로그를 시간순으로 대조하면 원인을 빠르게 좁힐 수 있습니다.

04

Docker 프로덕션과 지식베이스 MCP 프로젝트: 6단계 Runbook

사내 Wiki·Notion·Confluence를 Agent가 검색·인용하게 하려면 지식베이스 MCP Server를 구축합니다. 아키텍처는 「수집 → 청킹 → 임베딩 → 벡터 저장 → MCP Tools 노출 → HTTP 배포」로 구성됩니다.

Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "server.py"]

Docker Compose로 MCP Server, Qdrant(벡터 DB), Redis(캐시)를 한 스택으로 묶으면 로컬과 프로덕션 환경을 동일하게 유지할 수 있습니다. healthcheck/health 엔드포인트를 주기적으로 확인하고, 무중단 배포 시 세션 드레인 시간을 확보합니다.

아래 6단계 Runbook은 평가에서 프로덕션까지 닫힌 루프를 완성합니다.

01

범위 정의: 연결할 데이터 소스(Wiki, Slack, Jira)와 5가지 Tools 우선순위를 확정합니다. 읽기 전용부터 시작하고 쓰기 도구는 2차 스프린트로 미룹니다.

02

FastMCP 스캐폴드: Hello World → 5 Tools → Resources → Prompts 순으로 점진 구현합니다. Inspector로 각 단계 Schema를 검증합니다.

03

지식베이스 파이프라인: 문서 수집 스크립트, 청킹(512–1024 token), 임베딩 API 또는 로컬 Ollama를 연결합니다. search_knowledge_base가 벡터 DB를 조회하도록 연동합니다.

04

HTTP·인증: Streamable HTTP로 전환하고 Bearer Token 또는 OAuth 프록시를 앞단에 둡니다. 공인터넷 직접 노출은 금지하고 VPN·Tailscale 내부망을 권장합니다.

05

Docker·CI: 이미지 빌드, 취약점 스캔, staging 배포를 CI에 연결합니다. Cursor MCP 설정 JSON을 팀 저장소에 버전 관리합니다.

06

7×24 호스트: 노트북 슬립으로 HTTP 세션이 끊기지 않도록 전용 Mac Mini에 배포합니다. 임베딩 갱신 cron과 MCP Server를 동일 호스트에서 실행하면 지연을 줄일 수 있습니다.

보안: 2026년 커뮤니티 조사 기준 약 1,000개의 MCP Server가 인증 없이 공인터넷에 노출되어 있습니다. 프로덕션에서는 최소 Bearer Token, IP allowlist, 감사 로그를 적용하고, run_safe_script류 도구는 허용 목록 없이 배포하지 마십시오.

05

생태계·비교표·핵심 수치와 MESHLAUNCH 7×24 호스트

2026년 MCP 생태계는 10,000개 이상의 Server, Cursor·Claude Desktop·ChatGPT·Gemini·VS Code 네이티브 지원, Linux Foundation AAIF 거버넌스로 성숙 단계에 진입했습니다. Server를 한 번 작성하면 LLM 공급자를 전환해도 도구 계층을 재작성할 필요가 없습니다.

차원OpenAI Function CallingREST APIMCP Server
도구 발견개발자가 JSON Schema를 Prompt에 하드코딩문서 기반, Agent 자동 발견 불가tools/list 런타임 동적 발견
클라이언트 호환OpenAI API 종속HTTP 클라이언트마다 별도 통합Cursor·Claude·Gemini 등 공통
Resources·Prompts미지원별도 설계 필요프로토콜 네이티브 1급 시민
세션·상태무상태 요청무상태영속 연결, 다단계 워크플로
통합 비용모델별 재작성N×M 파편화Server 1회 작성, 다중 Client
A

10,000+ MCP Server: 공개 레지스트리와 GitHub 집계 기준 2026년 상반기 1만 개 이상의 Server가 등록되어 있습니다. 새 Server 추가 시 모든 MCP Client가 즉시 사용할 수 있는 네트워크 효과가 형성됩니다.

B

통합 개발 비용 38–55% 절감: 기업 AI 통합 프로젝트에서 MCP 도입 후 맞춤 어댑터 작성량이 평균 38–55% 감소했다는 업계 보고가 다수 있습니다.

C

FastMCP 기동 시간 90초 미만: Hello World부터 Inspector 연결까지 로컬 환경에서 90초 이내에 완료 가능합니다. REST API 래퍼 대비 Agent 친화 Schema 생성까지 포함한 TTFB입니다.

지식베이스 MCP Server는 임베딩 갱신, HTTP 세션 유지, 다중 Agent 동시 접속을 요구합니다. 노트북 슬립·메모리 부족·네트워크 지터에 부딪히면 Agent가 도구 호출 중 세션이 끊깁니다. 저가 Linux VPS는 Apple Silicon 네이티브 추론·Xcode CI와 MCP Server를 동일 머신에서 실행하기 어렵습니다.

7×24 MCP Server 상주, iOS CI/CD, Ollama 로컬 추론이 필요한 프로덕션 환경에서는 MESHLAUNCH Mac Mini 클라우드 임대가 일반적으로 더 나은 선택입니다. 전용 Apple Silicon, 일·주·월 유연 주문으로 MCP Server와 Cursor·Claude Code의 안정적 호스트 역할을 수행하며, 팀 통합 자산을 특정 공급자 종속에서 이식 가능한 자산으로 전환합니다. 요금은 대여 요금 페이지에서, 배포·네트워크 문의는 고객 센터를 참고하십시오.

자주 묻는 질문

FastMCP는 Python 개발자에게 데코레이터 기반으로 Tools·Resources·Prompts를 빠르게 정의할 수 있는 고수준 프레임워크입니다. TypeScript·Go 등 다른 언어는 공식 SDK를 사용합니다. 프로토타입과 내부 도구 래핑에는 FastMCP가 일반적으로 더 빠르며, 대규모 팀은 SDK + 자체 미들웨어 계층을 선택하기도 합니다.

로컬 개발·Cursor 1인 연동에는 STDIO가 적합합니다. 팀 공유·원격 Agent·Docker 배포에는 Streamable HTTP 또는 SSE 기반 HTTP 전송을 선택합니다. 프로덕션에서는 TLS 종료, Bearer Token 또는 OAuth 2.1 인증, rate limit, healthcheck를 함께 설계해야 합니다. SSE는 session affinity가 필요하므로 로드밸런서 sticky session 설정을 확인하십시오.

임베딩 인덱스 갱신 cron, HTTP 세션 유지, 다중 Agent 동시 접속을 고려하면 7×24 전용 호스트가 필요합니다. Apple Silicon Mac Mini 클라우드 베어메탈은 Ollama 로컬 추론·Xcode CI와 MCP Server를 동일 머신에서 실행하기에 적합합니다. 대여 요금고객 센터에서 리전·스펙을 확인할 수 있습니다.

MCP Server는 외부 API·데이터에 대한 「능력」을 제공합니다. Agent Skill은 「언제·어떤 순서로 그 능력을 사용할지」를 정의하는 운영 매뉴얼입니다. 예를 들어 Skill이 「장애 발생 시 search_knowledge_base → create_support_ticket → send_slack_message 순서로 호출」하도록 지시하고, MCP Server가 실제 API 호출을 수행합니다. Cursor Agent Skills 가이드와 함께 읽으면 역할 분담이 명확해집니다.