A specification-driven development tool that combines a Next.js web application with an MCP (Model Context Protocol) server. Manage software development through a hierarchical structure of Epics → Stories → Tasks.
- Node.js 18+
- PostgreSQL database
- npm or yarn
npm installCreate a .env.local file in the root directory:
DATABASE_URL=postgresql://user:password@host:port/databaseGenerate and apply the database schema:
# Generate migration files
npm run db:generate
# Apply migrations to database
npm run db:migrate
# Or use push for development (faster, skips migration files)
npm run db:pushNext.js Web App:
npm run dev # Development server (http://localhost:3000)
npm run build # Production build
npm run start # Start production serverMCP Server:
npm run dev:mcp # Development with auto-reload
npm run build:mcp # Compile to dist/mcp-server.js
npm run start:mcp # Run compiled servernpm run db:generate # Generate new migration files from schema changes
npm run db:migrate # Apply pending migrations
npm run db:push # Push schema changes directly (dev mode)
npm run db:studio # Open Drizzle Studio UI for database inspection- Edit
lib/db/schema.ts - Run
npm run db:generateto create migration files - Review the generated migration in
drizzle/directory - Run
npm run db:migrateto apply changes
Tip: Use
npm run db:pushduring development for faster iteration without generating migration files.
spec-this/
├── app/ # Next.js app directory (UI)
│ ├── components/ # React components
│ ├── epics/[id]/ # Epic detail pages
│ ├── stories/[id]/ # Story detail pages
│ └── api/ # API routes
├── lib/
│ ├── db/
│ │ ├── schema.ts # Drizzle database schema
│ │ └── index.ts # Database connection
│ └── mcp/
│ └── tools/ # MCP tool implementations
├── mcp-server.ts # MCP server entry point
├── drizzle/ # Database migrations
└── drizzle.config.ts # Drizzle ORM configuration
The MCP server exposes tools for managing specifications:
read_repos- Fetch repositoriesread_epics- Fetch epics with filteringupsert_epic- Create/update epicsread_stories- Fetch stories with filteringupsert_story- Create/update storiesread_tasks- Fetch tasks with filteringupsert_task- Create/update tasks
For detailed architecture, best practices, and development guidelines, see CLAUDE.md.
- Framework: Next.js 15.5.4 with Turbopack
- Language: TypeScript 5
- Database: PostgreSQL via Drizzle ORM
- MCP SDK: @modelcontextprotocol/sdk v1.19.1
- Styling: Tailwind CSS v4
MIT