๐Ÿง  AI ์ž๋™ํ™”/MCP

MCP ํŠœํ† ๋ฆฌ์–ผ - Advanced MCP Tutorial

Vento AI Lab 2026. 7. 19.
๋ฐ˜์‘ํ˜•

 

MCP(Model Context Protocol)๋ฅผ ์ฒ˜์Œ ํ•™์Šตํ•  ๋•Œ๋Š” ์‚ฌ์น™์—ฐ์‚ฐ์ด๋‚˜ ๊ฐ„๋‹จํ•œ CRUD ์˜ˆ์ œ๊ฐ€ ์ ํ•ฉํ•˜๋‹ค. Tool์„ ๋“ฑ๋กํ•˜๊ณ  ์ž…๋ ฅ๊ฐ’์„ ์ „๋‹ฌํ•œ ๋’ค ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ๋ฆ„์„ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ ์—…๋ฌด์— MCP๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹จ์ˆœํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ˆ˜์ค€์„ ๋„˜์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํŒŒ์ผ, ์™ธ๋ถ€ API, ๊ถŒํ•œ, ๋กœ๊ทธ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊นŒ์ง€ ํ•จ๊ป˜ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

์‚ผ์„ฑ์ „์ž ์ž„์ง์›์„ ๋Œ€์ƒ์œผ๋กœ MCP์™€ AI Agent ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ , ์‚ฌ์น™์—ฐ์‚ฐ MCP์™€ Item CRUD MCP ํŠœํ† ๋ฆฌ์–ผ์„ ์ œ๊ณตํ–ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋กœ๋Š” ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ๋„ํ™”๋œ MCP ์˜ˆ์ œ๋ฅผ ์„ค๊ณ„ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค.

์ด๋ฒˆ ๊ณ ๋„ํ™” ํŠœํ† ๋ฆฌ์–ผ์€ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ์—…๋ฌด๋ฅผ ์ง€์›ํ•˜๋Š” Advanced MCP Assistant๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์„ฑํ–ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ž์—ฐ์–ด๋กœ ํ”„๋กœ์ ํŠธ ํ˜„ํ™ฉ์„ ์กฐํšŒํ•˜๊ณ , ์ง€์—ฐ๋œ ์ž‘์—…์„ ํ™•์ธํ•˜๋ฉฐ, ๊ด€๋ จ ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ , ์ฃผ๊ฐ„๋ณด๊ณ  ์ดˆ์•ˆ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ˆœ CRUD์—์„œ ์‹ค๋ฌดํ˜• MCP๋กœ ํ™•์žฅํ•˜๊ธฐ

๊ธฐ์ดˆ MCP ์˜ˆ์ œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

์‚ฌ์šฉ์ž ์š”์ฒญ
→ MCP Tool ํ˜ธ์ถœ
→ ํ•จ์ˆ˜ ์‹คํ–‰
→ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

์‹ค๋ฌด ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋ณด๋‹ค ๋” ๋งŽ์€ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์‚ฌ์šฉ์ž
→ AI Agent ๋˜๋Š” MCP Host
→ MCP Client
→ MCP Server
→ Application Service
→ Database / File / REST API
→ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

์—ฌ๊ธฐ์— ์ธ์ฆ, ๊ถŒํ•œ, ๊ฐ์‚ฌ ๋กœ๊ทธ, ์ž…๋ ฅ ๊ฒ€์ฆ, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, ์žฌ์‹œ๋„ ์ •์ฑ…์ด ์ถ”๊ฐ€๋œ๋‹ค. ํŠนํžˆ ์‚ฌ๋‚ด ์‹œ์Šคํ…œ๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” MCP ์„œ๋ฒ„๋Š” ๋‹จ์ˆœํžˆ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค. ๋ˆ„๊ฐ€ ์–ด๋–ค Tool์„ ํ˜ธ์ถœํ–ˆ๋Š”์ง€, ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€, ์‹คํŒจ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

๊ณ ๋„ํ™” MCP ํŠœํ† ๋ฆฌ์–ผ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

์ด๋ฒˆ ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ์—…๋ฌด๋ฅผ ์˜ˆ์ œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์‹ค์ œ ์‚ฌ๋‚ด ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  SQLite, ์ƒ˜ํ”Œ ๋ฌธ์„œ, Mock REST API๋ฅผ ์ด์šฉํ•ด ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค.

์ฃผ์š” ์กฐํšŒ Tool์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

list_projects
get_project
list_tasks
list_delayed_tasks
search_project_documents
get_project_summary
get_audit_logs

๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์“ฐ๊ธฐ Tool๋„ ๋ณ„๋„๋กœ ์ œ๊ณตํ•œ๋‹ค.

create_task
update_task_status
add_project_note

๋ณด๊ณ ์„œ ์ƒ์„ฑ์„ ์œ„ํ•œ Tool๋„ ํฌํ•จํ•œ๋‹ค.

generate_weekly_report

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋‹ค.

์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ ์ค‘ ์ง€์—ฐ๋œ ์ž‘์—…์„ ์กฐํšŒํ•˜๊ณ ,
๊ด€๋ จ ์šด์˜ ๊ฐ€์ด๋“œ์—์„œ ๋Œ€์‘ ์ ˆ์ฐจ๋ฅผ ์ฐพ์•„
์ฃผ๊ฐ„๋ณด๊ณ  ์ดˆ์•ˆ์„ ์ž‘์„ฑํ•ด์ค˜.

AI Agent๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ Tool์„ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœํ•œ๋‹ค.

list_delayed_tasks
→ get_project
→ search_project_documents
→ weekly_project_report
→ generate_weekly_report

์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋‹จ์ผ Tool ํ˜ธ์ถœ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ Tool์„ ์กฐํ•ฉํ•˜๋Š” Agent Workflow๋ฅผ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค.

 

MCP Tool, Resource, Prompt ๊ตฌ๋ถ„

MCP๋ฅผ ์‹ค๋ฌด์— ์ ์šฉํ•  ๋•Œ ์ž์ฃผ ํ˜ผ๋™ํ•˜๋Š” ๋ถ€๋ถ„์ด Tool, Resource, Prompt์˜ ์—ญํ• ์ด๋‹ค.

Tool์€ ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ์ž‘์—… ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํ•ด๋‹นํ•œ๋‹ค. Resource๋Š” URI ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

project://overview/1001
project://tasks/1001
guide://operation
guide://security
audit://recent

Resource๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์กฐํšŒ ์ „์šฉ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค.

Prompt๋Š” ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์—…๋ฌด ์ง€์‹œ๋ฌธ์„ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

weekly_project_report
delayed_task_analysis
incident_response_plan
project_risk_review

์ฃผ๊ฐ„๋ณด๊ณ ๋‚˜ ์žฅ์•  ๋ถ„์„๊ณผ ๊ฐ™์ด ์ผ์ •ํ•œ ์ถœ๋ ฅ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•œ ์—…๋ฌด์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

MCP ์„œ๋ฒ„์˜ ๊ณ„์ธต ๊ตฌ์กฐ

MCP Tool ํ•จ์ˆ˜ ์•ˆ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฒ˜๋ฆฌ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋ณต์žกํ•ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ MCP๋Š” ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

MCP Adapter
→ Application Service
→ Repository
→ Database ๋˜๋Š” External API

MCP Tool์€ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ, ๊ถŒํ•œ ํ™•์ธ, ์„œ๋น„์Šค ํ˜ธ์ถœ, ์˜ค๋ฅ˜ ๋ณ€ํ™˜, ๊ฐ์‚ฌ ๋กœ๊ทธ ๊ธฐ๋ก, ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜๋งŒ ๋‹ด๋‹นํ•œ๋‹ค.

์‹ค์ œ ์—…๋ฌด ๊ทœ์น™์€ Application Service์— ์ž‘์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์€ Repository์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด ๊ตฌ์กฐ๋ฅผ ์ ์šฉํ•˜๋ฉด MCP SDK๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ REST API ํ˜•ํƒœ๋กœ ์ „ํ™˜ํ•ด๋„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ธ์ฆ๊ณผ ์—ญํ•  ๊ธฐ๋ฐ˜ ๊ถŒํ•œ

ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ์‚ฌ์šฉ์ž๋ฅผ viewer์™€ operator ๋‘ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

viewer๋Š” ํ”„๋กœ์ ํŠธ, ์ž‘์—…, ๋ฌธ์„œ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. operator๋Š” ์ž‘์—… ์ƒ์„ฑ, ์ƒํƒœ ๋ณ€๊ฒฝ, ํ”„๋กœ์ ํŠธ ๋…ธํŠธ ์ถ”๊ฐ€์™€ ๊ฐ™์€ ์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

์“ฐ๊ธฐ Tool์€ ๋‹ค์Œ ์ ˆ์ฐจ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฑฐ์นœ๋‹ค.

์ธ์ฆ
→ ๊ถŒํ•œ ํ™•์ธ
→ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ
→ ์‚ฌ์šฉ์ž ํ™•์ธ
→ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
→ ๊ฐ์‚ฌ ๋กœ๊ทธ ๊ธฐ๋ก
→ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜

์ž‘์—… ์ƒํƒœ ๋ณ€๊ฒฝ Tool์˜ ์ž…๋ ฅ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

{
  "task_id": 501,
  "status": "DONE",
  "confirmed": true
}

confirmed=true๋ฅผ ์š”๊ตฌํ•˜๋ฉด AI Agent๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™ ๋ณ€๊ฒฝํ•˜๋Š” ์œ„ํ—˜์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ์‚ฌ ๋กœ๊ทธ์™€ ์š”์ฒญ ์ถ”์ 

์—…๋ฌด ์‹œ์Šคํ…œ๊ณผ ์—ฐ๊ฒฐ๋œ MCP์—์„œ๋Š” ๊ฐ์‚ฌ ๋กœ๊ทธ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. ๋ชจ๋“  Tool ํ˜ธ์ถœ์—๋Š” ์š”์ฒญ ID๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ๋‹ค์Œ ํ•ญ๋ชฉ์„ ๊ธฐ๋กํ•œ๋‹ค.

timestamp
request_id
user_id
role
tool_name
input_summary
result_status
duration_ms
error_code

์“ฐ๊ธฐ Tool์€ ๋ณ€๊ฒฝ ์ „ ์ƒํƒœ์™€ ๋ณ€๊ฒฝ ํ›„ ์ƒํƒœ๋ฅผ ํ•จ๊ป˜ ๊ธฐ๋กํ•œ๋‹ค.

๋กœ๊ทธ์—๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ, API Key, Token, ์ „์ฒด ๋ฌธ์„œ ๋‚ด์šฉ, ๊ฐœ์ธ์‹๋ณ„์ •๋ณด๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฏผ๊ฐํ•œ ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ๋งˆ์Šคํ‚นํ•ด์•ผ ํ•œ๋‹ค.

 

์™ธ๋ถ€ API ์žฅ์• ์™€ Fallback ์ฒ˜๋ฆฌ

๊ณ ๋„ํ™”๋œ MCP ์„œ๋ฒ„๋Š” ์™ธ๋ถ€ REST API์™€ ์—ฐ๊ฒฐ๋˜๋Š” ์ƒํ™ฉ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ์กฐ์ง ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” Mock API๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์™ธ๋ถ€ API ํ˜ธ์ถœ์—๋Š” ๋‹ค์Œ ์ •์ฑ…์„ ์ ์šฉํ•œ๋‹ค.

์—ฐ๊ฒฐ ์‹œ๊ฐ„ ์ œํ•œ: 3์ดˆ
์‘๋‹ต ์‹œ๊ฐ„ ์ œํ•œ: 10์ดˆ
์žฌ์‹œ๋„: ์ตœ๋Œ€ 2ํšŒ
5xx ์˜ค๋ฅ˜: ์žฌ์‹œ๋„
4xx ์˜ค๋ฅ˜: ์ฆ‰์‹œ ์‹คํŒจ

์™ธ๋ถ€ API๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ์ตœ๊ทผ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” Fallback๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๊ฒฐ๊ณผ์— source=cache์™€ ๊ฐ™์€ ์ •๋ณด๋ฅผ ํฌํ•จํ•ด ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค.

 

ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ ๊ฒ€์ƒ‰

๋ฌธ์„œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์€ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋จผ์ € ํŒŒ์ผ ๊ธฐ๋ฐ˜ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์œผ๋กœ ๊ตฌํ˜„ํ•œ ๋’ค ์ดํ›„ RAG๋กœ ํ™•์žฅํ•˜๋Š” ๋ฐฉ์‹์ด ์ ์ ˆํ•˜๋‹ค.

๊ฒ€์ƒ‰ ๋Œ€์ƒ์€ ํ”„๋กœ์ ํŠธ๋ณ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ œํ•œํ•œ๋‹ค.

data/projects/{project_id}/

ํ—ˆ์šฉ ํ™•์žฅ์ž๋Š” .md, .txt, .json์œผ๋กœ ์ œํ•œํ•˜๊ณ , ์ ˆ๋Œ€ ๊ฒฝ๋กœ์™€ ../๋ฅผ ์ด์šฉํ•œ ๊ฒฝ๋กœ ํƒ์ƒ‰์„ ์ฐจ๋‹จํ•œ๋‹ค.

๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์—๋Š” ํŒŒ์ผ ์ „์ฒด ๋‚ด์šฉ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ๋ช…, ๊ด€๋ จ ๋ฌธ์žฅ, ๊ฒ€์ƒ‰ ์ ์ˆ˜๋งŒ ์ œ๊ณตํ•œ๋‹ค.

{
  "filename": "operation-guide.md",
  "snippet": "์žฅ์•  ๋ฐœ์ƒ ์‹œ ๋‹ด๋‹น์ž๋Š”...",
  "score": 0.85
}

์ด ๊ตฌ์กฐ๋Š” ์ดํ›„ Chunking, Embedding, Vector DB, ๊ถŒํ•œ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์„ ์ ์šฉํ•˜๋Š” RAG ํŠœํ† ๋ฆฌ์–ผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 

AI Agent์˜ ๋‹ค์ค‘ Tool ํ˜ธ์ถœ

์ด๋ฒˆ ํŠœํ† ๋ฆฌ์–ผ์˜ ํ•ต์‹ฌ์€ AI Agent๊ฐ€ ์—ฌ๋Ÿฌ MCP Tool์„ ์—ฐ๊ฒฐํ•ด ํ•˜๋‚˜์˜ ์—…๋ฌด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ธฐ๋ณธ ์‹คํ–‰ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์‚ฌ์šฉ์ž ์š”์ฒญ ๋ถ„์„
→ ํ•„์š”ํ•œ Tool ์„ ํƒ
→ ์กฐํšŒ Tool ์‹คํ–‰
→ ๊ฒฐ๊ณผ ์ถฉ๋ถ„์„ฑ ํŒ๋‹จ
→ ์ถ”๊ฐ€ Tool ํ˜ธ์ถœ
→ ์ตœ์ข… ์‘๋‹ต ์ƒ์„ฑ

Agent์˜ ๋ฌดํ•œ ๋ฐ˜๋ณต๊ณผ ๋ถˆํ•„์š”ํ•œ Tool ํ˜ธ์ถœ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œํ•œ์„ ๋‘”๋‹ค.

๋™์ผ Tool ์—ฐ์† ํ˜ธ์ถœ ์ตœ๋Œ€ 2ํšŒ
์ „์ฒด Tool ํ˜ธ์ถœ ์ตœ๋Œ€ 8ํšŒ
๋™์ผ ์ธ์ž๋กœ ์‹คํŒจํ•œ ํ˜ธ์ถœ ๋ฐ˜๋ณต ๊ธˆ์ง€
์“ฐ๊ธฐ Tool ์ž๋™ ์žฌ์‹œ๋„ ๊ธˆ์ง€

์™ธ๋ถ€ API ์˜ค๋ฅ˜๋‚˜ ๋ฐ์ดํ„ฐ ๋ถ€์กฑ์ด ๋ฐœ์ƒํ•˜๋ฉด ์žฌ์‹œ๋„ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ , ๋Œ€์ฒด Tool์ด๋‚˜ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค.

 

Codex๋ฅผ ์œ„ํ•œ AGENTS.md

AGENTS.md๋Š” Codex๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ง€์ผœ์•ผ ํ•˜๋Š” ๊ธฐ์ค€์„ ์ •์˜ํ•œ๋‹ค.

์ฃผ์š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ์™€ ๊ตฌํ˜„ ๋ฒ”์œ„
  • ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ
  • MCP Tool, Resource, Prompt ๋ชฉ๋ก
  • ๊ณ„์ธต ๋ถ„๋ฆฌ ์›์น™
  • ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ์Šคํ‚ค๋งˆ ๊ทœ์น™
  • ์ธ์ฆ๊ณผ ๊ถŒํ•œ ์ •์ฑ…
  • ๋ฏผ๊ฐ์ •๋ณด ์ฒ˜๋ฆฌ
  • ๊ฐ์‚ฌ ๋กœ๊ทธ
  • ํ…Œ์ŠคํŠธ ๊ธฐ์ค€
  • README ์ž‘์„ฑ ๊ทœ์น™
  • Codex ์ž‘์—… ์ˆœ์„œ
  • ๊ธˆ์ง€ ์‚ฌํ•ญ
  • ์ตœ์ข… ์‚ฐ์ถœ๋ฌผ

Codex์— ๋‹จ์ˆœํžˆ “MCP ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด์ค˜”๋ผ๊ณ  ์š”์ฒญํ•˜๋ฉด ๊ธฐ๋Šฅ์€ ๋™์ž‘ํ•˜์ง€๋งŒ ๊ตฌ์กฐ์™€ ํ’ˆ์งˆ์€ ์ผ๊ด€๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. AGENTS.md๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ ๊ทœ์น™, ๋ณด์•ˆ ์ •์ฑ…, ํ…Œ์ŠคํŠธ ๊ธฐ์ค€์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜๋ฉด ๊ฒฐ๊ณผ๋ฌผ์˜ ํ’ˆ์งˆ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 

์‹œ์Šคํ…œ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ DESIGN.md

DESIGN.md๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด ๊ตฌ์กฐ์™€ ๊ธฐ์ˆ ์  ์˜์‚ฌ๊ฒฐ์ •์„ ์„ค๋ช…ํ•œ๋‹ค.

์ฃผ์š” ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ํ”„๋กœ์ ํŠธ ๋ฐฐ๊ฒฝ๊ณผ ๋ชฉํ‘œ
  • ๋Œ€์ƒ ์‚ฌ์šฉ์ž์™€ ์„ ์ˆ˜ ์ง€์‹
  • ์‚ฌ์šฉ์ž ์‹œ๋‚˜๋ฆฌ์˜ค
  • ์ „์ฒด ์•„ํ‚คํ…์ฒ˜
  • ๋„๋ฉ”์ธ ๋ชจ๋ธ
  • Tool ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ
  • Resource URI
  • Prompt Template
  • Agent Workflow
  • ์ธ์ฆ๊ณผ ๊ถŒํ•œ
  • ์™ธ๋ถ€ API ์—ฐ๊ณ„
  • ํŒŒ์ผ ๊ฒ€์ƒ‰
  • ์˜ค๋ฅ˜ ์ฝ”๋“œ
  • ๋กœ๊น…๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ
  • ํ…Œ์ŠคํŠธ ์ „๋žต
  • ์„ฑ๋Šฅ ๊ธฐ์ค€
  • ๋ณด์•ˆ ํ…Œ์ŠคํŠธ
  • ๋ฐฐํฌ ๋ฐฉ์‹
  • ๋‹จ๊ณ„๋ณ„ ๊ฐœ๋ฐœ ์ผ์ •
  • ํ›„์† ๊ณ ๋„ํ™” ๊ณผ์ œ

AGENTS.md๊ฐ€ Codex์˜ ์ž‘์—… ๊ทœ์น™์ด๋ผ๋ฉด DESIGN.md๋Š” ๊ฐœ๋ฐœ์ž์™€ ๊ฒ€ํ† ์ž๊ฐ€ ์‹œ์Šคํ…œ์˜ ์˜๋„์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ๋ฌธ์„œ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

๊ถŒ์žฅ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

advanced-mcp-assistant/
โ”œโ”€โ”€ AGENTS.md
โ”œโ”€โ”€ DESIGN.md
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ pyproject.toml
โ”œโ”€โ”€ .env.example
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ docs/
โ”œโ”€โ”€ src/
โ”‚   โ””โ”€โ”€ app/
โ”‚       โ”œโ”€โ”€ domain/
โ”‚       โ”œโ”€โ”€ application/
โ”‚       โ”œโ”€โ”€ infrastructure/
โ”‚       โ”œโ”€โ”€ mcp/
โ”‚       โ””โ”€โ”€ agent/
โ”œโ”€โ”€ data/
โ”œโ”€โ”€ scripts/
โ””โ”€โ”€ tests/
    โ”œโ”€โ”€ unit/
    โ”œโ”€โ”€ integration/
    โ”œโ”€โ”€ security/
    โ””โ”€โ”€ scenarios/

๋„๋ฉ”์ธ, ์„œ๋น„์Šค, ์ธํ”„๋ผ, MCP, Agent๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์ฝ”๋“œ์˜ ์—ญํ• ์ด ๋ช…ํ™•ํ•ด์ง€๊ณ  ํ…Œ์ŠคํŠธ์™€ ํ™•์žฅ์ด ์‰ฌ์›Œ์ง„๋‹ค.

 

ํ…Œ์ŠคํŠธ์™€ ๊ฒ€์ฆ ๊ธฐ์ค€

๊ณ ๋„ํ™”๋œ MCP ํŠœํ† ๋ฆฌ์–ผ์€ ์ฝ”๋“œ ์ž‘์„ฑ๋ณด๋‹ค ๊ฒ€์ฆ ๊ณผ์ •์ด ์ค‘์š”ํ•˜๋‹ค.

๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์„œ๋น„์Šค ๋กœ์ง, ๊ถŒํ•œ ์ •์ฑ…, ์ƒํƒœ ์ „์ด, ๊ฒฝ๋กœ ๊ฒ€์ฆ, ์˜ค๋ฅ˜ ๋งคํ•‘์„ ํ™•์ธํ•œ๋‹ค.

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์—์„œ๋Š” MCP Tool ๋“ฑ๋ก, Resource ์กฐํšŒ, Prompt ์กฐํšŒ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ณ„, ์™ธ๋ถ€ API ์—ฐ๊ณ„, ๊ฐ์‚ฌ ๋กœ๊ทธ ์ €์žฅ์„ ํ™•์ธํ•œ๋‹ค.

๋ณด์•ˆ ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋‹ค์Œ ํ•ญ๋ชฉ์„ ์ ๊ฒ€ํ•œ๋‹ค.

์ธ์ฆ ์—†๋Š” ์“ฐ๊ธฐ ์š”์ฒญ ์ฐจ๋‹จ
viewer ์—ญํ• ์˜ ์“ฐ๊ธฐ ์š”์ฒญ ์ฐจ๋‹จ
์ž˜๋ชป๋œ Token ์ฐจ๋‹จ
๊ฒฝ๋กœ ํƒ์ƒ‰ ๊ณต๊ฒฉ ์ฐจ๋‹จ
SQL Injection ํ˜•ํƒœ ์ž…๋ ฅ ์ฐจ๋‹จ
๋Œ€๋Ÿ‰ ์กฐํšŒ ์ œํ•œ
๋กœ๊ทธ ๋‚ด ๋ฏผ๊ฐ์ •๋ณด ๋ฏธ๋…ธ์ถœ
์˜ค๋ฅ˜ ์‘๋‹ต ๋‚ด ๋‚ด๋ถ€ ๊ฒฝ๋กœ ๋ฏธ๋…ธ์ถœ

์ตœ์ข…์ ์œผ๋กœ ๋‹ค์Œ ๋ช…๋ น์ด ๋ชจ๋‘ ํ†ต๊ณผํ•ด์•ผ ํ•œ๋‹ค.

ruff check .
ruff format --check .
mypy src
pytest -q

 

๋‹จ๊ณ„๋ณ„ ๊ตฌํ˜„ ๊ณ„ํš

1. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ, ๋„๋ฉ”์ธ ๋ชจ๋ธ, SQLite, ์กฐํšŒ Tool์„ ๊ตฌํ˜„ํ•˜๊ณ  MCP Inspector๋กœ ๊ฒ€์ฆํ•œ๋‹ค.

2. Resource, Prompt, ํŒŒ์ผ ๊ฒ€์ƒ‰, Mock REST API, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

3. ์ธ์ฆ, ์—ญํ•  ๊ธฐ๋ฐ˜ ๊ถŒํ•œ, ์“ฐ๊ธฐ Tool, ๊ฐ์‚ฌ ๋กœ๊ทธ์™€ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

4. AI Agent Workflow, ๋‹ค์ค‘ Tool ํ˜ธ์ถœ, ์žฅ์•  ๋Œ€์‘, Docker ์‹คํ–‰ ํ™˜๊ฒฝ, ์ตœ์ข… ๋ฌธ์„œ๋ฅผ ์™„์„ฑํ•œ๋‹ค.

ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋ณด๋‹ค ์กฐํšŒ Tool, ์™ธ๋ถ€ ์—ฐ๊ณ„, ๋ณด์•ˆ, Agent Workflow ์ˆœ์œผ๋กœ ๋‹จ๊ณ„์ ์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ •์ ์ด๋‹ค.

 

๋‹ค์Œ ๋‹จ๊ณ„

์ด๋ฒˆ ํŠœํ† ๋ฆฌ์–ผ์€ MCP ๊ธฐ์ดˆ ์˜ˆ์ œ์™€ ์‹ค์ œ ์‚ฌ๋‚ด ์—…๋ฌด ์‹œ์Šคํ…œ PoC ์‚ฌ์ด์˜ ์ค‘๊ฐ„ ๋‹จ๊ณ„์— ํ•ด๋‹นํ•œ๋‹ค.

์ดํ›„์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

Spring AI ๊ธฐ๋ฐ˜ Java MCP ์„œ๋ฒ„
PostgreSQL ์ „ํ™˜
Vector DB ๊ธฐ๋ฐ˜ ๋ฌธ์„œ ๊ฒ€์ƒ‰
์‚ฌ๋‚ด SSO ์—ฐ๊ณ„
API Gateway ์ ์šฉ
์‚ฌ์šฉ์ž๋ณ„ ๋ฐ์ดํ„ฐ ๊ถŒํ•œ
OpenTelemetry ์ถ”์ 
Tool ์‹คํ–‰ ์Šน์ธ Workflow
A2A ๊ธฐ๋ฐ˜ ๋ณต์ˆ˜ Agent ํ˜‘์—…
MCP ์„œ๋ฒ„ ์นดํƒˆ๋กœ๊ทธ
์ž๋™ ํ‰๊ฐ€์™€ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ
์‚ฌ๋‚ด LLM Gateway ์—ฐ๊ณ„

MCP๋ฅผ ์‹ค๋ฌด์— ์ ์šฉํ•˜๋ ค๋ฉด Tool์„ ๋งŽ์ด ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค ์•ˆ์ „ํ•˜๊ณ  ์ถ”์  ๊ฐ€๋Šฅํ•˜๊ฒŒ ์šด์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

์‚ฌ์น™์—ฐ์‚ฐ๊ณผ CRUD ์˜ˆ์ œ๊ฐ€ MCP์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋‹จ๊ณ„๋ผ๋ฉด, ๊ณ ๋„ํ™” ํŠœํ† ๋ฆฌ์–ผ์€ ๋ฐ์ดํ„ฐ ์—ฐ๊ณ„, ๊ถŒํ•œ, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ, ๊ฐ์‚ฌ ๋กœ๊ทธ, AI Agent Workflow๋ฅผ ํ•จ๊ป˜ ์„ค๊ณ„ํ•˜๋Š” ๋‹จ๊ณ„๋‹ค. AGENTS.md์™€ DESIGN.md๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Codex๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋‹จ์ˆœ ์ฝ”๋“œ ์ƒ์„ฑ์ด ์•„๋‹ˆ๋ผ ์„ค๊ณ„, ๊ตฌํ˜„, ํ…Œ์ŠคํŠธ, ๋ฌธ์„œํ™”๊ฐ€ ์—ฐ๊ฒฐ๋œ MCP ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€