mcp-builder
npx skills add https://github.com/icartsh/icartsh_plugin --skill mcp-builder
Agent 安装分布
Skill 文档
MCP Server Development Guide
ê°ì (Overview)
LLMì´ ì ì¤ê³ë ë구를 íµí´ ì¸ë¶ ìë¹ì¤ì ìí¸ìì©í ì ìê² í´ì£¼ë MCP (Model Context Protocol) ìë²ë¥¼ ìì±íì¸ì. MCP ìë²ì íì§ì LLMì´ ì¤ì ìì ì ì¼ë§ë ì ìíí ì ìê² íëì§ì ë°ë¼ ê²°ì ë©ëë¤.
íë¡ì¸ì¤ (Process)
ð ìí¬íë¡ì° ê°ì (High-Level Workflow)
ê³ íì§ MCP ìë²ë¥¼ ë§ëë ê³¼ì ì í¬ê² ë¤ ë¨ê³ë¡ ëë©ëë¤:
Phase 1: ì¬ì¸µ ì¡°ì¬ ë° ê³í (Deep Research and Planning)
1.1 ìµì MCP ì¤ê³ ì´í´
API 커ë²ë¦¬ì§ vs. ìí¬íë¡ì° ë구: í¬ê´ì ì¸ API ìëí¬ì¸í¸ 커ë²ë¦¬ì§ì í¹íë ìí¬íë¡ì° ë구 ì¬ì´ì ê· íì ë§ì¶ì¸ì. ìí¬íë¡ì° ë구ë í¹ì ìì ì ë í¸ë¦¬í ì ìì¼ë©°, í¬ê´ì ì¸ ì»¤ë²ë¦¬ì§ë ìì´ì í¸(agent)ê° ìì ì ìì ë¡ê² 구ì±í ì ìë ì ì°ì±ì ì ê³µí©ëë¤. ì±ë¥ì í´ë¼ì´ì¸í¸ì ë°ë¼ ë¤ë¦ ëë¤âì¼ë¶ í´ë¼ì´ì¸í¸ë 기본 ë구ë¤ì ì¡°í©íë ì½ë ì¤í ë°©ìì´ í¨ì¨ì ì´ë©°, ë¤ë¥¸ í´ë¼ì´ì¸í¸ë ìì ìì¤ì ìí¬íë¡ì° ëêµ¬ê° ë ì ìëí©ëë¤. íì¤íì§ ìì ëë í¬ê´ì ì¸ API 커ë²ë¦¬ì§ë¥¼ ì°ì ìíì¸ì.
ë구 ëª
ëª
ë° ë°ê²¬ ê°ë¥ì± (Tool Naming and Discoverability):
ëª
ííê³ ì¤ëª
ì ì¸ ë구 ì´ë¦ì ìì´ì í¸ê° ì ì í ë구를 ë¹ ë¥´ê² ì°¾ë ë° ëìì´ ë©ëë¤. ì¼ê´ë ì ëì¬(ì: github_create_issue, github_list_repos)를 ì¬ì©íê³ ëì ì¤ì¬ì ì´ë¦ì ì§ì¼ì¸ì.
컨í ì¤í¸ ê´ë¦¬ (Context Management): ìì´ì í¸ë ê°ê²°í ë구 ì¤ëª ê³¼ ê²°ê³¼ íí°ë§/íì´ì§ë¤ì´ì 기ë¥ì´ ìì ë ë í¨ì¨ì ì¼ë¡ ìëí©ëë¤. ì§ì¤ì ì´ê³ ê´ë ¨ì± ëì ë°ì´í°ë¥¼ ë°ííëë¡ ë구를 ì¤ê³íì¸ì. ì¼ë¶ í´ë¼ì´ì¸í¸ë ì½ë ì¤íì ì§ìíë©°, ì´ë ìì´ì í¸ê° ë°ì´í°ë¥¼ í¨ì¨ì ì¼ë¡ íí°ë§íê³ ì²ë¦¬íë ë° ëìì´ ë©ëë¤.
ì¤í ê°ë¥í ìë¬ ë©ìì§ (Actionable Error Messages): ìë¬ ë©ìì§ë 구체ì ì¸ ì ìê³¼ ë¤ì ë¨ê³ë¥¼ ì ìíì¬ ìì´ì í¸ê° í´ê²°ì± ì ì°¾ì ì ìëë¡ ìë´í´ì¼ í©ëë¤.
1.2 MCP íë¡í ì½ ë¬¸ì íìµ
MCP ì¬ì íì:
먼ì ì¬ì´í¸ë§µìì ê´ë ¨ íì´ì§ë¥¼ ì°¾ì¼ì¸ì: https://modelcontextprotocol.io/sitemap.xml
ê·¸ ë¤ì, ë§í¬ë¤ì´ íìì ìí´ .md ì 미ì¬ê° ë¶ì í¹ì íì´ì§ë¥¼ ê°ì ¸ì¤ì¸ì (ì: https://modelcontextprotocol.io/specification/draft.md).
ê²í í´ì¼ í 주ì íì´ì§:
- ì¬ì ê°ì ë° ìí¤í ì²
- ì ì¡ ë©ì»¤ëì¦ (streamable HTTP, stdio)
- ë구(Tool), 리ìì¤(Resource), í롬íí¸(Prompt) ì ì
1.3 íë ììí¬ ë¬¸ì íìµ
ê¶ì¥ ì¤í:
- ì¸ì´: TypeScript (ê³ íì§ SDK ì§ì ë° MCPB ë± ë¤ìí ì¤í íê²½ìì ì¢ì í¸íì± ì ê³µ. ëí AI 모ë¸ë¤ì´ ê´ë²ìí ì¬ì©ë, ì ì íì´í ë° ì°ìí 린í ë구 ëë¶ì TypeScript ì½ë를 ìì±íë ë° ë¥ìí¨)
- ì ì¡(Transport): ì격 ìë²ì ê²½ì° ìí ë¹ì ì¥(stateless) JSONì ì¬ì©íë Streamable HTTP (ìí ì ì¥ ì¸ì ë° ì¤í¸ë¦¬ë° ìëµì ë¹í´ íì¥ ë° ì ì§ë³´ìê° ê°ë¨í¨). ë¡ì»¬ ìë²ì ê²½ì° stdio ì¬ì©.
íë ììí¬ ë¬¸ì ë¡ë:
- MCP Best Practices: ð Best Practices 보기 – íµì¬ ê°ì´ëë¼ì¸
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 커ë²ë¦¬ì§ë¥¼ ì°ì ìíì¸ì. ê°ì¥ ì¼ë°ì ì¸ ìì ë¶í° ììíì¬ êµ¬íí ìëí¬ì¸í¸ 목ë¡ì ë§ëëë¤.
Phase 2: 구í (Implementation)
2.1 íë¡ì í¸ êµ¬ì¡° ì¤ì
íë¡ì í¸ ì¤ì ì ëí´ìë ì¸ì´ë³ ê°ì´ë를 참조íì¸ì:
- â¡ TypeScript ê°ì´ë – íë¡ì í¸ êµ¬ì¡°, package.json, tsconfig.json
- ð Python ê°ì´ë – 모ë ì¡°ì§, ì¢ ìì±
2.2 íµì¬ ì¸íë¼ êµ¬í
ê³µì© ì í¸ë¦¬í° ìì±:
- ì¸ì¦ 기ë¥ì´ í¬í¨ë API í´ë¼ì´ì¸í¸
- ìë¬ í¸ë¤ë§ í¬í¼
- ìëµ í¬ë§·í (JSON/Markdown)
- íì´ì§ë¤ì´ì ì§ì
2.3 ë구 구í (Implement Tools)
ê° ë구ë³ë¡ ë¤ìì ìííì¸ì:
ì ë ¥ ì¤í¤ë§ (Input Schema):
- Zod (TypeScript) ëë Pydantic (Python) ì¬ì©
- ì ì½ ì¡°ê±´ê³¼ ëª íí ì¤ëª í¬í¨
- íë ì¤ëª ì ìì ì¶ê°
ì¶ë ¥ ì¤í¤ë§ (Output Schema):
- 구조íë ë°ì´í°ë¥¼ ìí´ ê°ë¥í ê²½ì°
outputSchemaì ì - ë구 ìëµìì
structuredContentì¬ì© (TypeScript SDK 기ë¥) - í´ë¼ì´ì¸í¸ê° ë구 ì¶ë ¥ì ì´í´íê³ ì²ë¦¬íë ë° ëìì ì¤
ë구 ì¤ëª (Tool Description):
- 기ë¥ì ëí ê°ê²°í ìì½
- íë¼ë¯¸í° ì¤ëª
- ë°í íì ì¤í¤ë§
구í:
- I/O ìì ì ìí Async/await ì¬ì©
- ì¤í ê°ë¥í ë©ìì§ë¥¼ í¬í¨í ì ì í ìë¬ í¸ë¤ë§
- í´ë¹ëë ê²½ì° íì´ì§ë¤ì´ì ì§ì
- ìµì SDK ì¬ì© ì í ì¤í¸ ì½í ì¸ ì 구조íë ë°ì´í° 모ë ë°í
ì´ë ¸í ì´ì (Annotations):
readOnlyHint: true/falsedestructiveHint: true/falseidempotentHint: true/falseopenWorldHint: true/false
Phase 3: ê²í ë° í ì¤í¸ (Review and Test)
3.1 ì½ë íì§
ë¤ìì ê²í íì¸ì:
- ì¤ë³µ ì½ë ìì (DRY ìì¹)
- ì¼ê´ë ìë¬ í¸ë¤ë§
- ìì í íì 커ë²ë¦¬ì§
- ëª íí ë구 ì¤ëª
3.2 ë¹ë ë° í ì¤í¸
TypeScript:
- ì»´íì¼ íì¸ì ìí´
npm run buildì¤í - MCP Inspectorë¡ í
ì¤í¸:
npx @modelcontextprotocol/inspector
Python:
- 구문 íì¸:
python -m py_compile your_server.py - MCP Inspectorë¡ í ì¤í¸
ìì¸í í ì¤í¸ ì ê·¼ ë°©ìê³¼ íì§ ì²´í¬ë¦¬ì¤í¸ë ì¸ì´ë³ ê°ì´ë를 참조íì¸ì.
Phase 4: íê° ìì± (Create Evaluations)
MCP ìë²ë¥¼ 구íí í, ê·¸ í¨ê³¼ë¥¼ í ì¤í¸í기 ìí´ í¬ê´ì ì¸ íê°(evaluations)를 ë§ëì¸ì.
ì ì²´ íê° ê°ì´ëë¼ì¸ì ìí´ â Evaluation ê°ì´ë를 ë¡ëíì¸ì.
4.1 íê° ëª©ì ì´í´
íê°ë¥¼ íµí´ LLMì´ ì¤ì ì ì´ê³ ë³µì¡í ì§ë¬¸ì ëµí기 ìí´ ë¹ì ì MCP ìë²ë¥¼ í¨ê³¼ì ì¼ë¡ ì¬ì©í ì ìëì§ í ì¤í¸í©ëë¤.
4.2 10ê°ì íê° ì§ë¬¸ ìì±
í¨ê³¼ì ì¸ íê°ë¥¼ ìí´ ê°ì´ëì ì¤ëª ë íë¡ì¸ì¤ë¥¼ ë°ë¥´ì¸ì:
- ë구 ì ê² (Tool Inspection): ì¬ì© ê°ë¥í ë구를 ëì´íê³ ê¸°ë¥ì ì´í´í©ëë¤.
- ì½í ì¸ íì (Content Exploration): ì½ê¸° ì ì©(READ-ONLY) ìì ì ì¬ì©íì¬ ì¬ì© ê°ë¥í ë°ì´í° íì
- ì§ë¬¸ ìì±: 10ê°ì ë³µì¡íê³ ì¤ì ì ì¸ ì§ë¬¸ ìì±
- ëµë³ ê²ì¦: ì§ì ì§ë¬¸ì í´ê²°íì¬ ëµë³ íì¸
4.3 íê° ì구 ì¬í
ê° ì§ë¬¸ì´ ë¤ìì 충족íëì§ íì¸íì¸ì:
- ë ë¦½ì± (Independent): ë¤ë¥¸ ì§ë¬¸ì ìì¡´íì§ ìì
- ì½ê¸° ì ì© (Read-only): ë¹íê´´ì ì¸ ìì ë§ íìí¨
- ë³µì¡ì± (Complex): ì¬ë¬ ë구 í¸ì¶ ë° ì¬ì¸µì ì¸ íì íì
- ì¤ì ì± (Realistic): ì¸ê°ì´ ê´ì¬ì ê°ì§ ë§í ì¤ì ì ì¤ì¼ì´ì¤ 기ë°
- ê²ì¦ ê°ë¥ì± (Verifiable): 문ìì´ ë¹êµë¡ ê²ì¦ ê°ë¥í ëª íí ë¨ì¼ ëµë³
- ìì ì± (Stable): ëµë³ì´ ìê°ì´ ì§ëë ë³íì§ ìì
4.4 ì¶ë ¥ íì
ë¤ì 구조ì XML íì¼ì ìì±íì¸ì:
<evaluation>
<qa_pair>
<question>ë물 ì½ëëª
ì ê°ì§ AI ëª¨ë¸ ì¶ìì ê´í í ë¡ ì ì°¾ì¼ì¸ì. í 모ë¸ì ASL-X íìì ì¬ì©íë í¹ì ìì ì§ì ì´ íìíìµëë¤. ì ë°ì´ ì¼ì ê³ ìì´ì ì´ë¦ì ë´ ëª¨ë¸ì ëí´ ê²°ì ë ì«ì Xë 무ìì
ëê¹?</question>
<answer>3</answer>
</qa_pair>
<!-- ë ë§ì qa_pair... -->
</evaluation>
참조 íì¼ (Reference Files)
ð 문ì ë¼ì´ë¸ë¬ë¦¬ (Documentation Library)
ê°ë° ì¤ì íìì ë°ë¼ ë¤ì 리ìì¤ë¥¼ ë¡ëíì¸ì:
íµì¬ MCP 문ì (ê°ì¥ 먼ì ë¡ë)
- MCP Protocol:
https://modelcontextprotocol.io/sitemap.xmlì ì¬ì´í¸ë§µë¶í° ììíì¬.mdì 미ì¬ê° ë¶ì í¹ì íì´ì§ë¥¼ ê°ì ¸ì¤ì¸ì. - ð MCP Best Practices – ë¤ìì í¬í¨í ë²ì© MCP ê°ì´ëë¼ì¸:
- ìë² ë° ë구 ëª ëª ê·ì¹
- ìëµ íì ê°ì´ëë¼ì¸ (JSON vs Markdown)
- íì´ì§ë¤ì´ì ëª¨ë² ì¬ë¡
- ì ì¡ ë°©ì ì í (streamable HTTP vs stdio)
- ë³´ì ë° ìë¬ í¸ë¤ë§ íì¤
SDK 문ì (Phase 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ìì ê°ì ¸ì¤ê¸°
ì¸ì´ë³ 구í ê°ì´ë (Phase 2 ì¤ì ë¡ë)
-
ð Python 구í ê°ì´ë – ë¤ìì í¬í¨í ì ì²´ Python/FastMCP ê°ì´ë:
- ìë² ì´ê¸°í í¨í´
- Pydantic ëª¨ë¸ ìì
@mcp.toolì ì´ì©í ë구 ë±ë¡- ì ì²´ ìë ìì ì½ë
- íì§ ì²´í¬ë¦¬ì¤í¸
-
â¡ TypeScript 구í ê°ì´ë – ë¤ìì í¬í¨í ì ì²´ TypeScript ê°ì´ë:
- íë¡ì í¸ êµ¬ì¡°
- Zod ì¤í¤ë§ í¨í´
server.registerToolì ì´ì©í ë구 ë±ë¡- ì ì²´ ìë ìì ì½ë
- íì§ ì²´í¬ë¦¬ì¤í¸
íê° ê°ì´ë (Phase 4 ì¤ì ë¡ë)
- â
Evaluation ê°ì´ë – ë¤ìì í¬í¨í ì ì²´ íê° ìì± ê°ì´ë:
- ì§ë¬¸ ìì± ê°ì´ëë¼ì¸
- ëµë³ ê²ì¦ ì ëµ
- XML íì ì¬ì
- ì§ë¬¸ ë° ëµë³ ìì
- ì ê³µë ì¤í¬ë¦½í¸ë¥¼ ì´ì©í íê° ì¤í ë°©ë²