Skip to content

teddynote-lab/mcp-tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

3 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿค– MCP (Model Context Protocol) Tutorial

์ž…๋ฌธ์ž๋ฅผ ์œ„ํ•œ ์ฒด๊ณ„์ ์ธ Model Context Protocol ํ•™์Šต ๊ฐ€์ด๋“œ

๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

์ด ํŠœํ† ๋ฆฌ์–ผ์€ Model Context Protocol(MCP) ์„ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ์‹ค์Šต ์ค‘์‹ฌ ํ•™์Šต ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค. LangGraph์™€ MCP๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์™ธ๋ถ€ ๋„๊ตฌ์™€ ์„œ๋น„์Šค๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฐ•๋ ฅํ•œ AI ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ํ•™์Šต ๋ชฉํ‘œ

  • MCP์˜ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด
  • FastMCP๋ฅผ ํ™œ์šฉํ•œ MCP ์„œ๋ฒ„ ๊ฐœ๋ฐœ
  • LangGraph์™€ MCP์˜ ํšจ๊ณผ์ ์ธ ํ†ตํ•ฉ
  • ๋‹ค์ค‘ MCP ์„œ๋ฒ„ ๊ด€๋ฆฌ ๋ฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
  • ์‹ค์ „ RAG ์‹œ์Šคํ…œ ๊ตฌํ˜„

๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ํ‘œ์ค€ํ™”๋œ ํ”„๋กœํ† ์ฝœ: MCP ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ๋„๊ตฌ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„
  • ๋‹ค์–‘ํ•œ ์ „์†ก ๋ฐฉ์‹: stdio ๋ฐ Streamable HTTP ์ง€์›
  • ๋™์  ๋„๊ตฌ ๊ฒ€์ƒ‰: ๋Ÿฐํƒ€์ž„ ๋„๊ตฌ ์ž๋™ ๊ฒ€์ƒ‰ ๋ฐ ๋กœ๋“œ
  • ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜: ์—ฌ๋Ÿฌ MCP ์„œ๋ฒ„ ๋™์‹œ ์—ฐ๊ฒฐ ์ง€์›
  • ์‹ค์Šต ์ค‘์‹ฌ ํ•™์Šต: Jupyter Notebook์„ ํ†ตํ•œ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํ•™์Šต

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

mcp-tutorial/
โ”œโ”€โ”€ 01-LangGraph-MCP-Tutorial.ipynb  # ๋ฉ”์ธ ํŠœํ† ๋ฆฌ์–ผ ๋…ธํŠธ๋ถ
โ”œโ”€โ”€ server/                           # MCP ์„œ๋ฒ„ ๊ตฌํ˜„์ฒด
โ”‚   โ”œโ”€โ”€ mcp_server_local.py         # ๋กœ์ปฌ ๋‚ ์”จ ์„œ๋น„์Šค (stdio)
โ”‚   โ”œโ”€โ”€ mcp_server_remote.py        # ์›๊ฒฉ ์‹œ๊ฐ„ ์„œ๋น„์Šค (HTTP)
โ”‚   โ”œโ”€โ”€ mcp_server_rag.py           # RAG ์„œ๋น„์Šค (๋ฒกํ„ฐ ๊ฒ€์ƒ‰)
โ”‚   โ””โ”€โ”€ rag/                        # RAG ๊ด€๋ จ ์œ ํ‹ธ๋ฆฌํ‹ฐ
โ”‚       โ”œโ”€โ”€ base.py
โ”‚       โ”œโ”€โ”€ pdf.py
โ”‚       โ””โ”€โ”€ utils.py
โ”œโ”€โ”€ assets/                          # ์ด๋ฏธ์ง€ ๋ฐ ๋ฆฌ์†Œ์Šค
โ”œโ”€โ”€ pyproject.toml                   # ํ”„๋กœ์ ํŠธ ์„ค์ •
โ””โ”€โ”€ .env.example                     # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์˜ˆ์‹œ

๐Ÿ›  ์„ค์น˜ ๋ฐฉ๋ฒ•

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

์„ค์น˜ ๋‹จ๊ณ„

  1. ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/teddynote-lab/mcp-tutorial.git
cd mcp-tutorial
  1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
cp .env.example .env
# .env ํŒŒ์ผ์„ ์—ด์–ด ํ•„์š”ํ•œ API ํ‚ค ์ž…๋ ฅ
  1. ์˜์กด์„ฑ ์„ค์น˜
# UV๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํŒจํ‚ค์ง€ ์„ค์น˜
uv sync

# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
source .venv/bin/activate  # macOS/Linux
# ๋˜๋Š”
.venv\Scripts\activate  # Windows

๐ŸŽ“ ํ•™์Šต ๊ฒฝ๋กœ

Part 1: MCP ๊ธฐ๋ณธ ๊ฐœ๋…

  • MCP ํ”„๋กœํ† ์ฝœ ์ดํ•ด
  • ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜ ํ•™์Šต

Part 2: ๊ธฐ๋ณธ MCP ์„œ๋ฒ„ ์ƒ์„ฑ

  • FastMCP๋ฅผ ํ™œ์šฉํ•œ ์„œ๋ฒ„ ๊ตฌํ˜„
  • stdio ์ „์†ก ๋ฐฉ์‹ ์ดํ•ด

Part 3: MultiServerMCPClient ์„ค์ •

  • ๋‹ค์ค‘ ์„œ๋ฒ„ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•
  • ๋„๊ตฌ ๋™์  ๋กœ๋“œ

Part 4: React Agent์™€ MCP ํ†ตํ•ฉ

  • LangGraph React Agent ๊ตฌ์„ฑ
  • MCP ๋„๊ตฌ ๋ฐ”์ธ๋”ฉ

Part 5: ToolNode์™€ MCP ํ†ตํ•ฉ

  • ์ปค์Šคํ…€ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ•
  • ์„ธ๋ฐ€ํ•œ ์ œ์–ด ๊ตฌํ˜„

Part 6: ์™ธ๋ถ€ MCP ์„œ๋ฒ„ ํ™œ์šฉ

  • Smithery AI ํ”Œ๋žซํผ ์—ฐ๋™
  • ์„œ๋“œํŒŒํ‹ฐ ๋„๊ตฌ ํ†ตํ•ฉ

Part 7: Dify MCP ์„œ๋ฒ„ ์—ฐ๋™

  • Dify ํ”Œ๋žซํผ ํ™œ์šฉ
  • ์‹ค์ „ ํ†ตํ•ฉ ์˜ˆ์ œ

๐Ÿ’ป ์‹คํ–‰ ๋ฐฉ๋ฒ•

MCP ์„œ๋ฒ„ ์‹คํ–‰

# ๋กœ์ปฌ ๋‚ ์”จ ์„œ๋ฒ„ (stdio)
uv run python server/mcp_server_local.py

# ์›๊ฒฉ ์‹œ๊ฐ„ ์„œ๋ฒ„ (HTTP, ํฌํŠธ 8002)
uv run python server/mcp_server_remote.py

# RAG ์„œ๋ฒ„ (๋ฌธ์„œ ๊ฒ€์ƒ‰)
uv run python server/mcp_server_rag.py

MCP Inspector๋กœ ํ…Œ์ŠคํŠธ

# ๋ธŒ๋ผ์šฐ์ €์—์„œ MCP ์„œ๋ฒ„ ํ…Œ์ŠคํŠธ
npx @modelcontextprotocol/inspector

ํŠœํ† ๋ฆฌ์–ผ ์‹คํ–‰

# Jupyter Notebook ์‹คํ–‰
jupyter notebook 01-LangGraph-MCP-Tutorial.ipynb

๐Ÿ”ง ํ™˜๊ฒฝ ์„ค์ •

.env ํŒŒ์ผ์— ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

# ํ•„์ˆ˜
OPENAI_API_KEY=your_openai_api_key
TAVILY_API_KEY=your_tavily_api_key

# ์„ ํƒ (์ถ”๊ฐ€ ๊ธฐ๋Šฅ)
LANGCHAIN_API_KEY=your_langchain_api_key
CONTEXT7_API_KEY=your_context7_api_key

๐Ÿ“š ํ•ต์‹ฌ ์˜์กด์„ฑ

  • LangGraph: AI ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ•
  • FastMCP: MCP ์„œ๋ฒ„ ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ
  • langchain-mcp-adapters: LangChain-MCP ํ†ตํ•ฉ
  • FAISS: ๋ฒกํ„ฐ ์Šคํ† ๋ฆฌ์ง€ (RAG์šฉ)
  • PyMuPDF: PDF ๋ฌธ์„œ ์ฒ˜๋ฆฌ

๐Ÿค ๊ธฐ์—ฌ ๋ฐฉ๋ฒ•

์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ต์œก ๋ชฉ์ ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์„  ์‚ฌํ•ญ์ด๋‚˜ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•˜์‹œ๋ฉด Issue๋ฅผ ๋“ฑ๋กํ•ด ์ฃผ์„ธ์š”.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“– ์ฐธ๊ณ  ์ž๋ฃŒ

๐ŸŽฅ ํ•™์Šต ๋ฆฌ์†Œ์Šค

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ต์œก ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

โœจ ์ œ์ž‘

Made by TeddyNote LAB


MCP์™€ LangGraph๋กœ ์ฐจ์„ธ๋Œ€ AI ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์„ธ์š”! ๐Ÿš€

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published