Spaces:
Running
A newer version of the Streamlit SDK is available:
1.48.1
LangGraph ์์ด์ ํธ + MCP
ํ๋ก์ ํธ ๊ฐ์
LangChain-MCP-Adapters
๋ LangChain AI์์ ์ ๊ณตํ๋ ํดํท์ผ๋ก, AI ์์ด์ ํธ๊ฐ Model Context Protocol(MCP)์ ํตํด ์ธ๋ถ ๋๊ตฌ ๋ฐ ๋ฐ์ดํฐ ์์ค์ ์ํธ์์ฉํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด ํ๋ก์ ํธ๋ MCP ๋๊ตฌ๋ฅผ ํตํด ๋ค์ํ ๋ฐ์ดํฐ ์์ค์ API์ ์ ๊ทผํ ์ ์๋ ReAct ์์ด์ ํธ๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํ ์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
ํน์ง
- Streamlit ์ธํฐํ์ด์ค: MCP ๋๊ตฌ๊ฐ ํฌํจ๋ LangGraph
ReAct Agent
์ ์ํธ์์ฉํ๊ธฐ ์ํ ์ฌ์ฉ์ ์นํ์ ์ธ ์น ์ธํฐํ์ด์ค - ๋๊ตฌ ๊ด๋ฆฌ: UI๋ฅผ ํตํด MCP ๋๊ตฌ๋ฅผ ์ถ๊ฐ, ์ ๊ฑฐ ๋ฐ ๊ตฌ์ฑ(Smithery JSON ํ์ ์ง์). ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์์ํ์ง ์๊ณ ๋ ๋์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ์คํธ๋ฆฌ๋ฐ ์๋ต: ์์ด์ ํธ ์๋ต๊ณผ ๋๊ตฌ ํธ์ถ์ ์ค์๊ฐ์ผ๋ก ํ์ธ
- ๋ํ ๊ธฐ๋ก: ์์ด์ ํธ์์ ๋ํ ์ถ์ ๋ฐ ๊ด๋ฆฌ
MCP ์ํคํ ์ฒ
MCP(Model Context Protocol)๋ ์ธ ๊ฐ์ง ์ฃผ์ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
MCP ํธ์คํธ: Claude Desktop, IDE ๋๋ LangChain/LangGraph์ ๊ฐ์ด MCP๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ณ ์ ํ๋ ํ๋ก๊ทธ๋จ.
MCP ํด๋ผ์ด์ธํธ: ์๋ฒ์ 1:1 ์ฐ๊ฒฐ์ ์ ์งํ๋ ํ๋กํ ์ฝ ํด๋ผ์ด์ธํธ๋ก, ํธ์คํธ์ ์๋ฒ ์ฌ์ด์ ์ค๊ฐ์ ์ญํ ์ ํฉ๋๋ค.
MCP ์๋ฒ: ํ์คํ๋ ๋ชจ๋ธ ์ปจํ ์คํธ ํ๋กํ ์ฝ์ ํตํด ํน์ ๊ธฐ๋ฅ์ ๋ ธ์ถํ๋ ๊ฒฝ๋ ํ๋ก๊ทธ๋จ์ผ๋ก, ์ฃผ์ ๋ฐ์ดํฐ ์์ค ์ญํ ์ ํฉ๋๋ค.
Docker ๋ก ๋น ๋ฅธ ์คํ
๋ก์ปฌ Python ํ๊ฒฝ์ ์ค์ ํ์ง ์๊ณ ๋ Docker๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํ๋ก์ ํธ๋ฅผ ์ฝ๊ฒ ์คํํ ์ ์์ต๋๋ค.
ํ์ ์๊ตฌ์ฌํญ(Docker Desktop)
์๋์ ๋งํฌ์์ Docker Desktop์ ์ค์นํฉ๋๋ค.
Docker Compose๋ก ์คํํ๊ธฐ
dockers
๋๋ ํ ๋ฆฌ๋ก ์ด๋
cd dockers
- ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ API ํค๊ฐ ํฌํจ๋
.env
ํ์ผ ์์ฑ.
cp .env.example .env
๋ฐ๊ธ ๋ฐ์ API ํค๋ฅผ .env
ํ์ผ์ ์
๋ ฅํฉ๋๋ค.
(์ฐธ๊ณ ) ๋ชจ๋ API ํค๊ฐ ํ์ํ์ง ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ๋ ฅํ์ธ์.
ANTHROPIC_API_KEY
: Anthropic API ํค๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ "claude-3-7-sonnet-latest", "claude-3-5-sonnet-latest", "claude-3-haiku-latest" ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.OPENAI_API_KEY
: OpenAI API ํค๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ "gpt-4o", "gpt-4o-mini" ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.LANGSMITH_API_KEY
: LangSmith API ํค๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ LangSmith tracing์ ์ฌ์ฉํฉ๋๋ค.
ANTHROPIC_API_KEY=your_anthropic_api_key
OPENAI_API_KEY=your_openai_api_key
LANGSMITH_API_KEY=your_langsmith_api_key
LANGSMITH_PROJECT=LangGraph-MCP-Agents
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
(์ ๊ท ๊ธฐ๋ฅ) ๋ก๊ทธ์ธ/๋ก๊ทธ์์ ๊ธฐ๋ฅ ์ฌ์ฉ
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ USE_LOGIN
์ true
๋ก ์ค์ ํ๊ณ , USER_ID
์ USER_PASSWORD
๋ฅผ ์
๋ ฅํฉ๋๋ค.
USE_LOGIN=true
USER_ID=admin
USER_PASSWORD=admin123
๋ง์ฝ, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ์ง ์๋ค๋ฉด, USE_LOGIN
์ false
๋ก ์ค์ ํฉ๋๋ค.
USE_LOGIN=false
- ์์คํ ์ํคํ ์ฒ์ ๋ง๋ Docker Compose ํ์ผ ์ ํ.
AMD64/x86_64 ์ํคํ ์ฒ(Intel/AMD ํ๋ก์ธ์)
# ์ปจํ
์ด๋ ์คํ
docker compose -f docker-compose-KOR.yaml up -d
ARM64 ์ํคํ ์ฒ(Apple Silicon M1/M2/M3/M4)
# ์ปจํ
์ด๋ ์คํ
docker compose -f docker-compose-KOR-mac.yaml up -d
- ๋ธ๋ผ์ฐ์ ์์ http://localhost:8585 ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์
(์ฐธ๊ณ )
- ํฌํธ๋ ๋ค๋ฅธ ์ค์ ์ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ, ๋น๋ ์ ์ ํด๋น docker-compose-KOR.yaml ํ์ผ์ ํธ์งํ์ธ์.
์์ค์ฝ๋๋ก ๋ถํฐ ์ง์ ์ค์น
- ์ด ์ ์ฅ์๋ฅผ ํด๋ก ํฉ๋๋ค
git clone https://github.com/teddynote-lab/langgraph-mcp-agents.git
cd langgraph-mcp-agents
- ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๊ณ uv๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ์ค์นํฉ๋๋ค
uv venv
uv pip install -r requirements.txt
source .venv/bin/activate # Windows์ ๊ฒฝ์ฐ: .venv\Scripts\activate
- API ํค๊ฐ ํฌํจ๋
.env
ํ์ผ์ ์์ฑํฉ๋๋ค(.env.example
์์ ๋ณต์ฌ)
cp .env.example .env
๋ฐ๊ธ ๋ฐ์ API ํค๋ฅผ .env
ํ์ผ์ ์
๋ ฅํฉ๋๋ค.
(์ฐธ๊ณ ) ๋ชจ๋ API ํค๊ฐ ํ์ํ์ง ์์ต๋๋ค. ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ๋ ฅํ์ธ์.
ANTHROPIC_API_KEY
: Anthropic API ํค๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ "claude-3-7-sonnet-latest", "claude-3-5-sonnet-latest", "claude-3-haiku-latest" ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.OPENAI_API_KEY
: OpenAI API ํค๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ "gpt-4o", "gpt-4o-mini" ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค.LANGSMITH_API_KEY
: LangSmith API ํค๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ LangSmith tracing์ ์ฌ์ฉํฉ๋๋ค.
ANTHROPIC_API_KEY=your_anthropic_api_key
OPENAI_API_KEY=your_openai_api_key(optional)
LANGSMITH_API_KEY=your_langsmith_api_key
LANGSMITH_PROJECT=LangGraph-MCP-Agents
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
- (์ ๊ท ๊ธฐ๋ฅ) ๋ก๊ทธ์ธ/๋ก๊ทธ์์ ๊ธฐ๋ฅ ์ฌ์ฉ
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ USE_LOGIN
์ true
๋ก ์ค์ ํ๊ณ , USER_ID
์ USER_PASSWORD
๋ฅผ ์
๋ ฅํฉ๋๋ค.
USE_LOGIN=true
USER_ID=admin
USER_PASSWORD=admin123
๋ง์ฝ, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ์ง ์๋ค๋ฉด, USE_LOGIN
์ false
๋ก ์ค์ ํฉ๋๋ค.
USE_LOGIN=false
์ฌ์ฉ๋ฒ
- Streamlit ์ ํ๋ฆฌ์ผ์ด์
์ ์์ํฉ๋๋ค. (ํ๊ตญ์ด ๋ฒ์ ํ์ผ์
app_KOR.py
์ ๋๋ค.)
streamlit run app_KOR.py
์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ธ๋ผ์ฐ์ ์์ ์คํ๋์ด ๋ฉ์ธ ์ธํฐํ์ด์ค๋ฅผ ํ์ํฉ๋๋ค.
์ฌ์ด๋๋ฐ๋ฅผ ์ฌ์ฉํ์ฌ MCP ๋๊ตฌ๋ฅผ ์ถ๊ฐํ๊ณ ๊ตฌ์ฑํฉ๋๋ค
์ ์ฉํ MCP ์๋ฒ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด Smithery๋ฅผ ๋ฐฉ๋ฌธํ์ธ์.
๋จผ์ , ์ฌ์ฉํ๊ณ ์ ํ๋ ๋๊ตฌ๋ฅผ ์ ํํฉ๋๋ค.
์ค๋ฅธ์ชฝ์ JSON ๊ตฌ์ฑ์์ COPY ๋ฒํผ์ ๋๋ฆ ๋๋ค.
๋ณต์ฌ๋ JSON ๋ฌธ์์ด์ Tool JSON
์น์
์ ๋ถ์ฌ๋ฃ์ต๋๋ค.

Add Tool
๋ฒํผ์ ๋๋ฌ "Registered Tools List" ์น์
์ ์ถ๊ฐํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, "Apply" ๋ฒํผ์ ๋๋ฌ ์๋ก์ด ๋๊ตฌ๋ก ์์ด์ ํธ๋ฅผ ์ด๊ธฐํํ๋๋ก ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฉํฉ๋๋ค.

- ์์ด์ ํธ์ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
- ์ฑํ ์ธํฐํ์ด์ค์์ ์ง๋ฌธ์ ํ์ฌ ๊ตฌ์ฑ๋ MCP ๋๊ตฌ๋ฅผ ํ์ฉํ๋ ReAct ์์ด์ ํธ์ ์ํธ์์ฉํฉ๋๋ค.
ํธ์ฆ์จ ํํ ๋ฆฌ์ผ
๊ฐ๋ฐ์๊ฐ MCP์ LangGraph์ ํตํฉ ์๋ ๋ฐฉ์์ ๋ํด ๋ ๊น์ด ์์๋ณด๋ ค๋ฉด, ํฌ๊ด์ ์ธ Jupyter ๋ ธํธ๋ถ ํํ ๋ฆฌ์ผ์ ์ ๊ณตํฉ๋๋ค:
- ๋งํฌ: MCP-HandsOn-KOR.ipynb
์ด ํธ์ฆ์จ ํํ ๋ฆฌ์ผ์ ๋ค์ ๋ด์ฉ์ ๋ค๋ฃน๋๋ค.
- MCP ํด๋ผ์ด์ธํธ ์ค์ - MCP ์๋ฒ์ ์ฐ๊ฒฐํ๊ธฐ ์ํ MultiServerMCPClient ๊ตฌ์ฑ ๋ฐ ์ด๊ธฐํ ๋ฐฉ๋ฒ ํ์ต
- ๋ก์ปฌ MCP ์๋ฒ ํตํฉ - SSE ๋ฐ Stdio ๋ฉ์๋๋ฅผ ํตํด ๋ก์ปฌ์์ ์คํ ์ค์ธ MCP ์๋ฒ์ ์ฐ๊ฒฐ
- RAG ํตํฉ - ๋ฌธ์ ๊ฒ์ ๊ธฐ๋ฅ์ ์ํด MCP๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํธ๋ฆฌ๋ฒ ๋๊ตฌ ์ ๊ทผ
- ํผํฉ ์ ์ก ๋ฐฉ๋ฒ - ํ๋์ ์์ด์ ํธ์์ ๋ค์ํ ์ ์ก ํ๋กํ ์ฝ(SSE ๋ฐ Stdio) ๊ฒฐํฉ
- LangChain ๋๊ตฌ + MCP - MCP ๋๊ตฌ์ ํจ๊ป ๋ค์ดํฐ๋ธ LangChain ๋๊ตฌ ํตํฉ
์ด ํํ ๋ฆฌ์ผ์ MCP ๋๊ตฌ๋ฅผ LangGraph ์์ด์ ํธ์ ๊ตฌ์ถํ๊ณ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๋ ๋จ๊ณ๋ณ ์ค๋ช ์ด ํฌํจ๋ ์ค์ฉ์ ์ธ ์์ ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ผ์ด์ ์ค
MIT License