[official skill] MCP μλ² κ°λ° κ°μ΄λ
μ΄ μ€ν¬μ MCP(Model Context Protocol) μλ²λ₯Ό μ€κ³, ꡬν, ν μ€νΈ, νκ°νλ μ 체 κ°λ° κ³Όμ μ μλ΄νλ λꡬμ λλ€.
π μ°Έκ³ : μ΄ λ¬Έμλ 곡μ Claude Code λ¬Έμμ μλ¬Έ + λ νΌλ°μ€μ λλ€.
- μλ¬Έ λ§ν¬λ₯Ό μ§μ μ¬μ©νμ λ λ©λλ€
- μ΄ νμΌμ
.claude/skills/νμμ 볡μ¬νμ¬ μ€ν¬λ‘ λ±λ‘ν μλ μμ΅λλ€(2026.03.15 κΈ°μ€)
MCP μλ² κ°λ° κ°μ΄λ
κ°μ
LLMμ΄ μ μ€κ³λ λꡬλ₯Ό ν΅ν΄ μΈλΆ μλΉμ€μ μνΈμμ©ν μ μλλ‘ νλ MCP(Model Context Protocol) μλ²λ₯Ό λ§λμΈμ. MCP μλ²μ νμ§μ LLMμ΄ μ€μ μμ μ μΌλ§λ μ μνν μ μκ² ν΄μ£Όλμ§λ‘ μΈ‘μ λ©λλ€.
νλ‘μΈμ€
μμ μμ€ μν¬νλ‘μ°
κ³ νμ§ MCP μλ²λ₯Ό λ§λλ κ³Όμ μ λ€ κ°μ§ μ£Όμ λ¨κ³λ‘ ꡬμ±λ©λλ€:
1λ¨κ³: μ¬μΈ΅ μ‘°μ¬ λ° κ³ν
1.1 νλμ MCP μ€κ³ μ΄ν΄
API 컀λ²λ¦¬μ§ vs. μν¬νλ‘μ° λꡬ:
ν¬κ΄μ μΈ API μλν¬μΈνΈ 컀λ²λ¦¬μ§μ νΉνλ μν¬νλ‘μ° λꡬ μ¬μ΄μ κ· νμ λ§μΆμΈμ. μν¬νλ‘μ° λꡬλ νΉμ μμ
μ λ νΈλ¦¬ν μ μκ³ , ν¬κ΄μ 컀λ²λ¦¬μ§λ μμ΄μ νΈμκ² μμ
μ μ‘°ν©ν μ μλ μ μ°μ±μ μ 곡ν©λλ€. μ±λ₯μ ν΄λΌμ΄μΈνΈλ§λ€ λ€λ¦
λλ€ - μΌλΆ ν΄λΌμ΄μΈνΈλ κΈ°λ³Έ λꡬλ₯Ό μ‘°ν©νλ μ½λ μ€νμ΄ μ 리νκ³ , λ€λ₯Έ ν΄λΌμ΄μΈνΈλ μμ μμ€ μν¬νλ‘μ°μμ λ μ λμν©λλ€. νμ μ΄ μλ€λ©΄ ν¬κ΄μ μΈ API 컀λ²λ¦¬μ§λ₯Ό μ°μ μνμΈμ.
λꡬ λ€μ΄λ°κ³Ό λ°κ²¬ κ°λ₯μ±:
λͺ
ννκ³ μ€λͺ
μ μΈ λꡬ μ΄λ¦μ μμ΄μ νΈκ° μ¬λ°λ₯Έ λꡬλ₯Ό λΉ λ₯΄κ² μ°Ύλλ‘ λμμ€λλ€. μΌκ΄λ μ λμ¬(μ: github_create_issue, github_list_repos)μ νλ μ§ν₯μ λ€μ΄λ°μ μ¬μ©νμΈμ.
컨ν
μ€νΈ κ΄λ¦¬:
μμ΄μ νΈλ κ°κ²°ν λꡬ μ€λͺ
κ³Ό κ²°κ³Όλ₯Ό νν°λ§/νμ΄μ§λ€μ΄μ
ν μ μλ κΈ°λ₯μΌλ‘λΆν° μ΄μ μ μ»μ΅λλ€. μ§μ€μ μ΄κ³ κ΄λ ¨μ± μλ λ°μ΄ν°λ₯Ό λ°ννλ λꡬλ₯Ό μ€κ³νμΈμ. μΌλΆ ν΄λΌμ΄μΈνΈλ μμ΄μ νΈκ° λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ νν°λ§νκ³ μ²λ¦¬νλ λ° λμμ΄ λλ μ½λ μ€νμ μ§μν©λλ€.
μ€ν κ°λ₯ν μλ¬ λ©μμ§:
μλ¬ λ©μμ§λ ꡬ체μ μΈ μ μκ³Ό λ€μ λ¨κ³λ₯Ό ν΅ν΄ μμ΄μ νΈλ₯Ό ν΄κ²°μ±
μΌλ‘ μλ΄ν΄μΌ ν©λλ€.
1.2 MCP νλ‘ν μ½ λ¬Έμ νμ΅
MCP λͺ μΈ νμ:
μ¬μ΄νΈλ§΅μμ μμνμ¬ κ΄λ ¨ νμ΄μ§λ₯Ό μ°ΎμΌμΈμ: https://modelcontextprotocol.io/sitemap.xml
κ·Έλ° λ€μ λ§ν¬λ€μ΄ νμμΌλ‘ νΉμ νμ΄μ§λ₯Ό .md μ λ―Έμ¬λ‘ κ°μ Έμ€μΈμ (μ: https://modelcontextprotocol.io/specification/draft.md).
κ²ν ν΄μΌ ν ν΅μ¬ νμ΄μ§:
- λͺ μΈ κ°μ λ° μν€ν μ²
- μ μ‘ λ©μ»€λμ¦ (streamable HTTP, stdio)
- λꡬ, 리μμ€, ν둬ννΈ μ μ
1.3 νλ μμν¬ λ¬Έμ νμ΅
κΆμ₯ μ€ν:
- μΈμ΄: TypeScript (κ³ νμ§ SDK μ§μκ³Ό λ€μν μ€ν νκ²½μμμ μ’μ νΈνμ±, μ: MCPB. λν AI λͺ¨λΈμ΄ TypeScript μ½λ μμ±μ λ₯μνλ©°, μ΄λ κ΄λ²μν μ¬μ©, μ μ νμ΄ν, μ’μ λ¦°ν λꡬ λλΆμ λλ€)
- μ μ‘: μ격 μλ²μλ Streamable HTTP, μν λΉμ μ₯ JSON μ¬μ© (μν μ μ§ μΈμ κ³Ό μ€νΈλ¦¬λ° μλ΅μ λΉν΄ νμ₯ λ° μ μ§λ³΄μκ° λ κ°λ¨). λ‘컬 μλ²μλ stdio.
νλ μμν¬ λ¬Έμ λ‘λ:
- MCP λͺ¨λ² μ¬λ‘: λͺ¨λ² μ¬λ‘ 보기 - ν΅μ¬ κ°μ΄λλΌμΈ
TypeScript (κΆμ₯):
- TypeScript SDK: WebFetchλ₯Ό μ¬μ©νμ¬
https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.mdλ‘λ - TypeScript κ°μ΄λ - TypeScript ν¨ν΄ λ° μμ
Python:
- Python SDK: WebFetchλ₯Ό μ¬μ©νμ¬
https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.mdλ‘λ - Python κ°μ΄λ - Python ν¨ν΄ λ° μμ
1.4 ꡬν κ³ν
API μ΄ν΄:
μλΉμ€μ API λ¬Έμλ₯Ό κ²ν νμ¬ μ£Όμ μλν¬μΈνΈ, μΈμ¦ μꡬμ¬ν, λ°μ΄ν° λͺ¨λΈμ νμ
νμΈμ. νμμ λ°λΌ μΉ κ²μκ³Ό WebFetchλ₯Ό μ¬μ©νμΈμ.
λꡬ μ ν:
ν¬κ΄μ μΈ API 컀λ²λ¦¬μ§λ₯Ό μ°μ μνμΈμ. κ°μ₯ μΌλ°μ μΈ μμ
λΆν° μμνμ¬ κ΅¬νν μλν¬μΈνΈλ₯Ό λμ΄νμΈμ.
2λ¨κ³: ꡬν
2.1 νλ‘μ νΈ κ΅¬μ‘° μ€μ
νλ‘μ νΈ μ€μ μ μΈμ΄λ³ κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ:
- TypeScript κ°μ΄λ - νλ‘μ νΈ κ΅¬μ‘°, package.json, tsconfig.json
- Python κ°μ΄λ - λͺ¨λ ꡬμ±, μμ‘΄μ±
2.2 ν΅μ¬ μΈνλΌ κ΅¬ν
곡μ μ νΈλ¦¬ν°λ₯Ό μμ±νμΈμ:
- μΈμ¦μ΄ ν¬ν¨λ API ν΄λΌμ΄μΈνΈ
- μλ¬ μ²λ¦¬ ν¬νΌ
- μλ΅ ν¬λ§·ν (JSON/Markdown)
- νμ΄μ§λ€μ΄μ μ§μ
2.3 λꡬ ꡬν
κ° λꡬμ λν΄:
μ λ ₯ μ€ν€λ§:
- Zod (TypeScript) λλ Pydantic (Python) μ¬μ©
- μ μ½ μ‘°κ±΄κ³Ό λͺ νν μ€λͺ ν¬ν¨
- νλ μ€λͺ μ μμ μΆκ°
μΆλ ₯ μ€ν€λ§:
- κ°λ₯ν κ²½μ° κ΅¬μ‘°νλ λ°μ΄ν°λ₯Ό μν
outputSchemaμ μ - λꡬ μλ΅μ
structuredContentμ¬μ© (TypeScript SDK κΈ°λ₯) - ν΄λΌμ΄μΈνΈκ° λꡬ μΆλ ₯μ μ΄ν΄νκ³ μ²λ¦¬νλ λ° λμ
λꡬ μ€λͺ :
- κΈ°λ₯μ λν κ°κ²°ν μμ½
- νλΌλ―Έν° μ€λͺ
- λ°ν νμ μ€ν€λ§
ꡬν:
- I/O μμ μ async/await
- μ€ν κ°λ₯ν λ©μμ§λ₯Ό ν¬ν¨ν μ μ ν μλ¬ μ²λ¦¬
- ν΄λΉλλ κ²½μ° νμ΄μ§λ€μ΄μ μ§μ
- λͺ¨λ SDK μ¬μ© μ ν μ€νΈ μ½ν μΈ μ ꡬ쑰νλ λ°μ΄ν° λͺ¨λ λ°ν
μ΄λ Έν μ΄μ :
readOnlyHint: true/falsedestructiveHint: true/falseidempotentHint: true/falseopenWorldHint: true/false
3λ¨κ³: κ²ν λ° ν μ€νΈ
3.1 μ½λ νμ§
κ²ν νλͺ©:
- μ€λ³΅ μ½λ μμ (DRY μμΉ)
- μΌκ΄λ μλ¬ μ²λ¦¬
- μ 체 νμ 컀λ²λ¦¬μ§
- λͺ νν λꡬ μ€λͺ
3.2 λΉλ λ° ν μ€νΈ
TypeScript:
npm run buildλ₯Ό μ€ννμ¬ μ»΄νμΌ νμΈ- MCP Inspectorλ‘ ν
μ€νΈ:
npx @modelcontextprotocol/inspector
Python:
- ꡬ문 νμΈ:
python -m py_compile your_server.py - MCP Inspectorλ‘ ν μ€νΈ
μμΈν ν μ€νΈ μ κ·Όλ²κ³Ό νμ§ μ²΄ν¬λ¦¬μ€νΈλ μΈμ΄λ³ κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
4λ¨κ³: νκ° μμ±
MCP μλ²λ₯Ό ꡬνν ν, ν¨κ³Όλ₯Ό ν μ€νΈνκΈ° μν μ’ ν©μ μΈ νκ°λ₯Ό μμ±νμΈμ.
μμ ν νκ° κ°μ΄λλΌμΈμ νκ° κ°μ΄λλ₯Ό λ‘λνμΈμ.
4.1 νκ° λͺ©μ μ΄ν΄
νκ°λ₯Ό μ¬μ©νμ¬ LLMμ΄ νμ€μ μ΄κ³ 볡μ‘ν μ§λ¬Έμ λ΅νκΈ° μν΄ MCP μλ²λ₯Ό ν¨κ³Όμ μΌλ‘ μ¬μ©ν μ μλμ§ ν μ€νΈνμΈμ.
4.2 10κ°μ νκ° μ§λ¬Έ μμ±
ν¨κ³Όμ μΈ νκ°λ₯Ό λ§λ€λ €λ©΄ νκ° κ°μ΄λμ μ€λͺ λ νλ‘μΈμ€λ₯Ό λ°λ₯΄μΈμ:
- λꡬ μ κ²: μ¬μ© κ°λ₯ν λꡬλ₯Ό λμ΄νκ³ κΈ°λ₯μ μ΄ν΄
- μ½ν μΈ νμ: μ½κΈ° μ μ©(READ-ONLY) μμ μΌλ‘ μ¬μ© κ°λ₯ν λ°μ΄ν° νμ
- μ§λ¬Έ μμ±: 10κ°μ 볡μ‘νκ³ νμ€μ μΈ μ§λ¬Έ μμ±
- λ΅λ³ κ²μ¦: κ° μ§λ¬Έμ μ§μ νμ΄ λ΅λ³ κ²μ¦
4.3 νκ° μꡬμ¬ν
κ° μ§λ¬Έμ΄ λ€μμ μΆ©μ‘±νλμ§ νμΈνμΈμ:
- λ 립μ : λ€λ₯Έ μ§λ¬Έμ μμ‘΄νμ§ μμ
- μ½κΈ° μ μ©: λΉνκ΄΄μ μμ λ§ νμ
- 볡μ‘ν¨: μ¬λ¬ λꡬ νΈμΆκ³Ό μ¬μΈ΅ νμμ΄ νμ
- νμ€μ : μΈκ°μ΄ μ€μ λ‘ κ΄μ¬μ κ°μ§ μ¬μ© μ¬λ‘μ κΈ°λ°
- κ²μ¦ κ°λ₯: λ¬Έμμ΄ λΉκ΅λ‘ κ²μ¦ν μ μλ λ¨μΌνκ³ λͺ νν λ΅λ³
- μμ μ : μκ°μ΄ μ§λλ λ΅λ³μ΄ λ³νμ§ μμ
4.4 μΆλ ₯ νμ
λ€μ ꡬ쑰μ XML νμΌμ μμ±νμΈμ:
<evaluation>
<qa_pair>
<question>λλ¬Ό μ½λλͺ
μ κ°μ§ AI λͺ¨λΈ μΆμμ λν ν λ‘ μ μ°ΎμΌμΈμ. ν λͺ¨λΈμ ASL-X νμμ μ¬μ©νλ νΉμ μμ λ±κΈμ΄ νμνμ΅λλ€. μ λ°μ΄ μΌμ κ³ μμ΄μ μ΄λ¦μ λ΄ λͺ¨λΈμ λν΄ κ²°μ μ€μ΄λ μ«μ Xλ 무μμ΄μλμ?</question>
<answer>3</answer>
</qa_pair>
<!-- μΆκ° qa_pair... -->
</evaluation>
μ°Έμ‘° νμΌ
λ¬Έμ λΌμ΄λΈλ¬λ¦¬
κ°λ° μ€ νμμ λ°λΌ μ΄ λ¦¬μμ€λ₯Ό λ‘λνμΈμ:
ν΅μ¬ MCP λ¬Έμ (λ¨Όμ λ‘λ)
- MCP νλ‘ν μ½:
https://modelcontextprotocol.io/sitemap.xmlμ μ¬μ΄νΈλ§΅μμ μμν λ€μ,.mdμ λ―Έμ¬λ‘ νΉμ νμ΄μ§λ₯Ό κ°μ Έμ€κΈ° - MCP λͺ¨λ² μ¬λ‘ - λ€μμ ν¬ν¨νλ λ²μ© MCP κ°μ΄λλΌμΈ:
- μλ² λ° λꡬ λ€μ΄λ° κ·μΉ
- μλ΅ νμ κ°μ΄λλΌμΈ (JSON vs Markdown)
- νμ΄μ§λ€μ΄μ λͺ¨λ² μ¬λ‘
- μ μ‘ μ ν (streamable HTTP vs stdio)
- 보μ λ° μλ¬ μ²λ¦¬ νμ€
SDK λ¬Έμ (1/2λ¨κ³μμ λ‘λ)
- Python SDK:
https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.mdμμ κ°μ Έμ€κΈ° - TypeScript SDK:
https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.mdμμ κ°μ Έμ€κΈ°
μΈμ΄λ³ ꡬν κ°μ΄λ (2λ¨κ³μμ λ‘λ)
-
Python ꡬν κ°μ΄λ - λ€μμ ν¬ν¨νλ μμ ν Python/FastMCP κ°μ΄λ:
- μλ² μ΄κΈ°ν ν¨ν΄
- Pydantic λͺ¨λΈ μμ
@mcp.toolμ μ¬μ©ν λꡬ λ±λ‘- μμ ν λμ μμ
- νμ§ μ²΄ν¬λ¦¬μ€νΈ
-
TypeScript ꡬν κ°μ΄λ - λ€μμ ν¬ν¨νλ μμ ν TypeScript κ°μ΄λ:
- νλ‘μ νΈ κ΅¬μ‘°
- Zod μ€ν€λ§ ν¨ν΄
server.registerToolμ μ¬μ©ν λꡬ λ±λ‘- μμ ν λμ μμ
- νμ§ μ²΄ν¬λ¦¬μ€νΈ
νκ° κ°μ΄λ (4λ¨κ³μμ λ‘λ)
- νκ° κ°μ΄λ - λ€μμ ν¬ν¨νλ μμ ν νκ° μμ± κ°μ΄λ:
- μ§λ¬Έ μμ± κ°μ΄λλΌμΈ
- λ΅λ³ κ²μ¦ μ λ΅
- XML νμ λͺ μΈ
- μμ μ§λ¬Έ λ° λ΅λ³
- μ 곡λ μ€ν¬λ¦½νΈλ‘ νκ° μ€ν