์ ๋ฌธ์๋ฅผ ์ํ ์ฒด๊ณ์ ์ธ 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 # ํ๊ฒฝ ๋ณ์ ์์
- Python 3.11 ์ด์
- UV ํจํค์ง ๋งค๋์ (์ค์น ๊ฐ์ด๋)
- ์ ์ฅ์ ํด๋ก
git clone https://github.com/teddynote-lab/mcp-tutorial.git
cd mcp-tutorial
- ํ๊ฒฝ ๋ณ์ ์ค์
cp .env.example .env
# .env ํ์ผ์ ์ด์ด ํ์ํ API ํค ์
๋ ฅ
- ์์กด์ฑ ์ค์น
# UV๋ฅผ ์ฌ์ฉํ ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํจํค์ง ์ค์น
uv sync
# ๊ฐ์ํ๊ฒฝ ํ์ฑํ
source .venv/bin/activate # macOS/Linux
# ๋๋
.venv\Scripts\activate # Windows
- MCP ํ๋กํ ์ฝ ์ดํด
- ๊ธฐ๋ณธ ์ํคํ ์ฒ ํ์ต
- FastMCP๋ฅผ ํ์ฉํ ์๋ฒ ๊ตฌํ
- stdio ์ ์ก ๋ฐฉ์ ์ดํด
- ๋ค์ค ์๋ฒ ๊ด๋ฆฌ ๋ฐฉ๋ฒ
- ๋๊ตฌ ๋์ ๋ก๋
- LangGraph React Agent ๊ตฌ์ฑ
- MCP ๋๊ตฌ ๋ฐ์ธ๋ฉ
- ์ปค์คํ ์ํฌํ๋ก์ฐ ๊ตฌ์ถ
- ์ธ๋ฐํ ์ ์ด ๊ตฌํ
- Smithery AI ํ๋ซํผ ์ฐ๋
- ์๋ํํฐ ๋๊ตฌ ํตํฉ
- Dify ํ๋ซํผ ํ์ฉ
- ์ค์ ํตํฉ ์์
# ๋ก์ปฌ ๋ ์จ ์๋ฒ (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 ์๋ฒ ํ
์คํธ
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๋ฅผ ๋ฑ๋กํด ์ฃผ์ธ์.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
์ด ํ๋ก์ ํธ๋ ๊ต์ก ๋ชฉ์ ์ผ๋ก๋ง ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
Made by TeddyNote LAB
MCP์ LangGraph๋ก ์ฐจ์ธ๋ AI ์์ด์ ํธ๋ฅผ ๊ตฌ์ถํ์ธ์! ๐