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.1.tar.gz (7.2 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.1.tar.gz.

File metadata

  • Download URL: iflow_mcp_teddynote_lab_mcp_tutorial-0.1.1.tar.gz
  • Upload date:
  • Size: 7.2 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.1.tar.gz
Algorithm Hash digest
SHA256 99cc8605bf80005beab4273154a7c4e86681d3f54cb7517cb5bcf36e01f3914a
MD5 e431c49a26208eb7513cb8aa95a772a3
BLAKE2b-256 5bd19ef979198f1aa84fc8fb85185d3fd1905e2f3688324f9ce7426050297137

See more details on using hashes here.

File details

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

File metadata

  • Download URL: iflow_mcp_teddynote_lab_mcp_tutorial-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.6 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5f4d57a923008c5fd588c57556edc2a7ab6044eed3ab25ad7d83d308764fd4ca
MD5 9aec41ce5fab78be28d38afbb0dfd67f
BLAKE2b-256 3699c6bb371065a65c5cb89f29c58493c4df2c60f6d20b251081d48a17ee5cfb

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