Skip to main content

mcp-server-spec-driven-development

MCP server for systematic spec-driven development workflow from requirements to design to code using EARS format

インストールへ移動

ソース情報

リポジトリ
reason-machines/mcp-skills
ソースの最終更新活動
2026年5月18日 10:52
検出された SKILL.md の言語
英語
スター
7
フォーク
2

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
mcp-server-spec-driven-development
description
MCP server for systematic spec-driven development workflow from requirements to design to code using EARS format
triggers
["help me create requirements using EARS format","generate a design document from requirements","implement code from design specifications","set up spec-driven development workflow","create structured requirements document","follow spec-driven development process","generate code from design document","use EARS format for requirements"]
# MCP Server: Spec-Driven Development > Skill by [ara.so](https://ara.so) — MCP Skills collection ## Overview The Spec-Driven Development MCP server provides a structured workflow for systematic software development by guiding you through three stages: requirements → design → code. It uses the EARS (Easy Approach to Requirements Syntax) format for requirements documentation and ensures traceability from initial requirements to final implementation. **Key Benefits:** - Structured development workflow prevents "vibe coding" - EARS format ensures clear, testable requirements - Traceable path from requirements through design to code - Systematic approach scales with project complexity ## Installation ### VS Code / VS Code Insiders Add to your `mcp.json` configuration file: ```json { "servers": { "spec-driven": { "command": "npx", "args": [ "-y", "mcp-server-spec-driven-development@latest" ] } } } ``` Or use the one-click install buttons from the project README. ### Cursor / Claude Desktop Add to your `mcp.json` configuration file: ```json { "mcpServers": { "spec-driven": { "command": "npx", "args": [ "-y", "mcp-server-spec-driven-development@latest" ] } } } ``` ### Verification After installation, verify the server is loaded by checking available MCP prompts. You should see three prompts: - `generate-requirements` - `generate-design-from-requirements` - `generate-code-from-design` ## Workflow & Usage ### Stage 1: Generate Requirements Document **Prompt Name:** `generate-requirements` Use this prompt to create a structured requirements document in EARS format. **Input Example:** ``` A Vue.js todo application with task creation, completion tracking, and local storage persistence ``` **What happens:** - Creates `specs/requirements.md` in your project - Uses EARS format (Ubiquitous, Event-driven, Unwanted behavior, State-driven, Optional) - Structures requirements into functional and non-functional categories **Example EARS Requirements Output:** ```markdown # Requirements ## Functional Requirements ### Task Management - The system SHALL allow users to create new tasks with a title and description - WHEN a user clicks the "Add Task" button, the system SHALL display a task creation form - IF a task has no title, the system SHALL prevent task creation - WHILE the application is running, the system SHALL persist all tasks to local storage - The system MAY allow users to add tags to tasks ### Task Completion - The system SHALL allow users to mark tasks as complete - WHEN a task is marked complete, the system SHALL update the UI to show completion status - The system SHALL allow users to toggle task completion status ## Non-Functional Requirements ### Performance - The system SHALL load all tasks within 500ms - The system SHALL respond to user interactions within 100ms ### Usability - The system SHALL provide a clean, intuitive interface - The system SHALL work on modern browsers (Chrome, Firefox, Safari, Edge) ``` ### Stage 2: Generate Design from Requirements **Prompt Name:** `generate-design-from-requirements` Use this prompt to create a design document based on your requirements. **Prerequisites:** - `specs/requirements.md` must exist (created in Stage 1) **What happens:** - Reads `specs/requirements.md` - Creates `specs/design.md` with architecture, components, data models, and implementation details - Maps requirements to design decisions **Example Design Output Structure:** ```markdown # Design Document ## Architecture Overview - Component-based Vue.js application - Local Storage for persistence - Reactive state management ## Component Structure ### TaskList Component **Purpose:** Display and manage the list of tasks **Props:** - tasks: Array<Task> - onTaskToggle: Function - onTaskDelete: Function **State:** - filter: 'all' | 'active' | 'completed' ### TaskForm Component **Purpose:** Handle task creation **Events:** - onTaskCreate(task: Task) ## Data Models ### Task Interface ```typescript interface Task { id: string; title: string; description: string; completed: boolean; createdAt: Date; tags?: string[]; } ``` ## State Management - Use Vue 3 Composition API - Centralized task state in composable - Local storage sync on state changes ## API Design - localStorage.getItem('tasks') - localStorage.setItem('tasks', JSON.stringify(tasks)) ``` ### Stage 3: Generate Code from Design **Prompt Name:** `generate-code-from-design` Use this prompt to generate implementation code from your design document. **Prerequisites:** - `specs/design.md` must exist (created in Stage 2) **What happens:** - Reads `specs/design.md` - Generates implementation files in your project root - Creates all components, utilities, and configuration files **Example Generated Code:** **src/composables/useTasks.ts:** ```typescript import { ref, computed, watch } from 'vue'; export interface Task { id: string; title: string; description: string; completed: boolean; createdAt: Date; tags?: string[]; } const STORAGE_KEY = 'tasks'; export function useTasks() { const tasks = ref<Task[]>([]); // Load tasks from localStorage const loadTasks = () => { const stored = localStorage.getItem(STORAGE_KEY); if (stored) { tasks.value = JSON.parse(stored); } }; // Save tasks to localStorage const saveTasks = () => { localStorage.setItem(STORAGE_KEY, JSON.stringify(tasks.value)); }; // Watch for changes and persist watch(tasks, saveTasks, { deep: true }); // Create new task const createTask = (title: string, description: string, tags?: string[]) => { const newTask: Task = { id: crypto.randomUUID(), title, description, completed: false, createdAt: new Date(), tags }; tasks.value.push(newTask); }; // Toggle task completion const toggleTask = (id: string) => { const task = tasks.value.find(t => t.id === id); if (task) { task.completed = !task.completed; } }; // Delete task const deleteTask = (id: string) => { tasks.value = tasks.value.filter(t => t.id !== id); }; // Computed properties const activeTasks = computed(() => tasks.value.filter(t => !t.completed)); const completedTasks = computed(() => tasks.value.filter(t => t.completed)); // Initialize loadTasks(); return { tasks, createTask, toggleTask, deleteTask, activeTasks, completedTasks }; } ``` **src/components/TaskForm.vue:** ```vue <template> <form @submit.prevent="handleSubmit" class="task-form"> <input v-model="title" type="text" placeholder="Task title" required class="task-input" /> <textarea v-model="description" placeholder="Task description" class="task-textarea" /> <button type="submit" class="submit-btn">Add Task</button> </form> </template> <script setup lang="ts"> import { ref } from 'vue'; const emit = defineEmits<{ taskCreate: [title: string, description: string] }>(); const title = ref(''); const description = ref(''); const handleSubmit = () => { if (title.value.trim()) { emit('taskCreate', title.value, description.value); title.value = ''; description.value = ''; } }; </script> <style scoped> .task-form { display: flex; flex-direction: column; gap: 1rem; margin-bottom: 2rem; } .task-input, .task-textarea { padding: 0.5rem; border: 1px solid #ddd; border-radius: 4px; } .submit-btn { padding: 0.5rem 1rem; background: #42b983; color: white; border: none; border-radius: 4px; cursor: pointer; } </style> ``` ## Best Practices ### 1. Always Follow the Three-Stage Process Don't skip stages. Each builds on the previous: ``` Requirements (what) → Design (how) → Code (implementation) ``` ### 2. Iterate on Requirements First Before generating design, ensure your requirements are: - Complete - Testable - Unambiguous - In proper EARS format ### 3. Review Generated Documents After each stage, review and refine: - Requirements: Are all features covered? - Design: Does the architecture make sense? - Code: Does it match the design? ### 4. Use Descriptive Initial Requirements **Good:** ``` A real-time chat application with user authentication, message history, typing indicators, read receipts, file sharing up to 10MB, and emoji support. Must work offline with message queuing. ``` **Too Vague:** ``` Make a chat app ``` ### 5. Maintain Spec Files Keep `specs/requirements.md` and `specs/design.md` updated as your project evolves. These are living documents. ## Common Patterns ### Full Project Initialization ```typescript // Step 1: Generate requirements // Use prompt: generate-requirements // Input: "A REST API for blog management with posts, comments, user auth, and markdown support" // Step 2: Generate design // Use prompt: generate-design-from-requirements // Reviews specs/requirements.md automatically // Step 3: Generate code // Use prompt: generate-code-from-design // Reviews specs/design.md automatically ``` ### Modifying Existing Features If you need to change a feature: 1. Update `specs/requirements.md` manually 2. Re-run `generate-design-from-requirements` 3. Re-run `generate-code-from-design` ### Adding New Features 1. Add new requirements to `specs/requirements.md` in EARS format 2. Re-run `generate-design-from-requirements` 3. Review design changes 4. Re-run `generate-code-from-design` ## File Structure After running all three stages, your project will have: ``` project/ ├── specs/ │ ├── requirements.md # EARS format requirements │ └── design.md # Architecture and design decisions ├── src/ # Generated source code │ ├── components/ │ ├── composables/ │ └── ... └── ... # Other generated files ``` ## EARS Format Reference The EARS format structures requirements into five types: ### Ubiquitous (always active) ``` The system SHALL [action] ``` ### Event-driven (triggered by events) ``` WHEN [trigger], the system SHALL [action] ``` ### Unwanted behavior (error handling) ``` IF [unwanted condition], the system SHALL [action] ``` ### State-driven (mode-based) ``` WHILE [in state], the system SHALL [action] ``` ### Optional (nice-to-have) ``` The system MAY [action] ``` ## Troubleshooting ### Prompt Not Available **Problem:** MCP server prompts don't appear in your IDE. **Solution:** 1. Verify `mcp.json` configuration is correct 2. Restart your IDE 3. Check MCP server is running: look for "spec-driven" in MCP server list 4. Ensure Node.js 20+ is installed ### Requirements File Not Found **Problem:** `generate-design-from-requirements` fails with file not found. **Solution:** 1. Ensure `specs/requirements.md` exists 2. Run `generate-requirements` first 3. Check file is in the correct location relative to project root ### Design File Not Found **Problem:** `generate-code-from-design` fails with file not found. **Solution:** 1. Ensure `specs/design.md` exists 2. Run `generate-design-from-requirements` first 3. Verify file path is `specs/design.md` ### Generated Code Doesn't Match Requirements **Problem:** Implementation differs from what you specified. **Solution:** 1. Review `specs/requirements.md` for clarity 2. Make requirements more specific using EARS format 3. Review `specs/design.md` to ensure it captured requirements correctly 4. Regenerate design and code after fixing requirements ### Incomplete Code Generation **Problem:** Not all components/files were generated. **Solution:** 1. Check `specs/design.md` includes all necessary components 2. Add missing components to design document 3. Re-run `generate-code-from-design` ## Advanced Usage ### Multi-Module Projects For larger projects, create separate requirement documents: ``` specs/ ├── requirements-auth.md ├── requirements-api.md ├── requirements-ui.md ├── design-auth.md ├── design-api.md └── design-ui.md ``` Then run the prompts for each module separately. ### Integration with CI/CD Keep spec files in version control to: - Track requirement changes over time - Review design decisions during code review - Ensure implementation matches approved designs ### Documentation Generation The spec files serve as excellent documentation: - `requirements.md` → User stories / Product requirements - `design.md` → Technical documentation / Architecture decision records ## Examples by Project Type ### REST API Project **Requirements Input:** ``` A RESTful API for task management with CRUD operations, user authentication via JWT, pagination, filtering, sorting, rate limiting, and OpenAPI documentation
GitHubで見る
この SKILL.md は非常に大きいため、SkillsMP では最初のセクションだけを表示しています。 GitHubで見る