๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

MCP๊ฐ€ ๋ญ๊ธธ๋ž˜๐Ÿค”

ยท ์•ฝ 8๋ถ„
eunsung shin
Software Engineer

์ตœ๊ทผ AI ๊ฐœ๋ฐœ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ **MCP(Model Context Protocol)**๊ฐ€ ํฐ ์ฃผ๋ชฉ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 2024๋…„ 11์›” Anthropic์ด ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœํ•œ ์ด ํ”„๋กœํ† ์ฝœ์€ ์ฒ˜์Œ์—๋Š” ํฐ ๋ฐ˜์‘์„ ์–ป์ง€ ๋ชปํ–ˆ์ง€๋งŒ, 2025๋…„ ์ดˆ๋ถ€ํ„ฐ ๊ด€์‹ฌ์ด ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. MCP๋Š” LLM์—๊ฒŒ ๋ถ€์กฑํ•œ ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, API ๋“ฑ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ปจํ…์ŠคํŠธ๋กœ์จ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. HTTP ํ†ต์‹ ์ด ์ฒ˜์Œ ์„ธ์ƒ์— ๋‚˜์™”์„ ๋•Œ์ฒ˜๋Ÿผ, LLM ์—”์ง„์— ๋ถ™์ผ ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ทœ๊ฒฉ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ, LLM์ด ๊ฐ€์ง„ ๊ฐ€๋Šฅ์„ฑ์„ ๋ฌดํ•œ๋Œ€๋กœ ํ™•์žฅ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

MCP๋ž€ ๋ฌด์—‡์ธ๊ฐ€?โ€‹

MCP๋Š” ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์ด ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ์™€ ์‹œ์Šคํ…œ์„ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. Anthropic์€ MCP๋ฅผ USB-C ํฌํŠธ์— ๋น„์œ ํ•˜๋Š”๋ฐ, USB-C๊ฐ€ ๋‹ค์–‘ํ•œ ๊ธฐ๊ธฐ์™€ ์ฃผ๋ณ€ ์žฅ์น˜๋ฅผ ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋“ฏ์ด, MCP๋Š” AI ๋ชจ๋ธ์ด ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ๋„๊ตฌ์— ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

MCP์˜ ์ฃผ์š” ํŠน์ง•โ€‹

  1. ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€: ๋ˆ„๊ตฌ๋‚˜ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ: AI ๋ชจ๋ธ๊ณผ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๊ฐ„์˜ ์ง€์†์ ์ธ ํ†ต์‹ ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฒ”์šฉ์„ฑ๊ณผ ํ‘œ์ค€ํ™”: ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ๋„๊ตฌ๋ฅผ ํ•˜๋‚˜์˜ ํ”„๋กœํ† ์ฝœ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ๋ฐ ์‹ ๋ขฐ์„ฑ: ์•ˆ์ „ํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

MCP์˜ ๋™์ž‘ ๋ฐฉ์‹โ€‹

MCP๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

1. ์—ฐ๊ฒฐ ์„ค์ •โ€‹

  • ํ˜ธ์ŠคํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์˜ˆ: Claude Desktop, Cursor)์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ MCP ์„œ๋ฒ„์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

2. ์ดˆ๊ธฐํ™” ํ”„๋กœ์„ธ์Šคโ€‹

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋˜๋ฉด JSON-RPC ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ํ”„๋กœํ† ์ฝœ ๋ฒ„์ „๊ณผ ์ง€์› ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ณผ์ •์—์„œ ์„œ๋ฒ„์˜ ๋Šฅ๋ ฅ๊ณผ ์ œ์•ฝ ์‚ฌํ•ญ์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

3. ๊ธฐ๋Šฅ ํƒ์ƒ‰โ€‹

  • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— tools/list ๋“ฑ์˜ ์š”์ฒญ์„ ๋ณด๋‚ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ, ๋ฆฌ์†Œ์Šค, ํ”„๋กฌํ”„ํŠธ ๋ชฉ๋ก์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ์ •๋ณด๋Š” ํ˜ธ์ŠคํŠธ๋ฅผ ํ†ตํ•ด LLM์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

4. ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ณผ์ •โ€‹

  1. ์‚ฌ์šฉ์ž๊ฐ€ ํ˜ธ์ŠคํŠธ์— ์งˆ๋ฌธ์„ ์ž…๋ ฅํ•˜๋ฉด LLM์ด ์ด๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.
  2. LLM์€ ์ ์ ˆํ•œ ์„œ๋ฒ„์™€ ๋„๊ตฌ๋ฅผ ์„ ํƒํ•ด ๊ตฌ์กฐํ™”๋œ ์š”์ฒญ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ํ˜ธ์ŠคํŠธ๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ๊ด€๋ จ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  4. ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ์„ ์„œ๋ฒ„๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  5. ์„œ๋ฒ„๋Š” ์š”์ฒญ๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  6. ๊ฒฐ๊ณผ๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ํ˜ธ์ŠคํŠธ๋กœ ์ „๋‹ฌ๋˜๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ LLM์—๊ฒŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

5. ํ†ต์‹  ํ˜•์‹โ€‹

  • JSON-RPC 2.0 ํ”„๋กœํ† ์ฝœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ตํ™˜์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
  • ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋Š” UTF-8 ์ธ์ฝ”๋”ฉ, ์ด๋ฏธ์ง€ ๋ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋Š” Base64 ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

MCP ๊ตฌ์กฐโ€‹

mcp๊ตฌ์กฐ

MCP๋Š” ํ˜ธ์ŠคํŠธ(Host), ํด๋ผ์ด์–ธํŠธ(Client), ์„œ๋ฒ„(Server) ์„ธ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ํ˜ธ์ŠคํŠธ(Host)โ€‹

ํ˜ธ์ŠคํŠธ๋Š” AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํ…Œ์ด๋„ˆ์ด์ž ์กฐ์ •์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ์˜ ์ฃผ์š” ์—ญํ• โ€‹

  • ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ
  • ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ๊ถŒํ•œ๊ณผ ์ƒ๋ช… ์ฃผ๊ธฐ ์ œ์–ด
  • ๋ณด์•ˆ ์ •์ฑ…๊ณผ ๋™์˜ ์š”๊ตฌ์‚ฌํ•ญ ์‹œํ–‰
  • AI/LLM ํ†ตํ•ฉ ๋ฐ ์ƒ˜ํ”Œ๋ง ์กฐ์ •
  • ๋Œ€ํ™” ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ ๋ฐ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์ปจํ…์ŠคํŠธ ์ง‘๊ณ„

2. ํด๋ผ์ด์–ธํŠธ(Client)โ€‹

ํด๋ผ์ด์–ธํŠธ๋Š” ํ˜ธ์ŠคํŠธ์— ์˜ํ•ด ์ƒ์„ฑ๋˜๋ฉฐ ์„œ๋ฒ„์™€์˜ ๋…๋ฆฝ์ ์ธ 1:1 ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์˜ ์ฃผ์š” ์—ญํ• โ€‹

  • ์„œ๋ฒ„๋‹น ํ•˜๋‚˜์˜ ์ƒํƒœ ์œ ์ง€ ์„ธ์…˜ ์„ค์ •
  • ํ”„๋กœํ† ์ฝœ ํ˜‘์ƒ ๋ฐ ๊ธฐ๋Šฅ ๊ตํ™˜ ์ฒ˜๋ฆฌ
  • ์–‘๋ฐฉํ–ฅ์œผ๋กœ ํ”„๋กœํ† ์ฝœ ๋ฉ”์‹œ์ง€ ๋ผ์šฐํŒ…
  • ๊ตฌ๋… ๋ฐ ์•Œ๋ฆผ ๊ด€๋ฆฌ
  • ์„œ๋ฒ„ ๊ฐ„ ๋ณด์•ˆ ๊ฒฝ๊ณ„ ์œ ์ง€

3. ์„œ๋ฒ„(Server)โ€‹

์„œ๋ฒ„๋Š” ํŠน์ • ์ปจํ…์ŠคํŠธ์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์„œ๋ฒ„์˜ ์ฃผ์š” ์—ญํ• โ€‹

  • ๋ฆฌ์†Œ์Šค, ๋„๊ตฌ, ํ”„๋กฌํ”„ํŠธ ๋“ฑ์˜ ๊ธฐ๋Šฅ ๋…ธ์ถœ
  • ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ ํŠน์ • ์ฑ…์ž„ ์ˆ˜ํ–‰
  • ํด๋ผ์ด์–ธํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ƒ˜ํ”Œ๋ง ์š”์ฒญ ์ฒ˜๋ฆฌ
  • ๋ณด์•ˆ ์ œ์•ฝ ์ค€์ˆ˜
  • ๋กœ์ปฌ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์›๊ฒฉ ์„œ๋น„์Šค๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹โ€‹

1. stdio ๋ฐฉ์‹ (ํ‘œ์ค€ ์ž…์ถœ๋ ฅ)โ€‹

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋ฅผ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” ํ‘œ์ค€ ์ž…๋ ฅ(stdin)์œผ๋กœ ๋ช…๋ น์„ ๋ฐ›๊ณ  ํ‘œ์ค€ ์ถœ๋ ฅ(stdout)์œผ๋กœ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
  • JSON-RPC 2.0 ํ˜•์‹์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์Šต๋‹ˆ๋‹ค.
  • ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์„ค์ •์ด ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2. HTTP+SSE ๋ฐฉ์‹ (Server-Sent Events)โ€‹

  • ํด๋ผ์ด์–ธํŠธ๋Š” HTTP POST ์š”์ฒญ์œผ๋กœ ๋ช…๋ น์„ ์„œ๋ฒ„์— ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„๋Š” SSE(Server-Sent Events)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์ด๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค.
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌโ€‹

MCP๋Š” AI ๋ชจ๋ธ์ด ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ์™€ ๋„๊ตฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ€๋Šฅ์„ฑ์„ ํฌ๊ฒŒ ํ™•์žฅ์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ, ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.