streamable-httpupdated 2mo ago
Open-source AI kanban for side projects. Plan with AI, manage a board in the browser, and (optionally) drive the same board from Cursor or Claude via MCP.
What can you do with Kanban AI?
Kanban AI
Open-source AI kanban for side projects. Plan with AI, manage a board in the browser, and (optionally) drive the same board from Cursor or Claude via MCP.
Try the hosted app: kanbanai.dev Β· Docs: kanbanai.dev/docs Β· Release updates: kanbanai.dev/docs/release-updates
Most people cloning this repo want the local app. That path is first below.
Run locally (recommended)
No Supabase account, no sign-in. One SQLite database under .local/ (gitignored). Vite serves the UI; a small local API on port 3000 handles data and OpenAI.
Requirements: Node.js 18+, npm, and an OpenAI API key for AI features.
git clone https://github.com/orholam/kanban_ai.git
cd kanban_ai/frontend
npm install
cp env.local.example .env.local
Edit .env.local:
VITE_LOCAL_MODE=true
OPENAI_API_KEY=sk-...
Do not prefix the OpenAI key with VITE_ β that would expose it in the browser.
npm run dev:local
Open http://localhost:5173.
What works in local mode
| Feature | Local |
|---|---|
| Kanban board, sprints, tasks, comments | Yes |
| AI project builder (chat + live workspace) + board assistant | Yes (needs OPENAI_API_KEY) |
| Project members (invite by email) | Yes β invite collaborator@dev.invalid to try (seeded) |
| Cloud auth / account / hosted analytics / feedback | No (needs Supabase) |
Remote MCP (/api/mcp) |
No β use a hosted deploy or vercel dev with Supabase |
First run applies frontend/scripts/local-schema.sql. Vite proxies /api to the local process (frontend/vite.config.ts).
Useful scripts
| Command | What it does |
|---|---|
npm run dev:local |
Local SQLite API + Vite (default for contributors) |
npm start |
Vite only (pair with Supabase / vercel dev) |
npm run build |
Production build + static SEO prerender (unique HTML per public route; skip with SKIP_PRERENDER=1) |
npm run build:no-prerender |
Faster local production build |
Optional: Supabase (cloud auth + sync)
Use this when you want real accounts, multi-device sync, or the hosted MCP server.
- In
frontend/.env.local, setVITE_SUPABASE_URLandVITE_SUPABASE_ANON_KEY, and removeVITE_LOCAL_MODE(or set it to anything other thantrue). - Keep
OPENAI_API_KEYfor/api/openai. - From
frontend/, run two terminals:npx vercel dev --listen 3000thennpm start. UI: http://localhost:5173.
Deploy on Vercel
Set OPENAI_API_KEY (and Supabase / MCP vars below) in the Vercel project. The OpenAI key is read only on the server β never put it in VITE_* client env.
frontend/vercel.json pins "buildCommand": "npm run build". Leave it there: Vercel's Vite preset otherwise runs bare vite build and silently skips the SEO prerender, which makes every public URL serve the homepage shell and canonical. See frontend/SEO_SETUP.md. AdSense recovery work (crawlable copy, ads off docs) is logged in docs/adsense-approval-log.md.
Ads
Ads are served by TinyAdz/Apitiny via the script tag at the bottom of frontend/index.html (site id + data-test-mode). Two things are easy to break:
- Ad placements. TinyAdz auto-places inline ads by matching CSS class chains it scraped from the landing page, so any other page gets no inventory. Add
<AdSlot />(frontend/src/components/AdSlot.tsx) where an ad belongs β it renders ata-ad-containerdiv that TinyAdz fills. Currently used on blog posts and both landing variants (not on docs β seedocs/adsense-approval-log.md). - The visitor-engagement gate. TinyAdz renders nothing until it sees a window
scroll,mousemove, ortouchmove. Because every route scrolls inside a nestedoverflow-y-autoelement,windownever emitsscrollon its own, sofrontend/src/lib/nestedScrollBridge.tsre-broadcasts nested scrolls onto the window frommain.tsx. Without it, visitors who only wheel-scroll see zero ads and register zero views.
To preview demo ads locally, set data-test-mode="true" in frontend/index.html.
MCP (Cursor, Claude, other agents)
On a hosted deployment, Kanban AI exposes a remote MCP server at /api/mcp with the same board operations as the web app.
- End users: sign in β Connect AI (
/connect) β copy the generated config into Cursor or Claude Desktop. Config uses a long-lived personal MCP key (kai_β¦) so you do not need to reconnect hourly. - Operators: before Connect AI can issue
kai_β¦keys in production, applysupabase/migrations/20260714120000_mcp_api_keys.sqlon the Kanban Supabase project (mruhzlixrwsgwqaodviy). Run./scripts/apply-mcp-api-keys-migration.shfor the SQL editor link, orsupabase db pushafter linking that project. - Operators: see
docs/MCP_REGISTRY.mdand the env table below. - Discovery:
/.well-known/mcp-serverΒ· OpenAPI:/openapi/mcp.jsonΒ· AI index:/llms.txt
| Variable | Purpose |
|---|---|
SUPABASE_URL |
Same as VITE_SUPABASE_URL |
SUPABASE_ANON_KEY |
Same as VITE_SUPABASE_ANON_KEY |
SUPABASE_SERVICE_ROLE_KEY |
MCP analytics, member invites, personal MCP keys |
MCP_API_SECRET |
Shared secret for X-MCP-API-Key (also used to encrypt personal keys at rest) |
MCP_KEY_ENCRYPTION_SECRET |
Optional dedicated secret for encrypting personal MCP keys (falls back to MCP_API_SECRET / service role) |
OPENAI_API_KEY |
In-app AI (optional for MCP CRUD tools) |
Tools: list_projects, get_board, create_project, update_project, delete_project, create_task, update_task, delete_task, list_task_comments, add_task_comment, delete_task_comment.
Features
- AI project breakdown and sprint-aware task generation
- Drag-and-drop kanban with priorities, types, due dates, and comments
- Mobile-first board: status tabs + single scroll list, in-flow quick-add, drawer nav, overlay AI assistant
- In-board AI assistant (and
@kanbanreplies on task threads) - Project members (cloud) or local seeded collaborator for sharing tests
- Dark / light mode
- Optional remote MCP so coding agents manage the same board
Tech stack
React 18, TypeScript, Vite, Tailwind CSS Β· Local: SQLite API Β· Hosted: Supabase + Vercel Β· AI: OpenAI Β· MCP: mcp-handler
Project layout
frontend/
βββ api/ # Vercel serverless (OpenAI, MCP, feedback, invites)
βββ scripts/ # Local schema, prerender, etc.
βββ src/
β βββ components/
β βββ pages/
β βββ lib/
β βββ ...
βββ public/ # Static assets, llms.txt, OpenAPI, .well-known
βββ package.json
Contributing
- Fork and clone
- Use Run locally above
- Branch, commit, open a PR
Issues and ideas: GitHub Issues
License
MIT β see LICENSE.
Install
Add Kanban AI to your client. Pick the one you use.
claude mcp add --transport http kanban-ai https://kanbanai.dev/api/mcpcodex mcp add kanban-ai --url https://kanbanai.dev/api/mcp{
"mcpServers": {
"kanban-ai": {
"url": "https://kanbanai.dev/api/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"kanban-ai": {
"type": "http",
"url": "https://kanbanai.dev/api/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"kanban-ai": {
"url": "https://kanbanai.dev/api/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"kanban-ai": {
"serverUrl": "https://kanbanai.dev/api/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance16/25
- Trust6/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 53 days ago
- Has a release history
- Repository is not archived
- No licence detected
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint β no local install
Version history
| Versions | Published |
|---|---|
| 1.0.0Latest | Jul 10, 2026 |