Skip to main content
PromptQuorumPromptQuorum
ํ™ˆ/๊ณ ๊ธ‰ ๋กœ์ปฌ LLM/Ollama๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ API์— MCP๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ: ๋กœ์ปฌ AI ์—์ด์ „ํŠธ ์„ค์ • 2026
Local AI Agents & Tool Use

Ollama๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ API์— MCP๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ: ๋กœ์ปฌ AI ์—์ด์ „ํŠธ ์„ค์ • 2026

ยท15๋ถ„ ๋ถ„๋Ÿ‰ยทHans Kuepper ์ € ยท PromptQuorum ์ฐฝ๋ฆฝ์ž, ๋ฉ€ํ‹ฐ ๋ชจ๋ธ AI ๋””์ŠคํŒจ์น˜ ๋„๊ตฌ ยท PromptQuorum

**Model Context Protocol(MCP)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋กœ์ปฌ Ollama ๋ชจ๋ธ์ด ํŒŒ์ผ ์ฝ๊ธฐ, SQL ์ฟผ๋ฆฌ ์‹คํ–‰, ๋งํฌ ํด๋ฆญ, pull request ์—ด๊ธฐ ๋“ฑ์˜ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€” MCP ํ˜ธํ™˜ ํด๋ผ์ด์–ธํŠธ(Goose, Cline, Continue.dev, 2026๋…„์˜ LM Studio)๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ JSON-RPC ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœํ† ์ฝœ์€ ์˜คํ”ˆ๋˜์–ด ์žˆ๊ณ , ์ฐธ์กฐ ์„œ๋ฒ„๋Š” ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ, 2026๋…„์—๋Š” Claude Desktop์ด๋‚˜ ํด๋ผ์šฐ๋“œ ๊ณ„์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Ollama๋ฅผ ์‹คํ–‰ํ•˜๊ณ , MCP ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ , ์›ํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ํฌํ•จ๋œ mcp.json ์„ค์ • ํŒŒ์ผ์„ ๋ฐฐ์น˜ํ•˜๋ฉด, tool calling ๋ชจ๋ธ(Gemma 4, GLM-5.1, Qwen3, Llama 3.3)์ด ๋‹น์‹ ์ด ์ œ์–ดํ•˜๋Š” ๊ถŒํ•œ์œผ๋กœ ๊ธฐ๊ธฐ์—์„œ ์ž‘๋™ํ•˜๋Š” ์—์ด์ „ํŠธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ๋ณด์•ˆ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค: ์ ˆ๋Œ€๋กœ ์“ฐ๊ธฐ ๋„๊ตฌ๋ฅผ ์ž๋™ ์Šน์ธํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. filesystem ์ ‘๊ทผ์„ ๋‹จ์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ œํ•œํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ๋กœ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.**

Model Context Protocol(MCP)์€ ๋กœ์ปฌ Ollama ๋ชจ๋ธ๊ณผ ๋‚˜๋จธ์ง€ ์‹œ์Šคํ…œ ์‚ฌ์ด์— ํ•„์š”ํ–ˆ๋˜ ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ๋‹จ ํ•˜๋‚˜์˜ ์„ค์ • ํŒŒ์ผ๊ณผ tool calling์„ ์ง€์›ํ•˜๋Š” ๋ชจ๋ธ๋งŒ ์žˆ์œผ๋ฉด, ๋™์ผํ•œ ์—์ด์ „ํŠธ๊ฐ€ Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ , ๊ฒฉ๋ฆฌ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ฐ๊ณ , headless ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ œ์–ดํ•˜๊ณ , GitHub์—์„œ pull request๋ฅผ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€” ๋ชจ๋‘ ๋…ธํŠธ๋ถ์—์„œ ์‹คํ–‰๋˜๊ณ , ๋ชจ๋‘ ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” ๋ชจ๋ธ์„ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๋ณด์•ˆ ๋ชจ๋ธ๊ณผ ํ•จ๊ป˜ ์ „์ฒด ๊ณผ์ •์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

์Šฌ๋ผ์ด๋“œ ๋ฑ: Ollama๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ API์— MCP๋กœ ์—ฐ๊ฒฐํ•˜๊ธฐ: ๋กœ์ปฌ AI ์—์ด์ „ํŠธ ์„ค์ • 2026

์ด ํ”„๋ ˆ์  ํ…Œ์ด์…˜์€ ๋‹ค์Œ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค: MCP๊ฐ€ ๋กœ์ปฌ Ollama ๋ชจ๋ธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ฟผ๋ฆฌํ•˜๊ณ , ํŒŒ์ผ์„ ์ฝ๊ณ , ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ œ์–ดํ•˜๊ณ , pull request๋ฅผ ์—ฌ๋Š” ์—์ด์ „ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ• โ€” ๋ชจ๋‘ ์˜คํ”„๋ผ์ธ์œผ๋กœ; 4๊ฐœ์˜ ์ฐธ์กฐ ์„œ๋ฒ„(filesystem, SQLite/Postgres, ๋ธŒ๋ผ์šฐ์ €, GitHub)์˜ ์„ค์ • ๋‚œ์ด๋„ ๋ฐ ์œ„ํ—˜ ์ˆ˜์ค€; Goose ์„ค์ • 6๋‹จ๊ณ„ ๊ฐ€์ด๋“œ; LLM์„ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ๋ณด์•ˆ ๋ชจ๋ธ; Claude Desktop๊ณผ์˜ ์ง์ ‘ ๋น„๊ต. ๋กœ์ปฌ MCP ์—์ด์ „ํŠธ ์ฐธ์กฐ ์นด๋“œ๋กœ PDF๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค.

์•„๋ž˜ ์Šฌ๋ผ์ด๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์˜คํ”„๋ผ์ธ ์ฐธ์กฐ์šฉ์œผ๋กœ PDF๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค. ์ฐธ์กฐ ์นด๋“œ ๋‹ค์šด๋กœ๋“œ(PDF)

ํ•ต์‹ฌ ์š”์ 

  • MCP๋Š” ๋„๊ตฌ๋ฅผ ์œ„ํ•œ JSON-RPC 2.0 ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ(ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด)์ด ํ•˜๋‚˜ ์ด์ƒ์˜ MCP ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋ฉฐ, ๊ฐ ์„œ๋ฒ„๋Š” Tools(ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜), Resources(์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ), Prompts(ํ…œํ”Œ๋ฆฟ)๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ Claude Desktop, Goose, Cline, Continue.dev ๋˜๋Š” LM Studio๋“  wire ํ˜•์‹์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • Ollama๋Š” MCP๋ฅผ ์ง์ ‘ ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” MCP ํด๋ผ์ด์–ธํŠธ๊ฐ€ Ollama๋ฅผ ๊ฐ์Œ‰๋‹ˆ๋‹ค. Goose(Block)๋Š” Ollama ๊ธฐ๋ณธ ์ง€์›์„ ๊ฐ–์ถ˜ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜คํ”ˆ ์†Œ์Šค CLI์ž…๋‹ˆ๋‹ค; Cline, Continue.dev, LM Studio๋Š” 2026๋…„ ์ดˆ์— MCP ํด๋ผ์ด์–ธํŠธ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • 4๊ฐœ์˜ ์ฐธ์กฐ ์„œ๋ฒ„๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ปค๋ฒ„ํ•ฉ๋‹ˆ๋‹ค: filesystem(๊ฒฉ๋ฆฌ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ฝ๊ธฐ/์“ฐ๊ธฐ), sqlite ๋ฐ postgres(๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ), puppeteer ๋˜๋Š” playwright(headless ๋ธŒ๋ผ์šฐ์ € ์ œ์–ด), github(personal access token์œผ๋กœ ์ €์žฅ์†Œ ๋ฐ PR ๊ด€๋ฆฌ).
  • tool calling ์‹ ๋ขฐ์„ฑ์€ ๋ชจ๋ธ ํฌ๊ธฐ ๋ฐ ํ›ˆ๋ จ๊ณผ ํ•จ๊ป˜ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. Gemma 4 27B, GLM-5.1 32B, Qwen3 32B, Qwen3-Coder 30B, Llama 3.3 70B๋Š” Q4_K_M์—์„œ MCP๋ฅผ ๋ฌธ์ œ์—†์ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 7B ๋ฏธ๋งŒ ๋ชจ๋ธ์€ ์ž˜๋ชป๋œ ํ˜•์‹์˜ tool call์„ ์ž์ฃผ ์ƒ์„ฑํ•˜๊ณ  ๋ฃจํ”„๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ๋ชจ๋ธ์€ ๋ชจ๋ธ์„ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. filesystem ์„œ๋ฒ„๋ฅผ ๋‹จ์ผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ œํ•œํ•˜๊ณ , ์ฝ๊ธฐ ์ „์šฉ ์—ญํ• ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ , execute_command๋‚˜ write_file์„ ์ ˆ๋Œ€๋กœ ์ž๋™ ์Šน์ธํ•˜์ง€ ๋ง๊ณ , ๊ธด ์„ธ์…˜ ํ›„์—๋Š” ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ๊ฒ€ํ† ํ•˜์‹ญ์‹œ์˜ค.
  • ๋กœ์ปฌ MCP vs Claude Desktop: ๋™์ผํ•œ ํ”„๋กœํ† ์ฝœ, ๋™์ผํ•œ ์„œ๋ฒ„ ์ƒํƒœ๊ณ„. ๋กœ์ปฌ ์Šคํƒ์€ ํด๋ผ์šฐ๋“œ ๋ชจ๋ธ์„ ์˜คํ”„๋ผ์ธ ๋ชจ๋ธ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค โ€” ํ”„๋ผ์ด๋ฒ„์‹œ, ํ† ํฐ๋‹น ๋น„์šฉ ์—†์Œ, ์†๋„ ์ œํ•œ ์—†์Œ์„ ์ œ๊ณตํ•˜๋Š” ๋Œ€์‹ , ์•ฝ๊ฐ„ ๋œ ์œ ๋Šฅํ•œ ๋ชจ๋ธ๊ณผ ์ง์ ‘ ๋ณด์•ˆ ์„ค์ •์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋น„์šฉ์€ API ์ˆ˜์ˆ˜๋ฃŒ $0์ด์ง€๋งŒ ํ† ํฐ์—์„œ ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ ๋ฃจํ”„๋Š” ๋‹จ์ผ ๋‹ค๋‹จ๊ณ„ ์ž‘์—…์— ๋Œ€ํ•ด 30K~80K ํ† ํฐ์„ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œ 32K ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ง„ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค; 128K๊ฐ€ ํŽธ์•ˆํ•ฉ๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‚ฌ์‹ค

  • ํ”„๋กœํ† ์ฝœ: stdio(๋กœ์ปฌ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค) ๋˜๋Š” HTTP/SSE(์›๊ฒฉ)๋ฅผ ํ†ตํ•œ JSON-RPC 2.0. ๋กœ์ปฌ ์—์ด์ „ํŠธ๋Š” ๊ฑฐ์˜ ๋…์ ์ ์œผ๋กœ stdio๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์œ ์ง€ ๊ด€๋ฆฌ: Anthropic(์˜คํ”ˆ ์†Œ์Šค ์‚ฌ์–‘); ์ฐธ์กฐ ์„œ๋ฒ„๋Š” GitHub์˜ modelcontextprotocol/servers์—์„œ ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋ฉฐ ์„ฑ์žฅํ•˜๋Š” ํƒ€์‚ฌ ์ƒํƒœ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 2026๋…„ ๋กœ์ปฌ ํด๋ผ์ด์–ธํŠธ: Goose(Block), Cline(VS Code ํ™•์žฅ), Continue.dev(VS Code/JetBrains), LM Studio(๋ฐ์Šคํฌํ†ฑ ์•ฑ), ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ CLI ๋„๊ตฌ๋“ค.
  • ์ง€์›๋˜๋Š” Ollama ๋ชจ๋ธ: ๋„ค์ดํ‹ฐ๋ธŒ tool calling ํ›ˆ๋ จ์„ ๋ฐ›์€ ๋ชจ๋“  ๋ชจ๋ธ. 2026๋…„ 5์›” ๊ธฐ์ค€: Gemma 4 27B, GLM-5.1 32B, Qwen3 32B, Qwen3-Coder 30B, Llama 3.3 70B.
  • ๊ธฐ๋ณธ ์ „์†ก: ๋กœ์ปฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•œ stdio; ์„œ๋ฒ„๋ฅผ ๊ธฐ๊ธฐ ๋˜๋Š” ์—์ด์ „ํŠธ ๊ฐ„์— ๊ณต์œ ํ•ด์•ผ ํ•  ๋•Œ๋งŒ HTTP/SSE.
  • ์„ค์ •์€ ๋‹จ์ผ ํŒŒ์ผ์— ์žˆ์Šต๋‹ˆ๋‹ค: ~/.config/goose/config.yaml(Goose), ~/.continue/config.json์˜ MCP ๋ธ”๋ก(Continue.dev) ๋˜๋Š” Cline ์„ค์ • ์ธํ„ฐํŽ˜์ด์Šค์˜ mcpServers. ๋ชจ๋‘ ๋™์ผํ•œ ๊ตฌ์กฐ: ์„œ๋ฒ„ ์ด๋ฆ„, ๋ช…๋ น, args, ํ™˜๊ฒฝ ๋ณ€์ˆ˜.
  • Claude Desktop์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์€ Claude Desktop ๋…์  ์‚ฌ์šฉ ์ด์ „๋ถ€ํ„ฐ ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค; ๋ชจ๋“  ์ฐธ์กฐ ์„œ๋ฒ„๋Š” MIT/Apache ๋ผ์ด์„ ์Šค์ด๋ฉฐ ๋ชจ๋“  ํ˜ธํ™˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

MCP๊ฐ€ ๋กœ์ปฌ ๋ชจ๋ธ์— ์‹ค์ œ๋กœ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ

๋„๊ตฌ ์—†๋Š” ๋กœ์ปฌ LLM์€ ํ…์ŠคํŠธ๋กœ๋งŒ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MCP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ผํ•œ ๋ชจ๋ธ์ด ๊ธฐ๊ธฐ์—์„œ ํ–‰๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€ํ™”๋Š” ์ฑ—๋ด‡๊ณผ ์—์ด์ „ํŠธ์˜ ์ฐจ์ด์ž…๋‹ˆ๋‹ค.

  • **"์ด ์ €์žฅ์†Œ์—์„œ ๋ชจ๋“  TODO๋ฅผ ์ฐพ์•„ ํŒŒ์ผ๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  notes/todos.md์— Markdown ์š”์•ฝ์„ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค."** โ€” filesystem ์„œ๋ฒ„๊ฐ€ ์ฝ๊ณ , ๋ชจ๋ธ์ด ๊ทธ๋ฃนํ™”ํ•˜๊ณ , ๋™์ผํ•œ ์„œ๋ฒ„๊ฐ€ ์”๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋‹จ ํ•œ ๋ฒˆ์˜ ์™•๋ณต.
  • "์ด๋ฒˆ ๋ถ„๊ธฐ ์ˆ˜์ต ๊ธฐ์ค€ ์ƒ์œ„ 10๊ฐœ ๊ณ ๊ฐ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์ฐจํŠธ๋ฅผ ๋งŒ๋“œ์‹ญ์‹œ์˜ค." โ€” postgres ์„œ๋ฒ„๊ฐ€ SQL์„ ์‹คํ–‰ํ•˜๊ณ (์ฝ๊ธฐ ์ „์šฉ ์—ญํ• ), ๋ชจ๋ธ์ด ์š”์•ฝํ•˜๊ณ  ์ฐจํŠธ ๋„๊ตฌ๋ฅผ ์œ„ํ•ด filesystem์„ ํ†ตํ•ด CSV๋ฅผ ์”๋‹ˆ๋‹ค.
  • "Hacker News ์ฒซ ํŽ˜์ด์ง€๋ฅผ ์—ด์–ด ์ƒ์œ„ 3๊ฐœ AI ๊ธฐ์‚ฌ๋ฅผ ์ฐพ์•„ ์š”์•ฝํ•˜๊ณ  ๋‚ด ์ฝ๊ธฐ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค." โ€” puppeteer ์„œ๋ฒ„๊ฐ€ headless ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ œ์–ดํ•˜๊ณ , ๋ชจ๋ธ์ด ์ถ”์ถœ ๋ฐ ์š”์•ฝํ•˜๊ณ , filesystem์ด ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • **"๋‚ด ํฌํฌ์— ๋Œ€ํ•ด chore: bump deps ์ œ๋ชฉ์œผ๋กœ draft PR์„ ์—ด๊ณ  ์‹คํŒจํ•œ CI ์‹คํ–‰์„ ๋งํฌํ•˜์‹ญ์‹œ์˜ค."** โ€” github ์„œ๋ฒ„๊ฐ€ PR์„ ์ƒ์„ฑํ•˜๊ณ , ์‹คํ–‰์„ ๊ฐ€์ ธ์˜ค๊ณ , ์„ค๋ช…์— ๋งํฌ๋ฅผ ์”๋‹ˆ๋‹ค.
  • **"events.db์˜ ์ตœ๊ทผ 100๊ฐœ ํ–‰์„ ๋ณด๊ณ  ์ƒˆ ์˜ค๋ฅ˜ ๊ธ‰์ฆ์— ์ฑ…์ž„์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž ID๋ฅผ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค."** โ€” sqlite ์„œ๋ฒ„๊ฐ€ ์ฟผ๋ฆฌํ•˜๊ณ ; ๋ชจ๋ธ์ด ์ถ”๋ก ํ•˜๊ณ ; ์ฑ„ํŒ… ํŒจ๋„์—์„œ ๋‹ต์„ ์ฝ์Šต๋‹ˆ๋‹ค.
  • ์ด ๊ฐ๊ฐ์€ ์ด์ „์— ํ˜ธ์ŠคํŒ…๋œ ๋„๊ตฌ๊ฐ€ ์žˆ๋Š” ํด๋ผ์šฐ๋“œ ๋ชจ๋ธ ๋˜๋Š” ์†์œผ๋กœ ์ž‘์„ฑํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์š”ํ–ˆ๋˜ ๋ฌธ์žฅ์—์„œ ํ–‰๋™์œผ๋กœ์˜ ์›Œํฌํ”Œ๋กœ์ž…๋‹ˆ๋‹ค. MCP๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐ„์— ๋™์ผํ•œ ์„œ๋ฒ„๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์„œ๋ฒ„ ๊ฐ„์— ๋™์ผํ•œ ๋ชจ๋ธ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” 4๊ฐœ์˜ MCP ์„œ๋ฒ„ ๋น„๊ต

์•„๋ž˜์˜ ์ฐธ์กฐ ์„œ๋ฒ„๋“ค์€ "๋‚ด ๋กœ์ปฌ ๋ชจ๋ธ์ด ์‹ค์ œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธธ ์›ํ•œ๋‹ค"๋Š” ๊ธด ์—ฌ์ •์„ ์ปค๋ฒ„ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ MCP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹œ์ž‘ํ•˜๋Š” ๋กœ์ปฌ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“ ํ•œ ๋ฌธ์žฅ์œผ๋กœ

filesystem ์„œ๋ฒ„(5๋ถ„, ๋‚ฎ์€ ์œ„ํ—˜)๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด SQLite ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ธฐ๊ธฐ์—์„œ ๋ชจ๋ธ์„ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์„ ๋•Œ GitHub์„ ๋„์ž…ํ•˜์‹ญ์‹œ์˜ค.

๐Ÿ’ฌ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด

4๊ฐœ์˜ ์„œ๋ฒ„๊ฐ€ ๋กœ์ปฌ ์—์ด์ „ํŠธ์—๊ฒŒ ์›ํ•˜๋Š” ์ž‘์—…์˜ 90%๋ฅผ ์ปค๋ฒ„ํ•ฉ๋‹ˆ๋‹ค. filesystem ์„œ๋ฒ„๋Š” ๋‹น์‹ ์ด ์„ ํƒํ•œ ํด๋”์—์„œ ํŒŒ์ผ์„ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค. SQLite ๋˜๋Š” Postgres ์„œ๋ฒ„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„๋Š” ๋ชจ๋ธ์ด JavaScript๊ฐ€ ํ•„์š”ํ•œ ํŽ˜์ด์ง€๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์‹ค์ œ Chromium ์ฐฝ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. GitHub ์„œ๋ฒ„๋Š” ์ €์žฅ์†Œ์—์„œ ์ด์Šˆ์™€ PR์„ ์—ฝ๋‹ˆ๋‹ค. ๋ชจ๋‘ ํ•˜๋‚˜์˜ ๋ช…๋ น์œผ๋กœ ์„ค์น˜๋˜๊ณ , ๋ชจ๋‘ ์ž์ฒด ๊ธฐ๊ธฐ์—์„œ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๋ช…์‹œ์ ์œผ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ•œ ์ธํ„ฐ๋„ท์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋ธŒ๋ผ์šฐ์ €๋Š” ํ˜ธ์ถœํ•˜์ง€๋งŒ ๋‚˜๋จธ์ง€๋Š” ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

MCP ์„œ๋ฒ„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ค์ • ๋‚œ์ด๋„์œ„ํ—˜ ์ˆ˜์ค€์ด์ƒ์ ์ธ ์šฉ๋„
Filesystem๊ฒฉ๋ฆฌ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์—์„œ ํŒŒ์ผ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ์‰ฌ์›€(ํ—ˆ์šฉ ๋ชฉ๋ก์— ๊ฒฝ๋กœ ํ•˜๋‚˜)์ค‘๊ฐ„ โ€” ๋ฒ”์œ„๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค๊ฐœ์ธ ์ž๋™ํ™”, ๋…ธํŠธ ์ž‘์„ฑ, ์ €์žฅ์†Œ ์š”์•ฝ
SQLite๋กœ์ปฌ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ ์ฟผ๋ฆฌ์‰ฌ์›€(.db ํŒŒ์ผ ๊ฒฝ๋กœ)์ฝ๊ธฐ ์ „์šฉ์—์„œ ๋‚ฎ์Œ; ์“ฐ๊ธฐ ์‹œ ์ค‘๊ฐ„๋ฐ์ดํ„ฐ ํƒ์ƒ‰, ๋กœ๊ทธ ๋ถ„์„, ํ”„๋กœํ† ํƒ€์ดํ•‘
Postgres์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ํ†ตํ•ด Postgres ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ์ค‘๊ฐ„(์—ญํ•  + URL)์ค‘๊ฐ„ โ€” ์ฝ๊ธฐ ์ „์šฉ ์—ญํ• ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜คํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ ํƒ์ƒ‰, ๋ณด๊ณ , BI ํ”„๋กœํ† ํƒ€์ž…
Puppeteer / Playwrightํƒ์ƒ‰, ์Šคํฌ๋ž˜ํ•‘, ์–‘์‹ ์ž‘์„ฑ์„ ์œ„ํ•œ headless ๋˜๋Š” ๋ณด์ด๋Š” Chromium ์ œ์–ด์–ด๋ ค์›€(๋ธŒ๋ผ์šฐ์ € ๋ฐ”์ด๋„ˆ๋ฆฌ, ์„ ํƒ๊ธฐ, ์ง€์—ฐ)๋†’์Œ โ€” ์–‘์‹์„ ์ œ์ถœํ•˜๊ณ  ๋ฌด์—‡์ด๋“  ํด๋ฆญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค์—ฐ๊ตฌ, ์Šคํฌ๋ž˜ํ•‘, ํšŒ๊ท€ ํ…Œ์ŠคํŠธ
GitHub์ €์žฅ์†Œ ๋‚˜์—ด, ํŒŒ์ผ ์ฝ๊ธฐ, ์ด์Šˆ ๋ฐ PR ์—ด๊ธฐ์‰ฌ์›€(ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ PAT)์ค‘๊ฐ„ โ€” ํ† ํฐ์„ ํŠน์ • ์ €์žฅ์†Œ๋กœ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ, ํŠธ๋ฆฌ์•„์ง€, PR ์ดˆ์•ˆ
CustomJSON-RPC ๋„๊ตฌ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์–ด๋ ค์›€(์ž์ฒด ์„œ๋ฒ„ ์ž‘์„ฑ)๊ฐ€๋ณ€์ ๋‚ด๋ถ€ API, ํ‹ˆ์ƒˆ ์‹œ์Šคํ…œ, ํ†ตํ•ฉ ์ฝ”๋“œ

๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋งž์ถฐ์ง€๋Š” ๋ฐฉ์‹

์„ธ ๊ฐ€์ง€ ํ”„๋กœ์„ธ์Šค, ํ•˜๋‚˜์˜ ๊ณต์œ  ํ”„๋กœํ† ์ฝœ. ๋ชจ๋ธ์€ Ollama์— ์žˆ๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” MCP๋ฅผ ๋งํ•˜๋ฉฐ, ๊ฐ ์„œ๋ฒ„๋Š” ์†Œ๊ทœ๋ชจ ๋„๊ตฌ ์ง‘ํ•ฉ์„ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ฐ tool call์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ์ด๋™ํ•˜๊ณ , ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋˜๊ณ , JSON์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • Ollama๋Š” 127.0.0.1:11434์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค๋กœ ์‹คํ–‰๋˜๋ฉฐ OpenAI ํ˜ธํ™˜ API๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. MCP๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค โ€” ๋‹จ์ˆœํžˆ ์ฑ„ํŒ… ์™„์„ฑ์— ์‘๋‹ตํ•˜๊ณ  ๋ชจ๋ธ์ด ์š”์ฒญํ•  ๋•Œ tool call์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • MCP ํด๋ผ์ด์–ธํŠธ(Goose, Cline, Continue.dev, LM Studio)๊ฐ€ ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์„ ์œ„ํ•ด Ollama์™€ ํ†ต์‹ ํ•˜๊ณ  ๋„๊ตฌ๋ฅผ ์œ„ํ•ด MCP ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์ด tool call์„ ์ƒ์„ฑํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์„œ๋ฒ„๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ๋Œ€ํ™”์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • MCP ์„œ๋ฒ„๋Š” ๋…๋ฆฝ์ ์ธ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋กœ, ๊ฐ ๊ธฐ๋Šฅ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์žˆ์Šต๋‹ˆ๋‹ค. stdio๋ฅผ ํ†ตํ•ด JSON-RPC 2.0์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์„œ๋ฒ„๋Š” Tools, Resources, Prompts ๋ชฉ๋ก์„ ๊ณต๊ฐœํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋“ค์„ ๋ชจ๋ธ์— ์ œ์‹œ๋˜๋Š” ๋„๊ตฌ ํ‘œ๋ฉด์œผ๋กœ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • stdio ์ „์†ก์€ ๋ชจ๋“  ๊ฒƒ์„ ๋กœ์ปฌ์— ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‹œ์ž‘ํ•˜๊ณ , stdin/stdout์„ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋ฉฐ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์ž์ฒด๊ฐ€ ์—ฐ๊ฒฐ์„ ์—ฌ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์•„๋ฌด๊ฒƒ๋„ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€๋งŒ filesystem ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋Š” ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).
  • ๋ชจ๋ธ์€ ํ‰ํ‰ํ•œ ๋„๊ตฌ ๋ชฉ๋ก์„ ๋ด…๋‹ˆ๋‹ค. ๋ชจ๋ธ์˜ ๊ด€์ ์—์„œ ์„œ๋ฒ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค โ€” filesystem.read_file, sqlite.query, puppeteer.navigate์™€ ๊ฐ™์€ ๋„๊ตฌ ์ด๋ฆ„์˜ ๋ชฉ๋ก๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ผ์šฐํŒ…์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ŒNote: ์•„ํ‚คํ…์ฒ˜๋Š” Claude Desktop๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์ด์ ์€ ๋ชจ๋ธ(Claude ๋Œ€์‹  ๋กœ์ปฌ Ollama ๋ชจ๋ธ)๊ณผ ํด๋ผ์ด์–ธํŠธ(Claude Desktop ๋Œ€์‹  Goose/Cline/Continue.dev/LM Studio)์ž…๋‹ˆ๋‹ค. MCP ์„œ๋ฒ„๋Š” ๋™์ผํ•œ ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค โ€” ์˜ค๋Š˜ Claude Desktop์—์„œ filesystem ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚ด์ผ Goose์—์„œ๋„ ๋ณ€๊ฒฝ ์—†์ด ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •: 15๋ถ„ ์•ˆ์— Ollama + Goose

Goose๋Š” 2026๋…„์— ์ž‘๋™ํ•˜๋Š” ๋กœ์ปฌ MCP ์—์ด์ „ํŠธ๋กœ ๊ฐ€๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. Block์˜ ์˜คํ”ˆ ์†Œ์Šค CLI๋กœ, Ollama ๊ธฐ๋ณธ ์ง€์›, ๋Œ€ํ™”ํ˜• ์ฑ„ํŒ… ์ธํ„ฐํŽ˜์ด์Šค, ๋ชจ๋“  MCP ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ๋‹จ์ผ ์„ค์ • ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Continue.dev, Cline, LM Studio๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค โ€” Goose๋Š” ์ฒซ ๋ฒˆ์งธ ์‹คํ–‰์˜ ์„ค์ • ๋น„์šฉ์ด ๊ฐ€์žฅ ๋‚ฎ์Šต๋‹ˆ๋‹ค.

  • 1๋‹จ๊ณ„ โ€” Ollama ์„ค์น˜. ollama.com/download(macOS/Windows/Linux)์—์„œ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค. curl http://127.0.0.1:11434/api/tags๋กœ ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
  • 2๋‹จ๊ณ„ โ€” tool calling ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ. Gemma 4 27B(gemma4:27b), GLM-5.1 32B(glm5:32b), Qwen3 32B(qwen3:32b) ๋˜๋Š” Llama 3.3 70B(llama3.3:70b) ์ค‘์—์„œ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค. 16GB ํ†ตํ•ฉ ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” 12GB VRAM์œผ๋กœ Q4_K_M์—์„œ 27B~32B๋ฅผ ํŽธ์•ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • 3๋‹จ๊ณ„ โ€” Goose ์„ค์น˜. pipx install goose-ai(macOS, Linux) ๋˜๋Š” Goose releases ํŽ˜์ด์ง€์—์„œ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด๋กœ๋“œํ•˜์‹ญ์‹œ์˜ค. CLI๋Š” goose๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
  • 4๋‹จ๊ณ„ โ€” Ollama๋ฅผ ์ œ๊ณต์ž๋กœ ๊ตฌ์„ฑ. goose configure๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ollama๋ฅผ ์ œ๊ณต์ž๋กœ ์„ ํƒํ•˜๊ณ , ๋ชจ๋ธ์„ ๋‹ค์šด๋กœ๋“œํ•œ ๊ฒƒ์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ํ˜ธ์ŠคํŠธ๋ฅผ http://127.0.0.1:11434๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. Goose๊ฐ€ ์ด๊ฒƒ์„ ~/.config/goose/config.yaml์— ์”๋‹ˆ๋‹ค.
  • 5๋‹จ๊ณ„ โ€” filesystem MCP ์„œ๋ฒ„ ์ถ”๊ฐ€. ~/.config/goose/config.yaml์„ ํŽธ์ง‘ํ•˜์—ฌ mcpServers ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค(์•„๋ž˜ ์„ค์ • ์˜ˆ์‹œ). goose session์„ ์žฌ์‹œ์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๋‚˜์—ด์„ ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค. ์ฒซ ๋ฒˆ์งธ ํ„ด์ด ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋˜์—ˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • 6๋‹จ๊ณ„ โ€” ์‹ค์ œ ์ž‘์—…์œผ๋กœ ํ™•์ธ. goose session์„ ์‹œ๋„ํ•˜๊ณ  "notes/์˜ ๋ชจ๋“  Markdown ํŒŒ์ผ์„ ์ œ๋ชฉ๊ณผ ๋‹จ์–ด ์ˆ˜์™€ ํ•จ๊ป˜ ๋‚˜์—ดํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ notes/index.md์— ์“ฐ์‹ญ์‹œ์˜ค."๋ฅผ ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค. ์—์ด์ „ํŠธ๊ฐ€ ์ฝ๊ณ , ์š”์•ฝํ•˜๊ณ , ๋‹ค์‹œ ์“ฐ๋ฉด ๋ฃจํ”„๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
bash
# 1. Pull a tool-calling model
ollama pull gemma4:27b

# 2. Install Goose
pipx install goose-ai

# 3. Configure Ollama as the provider
goose configure
# Provider: ollama
# Model:    gemma4:27b
# Host:     http://127.0.0.1:11434

# 4. Start a session โ€” Goose reads ~/.config/goose/config.yaml
goose session

๐Ÿ’กTip: Cline ๋˜๋Š” Continue.dev๋ฅผ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด Goose๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๊ทธ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค โ€” ๋‘˜ ๋‹ค 2026๋…„ ์ดˆ ๋ฆด๋ฆฌ์Šค์— MCP ์„œ๋ฒ„ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. Cline์˜ "MCP Servers" ํŒจ๋„์€ ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ์ฐธ์กฐ ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค; Continue.dev๋Š” ~/.continue/config.json์˜ mcpServers๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค(์•„๋ž˜ Goose ์„ค์ • ๋ธ”๋ก๊ณผ ๋™์ผํ•œ ๊ตฌ์กฐ). ๋ชจ๋ธ๊ณผ ์„œ๋ฒ„๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค; ํ˜ธ์ŠคํŠธ ์•ฑ๋งŒ ๋ฐ”๋€๋‹ˆ๋‹ค.

Filesystem ์„œ๋ฒ„: ๊ฒฉ๋ฆฌ๋œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ

filesystem ์„œ๋ฒ„๋Š” ์ฒ˜์Œ ์„ค์น˜ํ•˜๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์ œํ•œํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฝ์Šต๋‹ˆ๋‹ค. read_file, write_file, list_directory, move_file, search_files, create_directory๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค โ€” ๋ชจ๋‘ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ—ˆ์šฉ ๋ชฉ๋ก ๊ฒฝ๋กœ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

  • ์„ค์น˜: ์ฐธ์กฐ ์„œ๋ฒ„๋Š” @modelcontextprotocol/server-filesystem์œผ๋กœ, npx -y๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(์ „์—ญ ์„ค์น˜ ๋ถˆํ•„์š”). Goose, Cline, Continue.dev๊ฐ€ ์„ค์ • ๋ธ”๋ก์—์„œ ์ž๋™์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ํ—ˆ์šฉ ๋ชฉ๋ก ๊ฒฝ๋กœ: ์„œ๋ฒ„๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ธ์ˆ˜๋ฅผ ๋ฐ›์•„๋“ค์ด๊ณ  ๊ทธ ๋ฐ–์˜ ์ž‘์—…์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ๋ช…์‹œ์ ์ด๊ณ  ์ข์€ ๊ฒฝ๋กœ๋ฅผ ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค โ€” ~๋‚˜ /๋Š” ์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
  • ๋…ธ์ถœ๋œ ๋„๊ตฌ: read_file, read_multiple_files, write_file, edit_file(ํ–‰ ๋Œ€์ฒด), list_directory, search_files, move_file, create_directory, directory_tree. ๋ชจ๋ธ์€ ์ด๊ฒƒ๋“ค์„ filesystem.read_file ๋“ฑ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ ํŽธ์˜์„ฑ: directory_tree๋Š” JSON ํŠธ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค; ํŠน์ • ํŒŒ์ผ์„ ์ฝ๊ธฐ ์ „์— ๋ชจ๋ธ์ด ๋ฐฉํ–ฅ์„ ์žก์„ ๋•Œ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. search_files๋Š” grep๊ณผ ์œ ์‚ฌํ•œ ์žฌ๊ท€ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„ํ—˜ ํ‘œ๋ฉด: ์„œ๋ฒ„๋Š” ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์กด์ค‘ํ•˜์ง€๋งŒ ๊ทธ ์•ˆ์—์„œ๋Š” ์™„์ „ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ—ˆ์šฉ ๋ชฉ๋ก์„ ์œ ์ผํ•œ ์žฅ๋ฒฝ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  ํ™ˆ ํด๋” ๋Œ€์‹  ์ „์šฉ workspace ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.
yaml
# ~/.config/goose/config.yaml
mcpServers:
filesystem:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-filesystem"
- "/Users/you/agent-workspace"
env: {}

โš ๏ธWarning: ํ—ˆ์šฉ ๋ชฉ๋ก์— /๋‚˜ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ ˆ๋Œ€ ๋„ฃ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ „์šฉ agent-workspace ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ , ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—…ํ•  ํŒŒ์ผ์˜ ๋ณต์‚ฌ๋ณธ์„ ๊ทธ ์•ˆ์— ๋„ฃ๊ณ , ์—์ด์ „ํŠธ๊ฐ€ ๊ทธ ํด๋” ๋‚ด์—์„œ๋งŒ ์ž‘๋™ํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ์—์ด์ „ํŠธ๊ฐ€ ์‹คํŒจํ•˜๋”๋ผ๋„ ํ”ผํ•ด ๋ฒ”์œ„๋Š” ํ•˜๋‚˜์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๊ทธ์นฉ๋‹ˆ๋‹ค.

SQLite ๋ฐ Postgres ์„œ๋ฒ„: ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋Š” ๋ชจ๋ธ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ํ•œ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ๋‹ˆ์–ด ๋ถ„์„๊ฐ€๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ๋‘ ์ฐธ์กฐ ์„œ๋ฒ„ ๋ชจ๋‘ query ๋„๊ตฌ์™€ ์„ ํƒ์ ์ธ write_query ๋„๊ตฌ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • **SQLite ์„œ๋ฒ„(@modelcontextprotocol/server-sqlite)**๋Š” .db ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹คํ–‰ํ•  ํ•„์š” ์—†์ด ๋กœ๊ทธ ๋ถ„์„, ์Šคํ‚ค๋งˆ ํ”„๋กœํ† ํƒ€์ดํ•‘, ๋‚ด๋ณด๋‚ด๊ธฐ ํƒ์ƒ‰์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • **Postgres ์„œ๋ฒ„(@modelcontextprotocol/server-postgres)**๋Š” ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ถŒ์žฅ ํŒจํ„ด์€ ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ์ „์šฉ ์ฝ๊ธฐ ์ „์šฉ ์—ญํ• ์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ์—ญํ• ์˜ ์—ฐ๊ฒฐ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋…ธ์ถœ๋œ ๋„๊ตฌ: query(์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉด SELECT๋งŒ), list_tables, describe_table. Postgres ์„œ๋ฒ„๋Š” list_schemas๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ํฌํฌ๋Š” write_query๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค โ€” ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ชจ๋ธ์„ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ํ•œ ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.
  • ์Šคํ‚ค๋งˆ ์ธ์‹: ๋ถ„์„์  ์งˆ๋ฌธ์„ ํ•˜๊ธฐ ์ „์— ์—์ด์ „ํŠธ์—๊ฒŒ "ํ…Œ์ด๋ธ”์„ ๋‚˜์—ดํ•˜๊ณ  ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” 5๊ฐœ๋ฅผ ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค"๋ฅผ ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค โ€” ๋ชจ๋ธ์ด ์—ด ์ด๋ฆ„์„ ์ถ”์ธกํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค describe_table์„ ํ˜ธ์ถœํ•œ ํ›„์— ํ›จ์”ฌ ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„์šฉ: ์ฟผ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ง์ ‘ ๊ฐ‘๋‹ˆ๋‹ค. 1์–ต ํ–‰ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ SELECT *๋Š” ์ธ๊ฐ„์ด ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์‚ฌ๊ณ ์ž…๋‹ˆ๋‹ค โ€” ์—ญํ• ์„ ๋ณ„๋„์˜ ์—ฐ๊ฒฐ ํ’€์— statement timeout๊ณผ ํ•จ๊ป˜ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค.
yaml
# ~/.config/goose/config.yaml
mcpServers:
sqlite:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-sqlite"
- "--db-path"
- "/Users/you/data/events.db"
env: {}

postgres:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-postgres"
- "postgresql://agent_ro@127.0.0.1:5432/analytics"
env:
PGPASSWORD: "${PG_AGENT_PASSWORD}"

๐Ÿ’กTip: Postgres ์—ญํ• ์„ ํ•œ ๋ฒˆ ๋งŒ๋“ค๊ณ  ์—์ด์ „ํŠธ์—๊ฒŒ ๊ทธ ์ด์ƒ์„ ์ฃผ์ง€ ๋งˆ์‹ญ์‹œ์˜ค: CREATE ROLE agent_ro WITH LOGIN PASSWORD 'โ€ฆ'; GRANT CONNECT ON DATABASE analytics TO agent_ro; GRANT USAGE ON SCHEMA public TO agent_ro; GRANT SELECT ON ALL TABLES IN SCHEMA public TO agent_ro; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO agent_ro; ๊ทธ๋Ÿฐ ๋‹ค์Œ ์—ญํ• ์— statement_timeout = 30s๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ์—์ด์ „ํŠธ๋Š” ์“ธ ์ˆ˜ ์—†๊ณ , ์‚ญ์ œํ•  ์ˆ˜ ์—†๊ณ , ๋ฌดํ•œํžˆ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„: Puppeteer ๋˜๋Š” Playwright๋กœ Chromium ์ œ์–ด

๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„๋Š” 4๊ฐœ ์ค‘ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜๊ณ  ๊ฐ€์žฅ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ Chromium์„ ์‹คํ–‰ํ•˜๊ณ  ํƒ์ƒ‰, ํด๋ฆญ, ์–‘์‹ ์ž‘์„ฑ, ์Šคํฌ๋ฆฐ์ƒท์„ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค โ€” ์ฆ‰, ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์–‘์‹ ์ œ์ถœ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • ์ฐธ์กฐ ์„œ๋ฒ„: @modelcontextprotocol/server-puppeteer(๋” ๊ฐ€๋ณ๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ headless)์™€ @modelcontextprotocol/server-playwright(๋” ๋ฌด๊ฒ๊ณ  ์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ € ์ง€์›). ๋กœ์ปฌ ์—์ด์ „ํŠธ์˜ ๊ฒฝ์šฐ Puppeteer๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋…ธ์ถœ๋œ ๋„๊ตฌ: navigate, screenshot, click, fill, select, evaluate(JavaScript ์‹คํ–‰), get_page_content. ๋ชจ๋ธ์€ get_page_content๋ฅผ ๊ตฌ์กฐํ™”๋œ ํ…์ŠคํŠธ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด, screenshot์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€์—ฐ: ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜์€ ์ž‘์—…๋‹น 1~5์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ค๋‹จ๊ณ„ ํƒ์ƒ‰์€ ํŽ˜์ด์ง€ ๋‚ด์šฉ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ 30~60์ดˆ์™€ ์ˆ˜๋งŒ ํ† ํฐ์„ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 32K+ ์ปจํ…์ŠคํŠธ ์ฐฝ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  • ์„ ํƒ๊ธฐ: ๋ชจ๋ธ์ด CSS ์„ ํƒ๊ธฐ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋” ์ž‘์€ ๋ชจ๋ธ์€ ์ž์ฃผ ํ‹€๋ฆฝ๋‹ˆ๋‹ค; 27B+ tool calling ๋ชจ๋ธ์€ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์„ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…์„ ์ œํ•œ์ ์œผ๋กœ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค โ€” "์ด URL์—์„œ ์ œ๋ชฉ๊ณผ ์ฒซ ๋‹จ๋ฝ์„ ์ถ”์ถœํ•˜์‹ญ์‹œ์˜ค"๋Š” "์‚ฌ์ดํŠธ๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์—ฐ๋ฝ์ฒ˜ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์œผ์‹ญ์‹œ์˜ค"๋ณด๋‹ค ํ›จ์”ฌ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€: ์—ฐ๊ตฌ(ํŽ˜์ด์ง€ ์—ด๊ธฐ, ์š”์•ฝํ•˜๊ธฐ, ๋…ธํŠธ์— ์ถ”๊ฐ€), ํšŒ๊ท€ ํ…Œ์ŠคํŠธ(ํƒ์ƒ‰, ํด๋ฆญ, ์Šคํฌ๋ฆฐ์ƒท), ๋‹น์‹ ์ด ์ œ์–ดํ•˜๋Š” ํŽ˜์ด์ง€์˜ ์–‘์‹ ์ž‘์„ฑ. ์ž˜๋ชป๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€: ๋ผ์ด๋ธŒ ์›น์—์„œ ์ž˜๋ชป๋œ ํด๋ฆญ์— ๊ฒฐ๊ณผ๊ฐ€ ๋”ฐ๋ฅด๋Š” ๋ชจ๋“  ๊ฒƒ.
yaml
# ~/.config/goose/config.yaml
mcpServers:
puppeteer:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-puppeteer"
env:
PUPPETEER_HEADLESS: "true"
# Block obviously dangerous endpoints at the OS firewall level
# rather than relying on the agent to refuse them.

โš ๏ธWarning: ๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„์— ์ž๊ฒฉ ์ฆ๋ช…์„ ์ ˆ๋Œ€ ์ œ๊ณตํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ธ์ฆ๋œ ์„ธ์…˜์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์—์ด์ „ํŠธ์—๊ฒŒ ์‚ฌ์ „ ์ธ์ฆ๋œ ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœํŒŒ์ผ(userDataDir์„ ํ†ตํ•ด)์„ ์ „๋‹ฌํ•˜๊ณ  ๊ณ ์˜ํ–ฅ ์‚ฌ์ดํŠธ(๋ฑ…ํ‚น, ์ด๋ฉ”์ผ, ํด๋ผ์šฐ๋“œ ์ฝ˜์†”, ๊ฒฐ์ œ ์–‘์‹)๋ฅผ ํƒ์ƒ‰ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋ธ์€ ๋ฒ„ํŠผ์ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ํŒ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” ํ…์ŠคํŠธ๋ฅผ ๋ณด๊ณ  ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๋งฅ๋ฝ๋„ ์—†๊ณ  ์„ ํƒ๊ถŒ๋„ ์—†๋Š” ์ธํ„ด์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค.

GitHub ์„œ๋ฒ„: ๋กœ์ปฌ ๋ชจ๋ธ์—์„œ ์ €์žฅ์†Œ, ์ด์Šˆ, PR

GitHub ์„œ๋ฒ„๋Š” ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์ž์—ฐ์–ด ์ž‘์—…์„ API ํ˜ธ์ถœ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 4๊ฐœ ์ค‘ ์„ค์ •์ด ๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๋ฉฐ personal access token(PAT) ๊ถŒํ•œ์„ ํ†ตํ•ด ์ œํ•œํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฝ์Šต๋‹ˆ๋‹ค.

  • ์„ค์น˜: @modelcontextprotocol/server-github, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ GITHUB_PERSONAL_ACCESS_TOKEN์˜ PAT์™€ ํ•จ๊ป˜ ์‹คํ–‰. ํ† ํฐ์ด ์œ ์ผํ•œ ์ธ์ฆ์ž…๋‹ˆ๋‹ค โ€” ์„œ๋ฒ„ ์ž์ฒด์—๋Š” ๋ณ„๋„ ์„ค์ •์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ๋…ธ์ถœ๋œ ๋„๊ตฌ: search_repositories, get_file_contents, create_or_update_file, create_pull_request, list_issues, create_issue, add_issue_comment, merge_pull_request, ๊ทธ ์™ธ ์ˆ˜์‹ญ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๋„๊ตฌ. ์ „์ฒด ํ‘œ๋ฉด์ด ํฌ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์€ 5~10๊ฐœ์˜ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • PAT ๋ฒ”์œ„ ์ œํ•œ. ์ตœ์†Œ ํ•„์š” ๊ถŒํ•œ(ํƒ์ƒ‰์„ ์œ„ํ•œ Read, PR/์ด์Šˆ ์ƒ์„ฑ์„ ์œ„ํ•œ Write)์œผ๋กœ ํŠน์ • ์ €์žฅ์†Œ์— ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ ์„ธ๋ถ„ํ™”๋œ PAT๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์‹คํ—˜์  ์—์ด์ „ํŠธ์— repo๊ฐ€ ์žˆ๋Š” ํด๋ž˜์‹ PAT๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
  • ์‹ค์ œ ์›Œํฌํ”Œ๋กœ: ํŠธ๋ฆฌ์•„์ง€("์ตœ๊ทผ 20๊ฐœ์˜ ์—ด๋ฆฐ ์ด์Šˆ๋ฅผ ์ฝ์–ด ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ๋ ˆ์ด๋ธ”์„ ์ œ์•ˆํ•˜์‹ญ์‹œ์˜ค"), ์ดˆ์•ˆ("README๋ฅผ ์ฝ๊ณ  ์˜คํƒ€๋ฅผ ์ˆ˜์ •ํ•˜๋Š” PR์„ ์—ฌ์‹ญ์‹œ์˜ค"), ๋ณด๊ณ ์„œ("์ด๋ฒˆ ์ฃผ ๋น„ํ™œ์„ฑ PR์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ").
  • ์œ„ํ—˜ ํ‘œ๋ฉด: ์—์ด์ „ํŠธ๊ฐ€ ์ด์Šˆ์™€ PR์„ ๋งŒ๋“ค๊ณ  ๋Œ“๊ธ€์„ ๋‹ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, (์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ) ์ปค๋ฐ‹์„ pushํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ๊ณผ ์›Œํฌํ”Œ๋กœ ๋ชจ๋‘๋ฅผ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ํ•œ merge ๋„๊ตฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค โ€” ์„ธ๋ถ„ํ™”๋œ PAT๋กœ ์ €์žฅ์†Œ์—์„œ์˜ ์‹ค์ˆ˜ merge๋Š” ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋นจ๋ฆฌ ์•Œ์•„์ฐจ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.
yaml
# ~/.config/goose/config.yaml
mcpServers:
github:
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-github"
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "${GH_AGENT_PAT}"
# Fine-grained PAT scoped to one or two test repos,
# not your personal account-wide classic token.

๋ชจ๋ธ์„ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ๋ณด์•ˆ ๋ชจ๋ธ

์˜ฌ๋ฐ”๋ฅธ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์€ "LLM์€ ๋‹น์‹ ์ด ์ฃผ๋Š” ์—ด์‡ ๋ฅผ ๊ฐ€์ง„ ์‹ ๋ขฐํ•˜์ง€ ์•Š๋Š” ์ธํ„ด"์ž…๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์€ ํ—ˆ์šฉ ๋ชฉ๋ก์— ํฌํ•จํ•˜๋Š” ์„œ๋ฒ„์™€ ํ‘œ๋ฉด์—์„œ ์˜ต๋‹ˆ๋‹ค โ€” ๋ชจ๋ธ์˜ ํŒ๋‹จ์—์„œ ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

  • filesystem ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค. ~๋‚˜ /๋Š” ์ ˆ๋Œ€ ์•ˆ ๋ฉ๋‹ˆ๋‹ค. agent-workspace/ ํด๋”๋ฅผ ์„ ํƒํ•˜๊ณ  ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—…ํ•  ํŒŒ์ผ์˜ ๋ณต์‚ฌ๋ณธ์„ ๊ทธ ์•ˆ์— ๋„ฃ์œผ์‹ญ์‹œ์˜ค. ์—์ด์ „ํŠธ๊ฐ€ ์‹คํŒจํ•˜๋”๋ผ๋„ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” ํ•˜๋‚˜์˜ ํด๋”์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. SELECT ๊ถŒํ•œ๋งŒ ์žˆ๊ณ  30์ดˆ statement timeout์ด ์žˆ๋Š” ์ „์šฉ agent_ro ์—ญํ• ์ด ์ „์ฒด ์‚ฌ๊ณ  ํด๋ž˜์Šค๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์“ฐ๊ธฐ ๋˜๋Š” ์…ธ ๋„๊ตฌ๋ฅผ ๋ช…์‹œ์  ์Šน์ธ ๋’ค์— ๋‘์‹ญ์‹œ์˜ค. Goose, Cline, Continue.dev๋Š” ๋„๊ตฌ๋ณ„ ์Šน์ธ ๊ทœ์น™์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ๊ธฐ ๋„๊ตฌ๋ฅผ ํ—ˆ์šฉํ•˜๊ณ ; write_file, edit_file, execute_command, create_pull_request, ์–‘์‹์„ ์ œ์ถœํ•˜๋Š” ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ € ์ž‘์—…์— ์Šน์ธ์„ ์š”๊ตฌํ•˜์‹ญ์‹œ์˜ค.
  • ๊ฐ์‚ฌ ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋“  MCP ํด๋ผ์ด์–ธํŠธ๋Š” tool call๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๊ธด ์„ธ์…˜ ํ›„์— ๋กœ๊ทธ๋ฅผ ๊ฒ€ํ† ํ•˜์‹ญ์‹œ์˜ค: ๋ชจ๋ธ์ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒƒ์„ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋•Œ๋กœ๋Š” ๋ฌดํ•ดํ•˜์ง€๋งŒ, ๋•Œ๋กœ๋Š” ๊ถŒํ•œ ์กฐ์ •์„ ์ •๋‹นํ™”ํ•ฉ๋‹ˆ๋‹ค).
  • ์ข์€ ๋ฒ”์œ„์˜ ํ† ํฐ์œผ๋กœ ํƒ€์‚ฌ ์ ‘๊ทผ์„ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค. ๋‘ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ €์žฅ์†Œ๋กœ ์ œํ•œ๋œ GitHub PAT. ์ฝ๊ธฐ ์ „์šฉ Postgres ์—ญํ• . ์ž๊ฒฉ ์ฆ๋ช… ์—†๋Š” ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜. ๋ชจ๋ธ์€ ๊ฒฐ๊ตญ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒƒ์„ ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค; ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์˜ ํ•œ๊ณ„๊ฐ€ ๋ชจ๋ธ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ–‰๋™ํ•˜๋Š”์ง€์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•ด ์—์ด์ „ํŠธ๋ฅผ ๊ฒฉ๋ฆฌํ•˜์‹ญ์‹œ์˜ค. ๊ฐœ์ธ ๋ฐ์ดํ„ฐ๋กœ ์ž‘์—…ํ•  ๋•Œ ์—์ด์ „ํŠธ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ํ˜ธ์ŠคํŠธ์—์„œ ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค(๋˜๋Š” ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์‚ฌ์šฉ). ๋กœ์ปฌ ์Šคํƒ์€ ์ด๋ฏธ ๊ธฐ๊ธฐ ๋ฐ–์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ์ „์†กํ•˜์ง€ ์•Š์ง€๋งŒ ์‹ฌ์ธต ๋ฐฉ์–ด๋Š” ํƒ€์‚ฌ ์„œ๋ฒ„์˜ ๋ฒ„๊ทธ๋ฅผ ํฌ์ฐฉํ•ฉ๋‹ˆ๋‹ค.
  • MCP ์„œ๋ฒ„ ์„ ํƒ์„ ๋ชจ๋“  ์˜์กด์„ฑ ์„ ํƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•˜์‹ญ์‹œ์˜ค. ์ฐธ์กฐ ์„œ๋ฒ„๋Š” ์ž˜ ์œ ์ง€ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค; ๋งŽ์€ ํƒ€์‚ฌ ์„œ๋ฒ„๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž๊ฒฉ ์ฆ๋ช…์ด ํ•„์š”ํ•œ ์„œ๋ฒ„๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์ „์— ์„œ๋ฒ„ ์ฝ”๋“œ๋ฅผ ์ฝ์œผ์‹ญ์‹œ์˜ค.

๐Ÿ“ŒNote: ์œ ์šฉํ•œ ์žฅ์•  ๋ณต๊ตฌ ์Šต๊ด€: ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์—์ด์ „ํŠธ ์ž‘์—… ์ „์— git stash(๋˜๋Š” git checkout -b agent/<task>)๋ฅผ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์ž‘์—… ํ›„ diff๋ฅผ ๊ฒ€ํ† ํ•˜๊ณ , ์›ํ•˜๋Š” ๋ถ€๋ถ„์„ ์œ ์ง€ํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ๋ฒ„๋ฆฌ์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ๊ธด Cline ๋˜๋Š” Aider ์„ธ์…˜์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ด€ํ–‰์ž…๋‹ˆ๋‹ค โ€” ๋” ๋„“์€ ํŒจํ„ด์€ Continue.dev vs Cline vs Aider ๋น„๊ต๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋กœ์ปฌ MCP vs Claude Desktop: ๋ฌด์—‡์ด ๋ฐ”๋€Œ๊ณ  ๋ฌด์—‡์ด ๋‚จ๋Š”๊ฐ€

ํ”„๋กœํ† ์ฝœ๊ณผ ์„œ๋ฒ„๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ๊ณผ ํด๋ผ์ด์–ธํŠธ๋งŒ ๋ฐ”๋€๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ MCP๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค โ€” ๋„๊ตฌ์— ๋Œ€ํ•œ ํˆฌ์ž๊ฐ€ ๋กœ์ปฌ ๋ฐ ํด๋ผ์šฐ๋“œ ์„ค์ • ๊ฐ„์— ๊น”๋”ํ•˜๊ฒŒ ์ด์‹๋ฉ๋‹ˆ๋‹ค.

๋ ˆ์ด์–ดClaude DesktopOllama ๋กœ์ปฌ + Goose
๋ชจ๋ธClaude(Anthropic, ํด๋ผ์šฐ๋“œ)Gemma 4, GLM-5.1, Qwen3 ๋˜๋Š” Llama 3.3(๋กœ์ปฌ)
ํด๋ผ์ด์–ธํŠธClaude Desktop ์•ฑGoose, Cline, Continue.dev ๋˜๋Š” LM Studio
์„œ๋ฒ„๋™์ผํ•œ MCP ์„œ๋ฒ„๋™์ผํ•œ MCP ์„œ๋ฒ„
ํ”„๋กœํ† ์ฝœMCP(JSON-RPC 2.0)MCP(JSON-RPC 2.0)
์š”์ฒญ๋‹น ๋น„์šฉํ† ํฐ๋‹น API ์ง€์ถœ$0 โ€” ๋กœ์ปฌ ์ถ”๋ก 
ํ”„๋ผ์ด๋ฒ„์‹œ๋Œ€ํ™”๊ฐ€ Anthropic์œผ๋กœ ์ „์†ก๋จ๊ธฐ๊ธฐ์—์„œ๋งŒ ์œ ์ง€๋จ
์†๋„ ์ œํ•œAPI ์ œํ•œ ์ ์šฉํ•˜๋“œ์›จ์–ด ์„ฑ๋Šฅ์— ์˜ํ•ด์„œ๋งŒ ์ œํ•œ๋จ
tool calling ํ’ˆ์งˆ์ตœ๊ณ  ์ˆ˜์ค€27B+ ๋ชจ๋ธ์—์„œ ์ข‹์Œ; 7B ๋ฏธ๋งŒ์—์„œ ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜๋จ
์ธํ„ฐ๋„ท ํ•„์š”์˜ˆ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ํ•  ๊ฒฝ์šฐ์—๋งŒ(์˜ˆ: ๋ธŒ๋ผ์šฐ์ €)
์„ค์ • ์‹œ๊ฐ„5๋ถ„15๋ถ„(์ผํšŒ์„ฑ)

๋กœ์ปฌ MCP๋ฅผ ์œ„ํ•œ tool calling ๋ชจ๋ธ ์„ ํƒ

tool calling ์‹ ๋ขฐ์„ฑ์€ harness๊ฐ€ ์•„๋‹Œ ๋ชจ๋ธ ํฌ๊ธฐ์™€ ํ›ˆ๋ จ๊ณผ ํ•จ๊ป˜ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. Cline์—์„œ ์ž˜๋ชป๋œ ํ˜•์‹์˜ tool call์„ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋ธ์€ ๊ฐ™์€ ์ด์œ ๋กœ Goose์—์„œ๋„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • **Gemma 4 27B(gemma4:27b)** โ€” Google์˜ tool calling ํ›ˆ๋ จ์€ ์ด ํฌ๊ธฐ์—์„œ ์ตœ๊ณ  ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. Q4_K_M์—์„œ 16GB ํ†ตํ•ฉ ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” 24GB VRAM์— ๋งž์Šต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ ์ผ๋ฐ˜ ์ถ”๋ก ; ์—ฐ์‡„ tool call์—์„œ ์•ฝ๊ฐ„ ๋ณด์ˆ˜์ .
  • **GLM-5.1 32B(glm5:32b)** โ€” Zhipu์˜ ๋ชจ๋ธ์€ ๋งค์šฐ ๋†’์€ tool calling ์‹ ๋ขฐ์„ฑ๊ณผ ํ‘œ์ค€ 128K ์ปจํ…์ŠคํŠธ ์ฐฝ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. Gemma 4๋ณด๋‹ค ์•ฝ๊ฐ„ ๋ฌด๊ฒ์ง€๋งŒ 24GB GPU์— ํŽธ์•ˆํ•˜๊ฒŒ ๋งž์Šต๋‹ˆ๋‹ค.
  • **Qwen3 32B(qwen3:32b) โ€” ๊ท ํ˜• ์žกํž˜; ์กฐ๋ฐ€ํ•œ 32B๋Š” MCP๋ฅผ ๋ฌธ์ œ์—†์ด ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ธด ์—์ด์ „ํŠธ ๋ฃจํ”„์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Qwen3-Coder 30B(qwen3-coder:30b)**๋Š” ์—์ด์ „ํŠธ ์ž‘์—…์ด ์ฝ”๋“œ ์ง€ํ–ฅ์ ์ธ ๊ฒฝ์šฐ ์ตœ์„ ์ž…๋‹ˆ๋‹ค.
  • **Llama 3.3 70B(llama3.3:70b)** โ€” ๊ฐ€์žฅ ๋†’์€ ์„ฑ๋Šฅ์ด์ง€๋งŒ ๊ฐ€์žฅ ๋ฌด๊ฒ์Šต๋‹ˆ๋‹ค. Q4_K_M์—์„œ 48GB+ ํ†ตํ•ฉ ๋ฉ”๋ชจ๋ฆฌ ๋˜๋Š” 2ร— 24GB GPU. ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค; ๋” ์ž‘์€ ๋ชจ๋ธ์ด ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.
  • MCP ์ž‘์—…์—์„œ ํ”ผํ•ด์•ผ ํ•  ๊ฒƒ: 7B ๋ฏธ๋งŒ์˜ ๋ชจ๋“  ๊ฒƒ๊ณผ ๋ช…์‹œ์ ์ธ tool calling ํ›ˆ๋ จ์ด ์—†๋Š” ๋ฒ”์šฉ ๋ชจ๋ธ. ์ž˜๋ชป๋œ ํ˜•์‹์˜ ํ˜ธ์ถœ์„ ์ƒ์„ฑํ•˜๊ณ , ๋ฃจํ”„๊ฐ€ ์ฐจ๋‹จ๋˜๊ณ , harness๋ฅผ ํƒ“ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค โ€” ํ•˜์ง€๋งŒ harness๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๋ชจ๋ธ์—์„œ tool calling ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ตฌ์กฐ์  ํ”„๋กฌํ”„ํŒ… ๊ธฐ๋ฒ•์€ Chain-of-thought ํ”„๋กฌํ”„ํŒ…์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
  • ๋น„๊ต ๋ฐ์ดํ„ฐ๋Š” 2026๋…„ tool calling์„ ์œ„ํ•œ ์ตœ๊ณ ์˜ ๋กœ์ปฌ ๋ชจ๋ธ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

MCP vs ์ผ๋ฐ˜ Function Calling: ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€

Function calling์€ ๋ชจ๋ธ์ด ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. MCP๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ๋„๊ตฌ๊ฐ€ ๋งŒ๋‚  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€๋Š” ๋‹ค๋ฅธ ๋ ˆ์ด์–ด์— ์žˆ์œผ๋ฉฐ ํ˜‘๋ ฅํ•ฉ๋‹ˆ๋‹ค; ํ•˜๋‚˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • Function calling์€ LLM ์ธก์˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค: ๋ชจ๋ธ์ด ๋„๊ตฌ ์ด๋ฆ„๊ณผ ์ธ์ˆ˜๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๊ตฌ์กฐํ™”๋œ JSON ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. OpenAI์˜ ๋„๊ตฌ, Anthropic์˜ ๋„๊ตฌ, Ollama์˜ tool call API๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฅธ wire ํ˜•์‹์œผ๋กœ ๋™์ผํ•œ ์•„์ด๋””์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • MCP๋Š” ๊ทธ ์œ„์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค: ๋„๊ตฌ๊ฐ€ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ์„ค๋ช…, ๋ฐœ๊ฒฌ, ํ˜ธ์ถœ, ๋ฐ˜ํ™˜๋˜๋Š” ๋ฐฉ์‹์„ ํ‘œ์ค€ํ™”ํ•ฉ๋‹ˆ๋‹ค. function calling๋งŒ ์žˆ๋Š” ๋ชจ๋ธ์€ filesystem์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค; MCP ์„œ๋ฒ„๋Š” filesystem ์ž‘์—…์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฅผ ๋ชจ๋ธ์˜ function calling API์— ๋งคํ•‘ํ•˜๊ณ , ๋ชจ๋ธ์ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ ์€ ์ƒํ˜ธ ์šด์šฉ์„ฑ์ž…๋‹ˆ๋‹ค. filesystem ์„œ๋ฒ„๋ฅผ ํ•œ ๋ฒˆ ์ž‘์„ฑํ•˜๋ฉด; Claude Desktop, Goose, Cline, Continue.dev, LM Studio ๋ชจ๋‘ ๋ณ€๊ฒฝ ์—†์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Claude์—์„œ Gemma 4๋กœ ๋ชจ๋ธ์„ ๋ฐ”๊ฟ”๋„; ์„œ๋ฒ„๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • pure function calling์œผ๋กœ ์—์ด์ „ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ณ„๋กœ filesystem, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๋ธŒ๋ผ์šฐ์ € ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์žฌ๊ตฌํ˜„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. MCP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๊ฒƒ๋“ค์ด ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜์กด์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์ผํšŒ์„ฑ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ pure function calling์ด ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋‚˜ ๋ชจ๋ธ ๊ฐ„์— ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•ด MCP๋Š” ๋ฉฐ์น  ๋‚ด์— ๊ฐ€์žฅ ๋‚ฎ์€ ๋…ธ๋ ฅ์˜ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

๋กœ์ปฌ MCP ์„ค์ • ์‹œ ์ผ๋ฐ˜์ ์ธ ์‹ค์ˆ˜

  • ์‹ค์ˆ˜ 1: ๋ฒ”์šฉ ์†Œํ˜• ๋ชจ๋ธ ์‚ฌ์šฉ. 7B ๋ฏธ๋งŒ ๋ชจ๋ธ(๊ทธ๋ฆฌ๊ณ  tool calling ํŒŒ์ธํŠœ๋‹ ์—†๋Š” ๋Œ€๋ถ€๋ถ„์˜ 7B~13B ๋ฒ”์šฉ ๋ชจ๋ธ)์€ ์ž˜๋ชป๋œ ํ˜•์‹์˜ tool call์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. tool calling์— ํŒŒ์ธํŠœ๋‹๋œ 27B+ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ณ  harness์™€ ์‹ธ์šฐ๋Š” ๊ฒƒ์„ ๊ทธ๋งŒ๋‘์‹ญ์‹œ์˜ค.
  • ์‹ค์ˆ˜ 2: ํ—ˆ์šฉ ๋ชฉ๋ก์— ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋„ฃ๊ธฐ. "ํ…Œ์ŠคํŠธ๋งŒ์„ ์œ„ํ•œ" ~ ํ—ˆ์šฉ ๋ชฉ๋ก์€ ์ผ์ƒ์ ์ธ ์‚ฌ์šฉ๊นŒ์ง€ ์‚ด์•„๋‚จ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ์ „์šฉ agent-workspace๋ฅผ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.
  • ์‹ค์ˆ˜ 3: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ชจ๋“œ๋กœ ๋‘๊ธฐ. ์‹ค์ œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ž์‹ ๊ฐ ์žˆ๋Š” ์—์ด์ „ํŠธ์˜ DELETE ์ฟผ๋ฆฌ๊ฐ€ ์ •ํ™•ํžˆ ์ด๊ฒƒ์ด ๋ฐฉ์ง€ํ•˜๋Š” ์‚ฌ๊ณ ์ž…๋‹ˆ๋‹ค. agent_ro๋ฅผ ๊ธฐ๋ณธ ์—ญํ• ๋กœ ๋งŒ๋“œ์‹ญ์‹œ์˜ค; ๊ทธ๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ์ž‘์—…์—๋งŒ, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ž‘์—… ๋™์•ˆ์—๋งŒ ๋ณ„๋„์˜ ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์—ญํ• ์„ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.
  • ์‹ค์ˆ˜ 4: ๋ชจ๋“  ๋„๊ตฌ ์ž๋™ ์Šน์ธ. "๋ชจ๋‘ ์Šน์ธ" ๋ฒ„ํŠผ์€ ํŽธ๋ฆฌํ•˜๊ณ  ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ ๋„๊ตฌ(read_file, list_directory, query)๋ฅผ ์ž๋™ ์Šน์ธํ•˜์‹ญ์‹œ์˜ค; ์“ฐ๊ธฐ/์…ธ/PR ๋„๊ตฌ๋Š” ํ•ญ์ƒ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ค์ˆ˜ 5: ๋‹ค๋‹จ๊ณ„ ๋ธŒ๋ผ์šฐ์ € ์ž‘์—…์— 32K ์ปจํ…์ŠคํŠธ ๋ชจ๋ธ ์‚ฌ์šฉ. ํŽ˜์ด์ง€ ๋‚ด์šฉ์ด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์„ธ ํŽ˜์ด์ง€๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์—์ด์ „ํŠธ๊ฐ€ ์ถ”๋ก  ์ „์— 32K ํ† ํฐ์„ ์†Œ์ง„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์ง‘์•ฝ์ ์ธ ์ž‘์—…์—๋Š” 128K ์ปจํ…์ŠคํŠธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
  • ์‹ค์ˆ˜ 6: ์—์ด์ „ํŠธ๊ฐ€ ํŒ๋‹จ๋ ฅ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ "์ด๊ฒƒ์ด ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค" ๋˜๋Š” "์ด PR์ด ๋ฐฐํฌ๋  ๊ฒƒ์ด๋‹ค"๋ผ๋Š” ๊ฐœ๋…์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ถŒํ•œ์ด ์œ ์ผํ•œ ์žฅ๋ฒฝ์ž…๋‹ˆ๋‹ค.
  • ์‹ค์ˆ˜ 7: ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ์ฐธ์กฐ ์„œ๋ฒ„ ์„ค์น˜. ๋” ๋งŽ์€ ๋„๊ตฌ = ๋” ํฐ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ = ๋” ๋А๋ฆฌ๊ณ  ๋œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ ์„ ํƒ. filesystem์œผ๋กœ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ์„ ํ•„์š”๋กœ ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

์ถœ์ฒ˜

FAQ

MCP๋ž€ ๋ฌด์—‡์ด๋ฉฐ ๋กœ์ปฌ AI์— ์™œ ์ค‘์š”ํ•ฉ๋‹ˆ๊นŒ?

Model Context Protocol(MCP)์€ ํด๋ผ์ด์–ธํŠธ(Goose, Cline, Continue.dev, LM Studio, Claude Desktop)๊ฐ€ ์–ธ์–ด ๋ชจ๋ธ์„ ๋„๊ตฌ ์„œ๋ฒ„์— ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์˜คํ”ˆ JSON-RPC 2.0 ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ AI์— ์ค‘์š”ํ•œ ์ด์œ ๋Š” ์ฑ„ํŒ… ๋ชจ๋ธ์„ ์—์ด์ „ํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณ„์ธต์„ ํ‘œ์ค€ํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค โ€” ๋„๊ตฌ ์„œ๋ฒ„๋ฅผ ํ•œ ๋ฒˆ ์ž‘์„ฑํ•˜๋ฉด ๋กœ์ปฌ Ollama ๋ชจ๋ธ์„ ํฌํ•จํ•œ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์™€ ๋ชจ๋“  ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. MCP ์—†์ด๋Š” ๊ฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ž์ฒด ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด ํŒŒ์ผ/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/๋ธŒ๋ผ์šฐ์ € ๋„๊ตฌ๋ฅผ ์žฌ๋ฐœ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

MCP๋Š” Claude Desktop ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

๋„ค. ํ”„๋กœํ† ์ฝœ์€ ์˜คํ”ˆ์ด๋ฉฐ Claude Desktop๊ณผ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค. 2026๋…„์— Goose, Cline, Continue.dev, LM Studio๋Š” ๋กœ์ปฌ Ollama ๋ชจ๋ธ๊ณผ ์ž‘๋™ํ•˜๋Š” MCP ํด๋ผ์ด์–ธํŠธ ๊ตฌํ˜„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ ์„œ๋ฒ„(filesystem, sqlite, postgres, puppeteer, github)๋Š” ํ˜ธํ™˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณ€๊ฒฝ ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๋กœ์ปฌ ๋ชจ๋ธ์ด MCP๋ฅผ ๊ฐ€์žฅ ์ž˜ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ?

2026๋…„ 5์›” ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์žฅ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์€ Gemma 4 27B, GLM-5.1 32B, Qwen3 32B(์ฝ”๋“œ ์ง€ํ–ฅ ์ž‘์—…์˜ ๊ฒฝ์šฐ Qwen3-Coder 30B), Llama 3.3 70B์ž…๋‹ˆ๋‹ค. 4๊ฐœ ๋ชจ๋‘ ๋ช…์‹œ์ ์ธ tool calling ํ›ˆ๋ จ์„ ๋ฐ›์•˜์œผ๋ฉฐ MCP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ผ์šฐํŒ…ํ•  ์ˆ˜ ์žˆ๋Š” ๊น”๋”ํ•œ function calling JSON์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 7B ๋ฏธ๋งŒ ๋ชจ๋ธ(๊ทธ๋ฆฌ๊ณ  tool calling ํŒŒ์ธํŠœ๋‹ ์—†๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฒ”์šฉ ๋ชจ๋ธ)์€ ์ •๊ธฐ์ ์œผ๋กœ ์ž˜๋ชป๋œ ํ˜•์‹์˜ tool call์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

MCP๋Š” ์•ˆ์ „ํ•ฉ๋‹ˆ๊นŒ? ์—์ด์ „ํŠธ๊ฐ€ ๋‚ด ํŒŒ์ผ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ—ˆ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ์€ ํ”„๋กœํ† ์ฝœ์ด ์•„๋‹Œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์—์„œ ์˜ต๋‹ˆ๋‹ค. filesystem ์„œ๋ฒ„๋Š” ํ—ˆ์šฉ ๋ชฉ๋ก์— ๋„ฃ์€ ๊ฒฝ๋กœ ๋‚ด์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค โ€” ์ „์šฉ agent-workspace ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋Š” SELECT ์ „์šฉ ์—ญํ• ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๊ธฐ, ์…ธ, PR ๋„๊ตฌ์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋ช…์‹œ์  ์Šน์ธ์„ ์š”๊ตฌํ•˜์‹ญ์‹œ์˜ค; ์ฝ๊ธฐ ์ž‘์—…๋งŒ ์ž๋™ ์Šน์ธํ•˜์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌ ๋กœ๊ทธ๋Š” ์—์ด์ „ํŠธ๊ฐ€ ํ•œ ์ผ์„ ์‚ฌํ›„์— ์ •ํ™•ํžˆ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋‚˜๋งŒ์˜ MCP ์„œ๋ฒ„๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค โ€” ๊ทธ๋ฆฌ๊ณ  SDK๊ฐ€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ๊ณต์‹ TypeScript ๋ฐ Python SDK(@modelcontextprotocol/sdk ๋ฐ mcp)๊ฐ€ JSON-RPC ๋ฐฐ๊ด€์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. JSON ์Šคํ‚ค๋งˆ์™€ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋กœ ๋„๊ตฌ๋ฅผ ์ •์˜ํ•˜๋ฉด SDK๊ฐ€ stdio๋ฅผ ํ†ตํ•ด ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๋ชฉ์  ์„œ๋ฒ„(๋‚ด๋ถ€ API๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ๋„๊ตฌ)๋Š” 50~100์ค„ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

MCP๋Š” Windows์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

๋„ค. Ollama, Goose, Cline, Continue.dev, LM Studio ๋ชจ๋‘ Windows์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. MCP ์„œ๋ฒ„๋Š” Node.js ๋˜๋Š” Python ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค; ๋‘ ๋Ÿฐํƒ€์ž„ ๋ชจ๋‘ Windows์™€ ์™„์ „ํžˆ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค. ์œ ์ผํ•œ ํ”Œ๋žซํผ ํŠน์ • ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ๊ฒฝ๋กœ ์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค โ€” ์„ค์ •์—์„œ ์Šฌ๋ž˜์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ด์Šค์ผ€์ดํ”„ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ ์™ธ์—๋Š” ๊ฒฝํ—˜์ด macOS ๋ฐ Linux์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

MCP tool call์„ ์–ด๋–ป๊ฒŒ ์ƒŒ๋“œ๋ฐ•์‹ฑํ•ฉ๋‹ˆ๊นŒ?

์„ธ ๊ฐ€์ง€ ๋ ˆ์ด์–ด๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ์œ„ํ—˜์„ ์ปค๋ฒ„ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ์งธ, ์„ค์ • ์ˆ˜์ค€์—์„œ ๊ฐ ์„œ๋ฒ„๋ฅผ ์ข๊ฒŒ ์ œํ•œํ•˜์‹ญ์‹œ์˜ค: filesystem์€ ํ•˜๋‚˜์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ฝ๊ธฐ ์ „์šฉ ์—ญํ• ๋กœ, GitHub๋Š” ํ…Œ์ŠคํŠธ ์ €์žฅ์†Œ๋ฅผ ์œ„ํ•œ ์„ธ๋ถ„ํ™”๋œ PAT๋กœ. ๋‘˜์งธ, ํด๋ผ์ด์–ธํŠธ์˜ ๋„๊ตฌ๋ณ„ ์Šน์ธ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค: ์ฝ๊ธฐ์— ์ž๋™ ์Šน์ธ, ์“ฐ๊ธฐ์— ํ•„์ˆ˜ ์Šน์ธ. ์…‹์งธ, ์—์ด์ „ํŠธ๋ฅผ git stash ํ˜ธํ™˜ workspace ๋‚ด์—์„œ ์œ ์ง€ํ•˜์—ฌ ๋ชจ๋“  ํŒŒ๊ดด์ ์ธ ์ž‘์—…์ด git์„ ํ†ตํ•ด ์ทจ์†Œ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ๋ฏผ๊ฐํ•œ ์ž‘์—…์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ ์—†์ด ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

MCP ์—์ด์ „ํŠธ๊ฐ€ HTTP ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค, ํŠน์ • ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด. ๋ธŒ๋ผ์šฐ์ € ์„œ๋ฒ„(puppeteer ๋˜๋Š” playwright)๋Š” ๋ชจ๋ธ์ด ํƒ์ƒ‰ํ•˜๋Š” ์š”์ฒญ์„ ํ•˜๋Š” ์‹ค์ œ Chromium์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํƒ€์‚ฌ ์„œ๋ฒ„๋Š” ๋” ์ง์ ‘์ ์œผ๋กœ http_get/http_post ๋„๊ตฌ๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค. filesystem ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋Š” ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค; ๋กœ์ปฌ ๋ฆฌ์†Œ์Šค์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

MCP๊ฐ€ Ollama์™€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋ž˜ํผ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

Ollama ์ž์ฒด๋Š” MCP๋ฅผ ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค โ€” OpenAI ํ˜ธํ™˜ ์ฑ„ํŒ… API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Ollama์˜ ์ฑ„ํŒ… API์™€ MCP ์„œ๋ฒ„ ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ(Goose, Cline, Continue.dev, LM Studio)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ชจ๋ธ์˜ tool call์„ ์˜ฌ๋ฐ”๋ฅธ MCP ์„œ๋ฒ„๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋Œ€ํ™”์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  Ollama๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ ์™ธ์— ์ถ”๊ฐ€ ์„ค์ •์ด ์—†์Šต๋‹ˆ๋‹ค.

MCP์™€ function calling์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Function calling์€ LLM์ด ๋„๊ตฌ ์ด๋ฆ„๊ณผ ์ธ์ˆ˜๋ฅผ ํฌํ•จํ•œ ๊ตฌ์กฐํ™”๋œ JSON์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค โ€” ์ด๊ฒƒ์€ ๋ชจ๋ธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. MCP๋Š” ๋„๊ตฌ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ๋„๊ตฌ๋ฅผ ์„ค๋ช…, ๋ฐœ๊ฒฌ, ํ˜ธ์ถœ, ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์„ ํ‘œ์ค€ํ™”ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค โ€” ์ด๊ฒƒ์€ ์ƒํ˜ธ ์šด์šฉ์„ฑ ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ํ˜‘๋ ฅํ•ฉ๋‹ˆ๋‹ค: ํด๋ผ์ด์–ธํŠธ๊ฐ€ MCP ๋„๊ตฌ ์ •์˜๋ฅผ ๋ชจ๋ธ์˜ function calling ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋ชจ๋ธ์ด function call์„ ์ƒ์„ฑํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœ์„ MCP ์„œ๋ฒ„์— ๋‹ค์‹œ ๋งคํ•‘ํ•˜๊ณ , ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. MCP ์—†์ด๋Š” function calling์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ”„๋กœ์ ํŠธ๋ณ„๋กœ filesystem/๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค/๋ธŒ๋ผ์šฐ์ € ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์žฌ๊ตฌํ˜„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. MCP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ผํ•œ ์„œ๋ฒ„๊ฐ€ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

โ† ๊ณ ๊ธ‰ ๋กœ์ปฌ LLM์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ

Ollama + MCP ๋กœ์ปฌ 2026: AI๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ API์— ์—ฐ๊ฒฐํ•˜๊ธฐ | PromptQuorum