Skip to main content
Glama
TOOLS-REFERENCE.ko.mdโ€ข13.2 kB
# ๋„๊ตฌ ์ฐธ์กฐ Spec Workflow MCP์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  MCP ๋„๊ตฌ์— ๋Œ€ํ•œ ์™„์ „ํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. ## ๊ฐœ์š” Spec Workflow MCP๋Š” ๊ตฌ์กฐํ™”๋œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ „๋ฌธ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋Š” Model Context Protocol์„ ํ†ตํ•ด AI ์–ด์‹œ์Šคํ„ดํŠธ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## ๋„๊ตฌ ์นดํ…Œ๊ณ ๋ฆฌ 1. **์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ€์ด๋“œ** - ๋ฌธ์„œ ๋ฐ ์•ˆ๋‚ด 2. **Spec ๊ด€๋ฆฌ** - ์‚ฌ์–‘ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ 3. **์ปจํ…์ŠคํŠธ ๋„๊ตฌ** - ํ”„๋กœ์ ํŠธ ์ •๋ณด ๊ฒ€์ƒ‰ 4. **Steering ๋„๊ตฌ** - ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€ ๊ฐ€์ด๋“œ 5. **์Šน์ธ ๋„๊ตฌ** - ๋ฌธ์„œ ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ ## ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ€์ด๋“œ ๋„๊ตฌ ### spec-workflow-guide **๋ชฉ์ **: spec ์ค‘์‹ฌ ์›Œํฌํ”Œ๋กœ์šฐ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: ์—†์Œ **๋ฐ˜ํ™˜๊ฐ’**: ์™„์ „ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” Markdown ๊ฐ€์ด๋“œ **์‚ฌ์šฉ ์˜ˆ์ œ**: ``` "spec ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ€์ด๋“œ ๋ณด์—ฌ์ค˜" ``` **์‘๋‹ต ํฌํ•จ ๋‚ด์šฉ**: - ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐœ์š” - ๋‹จ๊ณ„๋ณ„ ํ”„๋กœ์„ธ์Šค - ๋ชจ๋ฒ” ์‚ฌ๋ก€ - ์˜ˆ์ œ ํ”„๋กฌํ”„ํŠธ ### steering-guide **๋ชฉ์ **: ํ”„๋กœ์ ํŠธ steering ๋ฌธ์„œ ์ƒ์„ฑ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: ์—†์Œ **๋ฐ˜ํ™˜๊ฐ’**: steering ๋ฌธ์„œ ์ƒ์„ฑ์„ ์œ„ํ•œ Markdown ๊ฐ€์ด๋“œ **์‚ฌ์šฉ ์˜ˆ์ œ**: ``` "steering ๋ฌธ์„œ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ๋ณด์—ฌ์ค˜" ``` **์‘๋‹ต ํฌํ•จ ๋‚ด์šฉ**: - Steering ๋ฌธ์„œ ์œ ํ˜• - ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค - ๋‚ด์šฉ ๊ฐ€์ด๋“œ๋ผ์ธ - ์˜ˆ์ œ ## Spec ๊ด€๋ฆฌ ๋„๊ตฌ ### create-spec-doc **๋ชฉ์ **: ์‚ฌ์–‘ ๋ฌธ์„œ(์š”๊ตฌ์‚ฌํ•ญ, ์„ค๊ณ„, ์ž‘์—…)๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… | |-----------|------|----------|-------------| | specName | string | ์˜ˆ | spec์˜ ์ด๋ฆ„ (kebab-case) | | docType | string | ์˜ˆ | ํƒ€์ž…: "requirements", "design", ๋˜๋Š” "tasks" | | content | string | ์˜ˆ | ๋ฌธ์„œ์˜ Markdown ๋‚ด์šฉ | | revision | boolean | ์•„๋‹ˆ์˜ค | ์ˆ˜์ • ์—ฌ๋ถ€ (๊ธฐ๋ณธ๊ฐ’: false) | **์‚ฌ์šฉ ์˜ˆ์ œ**: ```typescript { specName: "user-authentication", docType: "requirements", content: "# User Authentication Requirements\n\n## Overview\n...", revision: false } ``` **๋ฐ˜ํ™˜๊ฐ’**: ```typescript { success: true, message: "Requirements document created successfully", path: ".spec-workflow/specs/user-authentication/requirements.md", requestedApproval: true } ``` **์ฐธ๊ณ ์‚ฌํ•ญ**: - spec ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑ - ์ƒˆ ๋ฌธ์„œ์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ์Šน์ธ ์š”์ฒญ - Markdown ํ˜•์‹ ๊ฒ€์ฆ - ์ƒˆ ํƒ€์ž… ์ƒ์„ฑ ์‹œ ๊ธฐ์กด ๋ฌธ์„œ ๋ณด์กด ### spec-list **๋ชฉ์ **: ๋ชจ๋“  ์‚ฌ์–‘์„ ํ˜„์žฌ ์ƒํƒœ์™€ ํ•จ๊ป˜ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: ์—†์Œ **๋ฐ˜ํ™˜๊ฐ’**: spec ์š”์•ฝ ๋ฐฐ์—ด **์‘๋‹ต ๊ตฌ์กฐ**: ```typescript [ { name: "user-authentication", status: "in-progress", progress: 45, documents: { requirements: "approved", design: "pending-approval", tasks: "not-created" }, taskStats: { total: 15, completed: 7, inProgress: 1, pending: 7 } } ] ``` **์‚ฌ์šฉ ์˜ˆ์ œ**: ``` "๋‚ด ๋ชจ๋“  spec ๋ชฉ๋ก ๋ณด์—ฌ์ค˜" ``` ### spec-status **๋ชฉ์ **: ํŠน์ • spec์— ๋Œ€ํ•œ ์ƒ์„ธ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… | |-----------|------|----------|-------------| | specName | string | ์˜ˆ | ํ™•์ธํ•  spec์˜ ์ด๋ฆ„ | **๋ฐ˜ํ™˜๊ฐ’**: ์ƒ์„ธ spec ์ƒํƒœ **์‘๋‹ต ๊ตฌ์กฐ**: ```typescript { exists: true, name: "user-authentication", documents: { requirements: { exists: true, approved: true, lastModified: "2024-01-15T10:30:00Z", size: 4523 }, design: { exists: true, approved: false, pendingApproval: true, lastModified: "2024-01-15T14:20:00Z", size: 6234 }, tasks: { exists: true, taskCount: 15, completedCount: 7, inProgressCount: 1, progress: 45 } }, overallProgress: 45, currentPhase: "implementation" } ``` **์‚ฌ์šฉ ์˜ˆ์ œ**: ``` "user-authentication spec์˜ ์ƒํƒœ ๋ณด์—ฌ์ค˜" ``` ### manage-tasks **๋ชฉ์ **: ์—…๋ฐ์ดํŠธ, ์ƒํƒœ ๋ณ€๊ฒฝ, ์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ ์„ ํฌํ•จํ•œ ํฌ๊ด„์ ์ธ ์ž‘์—… ๊ด€๋ฆฌ์ž…๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… | |-----------|------|----------|-------------| | specName | string | ์˜ˆ | spec์˜ ์ด๋ฆ„ | | action | string | ์˜ˆ | ์ž‘์—…: "update", "complete", "list", "progress" | | taskId | string | ๋•Œ๋•Œ๋กœ | ์ž‘์—… ID (update/complete์— ํ•„์š”) | | status | string | ์•„๋‹ˆ์˜ค | ์ƒˆ ์ƒํƒœ: "pending", "in-progress", "completed" | | notes | string | ์•„๋‹ˆ์˜ค | ์ž‘์—…์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ฉ”๋ชจ | **์ž‘์—…**: 1. **์ž‘์—… ์ƒํƒœ ์—…๋ฐ์ดํŠธ**: ```typescript { specName: "user-auth", action: "update", taskId: "1.2.1", status: "in-progress", notes: "Started implementation" } ``` 2. **์ž‘์—… ์™„๋ฃŒ**: ```typescript { specName: "user-auth", action: "complete", taskId: "1.2.1" } ``` 3. **์ž‘์—… ๋ชฉ๋ก**: ```typescript { specName: "user-auth", action: "list" } ``` 4. **์ง„ํ–‰ ์ƒํ™ฉ ๊ฐ€์ ธ์˜ค๊ธฐ**: ```typescript { specName: "user-auth", action: "progress" } ``` **๋ฐ˜ํ™˜๊ฐ’**: ์ž‘์—… ์ •๋ณด ๋˜๋Š” ์—…๋ฐ์ดํŠธ ํ™•์ธ ## ์ปจํ…์ŠคํŠธ ๋„๊ตฌ ### get-template-context **๋ชฉ์ **: ๋ชจ๋“  ๋ฌธ์„œ ํƒ€์ž…์— ๋Œ€ํ•œ Markdown ํ…œํ”Œ๋ฆฟ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: ์—†์Œ **๋ฐ˜ํ™˜๊ฐ’**: ๋ชจ๋“  ํ…œํ”Œ๋ฆฟ์„ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด **์‘๋‹ต ๊ตฌ์กฐ**: ```typescript { requirements: "# Requirements Template\n\n## Overview\n...", design: "# Design Template\n\n## Architecture\n...", tasks: "# Tasks Template\n\n## Implementation Tasks\n...", product: "# Product Steering Template\n...", tech: "# Technical Steering Template\n...", structure: "# Structure Steering Template\n..." } ``` **์‚ฌ์šฉ ์˜ˆ์ œ**: ``` "๋ชจ๋“  ๋ฌธ์„œ ํ…œํ”Œ๋ฆฟ ๊ฐ€์ ธ์™€์ค˜" ``` ### get-steering-context **๋ชฉ์ **: ํ”„๋กœ์ ํŠธ steering ๋ฌธ์„œ ๋ฐ ๊ฐ€์ด๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… | |-----------|------|----------|-------------| | docType | string | ์•„๋‹ˆ์˜ค | ํŠน์ • ๋ฌธ์„œ: "product", "tech", "structure", ๋˜๋Š” "all" | **๋ฐ˜ํ™˜๊ฐ’**: Steering ๋ฌธ์„œ ๋‚ด์šฉ **์‚ฌ์šฉ ์˜ˆ์ œ**: ```typescript { docType: "tech" // ๊ธฐ์ˆ  steering๋งŒ ๋ฐ˜ํ™˜ } ``` **์‘๋‹ต ๊ตฌ์กฐ**: ```typescript { product: "# Product Steering\n\n## Vision\n...", tech: "# Technical Steering\n\n## Architecture\n...", structure: "# Structure Steering\n\n## Organization\n..." } ``` ### get-spec-context **๋ชฉ์ **: ํŠน์ • spec์— ๋Œ€ํ•œ ์™„์ „ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… | |-----------|------|----------|-------------| | specName | string | ์˜ˆ | spec์˜ ์ด๋ฆ„ | | includeContent | boolean | ์•„๋‹ˆ์˜ค | ๋ฌธ์„œ ๋‚ด์šฉ ํฌํ•จ (๊ธฐ๋ณธ๊ฐ’: true) | **๋ฐ˜ํ™˜๊ฐ’**: ์™„์ „ํ•œ spec ์ปจํ…์ŠคํŠธ **์‘๋‹ต ๊ตฌ์กฐ**: ```typescript { name: "user-authentication", exists: true, documents: { requirements: { exists: true, content: "# Requirements\n\n...", approved: true }, design: { exists: true, content: "# Design\n\n...", approved: false }, tasks: { exists: true, content: "# Tasks\n\n...", stats: { total: 15, completed: 7, progress: 45 } } }, relatedSpecs: ["user-profile", "session-management"], dependencies: ["database-setup", "auth-library"] } ``` **์‚ฌ์šฉ ์˜ˆ์ œ**: ``` "user-authentication spec์˜ ์ „์ฒด ์ปจํ…์ŠคํŠธ ๊ฐ€์ ธ์™€์ค˜" ``` ## Steering ๋ฌธ์„œ ๋„๊ตฌ ### create-steering-doc **๋ชฉ์ **: ํ”„๋กœ์ ํŠธ steering ๋ฌธ์„œ(product, tech, structure)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… | |-----------|------|----------|-------------| | docType | string | ์˜ˆ | ํƒ€์ž…: "product", "tech", ๋˜๋Š” "structure" | | content | string | ์˜ˆ | ๋ฌธ์„œ์˜ Markdown ๋‚ด์šฉ | **์‚ฌ์šฉ ์˜ˆ์ œ**: ```typescript { docType: "product", content: "# Product Steering\n\n## Vision\nBuild the best..." } ``` **๋ฐ˜ํ™˜๊ฐ’**: ```typescript { success: true, message: "Product steering document created", path: ".spec-workflow/steering/product.md" } ``` **์ฐธ๊ณ ์‚ฌํ•ญ**: - ํ•„์š”์‹œ steering ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ - ๊ธฐ์กด steering ๋ฌธ์„œ ๋ฎ์–ด์“ฐ๊ธฐ - steering ๋ฌธ์„œ์—๋Š” ์Šน์ธ ๋ถˆํ•„์š” - spec ์ „์— ์ƒ์„ฑ๋˜์–ด์•ผ ํ•จ ## ์Šน์ธ ์‹œ์Šคํ…œ ๋„๊ตฌ ### request-approval **๋ชฉ์ **: ๋ฌธ์„œ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์Šน์ธ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… | |-----------|------|----------|-------------| | specName | string | ์˜ˆ | spec์˜ ์ด๋ฆ„ | | docType | string | ์˜ˆ | ์Šน์ธํ•  ๋ฌธ์„œ ํƒ€์ž… | | documentId | string | ์˜ˆ | ์ถ”์ ์„ ์œ„ํ•œ ๊ณ ์œ  ID | | content | string | ์˜ˆ | ๊ฒ€ํ† ํ•  ๋ฌธ์„œ ๋‚ด์šฉ | **์‚ฌ์šฉ ์˜ˆ์ œ**: ```typescript { specName: "user-auth", docType: "requirements", documentId: "user-auth-req-v1", content: "# Requirements\n\n..." } ``` **๋ฐ˜ํ™˜๊ฐ’**: ```typescript { success: true, approvalId: "user-auth-req-v1", message: "Approval requested. Check dashboard to review." } ``` ### get-approval-status **๋ชฉ์ **: ๋ฌธ์„œ์˜ ์Šน์ธ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… | |-----------|------|----------|-------------| | specName | string | ์˜ˆ | spec์˜ ์ด๋ฆ„ | | documentId | string | ์˜ˆ | ํ™•์ธํ•  ๋ฌธ์„œ ID | **๋ฐ˜ํ™˜๊ฐ’**: ```typescript { exists: true, status: "pending" | "approved" | "rejected" | "changes-requested", feedback: "Please add more detail about error handling", timestamp: "2024-01-15T10:30:00Z", reviewer: "user" } ``` **์‚ฌ์šฉ ์˜ˆ์ œ**: ``` "user-auth ์š”๊ตฌ์‚ฌํ•ญ์˜ ์Šน์ธ ์ƒํƒœ ํ™•์ธํ•ด์ค˜" ``` ### delete-approval **๋ชฉ์ **: ์™„๋ฃŒ๋œ ์Šน์ธ ์š”์ฒญ์„ ์ œ๊ฑฐํ•˜์—ฌ ์Šน์ธ ํ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค. **๋งค๊ฐœ๋ณ€์ˆ˜**: | ๋งค๊ฐœ๋ณ€์ˆ˜ | ํƒ€์ž… | ํ•„์ˆ˜ | ์„ค๋ช… | |-----------|------|----------|-------------| | specName | string | ์˜ˆ | spec์˜ ์ด๋ฆ„ | | documentId | string | ์˜ˆ | ์ œ๊ฑฐํ•  ๋ฌธ์„œ ID | **๋ฐ˜ํ™˜๊ฐ’**: ```typescript { success: true, message: "Approval record deleted" } ``` **์‚ฌ์šฉ ์˜ˆ์ œ**: ``` "user-auth์˜ ์™„๋ฃŒ๋œ ์Šน์ธ ์ •๋ฆฌํ•ด์ค˜" ``` ## ๋„๊ตฌ ํ†ตํ•ฉ ํŒจํ„ด ### ์ˆœ์ฐจ์  ์›Œํฌํ”Œ๋กœ์šฐ ๋„๊ตฌ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค: 1. `steering-guide` โ†’ steering์— ๋Œ€ํ•ด ํ•™์Šต 2. `create-steering-doc` โ†’ steering ๋ฌธ์„œ ์ƒ์„ฑ 3. `spec-workflow-guide` โ†’ ์›Œํฌํ”Œ๋กœ์šฐ ํ•™์Šต 4. `create-spec-doc` โ†’ ์š”๊ตฌ์‚ฌํ•ญ ์ƒ์„ฑ 5. `request-approval` โ†’ ๊ฒ€ํ†  ์š”์ฒญ 6. `get-approval-status` โ†’ ์ƒํƒœ ํ™•์ธ 7. `create-spec-doc` โ†’ ์„ค๊ณ„ ์ƒ์„ฑ (์Šน์ธ ํ›„) 8. `manage-tasks` โ†’ ๊ตฌํ˜„ ์ถ”์  ### ๋ณ‘๋ ฌ ์ž‘์—… ์ผ๋ถ€ ๋„๊ตฌ๋Š” ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: - `spec-list` + `spec-status` โ†’ ๊ฐœ์š” ๋ฐ ์„ธ๋ถ€์‚ฌํ•ญ ๊ฐ€์ ธ์˜ค๊ธฐ - `get-spec-context` + `get-steering-context` โ†’ ์ „์ฒด ํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ - ์—ฌ๋Ÿฌ `create-spec-doc` โ†’ ์—ฌ๋Ÿฌ spec ์ƒ์„ฑ ### ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋ชจ๋“  ๋„๊ตฌ๋Š” ์ผ๊ด€๋œ ์—๋Ÿฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค: ```typescript { success: false, error: "Spec not found", details: "No spec named 'invalid-spec' exists", suggestion: "Use spec-list to see available specs" } ``` ## ๋ชจ๋ฒ” ์‚ฌ๋ก€ ### ๋„๊ตฌ ์„ ํƒ 1. **์ •๋ณด ์ˆ˜์ง‘**: - ๊ฐœ์š”๋ฅผ ์œ„ํ•ด `spec-list` ์‚ฌ์šฉ - ํŠน์ • spec์„ ์œ„ํ•ด `spec-status` ์‚ฌ์šฉ - ๊ตฌํ˜„์„ ์œ„ํ•ด `get-spec-context` ์‚ฌ์šฉ 2. **๋ฌธ์„œ ์ƒ์„ฑ**: - ํ•ญ์ƒ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋จผ์ € ์ƒ์„ฑ - ์„ค๊ณ„ ์ „์— ์Šน์ธ ๋Œ€๊ธฐ - ์„ค๊ณ„ ์Šน์ธ ํ›„ ์ž‘์—… ์ƒ์„ฑ 3. **์ž‘์—… ๊ด€๋ฆฌ**: - ์ž‘์—… ์‹œ์ž‘ ์‹œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ - ์™„๋ฃŒ ์ฆ‰์‹œ ์™„๋ฃŒ๋กœ ํ‘œ์‹œ - ์ค‘์š”ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ ์‚ฌ์šฉ ### ์„ฑ๋Šฅ ๊ณ ๋ ค์‚ฌํ•ญ - **๋ฐฐ์น˜ ์ž‘์—…**: ํ•œ ๋Œ€ํ™”์—์„œ ์—ฌ๋Ÿฌ spec ์š”์ฒญ - **์บ์‹ฑ**: ๋„๊ตฌ๋Š” ์„ฑ๋Šฅ์„ ์œ„ํ•ด ํŒŒ์ผ ์ฝ๊ธฐ๋ฅผ ์บ์‹œ - **์„ ํƒ์  ๋กœ๋”ฉ**: ๋” ๋น ๋ฅธ ์ƒํƒœ ํ™•์ธ์„ ์œ„ํ•ด `includeContent: false` ์‚ฌ์šฉ ### ๋ณด์•ˆ - **๊ฒฝ๋กœ ๊ฒ€์ฆ**: ๋ชจ๋“  ๊ฒฝ๋กœ๊ฐ€ ๊ฒ€์ฆ๋˜๊ณ  ์ •์ œ๋จ - **ํ”„๋กœ์ ํŠธ ๊ฒฉ๋ฆฌ**: ๋„๊ตฌ๋Š” ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ์ ‘๊ทผ - **์ž…๋ ฅ ์ •์ œ**: Markdown ๋‚ด์šฉ์ด ์ •์ œ๋จ - **์‹คํ–‰ ์—†์Œ**: ๋„๊ตฌ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Œ ## ๋„๊ตฌ ํ™•์žฅ ### ์‚ฌ์šฉ์ž ์ •์˜ ๋„๊ตฌ ๊ฐœ๋ฐœ ์ƒˆ ๋„๊ตฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด: 1. `src/tools/`์— ๋„๊ตฌ ๋ชจ๋“ˆ ์ƒ์„ฑ 2. ๋งค๊ฐœ๋ณ€์ˆ˜ ์Šคํ‚ค๋งˆ ์ •์˜ 3. ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜ ๊ตฌํ˜„ 4. MCP ์„œ๋ฒ„์— ๋“ฑ๋ก 5. exports์— ์ถ”๊ฐ€ ์˜ˆ์ œ ๊ตฌ์กฐ: ```typescript export const customTool = { name: 'custom-tool', description: 'Description', parameters: { // JSON Schema }, handler: async (params) => { // Implementation } }; ``` ## ๋„๊ตฌ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ๋Š” ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค: - ๋งค๊ฐœ๋ณ€์ˆ˜ ์ถ”๊ฐ€๋Š” ์„ ํƒ ์‚ฌํ•ญ - ์‘๋‹ต ๊ตฌ์กฐ๋Š” ๊ต์ฒด๊ฐ€ ์•„๋‹Œ ํ™•์žฅ - ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์€ ๊ฒฝ๊ณ  ํ‘œ์‹œ - ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ ์ œ๊ณต ## ๊ด€๋ จ ๋ฌธ์„œ - [์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ](USER-GUIDE.md) - ๋„๊ตฌ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ - [์›Œํฌํ”Œ๋กœ์šฐ ํ”„๋กœ์„ธ์Šค](WORKFLOW.md) - ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ์˜ ๋„๊ตฌ ์‚ฌ์šฉ - [ํ”„๋กฌํ”„ํŒ… ๊ฐ€์ด๋“œ](PROMPTING-GUIDE.md) - ๋„๊ตฌ ์‚ฌ์šฉ ์˜ˆ์ œ - [๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ](DEVELOPMENT.md) - ์ƒˆ ๋„๊ตฌ ์ถ”๊ฐ€

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Pimzino/spec-workflow-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server