MCP (Model Contex Protocol) ์ ๋ฆฌ์ ํ์ฉ

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
๋๊ธ