Skip to main content

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

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.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

Supported by

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