mcp_server_fullstack_with_js_python

jaysys/mcp_server_fullstack_with_js_python

3.2

If you are the rightful owner of mcp_server_fullstack_with_js_python and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

The MCP Mock Project is designed to practice the Model Context Protocol (MCP) structure using Python (FastAPI) and Node.js (Express) implementations of a multiplication table server, along with a client that integrates with a large language model (LLM).

ꡬꡬ단 MCP Mock ν”„λ‘œμ νŠΈ

이 ν”„λ‘œμ νŠΈλŠ” MCP ꡬ쑰λ₯Ό μ‹€μŠ΅ν•˜κΈ° μœ„ν•œ 예제둜, Python(FastAPI)와 Node.js(Express)둜 각각 κ΅¬ν˜„λœ ꡬꡬ단 μ„œλ²„μ™€, LLM(λŒ€ν˜•μ–Έμ–΄λͺ¨λΈ) 연동 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

학생, 개발자, μ‚¬μš©μž λͺ¨λ‘κ°€ μ‰½κ²Œ 따라할 수 μžˆλ„λ‘ 전체 폴더 ꡬ쑰, μ†ŒμŠ€ μ„€λͺ…, λ™μž‘ 원리, μ‹€μŠ΅ 방법, API μ˜ˆμ‹œ, ν•™μŠ΅ 포인트λ₯Ό μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

λ‘œμ»¬μ— LM Studioλ₯Ό μ„€μΉ˜ν•˜μ—¬ μ‹€ν–‰ν•˜κ³ , llmstudio_client.pyλ₯Ό μ°Έκ³ ν•˜μ—¬ LLM에 μ§ˆλ¬Έμ„ λ³΄λ‚΄λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄μ„Έμš”.


1. 전체 폴더/파일 ꡬ쑰

backend/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ mcp_gugudan_server.py   # Python ꡬꡬ단 MCP μ„œλ²„ (FastAPI)
β”‚   β”œβ”€β”€ client.py               # MCP μ„œλ²„/LLM 슀마트 λΌμš°νŒ… ν΄λΌμ΄μ–ΈνŠΈ
β”‚   β”œβ”€β”€ lmstudio_client.py      # LM Studio(둜컬 LLM) 연동 λͺ¨λ“ˆ
β”‚   └── __init__.py
β”œβ”€β”€ js_mcp_gugudan_server/
β”‚   β”œβ”€β”€ server.js               # Node.js ꡬꡬ단 MCP μ„œλ²„ (Express)
β”‚   β”œβ”€β”€ package.json            # Node.js μ˜μ‘΄μ„±
β”‚   └── README.md               # JS μ„œλ²„ 싀행법
β”œβ”€β”€ requirements.txt            # Python μ˜μ‘΄μ„±
β”œβ”€β”€ .gitignore                  # λΆˆν•„μš” 파일 μ œμ™Έ
β”œβ”€β”€ .python-version             # Python 버전 μ§€μ •
└── README.md                   # (μ΅œμƒμœ„) 전체 ν”„λ‘œμ νŠΈ μ„€λͺ…

2. μ†ŒμŠ€ μ„€λͺ… 및 μ•„ν‚€ν…μ²˜ 흐름

(1) Python MCP ꡬꡬ단 μ„œλ²„

  • mcp_gugudan_server.py
    • /mcp/gugudan μ—”λ“œν¬μΈνŠΈλ‘œ 1~9단 ꡬꡬ단을 계산해 λ°˜ν™˜
    • 예: { "query": "3단 μ•Œλ €μ€˜" } β†’ 3단 κ²°κ³Ό λ°˜ν™˜

(2) Node.js MCP ꡬꡬ단 μ„œλ²„

  • server.js
    • Python μ„œλ²„μ™€ λ™μΌν•˜κ²Œ POST /mcp/gugudan 제곡
    • Express 기반, API 응닡 ν˜•μ‹λ„ 동일

(3) 슀마트 ν΄λΌμ΄μ–ΈνŠΈ

  • client.py
    • 질문이 ꡬꡬ단이면 MCP μ„œλ²„μ— λ¨Όμ € μš”μ²­, μ•„λ‹ˆλ©΄ LLM(LM Studio)둜 μžλ™ fallback
    • 예: "9단 μ•Œλ €μ€˜" β†’ MCP μ„œλ²„, "λŒ€ν•œλ―Όκ΅­ μΈκ΅¬λŠ”?" β†’ LLM
  • lmstudio_client.py
    • LM Studio API와 톡신(둜컬 LLM λ‹΅λ³€)
    • LM StudioλŠ” PCμ—μ„œ 직접 μ‹€ν–‰ν•˜λŠ” 무료 LLM μ„œλ²„λ‘œ, OpenAI ν˜Έν™˜ REST APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
    • λ³Έ ν”„λ‘œμ νŠΈλŠ” LM Studioλ₯Ό λ‘œμ»¬μ—μ„œ λ„μ›Œ(http://localhost:1234/v1/chat/completions λ“±) LLM 응닡을 받도둝 μ„€κ³„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

(4) 기타

  • requirements.txt / package.json : 각 언어별 μ˜μ‘΄μ„±
  • .gitignore : Python, Node.js, 에디터, OS μž„μ‹œνŒŒμΌ λͺ¨λ‘ 포함
μ•„ν‚€ν…μ²˜ 흐름도
[μ‚¬μš©μž 질문]
    ↓
[client.py]
  β”œβ”€(ꡬꡬ단 κ΄€λ ¨)─→ [MCP μ„œλ²„(Python/JS)]
  └─(기타 질문)───→ [LLM(LM Studio)]

3. λ™μž‘ 및 μ‹€μŠ΅ 방법 (Step by Step)

(A) Python MCP ꡬꡬ단 μ„œλ²„ μ‹€μŠ΅

  1. μ˜μ‘΄μ„± μ„€μΉ˜
    pip install -r requirements.txt
    
  2. μ„œλ²„ μ‹€ν–‰
    python -m app.mcp_gugudan_server
    # λ˜λŠ”
    uv run python -m app.mcp_gugudan_server
    
  3. ν΄λΌμ΄μ–ΈνŠΈ μ‹€ν–‰
    python -m app.client
    

(B) Node.js MCP ꡬꡬ단 μ„œλ²„ μ‹€μŠ΅

  1. 디렉터리 이동 및 μ˜μ‘΄μ„± μ„€μΉ˜
    cd js_mcp_gugudan_server
    npm install
    
  2. μ„œλ²„ μ‹€ν–‰
    npm start
    

(C) API 직접 ν…ŒμŠ€νŠΈ

curl -X POST http://localhost:8000/mcp/gugudan -H "Content-Type: application/json" -d '{"query": "3단 μ•Œλ €μ€˜"}'

(D) client.py둜 κΈ°λŠ₯ ν…ŒμŠ€νŠΈν•˜κΈ°

1. client.py μ‹€ν–‰
python -m app.client
   # λ˜λŠ”
uv run python -m app.client
2. λ™μž‘ μ˜ˆμ‹œ (좜λ ₯)
질문: 3단 μ•Œλ €μ€˜
[MCP μ„œλ²„ 응닡]
3 x 1 = 3
3 x 2 = 6
...
3 x 9 = 27

질문: λŒ€ν•œλ―Όκ΅­μ˜ μΈκ΅¬λŠ” μ–Όλ§ˆμ•Ό?
 -> μ§ˆλ¬Έλ‚΄μš©μš΄ μ œκ³΅ν•˜λŠ” MCPμ„œλ²„μ™€ κ΄€λ ¨ μ—†μŒ. LLM으둜 λ‹΅λ³€ν•˜κ² μŠ΅λ‹ˆλ‹€.
[LLM 직접 응닡]
2023λ…„ 12μ›” 31일 κΈ°μ€€μœΌλ‘œ, λŒ€ν•œλ―Όκ΅­μ˜ μΈκ΅¬λŠ” μ•½ 51,814,000λͺ…μž…λ‹ˆλ‹€.

질문: 80단 μ•Œλ €μ€˜
 -> μ§ˆλ¬Έλ‚΄μš©μš΄ μ œκ³΅ν•˜λŠ” MCPμ„œλ²„μ™€ κ΄€λ ¨ μ—†μŒ. LLM으둜 λ‹΅λ³€ν•˜κ² μŠ΅λ‹ˆλ‹€.
[LLM 직접 응닡]
80 x 1 = 80
80 x 2 = 160
...
80 x 9 = 720
  • MCP μ„œλ²„κ°€ 처리 κ°€λŠ₯ν•œ ꡬꡬ단(1~9단) μ§ˆλ¬Έμ€ 직접 κ³„μ‚°ν•΄μ„œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • κ·Έ μ™Έμ˜ 질문(상식, 80단 λ“±)은 LLM(LM Studio)둜 μžλ™ fallbackλ˜μ–΄ λ‹΅λ³€ν•©λ‹ˆλ‹€.
  • client.pyλ₯Ό 톡해 μ‹€μ œ λΌμš°νŒ…/응닡 λ™μž‘μ„ μ‰½κ²Œ ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4. ν•™μŠ΅ 포인트 & μ‹€μ „ 팁

  • MCP ꡬ쑰 : μ—¬λŸ¬ 처리 μ»΄ν¬λ„ŒνŠΈ(μ„œλ²„/LLM)λ₯Ό 상황에 따라 μŠ€λ§ˆνŠΈν•˜κ²Œ λΌμš°νŒ…ν•˜λŠ” 방법 μ‹€μŠ΅
  • API 섀계 : Python/Node.js 두 μ–Έμ–΄μ—μ„œ λ™μΌν•œ REST API 섀계 μ‹€μŠ΅
  • μ—λŸ¬ 핸듀링 : 잘λͺ»λœ μš”μ²­(예: "80단 μ•Œλ €μ€˜")μ‹œ gracefulν•˜κ²Œ μ—λŸ¬ λ°˜ν™˜
  • ν™•μž₯μ„± : ꡬꡬ단 μ΄μ™Έμ˜ μˆ˜ν•™ μ—°μ‚°, 기타 AI κΈ°λŠ₯도 동일 ꡬ쑰둜 μ‰½κ²Œ ν™•μž₯ κ°€λŠ₯
  • μ‹€μ „ 연동 : curl, ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œ λ“± μ‹€μ œ API ν™œμš©λ²•κΉŒμ§€ 포함

5. μ°Έκ³ /μΆ”κ°€ 자료

  • .gitignoreλŠ” Python/Node.js/에디터/OS μž„μ‹œνŒŒμΌμ„ λͺ¨λ‘ 포함
  • LM Studio(Llama3 λ“±) API 연동 μ˜ˆμ œλŠ” app/lmstudio_client.py μ°Έκ³ 
  • Node.js 버전은 js_mcp_gugudan_server/README.md μ°Έκ³ 

[뢀둝] LLM(LM Studio) ꡬ성 및 ν™œμš© μ•ˆλ‚΄

LM Studioλž€?

  • LM StudioλŠ” PCμ—μ„œ 직접 μ‹€ν–‰ν•  수 μžˆλŠ” 무료 LLM(λŒ€ν˜•μ–Έμ–΄λͺ¨λΈ) μ„œλ²„μž…λ‹ˆλ‹€.
  • OpenAI API와 ν˜Έν™˜λ˜λŠ” REST API(http://localhost:1234/v1/chat/completions λ“±)λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • GPT-3, Llama3 λ“± λ‹€μ–‘ν•œ λͺ¨λΈμ„ λ‹€μš΄λ‘œλ“œν•˜μ—¬ λ‘œμ»¬μ—μ„œ ν”„λΌμ΄λΉ—ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ³Έ ν”„λ‘œμ νŠΈμ—μ„œμ˜ ν™œμš©

  • app/lmstudio_client.pyμ—μ„œ LM Studio API둜 μ§ˆλ¬Έμ„ 보내고, LLM이 닡변을 μƒμ„±ν•©λ‹ˆλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈ(client.py)λŠ” ꡬꡬ단 λ“± MCP μ„œλ²„κ°€ μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜λŠ” μ§ˆλ¬Έμ„ μžλ™μœΌλ‘œ LM Studio둜 λΌμš°νŒ…ν•©λ‹ˆλ‹€.
  • LM StudioλŠ” λ°˜λ“œμ‹œ PCμ—μ„œ μ‹€ν–‰ 쀑이어야 ν•˜λ©°, κΈ°λ³Έ ν¬νŠΈλŠ” 1234μž…λ‹ˆλ‹€.

LM Studio μ„€μ • μ˜ˆμ‹œ

  1. LM Studio 곡식 μ‚¬μ΄νŠΈμ—μ„œ λ‹€μš΄λ‘œλ“œ 및 μ„€μΉ˜
  2. LM Studio μ‹€ν–‰ ν›„, μ›ν•˜λŠ” λͺ¨λΈ(예: Llama3) 선택 및 λ‹€μš΄λ‘œλ“œ
  3. "OpenAI Compatible API" κΈ°λŠ₯ ν™œμ„±ν™” (μ„€μ •μ—μ„œ ν† κΈ€)
  4. μ„œλ²„κ°€ μΌœμ§€λ©΄ http://localhost:1234/v1/chat/completions μ£Όμ†Œλ‘œ API μš”μ²­ κ°€λŠ₯

μ˜ˆμ‹œ μ½”λ“œ (app/lmstudio_client.py)

LMSTUDIO_API_URL = "http://localhost:1234/v1/chat/completions"
# ... μ΄ν•˜ μƒλž΅ ...

이 μžλ£ŒλŠ” MCP ꡬ쑰와 μ„œλ²„-ν΄λΌμ΄μ–ΈνŠΈ-LLM 연동을 처음 λ°°μš°λŠ” 학생/개발자/μ‚¬μš©μž λͺ¨λ‘μ—κ²Œ μ‹€μ „μ μœΌλ‘œ 도움이 λ˜λ„λ‘ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κΆκΈˆν•œ μ μ΄λ‚˜ ν™•μž₯ 아이디어가 있으면 μ–Έμ œλ“  μ§ˆλ¬Έν•˜μ„Έμš”!