A lightweight, headless project management system built with Go, featuring REST APIs and MCP (Model Context Protocol) support for AI integration through a unified HTTP server.
- Project Management: Create, read, update, and delete projects
- Task Management: Hierarchical task structure with subtasks
- Comments: Add comments to tasks for collaboration
- File Attachments: Upload and manage file attachments for tasks
- Labels: Organize tasks with customizable labels
- MCP Integration: AI-powered project management through Model Context Protocol
- SQLite Database: Lightweight, file-based database for easy deployment
- File System Storage: Organized file storage for attachments
- Backend: Go with Gin web framework
- Database: SQLite for persistent storage
- Storage: Filesystem-based attachment storage
- API: RESTful endpoints for all operations
- MCP Server: JSON-RPC based Model Context Protocol server
# Clone the repository
git clone https://github.com/headless-pm/headless-project-management.git
cd headless-project-management
# Install Task runner (if not already installed)
# macOS: brew install go-task
# Linux: sh -c "$(curl -sL https://taskfile.dev/install.sh)"
# Build the server
task build# Install dependencies
go mod download
# Build the server
go build -o bin/server cmd/server/main.goThe application is configured using environment variables. Copy .env.example to .env:
cp .env.example .envKey environment variables:
SERVER_HOST: Server host (default: localhost)SERVER_PORT: Server port (default: 8080)DATABASE_DIR: Database directory (default: ./data)UPLOAD_DIR: Upload directory (default: ./data/uploads)MCP_ENABLED: Enable MCP server (default: true)ADMIN_API_TOKEN: Admin token for creating API tokens
# Run in production mode
task run
# Run in development mode
task dev
# List all available tasks
task --list./bin/server# Build Docker image
task docker:build
# Run Docker container
task docker:runThe unified server will start on http://localhost:8080 and provides:
- REST API endpoints at
/api - MCP endpoints at
/api/mcp - Health check at
/health
GET /api/mcp/tools- List available MCP toolsPOST /api/mcp/tools/call- Execute an MCP tool
POST /api/projects- Create a new projectGET /api/projects- List all projectsGET /api/projects/:id- Get project detailsPUT /api/projects/:id- Update projectDELETE /api/projects/:id- Delete project
POST /api/tasks- Create a new taskGET /api/tasks- List all tasksGET /api/tasks/:id- Get task detailsPUT /api/tasks/:id- Update taskDELETE /api/tasks/:id- Delete taskPOST /api/tasks/:id/comments- Add comment to taskPOST /api/tasks/:id/attachments- Upload attachment to task
GET /health- Check server health
The MCP HTTP endpoints provide the following tools for AI assistants:
create_project- Create a new projectlist_projects- List all projects with optional status filterget_project- Get project details by IDcreate_task- Create a new task in a projectlist_tasks- List tasks with optional filtersupdate_task_status- Update the status of a taskadd_comment- Add a comment to a task
├── cmd/
│ └── server/ # Unified server entry point
├── internal/
│ ├── api/ # HTTP handlers and routes
│ ├── models/ # Data models
│ ├── database/ # Database layer
│ ├── storage/ # File storage
│ └── mcp/ # MCP server implementation
├── pkg/
│ └── config/ # Configuration management
├── data/
│ ├── db/ # SQLite database files
│ └── uploads/ # File attachments
├── migrations/ # Database migrations
├── Taskfile.yml # Task automation
├── Dockerfile # Container configuration
└── .env.example # Example environment variables
# Run all tests
task test
# Run tests with coverage
task test:coverage
# Test API endpoints
task api:test# Using Task
task build
# Manual build with optimizations
go build -ldflags="-s -w" -o bin/server cmd/server/main.go
# Docker build
task docker:buildMIT