LangGraph ReAct Agents with an ability to use MCP Tools dynamically
์ฑํ ์ธํฐํ์ด์ค
LangGraph Dynamic MCP Agents
์ Model Context Protocol(MCP)์ ํตํด ๋ค์ํ ์ธ๋ถ ๋๊ตฌ์ ๋ฐ์ดํฐ ์์ค์ ์ ๊ทผํ ์ ์๋ ReAct ์์ด์ ํธ๋ฅผ ๊ตฌํํ ํ๋ก์ ํธ์
๋๋ค. ์ด ํ๋ก์ ํธ๋ LangGraph ์ ReAct ์์ด์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, MCP ๋๊ตฌ๋ฅผ ์ฝ๊ฒ ์ถ๊ฐํ๊ณ ๊ตฌ์ฑํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋์ ๋ฐฉ์์ผ๋ก ๋๊ตฌ ์ค์ ๋์๋ณด๋
http://localhost:2025
์ ์ ์ํ์ฌ ๋๊ตฌ ์ค์ ๋์๋ณด๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๋๊ตฌ ์ถ๊ฐ ํญ์์ Smithery ์์ ์ฌ์ฉํ MCP ๋๊ตฌ์ JSON ๊ตฌ์ฑ์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ํ์ฌ ๋๊ตฌ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ค์๊ฐ ๋ฐ์
๋๊ตฌ ์ค์ ๋์๋ณด๋์์ ๋๊ตฌ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ๋ฉด ์ค์๊ฐ์ผ๋ก ๋ฐ์๋ฉ๋๋ค.
์์คํ ํ๋กฌํํธ ์ค์
prompts/system_prompt.yaml
ํ์ผ์ ์์ ํ์ฌ ์์คํ
ํ๋กฌํํธ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์ด ๋ํ ๋์ ์ผ๋ก ๋ฐ๋ก ๋ฐ์๋๋ ํํ์ ๋๋ค.
๋ง์ฝ, ์์ด์ ํธ์ ์ค์ ๋๋ ์์คํ
ํ๋กฌํํธ๋ฅผ ์์ ํ๊ณ ์ถ๋ค๋ฉด prompts/system_prompt.yaml
ํ์ผ์ ๋ด์ฉ์ ์์ ํ๋ฉด ๋ฉ๋๋ค.
git clone https://github.com/teddynote-lab/langgraph-dynamic-mcp-agents
cd langgraph-dynamic-mcp-agents
.env
ํ์ผ ์ค์ ํ๊ธฐ.env.example
ํ์ผ์ .env
๋ก ๋ณต์ฌํ๊ณ ํ์ํ API ํค๋ฅผ ์ถ๊ฐํฉ๋๋ค.
cp .env.example .env
.env
ํ์ผ์์ LLM_PROVIDER
๋ฅผ ์ค์ ํฉ๋๋ค.
์ ํ ๊ฐ๋ฅ(ํ 1): ANTHROPIC
, OPENAI
, AZURE_OPENAI
LLM_PROVIDER=AZURE_OPENAI
์๋๋ ํ์ํ API ํค ๋ชฉ๋ก์
๋๋ค. (์ ํํ LLM_PROVIDER
์ ๋ฐ๋ผ ์ค์ ํฉ๋๋ค)
Anthropic
, OpenAI
, Azure OpenAI
์์ ์ฌ์ฉํ API ํค๋ฅผ ์ค์ ํฉ๋๋ค.(๋ฐ๋์ ํ๋์ ๋ชจ๋ธ์ ์ค์ ๋์ด์ผ ํฉ๋๋ค.)
ANTHROPIC_API_KEY
: Anthropic API ํคOPENAI_API_KEY
: OpenAI API ํคAZURE_OPENAI_API_KEY
: Azure OpenAI API ํคAZURE_OPENAI_ENDPOINT
: Azure OpenAI ์๋ํฌ์ธํธmcp-config
ํด๋์ ์๋ mcp_config.json
ํ์ผ์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ธ์ด ์ฌ์ฉํ MCP ๋๊ตฌ๋ฅผ ์ค์ ํฉ๋๋ค.
๋ฐ๋ผ์, ๋ฏธ๋ฆฌ ์ฌ์ฉํ๊ณ ์ ํ๋ MCP ๋๊ตฌ๋ฅผ JSON ํ์์ผ๋ก ์ค์ ํด ๋ ์ ์์ต๋๋ค. ์ด ๊ณผ์ ์ ๋๊ตฌ ์ค์ ๋์๋ณด๋์์๋ ์ค์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
์๋๋ ์ํ๋ก ์์ฑ๋ ์์์ ๋๋ค.
{
"mcpServers": {
"perplexity-search": {
"command": "npx",
"args": [
"-y",
"@smithery/cli@latest",
"run",
"@arjunkmrm/perplexity-search",
"--key",
"SMITHERY_API_KEY ๋ฅผ ์
๋ ฅํ์ธ์"
],
"transport": "stdio"
},
"get_current_time": {
"command": "python",
"args": [
"/app/resources/mcp_server_time.py"
],
"transport": "stdio"
}
}
}
stdio
์๋ฒ๋ก ์ถ๊ฐresources
ํด๋์ ์๋ mcp_server_time.py
ํ์ผ์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.์ฌ์ฉํ๊ณ ์ ํ๋ ์ปค์คํ
์์ฑ๋ .py ํ์ผ์ resources
ํด๋์ ์ถ๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ stdio
์๋ฒ๋ก ์คํํ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
mcp-config/mcp_config.json
์ ์ถ๊ฐํ ๋ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์์ ํฉ๋๋ค.
๊ท์น
./resources/ํ์ผ๋ช
.py
> /app/resources/ํ์ผ๋ช
.py
์๋ฅผ ๋ค์ด, ./resources/mcp_server_time.py
ํ์ผ์ ์ถ๊ฐํ๊ณ ์ ํ๋ค๋ฉด /app/resources/mcp_server_time.py
๋ก ์ค์ ํฉ๋๋ค.
"get_current_time": {
"command": "python",
"args": [
"/app/resources/mcp_server_time.py"
],
"transport": "stdio"
}
Smithery ์ ๋ฑ๋ก๋ ๋๊ตฌ ์ถ๊ฐ
Smithery ์์ ์ฌ์ฉํ MCP ๋๊ตฌ์ JSON ๊ตฌ์ฑ์ ๊ฐ์ ธ์ ๋๊ตฌ ๋์๋ณด๋์์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค.
mcp_config.json
ํ์ผ์ ์ด๊ณ ๋ณต์ฌํ JSON์ ์ถ๊ฐํฉ๋๋ค.๋ณต์ฌํ ๋ด์ฉ์ ๋ถ์ฌ๋ฃ๊ธฐ ํฉ๋๋ค.
๋ชจ๋ ์ค์ ์ด ์๋ฃ๋์๋ค๋ฉด, ๋ค์ ๋ช ๋ น์ด๋ก ์คํํ ์ ์์ต๋๋ค.
Windows(PowerShell)
docker compose build --no-cache; docker-compose up -d
Mac / Linux
docker compose build --no-cache && docker-compose up -d
์ ์ ์ฃผ์
http://localhost:2024
http://localhost:2025
ํ์๊ฐ์
์ "๋ฒ ํ ํค" ์ teddynote-youtube
๋ฅผ ์
๋ ฅํ๋ฉด ์น์ธ ์์ด ๋ฐ๋ก ๊ฐ์
์ด ๊ฐ๋ฅํฉ๋๋ค.
http://localhost:2024
agent
์ฐ๊ฒฐ ์ค์ ์ด ์๋ฃ๋๋ฉด "์ ์ฅ" ๋ฒํผ์ ํด๋ฆญํฉ๋๋ค.
"์ฑ ์ฐ๊ฒฐํ๊ธฐ" ๋ฒํผ์ ๋๋ฌ ์ ์ฅํฉ๋๋ค.
ํ์ฌ๋ช / ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ์ปค์คํ ๊ธฐ๋ฅ์ ์ถ์ํ์์ต๋๋ค.
๋์ ์ ํฌ๋งํ์ ๋ค๋ฉด [email protected] ์ผ๋ก ๋ฌธ์์ฃผ์๋ฉด ๋์์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
Apache License 2.0 (LICENSE)
{ "mcpServers": { "langgraph-dynamic-mcp-agents": { "command": "npx", "args": [ "-y", "@smithery/cli@latest", "run", "@arjunkmrm/perplexity-search", "--key", "SMITHERY_API_KEY ๋ฅผ ์ ๋ ฅํ์ธ์" ] } } }
Related projects feature coming soon
Will recommend related projects based on sub-categories