ProjectFlow
About
A workflow management system for AI-assisted development with MCP support, featuring flexible storage via file system or PostgreSQL.
Details
- Author
- aykay76
- Categories
- Developer Tools, Other, File Management
Jump to
Setup
Install ProjectFlow in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/aykay76/projectflow
Follow the installation instructions in the repository README, then restart your MCP client.
A workflow management system for AI-assisted development, similar to Jira or Azure DevOps. Supports both API-driven interactions and Model Context Protocol for seamless AI agent integration.
- Hierarchical task management (Epics, Stories, Subtasks)
- π NEW: Natural Language Chat Interface- Interact with ProjectFlow using conversational commands
- REST API for programmatic access
- Model Context Protocol (MCP) support for AI agents
- Web interface for human users
- Flexible storage: File system (JSON) or PostgreSQL database
- Clean, modern UI with accessibility features
- Containerized deployment
- Backend: Go 1.24
- Storage: File system (JSON) or PostgreSQL database
- Frontend: HTML templates, CSS, JavaScript
- Containerization: Docker/Podman
- Protocols: HTTP REST API + Model Context Protocol
- Go 1.24 or later
- Docker/Podman (for containerized deployment)
git clone https://github.com/aykay76/projectflow.git cd projectflow
Open your browser and navigate tohttp://localhost:16191
ProjectFlow now features an AI-powered chat interface that allows you to manage tasks and projects using natural language commands. Simply click the chat button (π¬) in the header or use the keyboard shortcutβ+/(Mac) orCtrl+/(Windows/Linux) to get started.
Create a high priority task to fix the login bug List all tasks in the PF project Mark task PF-123 as done Show me overdue tasks Create a new project called "Website Redesign"
- Open the chat interface: Click the π¬ button in the header or pressβ+/
- Type your request: Use natural language to describe what you want to do
- Get instant results: The AI will interpret your request and perform the action
For detailed chat commands and examples, see theChat Interface Guide.
The chat interface supports multiple LLM providers:
- π Ollama: Use local LLM models for privacy and offline capability
- OpenAI GPT: Use OpenAI's GPT models for natural language understanding
- Groq: Fast cloud-based LLM inference
- Anthropic Claude: Leverage Anthropic's Claude AI for conversational interactions
For the fastest setup with privacy and no API costs:
# Install Ollama brew install ollama # macOS # or curl -fsSL https://ollama.com/install.sh | sh # Linux # Start Ollama and install a model ollama serve & ollama pull llama3.2 # Configure ProjectFlow export LLM_PROVIDER=ollama export LLM_OLLAMA_MODEL=llama3.2 ./projectflow
See theOllama Quick Start Guidefor detailed setup instructions.
For cloud-based LLMs, configure your API key:
# For OpenAI export LLM_PROVIDER=openai export LLM_API_KEY=your-openai-key export LLM_MODEL=gpt-4 # For Groq export LLM_PROVIDER=groq export LLM_API_KEY=your-groq-key export LLM_MODEL=llama-3.1-8b-instant
- PORT: Server port (default: 16191)
- SHUTDOWN_TIMEOUT: Graceful shutdown timeout in seconds (default: 30)
- LOG_LEVEL: Logging level - DEBUG, INFO, WARN, ERROR (default: INFO)
- LOG_FORMAT: Log format - json or text (default: text)
- STORAGE_TYPE: Storage backend - file or postgres (default: file)
- DATA_DIR: Directory for data storage (default: ./data)
- DB_HOST: Database host (default: localhost)
- DB_PORT: Database port (default: 5432)
- DB_NAME: Database name (default: projectflow)
- DB_USER: Database user (default: projectflow)
- DB_PASSWORD: Database password (required for postgres)
- DB_SSL_MODE: SSL mode - disable, require, verify-ca, verify-full, prefer, allow (default: prefer)
- LLM_PROVIDER: LLM provider - ollama, groq, openai, disabled (default: disabled)
- LLM_API_KEY: API key for cloud LLM providers (required for groq, openai)
- LLM_BASE_URL: Custom base URL for the LLM provider (optional)
- LLM_MODEL: Model name to use (default varies by provider)
- LLM_TIMEOUT: Request timeout in seconds (default: 60)
- LLM_MAX_TOKENS: Maximum tokens per response (default: 1000)
- LLM_OLLAMA_HOST: Ollama server URL (default:http://localhost:11434)
- LLM_OLLAMA_MODEL: Ollama model name (default: llama3.2)
For detailed PostgreSQL setup, seePostgreSQL Storage Documentation.
podman run -p 16191:16191 -v $(pwd)/data:/app/data projectflow
- POST /api/chat- Send a natural language message to the chat interface
- GET /api/chat/history- Retrieve conversation history
- GET /api/llm/info- Get LLM provider information and status
- GET /api/llm/health- Check LLM provider health
- POST /api/llm/chat- Send direct messages to the LLM (bypasses ProjectFlow translation)
POST /api/chat { "message": "Create a high priority task to fix the login bug", "conversation_id": "optional-uuid" }
{ "response": "I've created task PF-123: 'Fix login bug' with high priority.", "actions_taken": ["create_task"], "task_ids": ["PF-123"], "conversation_id": "uuid", "confidence": 0.95, "intent": "create_task" }
GET /api/chat/history?conversation_id=uuid { "id": "uuid", "messages": [ { "id": "msg-uuid", "role": "user", "content": "Create a task...", "timestamp": "2025-06-22T15:17:44.334579Z" } ], "created": "2025-06-22T15:17:44.334574Z", "updated": "2025-06-22T15:17:44.334574Z" }
GET /api/llm/info { "enabled": true, "provider": "ollama", "model": "llama3.2", "status": "healthy", "timestamp": "2025-06-23T08:56:47.927Z", "metadata": { "host": "http://localhost:11434", "version": "0.1.17" } }
GET /api/llm/health { "healthy": true, "status": "healthy", "provider": "ollama", "timestamp": "2025-06-23T08:56:47.927Z", "duration_ms": 45, "suggestions": [] }
POST /api/llm/chat { "messages": [ {"role": "user", "content": "Hello!"} ], "max_tokens": 1000, "temperature": 0.7 } Response: { "response": { "choices": [ { "message": { "role": "assistant", "content": "Hello! How can I help you today?" }, "finish_reason": "stop" } ] }, "provider": "ollama", "model": "llama3.2" }
- GET /api/tasks- List all tasks
- POST /api/tasks- Create a new task
- GET /api/tasks/{id}- Get task by ID
- PUT /api/tasks/{id}- Update task
- DELETE /api/tasks/{id}- Delete task
- GET /api/hierarchy- Get tasks in hierarchical structure
{ "id": "string", "title": "string", "description": "string", "status": "string", "priority": "string", "parent_id": "string", "children": ["string"], "created_at": "timestamp", "updated_at": "timestamp" }
The/api/hierarchyendpoint returns tasks in a nested structure:
[ { "task": { "id": "string", "title": "string", "description": "string", "status": "string", "priority": "string", "type": "string", "parent_id": "string", "children": ["string"], "created_at": "timestamp", "updated_at": "timestamp" }, "child_tasks": [ { "task": { / nested task / }, "child_tasks": [ / recursively nested / ] } ] } ]
βββ cmd/server/ # Application entry point βββ internal/ β βββ handlers/ # HTTP handlers β βββ models/ # Data models β βββ storage/ # Storage implementations βββ pkg/api/ # Public API definitions βββ web/ β βββ templates/ # HTML templates β βββ static/ # CSS, JS, images βββ data/ # Local data storage βββ Dockerfile # Container definition
go build -o bin/projectflow cmd/server/main.go
ProjectFlow includes a Model Context Protocol (MCP) server that enables AI agents to interact with tasks programmatically. This allows AI assistants to create, read, update, and delete tasks as part of their workflow.
The MCP server runs on port 3001 by default.
Configure your MCP client:Use the providedmcp-config.jsonfile or configure manually:
{ "mcpServers": { "projectflow": { "command": "go", "args": ["run", "cmd/mcp-server/main.go"], "cwd": "/path/to/projectflow" } } }
β¦
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.





