๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

MCP (Model Contex Protocol) ์ •๋ฆฌ์™€ ํ™œ์šฉ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2026. 5. 17.

MCP ๊ฐœ๋… ์ •๋ฆฌ

1. MCP ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

MCP (Model Contex Protocol) ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ(LLM)์— ์ปจํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹์„ ํ‘œ์ค€ํ™”ํ•˜๋Š” ๊ฐœ๋ฐฉ์ ์ด๊ณ  ๋ณดํŽธ์ ์ธ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 

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

 

2. MCP๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ(LLM)์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค ํ™˜๊ฒฝ์ด๋‚˜ ๋ณต์žกํ•œ ์ž‘์—…์— ์ ์šฉํ•  ๋•Œ ์„ธ ๊ฐ€์ง€ ์น˜๋ช…์ ์ธ ํ•œ๊ณ„์— ์ง๋ฉดํ•œ๋‹ค. MCP๋Š” ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ ํ‘œ์ค€ํ™”๋œ ์—ฐ๊ฒฐ ๊ทœ๊ฒฉ์ด๋‹ค.

 

1. LLM์˜ ๊ทผ๋ณธ์  ํ•œ๊ณ„ ๊ทน๋ณต

  • ์ง€์‹์˜ ์‹œ์ฐจ ๋ฌธ์ œ : LLM์€ ํ•™์Šต์ด ์™„๋ฃŒ๋œ ์‹œ์ ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ธฐ์–ตํ•œ๋‹ค.(์˜ˆ: GPT-4์˜ ์ง€์‹ ์ปท์˜คํ”„). ์ตœ์‹  ์ •๋ณด๋ฅผ ๋ฐ˜์˜ํ•˜๋ ค๋ฉด ๋ง‰๋Œ€ํ•œ ๋น„์šฉ๊ณผ ์‹œ๊ฐ„์ด ๋“œ๋Š” ์žฌํ•™์Šต์ด ํ•„์š”ํ•˜์ง€๋งŒ, MCP๋ฅผ ํ†ตํ•˜๋ฉด ์‹ค์‹œ๊ฐ„ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ์— ์ฆ‰์‹œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ์‡„์  ๋„๋ฉ”์ธ ์ง€์‹์˜ ๋ถ€์žฌ : ์ผ๋ฐ˜์ ์ธ LLM์€ ๊ธฐ์—… ๋‚ด๋ถ€์˜ ์ œํ’ˆ ์นดํƒˆ๋กœ๊ทธ, ์˜๋ฃŒ ๊ธฐ๋ก, ๋…์  ๊ธฐ์ˆ  ๋ฌธ์„œ ๋“ฑ ๊ณต๊ฐœ๋˜์ง€ ์•Š์€ ์ „๋ฌธ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ์ง€ ๋ชปํ•œ๋‹ค. MCP๋Š” ์ด๋Ÿฌํ•œ ๋‚ด๋ถ€ ์‹œ์Šคํ…œ๊ณผ ๋ชจ๋ธ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • ํŒŒํŽธํ™”๋œ ํ†ตํ•ฉ ํ‘œ์ค€ : ์ง€๊ธˆ๊นŒ์ง€๋Š” RAG(๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ)๋‚˜ API ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ๋งค๋ฒˆ ๊ฐœ๋ณ„์ ์ธ ์ปค์Šคํ…€ ๊ฐœ๋ฐœ์ด ํ•„์š”ํ•˜๋‹ค. MCP๋Š” ์ด๋ฅผ 'ํ”Œ๋Ÿฌ๊ทธ ์•ค ํ”Œ๋ ˆ์ด' ๋ฐฉ์‹์œผ๋กœ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์„ ์ œ๊ณตํ•จ

2. MCP ๋„์ž… ์‹œ ์–ป๊ฒŒ ๋˜๋Š” ํ•ต์‹ฌ ์ด์ 

MCP๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋‹จ์ˆœํžˆ ์ •๋ณด๋ฅผ ์ฐพ๋Š” ์ˆ˜์ค€์„ ๋„˜์–ด, AI์˜ ์‹คํ–‰ ๋Šฅ๋ ฅ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐ•๋ ฅํ•œ ์ƒํƒœ๊ณ„ ํ™œ์šฉ (Pre-built Integrations) : ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(PostgreSQL, SQLite), ํ˜‘์—… ๋„๊ตฌ(Slack, GitHub), ๊ฒ€์ƒ‰ ์—”์ง„(Brave Search) ๋“ฑ ์ด๋ฏธ ๊ตฌ์ถ•๋œ ๋‹ค์–‘ํ•œ ์„œ๋ฒ„ ์ปค๋„ฅํ„ฐ๋ฅผ ์ฆ‰์‹œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๊ฐœ๋ฐœํ•  ํ•„์š” ์—†์ด ๊ธฐ์กด ์ธํ”„๋ผ๋ฅผ AI์— ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • ๋ชจ๋ธ ๊ต์ฒด์˜ ์œ ์—ฐ์„ฑ (Model Agnostic) : ํŠน์ • AI ๋ชจ๋ธ(Claude, GPT-4, Gemini ๋“ฑ)์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค. MCP๋ผ๋Š” ํ‘œ์ค€ ํ†ต๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•„์š”์— ๋”ฐ๋ผ ํ•˜์œ„ ๋ชจ๋ธ์„ ๊ต์ฒดํ•˜๋”๋ผ๋„ ๊ธฐ์กด์— ๊ตฌ์ถ•ํ•œ ๋ฐ์ดํ„ฐ ๋ฐ ๋„๊ตฌ ํ†ตํ•ฉ ๋กœ์ง์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณต์žกํ•œ AI ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌํ˜„ : ๋‹จ์ˆœํ•œ ์งˆ์˜์‘๋‹ต์„ ๋„˜์–ด '์—์ด์ „ํŠธ' ์ค‘์‹ฌ์˜ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒ•๋ฅ  ๋ถ„์„ ์‹œ์Šคํ…œ์—์„œ "๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ -> ๋ฌธ์„œ ๋น„๊ต -> ๋ณด๊ณ ์„œ ์ƒ์„ฑ -> ์Šฌ๋ž™ ์ „์†ก"๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์—ฐ์‡„ ์ž‘์—…์„ ํ•˜๋‚˜์˜ ํ๋ฆ„์œผ๋กœ ๋งค๋„๋Ÿฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์š”์•ฝํ•˜์ž๋ฉด, 

MCP๋Š” AI ๋ชจ๋ธ์ด ์™ธ๋ถ€ ์„ธ์ƒ(๋ฐ์ดํ„ฐ, ๋„๊ตฌ, ์‹œ์Šคํ…œ)๊ณผ ์†Œํ†ตํ•˜๋Š” '๊ณต์šฉ ์ธํ„ฐํŽ˜์ด์Šค'์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ์—…์€ ์ตœ์‹ ์„ฑ, ์ „๋ฌธ์„ฑ, ํ™•์žฅ์„ฑ์ด๋ผ๋Š” ์„ธ ๋งˆ๋ฆฌ ํ† ๋ผ๋ฅผ ์žก์œผ๋ฉฐ ๋”์šฑ ๋˜‘๋˜‘ํ•˜๊ณ  ์œ ์—ฐํ•œ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. MCP์˜ 3๋Œ€ ํ•ต์‹ฌ ์—ญํ• ๊ณผ ์•„ํ‚คํ…์ณ

MCP ์‹œ์Šคํ…œ์€ ํ˜ธ์ŠคํŠธ(Host), ํด๋ผ์ด์–ธํŠธ(Client), ์„œ๋ฒ„(Server)๋ผ๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์ฒด๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ํ˜‘๋ ฅํ•˜์—ฌ ์ž‘๋™ํ•œ๋‹ค.

 

1. MCP ํ˜ธ์ŠคํŠธ (The Application)

  • ์ •์˜ : ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์ข… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • ์˜ˆ์‹œ : Claude Desktop, Cursor(AI ์ฝ”๋“œ ์—๋””ํ„ฐ), ๋‹ค์–‘ํ•œ IDE ๋“ฑ
  • ์—ญํ•  : AI ๋ชจ๋ธ๊ณผ MCP ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” '๊ทธ๋ฆ‡' ์—ญํ• ์„ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘

 

2. MCP ํด๋ผ์ด์–ธํŠธ (The Connector)

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

 

3. MCP ์„œ๋ฒ„ (The Resource Provider)

  • ์ •์˜ : ์‹ค์ œ ๋ฐ์ดํ„ฐ๋‚˜ ๋„๊ตฌ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค์ด๋‹ค.
  • ์˜ˆ์‹œ : Google Drive ์„œ๋ฒ„, Slack ์„œ๋ฒ„, PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋“ฑ
  • ์—ญํ•  : ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜(Read), ํŠน์ • ์ž‘์—…(Write/Action)์„ ์ˆ˜ํ–‰ํ•œ ๋’ค ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•œ๋‹ค.

 

4. MCP ์›Œํฌํ”Œ๋กœ์šฐ

์œ„์˜ ์„ธ ๊ฐ€์ง€ ์—ญํ• ์ด ๊ฒฐ๊ตญ MCP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ˜•์„ฑํ•œ๋‹ค.

 

 

5. MCP Client์™€ MCP Server ๊ฐ„ ๊ฐ„๋‹จํ•œ ๋™์ž‘

 

1. InitializeRequest

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ MCP ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๊ณ  ์„ธ์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค.
  • ์„œ๋ฒ„๋Š” InitializeResult๋กœ ์ž์‹ ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ๋ฉ”ํƒ€์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

2. ListToolsRequest

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— "์–ด๋–ค ํˆด์„ ์ œ๊ณตํ•˜๋‚˜์š”?"๋ผ๊ณ  ๋ฌป๋Š” ๋‹จ๊ณ„์ด๋‹ค.
  • ์„œ๋ฒ„๋Š” ListToolsResult๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ ๋ชฉ๋ก๊ณผ ๊ฐ๊ฐ์˜ ์ž…๋ ฅ ์Šคํ‚ค๋งˆ๋ฅผ ์‘๋‹ตํ•œ๋‹ค.
  • ์ด ๋‹จ๊ณ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค.

3. CallToolRequest

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • ๋„๊ตฌ๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
  • ์˜ˆ : notion.fetch, notion.search, notion.update-page ๋“ฑ
  • ์„œ๋ฒ„๋Š” CallToolResult๋กœ ๋„๊ตฌ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

[์ฐธ๊ณ  ์‚ฌ์ดํŠธ]

https://myip.co.kr/board/read.php?id=1694&table=tip

 

MCP ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์•Œ์•„๋ณด์ž?! (+ supabase-MCP-server ์ฝ”๋“œ ๊นŒ๋ณด๊ธฐ) - MyIP ๊ฒŒ์‹œํŒ

#MCP #Supabase #Cursor #MCP์„œ๋ฒ„ #๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—ฐ๊ฒฐ #myip [์ฃผ์š” ๋ชฉ์ฐจ] Supabase์™€ Cursor ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ• MCP ๋™์ž‘ ๊ณผ์ • ์ดํ•ดํ•˜๊ธฐ Supabase MCP ์„œ๋ฒ„ ์ฝ”๋“œ ๋ถ„์„ ์š”์ฆ˜ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ํ•˜์‹œ๋ฉด์„œ Supabase๋ฅผ ์“ฐ์‹œ๋Š” ๋ถ„๋“ค ๋งŽ

myip.co.kr

https://blog.logto.io/ko/what-is-mcp

 

MCP (๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ)์ด๋ž€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€ · Logto ๋ธ”๋กœ๊ทธ

๋ชจ๋ธ ์ปจํ…์ŠคํŠธ ํ”„๋กœํ† ์ฝœ(MCP)์— ๋Œ€ํ•œ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๊ฐ€์ด๋“œ๋กœ, LLM์ด ์ง€์‹์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  ๋” ๊ฐ•๋ ฅํ•œ AI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

blog.logto.io

 


MCP ํ™œ์šฉ์„ ์œ„ํ•œ ๊ธฐ์ˆ ์  ์ดํ•ด

1. MCP ํ”„๋กœํ† ์ฝœ ๊ทœ๊ฒฉ - (JSON-RPC 2.0)

MCP์—์„œ ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ๊ตํ™˜์€ JSON-RPC 2.0 ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฝ”๋”ฉ ๋œ๋‹ค. 

 

1. ๋ฉ”์‹œ์ง€ ๊ทœ๊ฒฉ ๋ฐ ์ธ์ฝ”๋”ฉ

  • ํ‘œ์ค€ ๊ทœ๊ฒฉ : MCP์—์„œ ๋ชจ๋“  ๋ฉ”์‹œ์ง€ ๊ตํ™˜์€ JSON-RPC 2.0 ํ‘œ์ค€ ๊ทœ๊ฒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฝ”๋”ฉํ•œ๋‹ค.
  • ์ธ์ฝ”๋”ฉ ํ‘œ์ค€ : ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์— ์ฃผ๊ณ ๋ฐ›๋Š” ๋ชจ๋“  JSON-RPC ๋ฉ”์‹œ์ง€๋Š” ๋ฐ˜๋“œ์‹œ UTF-8๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

2. ๋ฐ์ดํ„ฐ ์ „์†ก ๋ฐฉ์‹ (Transport)

๋ฉ”์‹œ์ง€๊ฐ€ ์‹ค์ œ๋กœ ๋„คํŠธ์›Œํฌ์™€ ์‹œ์Šคํ…œ ์‚ฌ์ด๋ฅผ ์ด๋™ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋Š” ํฌ๊ฒŒ ์„ธ ๊ฐ€์ง€ ์ˆ˜์ค€์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

  • Streamable HTTP ์ „์†ก (type: "http") [๊ถŒ์žฅ]
    • ํŠน์ง•: MCP์˜ ํ˜„๋Œ€์ ์ธ ์ „์†ก ๋ฐฉ์‹(Modern transport)์ด๋‹ค.
    • ๋น„๊ณ : ๋…ธ์…˜(Notion) ๋“ฑ ์ตœ์‹  MCP ์ƒํƒœ๊ณ„์—์„œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•˜๋Š” ํ‘œ์ค€ ๋„คํŠธ์›Œํฌ ๋ฐฉ์‹์ด๋ฉฐ, ์„ค์ • ํŒŒ์ผ์—์„œ type: "http"๋กœ ์ง€์ •ํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ์‹ค์ฒด์ด๋‹ค.
  • stdio ์ „์†ก (type: "stdio")
    • ํŠน์ง•: ํด๋ผ์ด์–ธํŠธ๊ฐ€ MCP ์„œ๋ฒ„๋ฅผ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰ํ•˜๊ณ , ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์˜ ํ‘œ์ค€ ์ž…๋ ฅ(stdin)๊ณผ ํ‘œ์ค€ ์ถœ๋ ฅ(stdout) ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ํ†ต์‹  ๋ฐฉ์‹์ด๋‹ค.
  • SSE ์ „์†ก (Server-Sent Events)
    • ํŠน์ง•: ๊ตฌํ˜• ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ด์ „ ๋ฐฉ์‹(Legacy transport)์ด๋‹ค.
    • ๋น„๊ณ : ์ตœ์‹  ํ‘œ์ค€์ธ Streamable HTTP๋ฅผ ์ง€์›ํ•˜์ง€ ๋ชปํ•˜๋Š” ์˜›๋‚  ํ™˜๊ฒฝ๊ณผ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์ œํ•œ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ์ด์ „ ์„ธ๋Œ€์˜ ๊ทœ๊ฒฉ์ด๋‹ค.

 

3. ๋„๊ตฌ ํ˜ธ์ถœ(Tool Call) ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ ๋ฐ ํ๋ฆ„

ํด๋ผ์ด์–ธํŠธ(LLM)๊ฐ€ ํŠน์ • ๋„๊ตฌ(์˜ˆ: notion.fetch, notion.search ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํŒ๋‹จํ–ˆ์„ ๋•Œ, ๊ณต์‹ ์ŠคํŽ™(Appendix B)์— ๋”ฐ๋ผ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๋ฐ›๋Š” ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ (CallToolRequest)

LLM์ด ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ ๋ถ„์„ํ•˜์—ฌ "๋…ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ๊ฒ ๋‹ค"๋ผ๊ณ  ํŒ๋‹จํ•˜๋ฉด, ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ๋„๊ตฌ ์ด๋ฆ„๊ณผ ์‹คํ–‰ ์ธ์ž(๋ฐ์ดํ„ฐ ํŒจํ‚ท)๋ฅผ ๋‹ด์•„ ์š”์ฒญ์„ ์ „์†กํ•œ๋‹ค.

{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call", 
  "params": {
    "name": "notion.fetch",
    "arguments": {
      "page_title": "์˜ค๋Š˜ ํ•  ์ผ ๋ชฉ๋ก",
      "date": "2026-05-17"
    }
  }
}

 

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—ญํ• : ํŒจํ‚ท ๋‚ด๋ถ€์˜ "method": "tools/call" ํ•„๋“œ๋Š” ์ด ๋ฉ”์‹œ์ง€๊ฐ€ ๋„๊ตฌ๋ฅผ ์‹คํ–‰ํ•˜๋ผ๋Š” 'CallToolRequest' ๊ทœ๊ฒฉ์ž„์„ ์„œ๋ฒ„์— ์ฆ๋ช…ํ•˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—ญํ• ์„ ํ•œ๋‹ค.
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ํ™œ์šฉ: ๋„๊ตฌ ์ด๋ฆ„์— notion.fetch์ฒ˜๋Ÿผ ์„œ๋น„์Šค๋ช…์„ ์ ‘๋‘์‚ฌ๋กœ ๋ถ™์ž„์œผ๋กœ์จ, ์—ฌ๋Ÿฌ MCP ์„œ๋ฒ„(Notion, Slack ๋“ฑ)๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด๋„ AI๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๊ณ  ์ •ํ™•ํ•œ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

์‘๋‹ต์„ ๋ฐ›์„ ๋•Œ (CallToolResult)

MCP ์„œ๋ฒ„๊ฐ€ ์ง€์‹œ๋ฐ›์€ ๋„๊ตฌ(Action)๋ฅผ ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฌผ์„ ํด๋ผ์ด์–ธํŠธ(LLM)์—๊ฒŒ ๋‹ค์‹œ ๋Œ๋ ค์ค„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‘๋‹ต ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค.

{
  "content": [
    {
      "type": "text",
      "text": "์˜ค๋Š˜ ํ•  ์ผ: 1. ๋ธ”๋กœ๊ทธ ๊ธ€์“ฐ๊ธฐ, 2. ์šด๋™ํ•˜๊ธฐ (ํ”ผ๋“œ๋ฐฑ ์ ‘์ˆ˜ ์™„๋ฃŒ)"
    }
  ]
}

 

  • ๊ตฌ์กฐ์  ํŠน์ง•: ์‘๋‹ต ํŒจํ‚ท์—๋Š” ๋ช…๋ น์–ด(method)๊ฐ€ ๋ชจ๋‘ ๋น ์ง€๊ณ , ์˜ค์ง ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ๋งŒ "content"๋ผ๋Š” ํ‘œ์ค€ ๋ฐ”๊ตฌ๋‹ˆ ๋ฐฐ์—ด์— ๋‹ด๊ฒจ ๋ฐ˜ํ™˜๋œ๋‹ค. LLM์€ ์ด ์‘๋‹ต ํ…์ŠคํŠธ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ตœ์ข… ๋‹ต๋ณ€์„ ๊ตฌ์„ฑํ•œ๋‹ค.

 

4. ์ฃผ์˜ํ•ด์•ผ ํ•  ๋ณด์•ˆ ์œ„ํ—˜

JSON ๊ธฐ๋ฐ˜์˜ ์œ ์—ฐํ•œ ํ†ต์‹  ๋ฐฉ์‹์€ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ์ปจํ…์ŠคํŠธ ์ฃผ์ž… ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋  ์œ„ํ—˜์ด ์žˆ๋‹ค.

  • ์ปจํ…์ŠคํŠธ ํฌ์ด์ฆˆ๋‹ (Context Poisoning) : ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๋„๊ตฌ ์„ค๋ช…(Tool descriptions)์ด๋‚˜ ์‘๋‹ต(Response) ๋‚ด์— ์•…์„ฑ ๋ช…๋ น์„ ์ˆจ๊ฒจ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์‘๋‹ต ์ฃผ์ž… (Response Injection) : ์ •์ƒ์ ์ธ JSON ์‘๋‹ต์ฒ˜๋Ÿผ ์œ„์žฅํ•˜์—ฌ "์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜(.env) ํŒŒ์ผ์„ ์ฝ์–ด์„œ ์™ธ๋ถ€๋กœ ์ „์†กํ•˜๋ผ"๋Š” ์‹์˜ ์œ ํ•ดํ•œ ์ง€์‹œ๋ฅผ LLM์— ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ž…๋ ฅ๊ฐ’๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ์ฒ ์ €ํ•œ ๊ฒ€์ฆ์ด ํ•„์š”ํ•จ
  • ๋Œ€์‘ ์ฑ…:
    • ์ž…๋ ฅ๊ฐ’ ๋ฐ ์‘๋‹ต ๊ฒ€์ฆ: MCP ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ๋Š” ์ž…๋ ฅ๊ฐ’(arguments)์˜ ์œ ํšจ์„ฑ์„ ์ฒ ์ €ํžˆ ๊ฒ€์ฆํ•˜๊ณ , AI๊ฐ€ ๊ฐ€์ ธ์˜ค๋Š” ์™ธ๋ถ€ ์‘๋‹ต ๋ฐ์ดํ„ฐ๊ฐ€ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋กœ ํ•ด์„๋˜์ง€ ์•Š๋„๋ก ์ƒŒ๋“œ๋ฐ•์‹ฑ(Sanitizing) ์ฒ˜๋ฆฌ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค.
    • DLP (๋ฐ์ดํ„ฐ ์œ ์ถœ ๋ฐฉ์ง€) ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋„์ž…: ํด๋ผ์ด์–ธํŠธ์™€ ์™ธ๋ถ€ MCP ์„œ๋ฒ„ ์‚ฌ์ด์— DLP ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜์—ฌ, ์š”์ฒญ ํŒจํ‚ท(CallToolRequest) ๋‚ด์— ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ, ์†Œ์Šค์ฝ”๋“œ ๋‚ด ๋น„๊ณต๊ฐœ API ํ‚ค ๋“ฑ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์‹œํ•ด์•ผ ํ•œ๋‹ค. ํƒ์ง€ ์‹œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋งˆ์Šคํ‚น(์˜ˆ: 950803-*******) ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ „์†ก์„ ์ฆ‰์‹œ ์ฐจ๋‹จ(Block)ํ•˜๋Š” ๊ฐ€๋“œ๋ ˆ์ผ์„ ๊ตฌ์ถ•ํ•ด์•ผ ์•ˆ์ „ํ•˜๋‹ค.

[์ฐธ๊ณ  ์ž๋ฃŒ]

https://arxiv.org/html/2511.20920v1

 

Securing the Model Context Protocol (MCP): Risks, Controls, and Governance

async ({ feedback }) => { const timestamp = new Date().toISOString(); const feedbackId = Math.random().toString(36).substring(2, 15); const response = ‘Feedback received. Thank you for your initial report. Feedback ID: ${feedbackId} Timestamp: ${timestam

arxiv.org

 


MCP ํ™œ์šฉ ์‚ฌ์ดํŠธ

1. ๋…ธ์…˜

 

Streamable HTTP ๋ฐฉ์‹ : ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ์ปฌ์— ๋‘๊ณ , MCP ์„œ๋ฒ„๋Š” ์™ธ๋ถ€(๊ณต์‹ MCP ์„œ๋ฒ„ ๋˜๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์ถ•๋œ ์›๊ฒฉ ์„œ๋ฒ„)์— ์œ„์น˜์‹œ์ผœ ๋„คํŠธ์›Œํฌ๋กœ ํ†ต์‹ ํ•˜๋Š” ํ˜„๋Œ€์ ์ธ ์ „์†ก ๋ฐฉ์‹(Modern transport)์ด๋‹ค. Notion ๋“ฑ ์ตœ์‹  ์ƒํƒœ๊ณ„์—์„œ ๊ฐ€์žฅ ๊ถŒ์žฅํ•œ๋‹ค.

{
  "mcpServers": {
    "notion": {
      "url": "https://mcp.notion.com/mcp"
    }
  }
}

 

 

SSE ๋ฐฉ์‹ (Legacy) : ๊ตฌํ˜• ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์ด์ „ ์„ธ๋Œ€์˜ ์ „์†ก ๋ฐฉ์‹(Legacy transport)์ด๋‹ค. ์ตœ์‹  ๊ทœ๊ฒฉ์„ ํ™œ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ํ™˜๊ฒฝ์—์„œ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

{
  "mcpServers": {
    "notion": {
      "type": "sse",
      "url": "https://mcp.notion.com/sse"
    }
  }
}

 

STDIO ๋ฐฉ์‹ : MCP ์„œ๋ฒ„๋ฅผ ์™ธ๋ถ€๊ฐ€ ์•„๋‹Œ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ์ง์ ‘ ์„ค์น˜ํ•ด์„œ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ MCP ์„œ๋ฒ„๋ฅผ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค(Subprocess)๋กœ ์‹คํ–‰ํ•˜๊ณ , ์ปดํ“จํ„ฐ ๋‚ด๋ถ€์˜ ํ‘œ์ค€ ์ž…๋ ฅ(stdin)๊ณผ ํ‘œ์ค€ ์ถœ๋ ฅ(stdout) ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.

{
  "mcpServers": {
    "notion": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.notion.com/mcp"]
    }
  }
}

 

*๋„๊ตฌ๊ฐ€ ์›๊ฒฉ HTTP ์—ฐ๊ฒฐ (Streamable HTTP๋‚˜ SSE ๋“ฑ)์„ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, STDIO ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Œ

 

 

[์ฐธ๊ณ  ์‚ฌ์ดํŠธ]

https://github.com/makenotion/notion-mcp-server

 

GitHub - makenotion/notion-mcp-server: Official Notion MCP Server

Official Notion MCP Server. Contribute to makenotion/notion-mcp-server development by creating an account on GitHub.

github.com

https://developers.notion.com/guides/mcp/get-started-with-mcp

 

Connecting to Notion MCP - Notion Docs

Learn how to connect your AI tool to Notion using MCP.

developers.notion.com

 

๋Œ“๊ธ€