Skip to main content

MCP tutorial project with weather, time, and RAG servers

Project description

๐Ÿค– 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 ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์„ธ์š”! ๐Ÿš€

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iflow_mcp_teddynote_lab_mcp_tutorial-0.1.0.tar.gz (8.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file iflow_mcp_teddynote_lab_mcp_tutorial-0.1.0.tar.gz.

File metadata

  • Download URL: iflow_mcp_teddynote_lab_mcp_tutorial-0.1.0.tar.gz
  • Upload date:
  • Size: 8.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for iflow_mcp_teddynote_lab_mcp_tutorial-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c395e48e1686c80ed0a969a4d6a5ad1cc0a9bffbe800d0b98f1c2a456fa2cea5
MD5 82b135443a6298430a33c66a242088af
BLAKE2b-256 64505e5a313c5b42e27dc2c569354cdf886f62c85d4c9a67d6999bc77be43613

See more details on using hashes here.

File details

Details for the file iflow_mcp_teddynote_lab_mcp_tutorial-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: iflow_mcp_teddynote_lab_mcp_tutorial-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for iflow_mcp_teddynote_lab_mcp_tutorial-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5dad5dc20fd3ea7b7208855f9e1e4d6ee0226deb97b0043d13eb9bcbc690460e
MD5 af2991400cda038fbaa163391fa80ced
BLAKE2b-256 d061642e3198f6ca6d0671dcbe5c6c42c6f1e4c19416fc3afdd1eb6320999eed

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page