216.73.216.36 TODAY : 4,365
์ž๋ฃŒ์‹ค ์„œ๋ธŒ ํƒ€์ดํ‹€ ์•„์ด์ฝ˜

๊ธฐ์ˆ ๋ฌธ์„œ

 > 

MCP

๐Ÿ› ๏ธ 30๋ถ„ ๋งŒ์— ๋๋‚ด๋Š” ๋‚˜๋งŒ์˜ MCP ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๊ธฐ (Python & SDK ๊ฐ€์ด๋“œ)

์ž๋ฃŒ ๊ธฐ๋ณธ์ •๋ณด

๐Ÿ› ๏ธ 30๋ถ„ ๋งŒ์— ๋๋‚ด๋Š” ๋‚˜๋งŒ์˜ MCP ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๊ธฐ (Python & SDK ๊ฐ€์ด๋“œ)

์ฃผ์š” ํ”„๋กœ๊ทธ๋žจ ์ŠคํŽ™

  • ํ‰์ : 10.0
  • ๋ผ์ด์„ ์Šค: free

ํ”ผ๋“œ๋ฐฑ ๋ฐ ๋‹ค์šด๋กœ๋“œ

  • ์‚ฌ์šฉ์ž ํ‰์ : 10.0
  • ์กฐํšŒ: 2

์ œ์กฐ์‚ฌ ๋ฐ ๋“ฑ๋ก ์ •๋ณด

  • ์ œ์ž‘์‚ฌ: LUZENSOFT
  • ๋“ฑ๋ก์ผ: 2025-12-22 09:45:27
  •  

- ์„ค๋ช…

์•ˆ๋…•ํ•˜์„ธ์š”! ๊ฐœ๋ฐœ์ž ์—ฌ๋Ÿฌ๋ถ„. ์ตœ๊ทผ ์•ค์Šค๋กœํ”ฝ(Anthropic)์ด ๋ฐœํ‘œํ•œ **Model Context Protocol(MCP)**์€ AI ๋ชจ๋ธ์ด ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋‚˜ ๋„๊ตฌ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์™„์ „ํžˆ ๋ฐ”๊พธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ฐœ๋ฐœ์ž๋Š” ๋‹จ์ˆœํžˆ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์งœ๋Š” ๊ฒƒ์„ ๋„˜์–ด, AI๊ฐ€ ์šฐ๋ฆฌ ํšŒ์‚ฌ์˜ DB๋ฅผ ์ฝ๊ฑฐ๋‚˜ ํŠน์ • API๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” '์ปค๋„ฅํ„ฐ'๋ฅผ ์ง์ ‘ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š” ์‹œ๋Œ€๊ฐ€ ์™”์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๊ฐ€์žฅ ์ƒ์‚ฐ์„ฑ์ด ๋†’์€ Python SDK๋ฅผ ํ™œ์šฉํ•ด ๋‹จ 30๋ถ„ ๋งŒ์— ๋‚˜๋งŒ์˜ MCP ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์‹ค์ „ ๊ณผ์ •์„ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


uploadImage


1. MCP ์„œ๋ฒ„๋ž€ ๋ฌด์—‡์ธ๊ฐ€? (Architecture Overview)

MCP ์„œ๋ฒ„๋Š” AI ๋ชจ๋ธ(ํด๋ผ์ด์–ธํŠธ)๊ณผ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์‚ฌ์ด์˜ ์ค‘๊ณ„์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ํ™”๋œ JSON-RPC ๊ธฐ๋ฐ˜์˜ ๊ทœ๊ฒฉ์„ ์‚ฌ์šฉํ•˜์—ฌ, ํด๋กœ๋“œ๊ฐ€ "์ด ๋ฐ์ดํ„ฐ ์ข€ ๊ฐ€์ ธ์™€์ค˜"๋ผ๊ณ  ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ์ด๋ฅผ ํ•ด์„ํ•ด ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์ด ๊ตฌ์กฐ์˜ ํ•ต์‹ฌ์€ ์ƒํ˜ธ์šด์šฉ์„ฑ์ž…๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ๋งŒ๋“  MCP ์„œ๋ฒ„๋Š” ํด๋กœ๋“œ ๋ฐ์Šคํฌํ†ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ MCP ํ‘œ์ค€์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  IDE๋‚˜ ์„œ๋น„์Šค์—์„œ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


2. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ค€๋น„

๋ณธ๊ฒฉ์ ์ธ ์ฝ”๋”ฉ์— ์•ž์„œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Python 3.10 ์ด์ƒ์˜ ํ™˜๊ฒฝ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

Bash

# MCP SDK ์„ค์น˜
pip install mcp

์šฐ๋ฆฌ๋Š” ์˜ค๋Š˜ **'ํ˜„์žฌ ์‹œ์Šคํ…œ์˜ ๋ฆฌ์†Œ์Šค ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์„œ๋ฒ„'**๋ฅผ ์˜ˆ์ œ๋กœ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. AI๊ฐ€ ๋‚ด ์ปดํ“จํ„ฐ์˜ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํŒŒ์•…ํ•ด ์ตœ์ ํ™” ์ œ์•ˆ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.


3. ๋‹จ๊ณ„๋ณ„ ์„œ๋ฒ„ ๊ตฌํ˜„

Step 1: ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

๊ฐ€์žฅ ๋จผ์ € MCP ์„œ๋ฒ„์˜ ๋ณธ์ฒด๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

Python

from mcp.server.fastmcp import FastMCP

# 'SystemMonitor'๋ผ๋Š” ์ด๋ฆ„์˜ MCP ์„œ๋ฒ„ ์ƒ์„ฑ
mcp = FastMCP("SystemMonitor")

Step 2: ๋„๊ตฌ(Tool) ๋“ฑ๋กํ•˜๊ธฐ

MCP์˜ ํ•ต์‹ฌ์€ AI๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” Tool์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @mcp.tool() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ด์ฌ ํ•จ์ˆ˜๊ฐ€ ์ฆ‰์‹œ AI์˜ ๋„๊ตฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

Python

import psutil

@mcp.tool()
def get_system_stats() -> str:
    """ํ˜„์žฌ ์ปดํ“จํ„ฐ์˜ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค."""
    cpu = psutil.cpu_percent(interval=1)
    memory = psutil.virtual_memory().percent
    return f"ํ˜„์žฌ CPU ์‚ฌ์šฉ๋ฅ ์€ {cpu}%์ด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ ์€ {memory}%์ž…๋‹ˆ๋‹ค."

Tip: ํ•จ์ˆ˜์˜ Docstring(์ฃผ์„)์€ AI๊ฐ€ ์ด ๋„๊ตฌ๋ฅผ ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ํŒ๋‹จํ•˜๋Š” ๊ทผ๊ฑฐ๊ฐ€ ๋˜๋ฏ€๋กœ ๋งค์šฐ ์ƒ์„ธํžˆ ์ ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Step 3: ๋ฆฌ์†Œ์Šค(Resource) ์ •์˜ํ•˜๊ธฐ

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

Python

@mcp.resource("system://info")
def system_info() -> str:
    return "์ด ์„œ๋ฒ„๋Š” MCP SDK๋ฅผ ํ†ตํ•ด ๊ตฌ์ถ•๋œ ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง ์ „์šฉ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค."


4. ์„œ๋ฒ„ ์‹คํ–‰ ๋ฐ Claude Desktop ์—ฐ๋™

์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์„œ๋ฒ„๋ฅผ ํด๋กœ๋“œ์—๊ฒŒ ์ธ์‹์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. ๋กœ์ปฌ ๊ฒฝ๋กœ ํ™•์ธ: ์ž‘์„ฑํ•œ ํŒŒ์ด์ฌ ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: C:/dev/mcp_server.py)

2. ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •: Claude Desktop์˜ ์„ค์ • ํŒŒ์ผ(claude_desktop_config.json)์„ ์—ฝ๋‹ˆ๋‹ค.

JSON

{
  "mcpServers": {
    "my-monitor": {
      "command": "python",
      "args": ["C:/dev/mcp_server.py"]
    }
  }
}

3. ํ™•์ธ: ํด๋กœ๋“œ๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๊ณ  "๋‚ด ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ ์ƒํƒœ ์–ด๋•Œ?"๋ผ๊ณ  ๋ฌผ์–ด๋ณด์„ธ์š”. ํด๋กœ๋“œ๊ฐ€ get_system_stats ๋„๊ตฌ๋ฅผ ์Šค์Šค๋กœ ์‹คํ–‰ํ•˜์—ฌ ๋‹ต๋ณ€์„ ๋‚ด๋†“๋Š”๋‹ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.


5. ์‹ค๋ฌด ์‘์šฉ: ๋‚ด๋ถ€ DB ๋ฐ API ์—ฐ๊ฒฐ

์œ„ ์˜ˆ์ œ๋ฅผ ํ™•์žฅํ•˜๋ฉด ๋ฌด๊ถ๋ฌด์ง„ํ•œ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • Internal DB ์—ฐ๊ฒฐ: SQLAlchemy ๋“ฑ์„ ํ™œ์šฉํ•ด ํŠน์ • ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค๋ฉด, AI๊ฐ€ ์‚ฌ๋‚ด ์ง€ํ‘œ๋ฅผ ์‹ค์‹œ๊ฐ„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • API ์—ฐ๋™: ์‚ฌ๋‚ด Jira๋‚˜ Slack API๋ฅผ ์—ฐ๋™ํ•˜์—ฌ "์–ด์ œ ๋“ฑ๋ก๋œ ๋ฒ„๊ทธ ํ‹ฐ์ผ“๋“ค ์š”์•ฝํ•ด์„œ ๋ณด๊ณ ํ•ด์ค˜" ๊ฐ™์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


6. ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ๊ฟ€ํŒ

  1. ์—๋Ÿฌ ํ•ธ๋“ค๋ง: MCP ์„œ๋ฒ„ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋Š” ๋ฐ˜๋“œ์‹œ ํ…์ŠคํŠธ๋กœ ๋ž˜ํ•‘ํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜์„ธ์š”. AI๊ฐ€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ณ  ์Šค์Šค๋กœ ์ˆ˜์ •์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ๋ณด์•ˆ: AI์—๊ฒŒ ๋ชจ๋“  ๊ถŒํ•œ์„ ์ฃผ๊ธฐ๋ณด๋‹ค, ํ•„์š”ํ•œ ์ฝ๊ธฐ ์ „์šฉ(ReadOnly) ์ฟผ๋ฆฌ๋งŒ ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

  3. ์„ฑ๋Šฅ: ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋ณด๋‚ด๊ธฐ๋ณด๋‹ค ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ํ•„ํ„ฐ๋งํ•ด์„œ ์ „๋‹ฌํ•˜๋„๋ก ๋„๊ตฌ ์ธ์ž(Arguments)๋ฅผ ์„ค๊ณ„ํ•˜์„ธ์š”.


โœ… ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

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

๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ๊ณต๊ฐ๊ณผ ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฌ๋ฉฐ, ๊ตฌํ˜„ ์ค‘ ๋ง‰ํžˆ๋Š” ๋ถ€๋ถ„์€ ์–ธ์ œ๋“  ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”!


์ฃผ์š” ํ‚ค์›Œ๋“œ ๊ฐœ๋ฐœ์ž๋ธ”๋กœ๊ทธ, SDK, Python, TypeScript, ์˜คํ”ˆ์†Œ์Šค, MCP, Anthropic, AI์—์ด์ „ํŠธ, JSON-RPC, ์„œ๋ฒ„๊ตฌ์ถ•