MonkeyPlanner
MonkeyPlanner
Local-first Aufgabenverwaltung für Ihre KI-Coding-Agenten. Mit einem Klick genehmigen; Ihre Agenten erledigen den Rest. Keine Cloud. Keine Telemetrie. Für immer kostenlos, für immer MIT.
Funktioniert mit Claude Code · Claude Desktop · Cursor · Continue · jedem MCP-kompatiblen Client.

Schnellstart
# Docker (recommended)
docker run -p 8080:8080 -v $(pwd)/data:/data ghcr.io/kjm99d/monkeyplanner:latest
# then wire up your agent
monkey-planner mcp install --for claude-code # or --for cursor / --for claude-desktopÖffnen Sie http://localhost:8080 — das integrierte Willkommens-Board führt Sie durch den Rest.
Funktionen
Issue- & Board-Verwaltung
Kanban-Board — Drag & Drop, horizontales Scrollen, Filtern, Sortieren und Umschalten der Tabellenansicht
Issue-Erstellung — Titel, Markdown-Inhalt und benutzerdefinierte Eigenschaften
Benutzerdefinierte Eigenschaften — Sechs unterstützte Typen:
Text
Zahl
Auswahl (Select)
Mehrfachauswahl (Multi-select)
Datum
Kontrollkästchen (Checkbox)
Genehmigungs-Gate
Ausstehend → Genehmigt über einen dedizierten Genehmigungs-Endpunkt (nicht über generisches PATCH möglich)
Genehmigungswarteschlange — Massengenehmigung aller ausstehenden Issues über alle Boards hinweg
Genehmigt → In Bearbeitung → Erledigt — Flexible Statusübergänge
Status „Abgelehnt“ — Protokollierung eines Ablehnungsgrundes
Agenten-Funktionen
Feld für Agenten-Anweisungen — Geben Sie detaillierte Anweisungen für MCP-Agenten
Erfolgskriterien — Verwalten Sie Abschlussbedingungen als Checkliste
Kommentare — Protokollieren Sie den Fortschritt und kommunizieren Sie pro Issue
Abhängigkeiten — Definieren Sie blockierende Beziehungen zwischen Issues
Datenvisualisierung
Kalender — Monatsraster + tägliche Aktivität (Anzahl der erstellten, genehmigten und abgeschlossenen Issues)
Dashboard — Statistik-Karten + wöchentliches Aktivitätsdiagramm
Seitenleiste — Board-Liste, Issue-Anzahl und kürzlich bearbeitete Elemente
Benutzererfahrung
Globale Suche — Schnelle Suche mit Cmd+K
Tastaturkürzel
h— Zum Dashboarda— Zur Genehmigungswarteschlange?— Hilfe zu Tastaturkürzeln anzeigenCmd+S— SpeichernEscape— Modal/Dialog schließen
Einklappbare Seitenleiste — Maximierung des Bildschirmplatzes
Dunkelmodus — Theme-Umschalter
Internationalisierung — Koreanisch, Englisch, Japanisch und Chinesisch
Automatisierung & Integrationen
Webhooks — Unterstützung für Discord, Slack und Telegram
Ereignisse:
issue.created,issue.approved,issue.status_changed,issue.updated,issue.deleted,comment.created
Echtzeit-UI-Synchronisierung (SSE) — Änderungen via MCP/CLI werden automatisch in offenen Browser-Tabs reflektiert, kein Neuladen erforderlich
JSON-Export — Export aller Issue-Daten
Rechtsklick-Kontextmenü — Schnelle Aktionen
Issue-Vorlagen — localStorage-Persistenz pro Board
MCP-Server (KI-Agenten-Integration)
Dreizehn Tools für die Automatisierung durch KI-Agenten:
list_boards— Alle Boards auflistenlist_issues— Issues abfragen (filtern nach boardId, Status)get_issue— Issue-Details inklusive Anweisungen, Kriterien und Kommentarencreate_issue— Ein neues Issue erstellenapprove_issue— Genehmigen: Ausstehend → Genehmigtclaim_issue— Übernehmen: Genehmigt → In Bearbeitungsubmit_qa— Zur QA einreichen: In Bearbeitung → QAcomplete_issue— Abschließen: QA → Erledigt (optionaler Kommentar)reject_issue— Ablehnen: QA → In Bearbeitung mit erforderlichem Grundadd_comment— Einen Kommentar zu einem Issue hinzufügenupdate_criteria— Ein Erfolgskriterium abhaken oder abwählensearch_issues— Issues nach Titel suchenget_version— MCP-Server-Version abrufen (für Diagnosen)
Tech-Stack
Backend
Sprache: Go 1.26
Router: chi/v5
Datenbank: SQLite / PostgreSQL (konfigurierbar)
Migrationen: goose/v3
Eingebettete Dateien: embed.FS (Deployment als einzelne Binary)
Frontend
Framework: React 18
Sprache: TypeScript
Bundler: Vite 6
CSS: Tailwind CSS
State-Management: React Query (TanStack)
Drag and Drop: @dnd-kit/core, @dnd-kit/sortable
Icons: lucide-react
Diagramme: recharts
i18n: react-i18next
Markdown: react-markdown + rehype-sanitize
MCP
Protokoll: JSON-RPC 2.0 über stdio
Ziele: Claude Code, Claude Desktop
Erste Schritte
Voraussetzungen
Go 1.26 oder neuer
Node.js 18 oder neuer
npm oder yarn
Installation & Ausführung
1. Klonen und initialisieren
git clone https://github.com/kjm99d/MonkeyPlanner.git
cd monkey-planner
make init2. Production-Build (einzelne Binary)
make build
./bin/monkey-plannerDer Server läuft unter http://localhost:8080 mit eingebettetem Frontend.
3. Entwicklungsmodus (separate Prozesse)
Terminal 1 — Backend:
make run-backendTerminal 2 — Frontend (Vite Dev-Server, :5173):
make run-frontendDas Frontend leitet /api-Anfragen automatisch an :8080 weiter.
Umgebungsvariablen
# Server address (default: :8080)
export MP_ADDR=":8080"
# Database connection string
# SQLite (default: sqlite://./data/monkey.db)
export MP_DSN="sqlite://./data/monkey.db"
# PostgreSQL example
export MP_DSN="postgres://user:password@localhost:5432/monkey_planner"MCP-Server-Einrichtung
Empfohlen: Automatische Konfiguration via CLI
# Claude Code (writes .mcp.json in the current directory)
monkey-planner mcp install --for claude-code
# Claude Desktop (writes the OS-native config file)
monkey-planner mcp install --for claude-desktop
# Cursor (writes .cursor/mcp.json)
monkey-planner mcp install --for cursorFlags: --dry-run für eine Vorschau, --scope user für einen globalen Eintrag (~/.mcp.json), --force zum Überschreiben, --base-url <url> für einen nicht-standardmäßigen Server.
Starten Sie den Client danach neu, damit die Konfiguration neu eingelesen wird.
Manuelle Konfiguration
Funktioniert identisch für Claude Code (.mcp.json), Claude Desktop (OS-native Konfiguration) und Cursor (.cursor/mcp.json):
{
"mcpServers": {
"monkey-planner": {
"command": "/path/to/monkey-planner",
"args": ["mcp"],
"env": {
"MP_BASE_URL": "http://localhost:8080"
}
}
}
}Die Binary muss den HTTP-Server erreichen können (eingestellt über MP_BASE_URL). Belassen Sie es beim Standardwert, wenn beides auf derselben Maschine läuft.
Beispiele für die MCP-Tool-Nutzung
AI: List all boards
→ list_boards()
AI: Find issues related to "authentication"
→ search_issues(query="authentication")
AI: Approve the first pending issue, claim it, work on it, and submit for QA
→ approve_issue() → claim_issue() → submit_qa()Workflow — Reales Nutzungsszenario
Unten sehen Sie einen echten Workflow zur Behebung eines Fehlers im Sprachumschalter, der zeigt, wie Mensch und KI-Agent über MonkeyPlanner zusammenarbeiten.
Status-Fluss
Pending → Approved → InProgress → QA → Done
↑ │ (reject with reason)
└──────────────┘Schritt-für-Schritt
1. Issue erstellen — Mensch findet einen Fehler, bittet KI um Registrierung
Human: "The language selector dropdown doesn't appear when clicking the button. Create an issue."
AI: create_issue(boardId, title, body, instructions) → status: Pending2. Genehmigen — Mensch prüft und genehmigt
Human: (clicks Approve on the board or tells AI)
AI: approve_issue(issueId) → status: Approved3. Arbeit beginnen — KI übernimmt das Issue und beginnt mit dem Coding
AI: claim_issue(issueId) → status: InProgress
- Reads code, identifies root cause
- Implements fix, runs tests
- Commits changes4. Zur QA einreichen — KI ist fertig und reicht es zur Überprüfung ein
AI: submit_qa(issueId, comment: "commit abc1234 — fixed click handler")
→ status: QA
add_comment(issueId, "Commit info: ...")5. Überprüfung — Mensch testet den Fix
Human: Tests in browser, finds the dropdown is clipped by sidebar
→ reject_issue(issueId, reason: "Dropdown is hidden behind sidebar")
→ status: InProgress (back to step 3)
Human: Tests again after fix, everything works
→ complete_issue(issueId) → status: Done6. Feedback-Schleife — Kommunikation über Kommentare während des gesamten Prozesses
Human: add_comment("Dropdown is clipped on the left side, fix it")
AI: get_issue() → reads comment → fixes → commit → submit_qa()
Human: Tests → complete_issue() → Done ✓Wichtige Erkenntnisse
Mensch kontrolliert die Gates: Genehmigung, QA-Bestanden/Ablehnung, Abschluss
KI erledigt die Arbeit: Code-Analyse, Implementierung, Tests, Commits
Kommentare sind der Kommunikationskanal: Beide Seiten nutzen
add_comment, um Feedback auszutauschenQA-Schleife verhindert vorzeitigen Abschluss: Issues müssen die menschliche Überprüfung bestehen, bevor sie auf „Erledigt“ gesetzt werden
API-Referenz
OpenAPI 3.0 Spezifikation: backend/docs/swagger.yaml
Wichtige Endpunkte
Boards
GET /api/boards # List boards
POST /api/boards # Create board
PATCH /api/boards/{id} # Update board
DELETE /api/boards/{id} # Delete boardIssues
GET /api/issues # List issues (filter: boardId, status, parentId)
POST /api/issues # Create issue
GET /api/issues/{id} # Issue detail + child issues
PATCH /api/issues/{id} # Update issue (status, properties, title, etc.)
DELETE /api/issues/{id} # Delete issue
POST /api/issues/{id}/approve # Approve issue (Pending → Approved)Kommentare
GET /api/issues/{issueId}/comments # List comments
POST /api/issues/{issueId}/comments # Add comment
DELETE /api/comments/{commentId} # Delete commentEigenschaften (Benutzerdefinierte Attribute)
GET /api/boards/{boardId}/properties # List property definitions
POST /api/boards/{boardId}/properties # Create property
PATCH /api/boards/{boardId}/properties/{propId} # Update property
DELETE /api/boards/{boardId}/properties/{propId} # Delete propertyWebhooks
GET /api/boards/{boardId}/webhooks # List webhooks
POST /api/boards/{boardId}/webhooks # Create webhook
PATCH /api/boards/{boardId}/webhooks/{whId} # Update webhook
DELETE /api/boards/{boardId}/webhooks/{whId} # Delete webhookKalender
GET /api/calendar # Monthly stats (year, month required)
GET /api/calendar/day # Daily issue list (date required)Für vollständige Schema-Details siehe backend/docs/swagger.yaml.
Projektstruktur
monkey-planner/
├── backend/
│ ├── cmd/monkey-planner/
│ │ ├── main.go # Entry point (HTTP server)
│ │ └── mcp.go # MCP server (JSON-RPC stdio)
│ ├── internal/
│ │ ├── domain/ # Domain models (Issue, Board, etc.)
│ │ ├── service/ # Business logic
│ │ ├── storage/ # Database layer (SQLite/PostgreSQL)
│ │ ├── http/ # HTTP handlers & router
│ │ └── migrations/ # goose migration files
│ ├── web/ # Embedded frontend (embed.FS)
│ ├── docs/
│ │ └── swagger.yaml # OpenAPI 3.0 spec
│ ├── go.mod
│ └── go.sum
│
├── frontend/
│ ├── src/
│ │ ├── components/ # Reusable components
│ │ ├── features/ # Page & feature components
│ │ │ ├── home/ # Dashboard
│ │ │ ├── board/ # Board & Kanban
│ │ │ ├── issue/ # Issue detail
│ │ │ ├── calendar/ # Calendar
│ │ │ └── approval/ # Approval queue
│ │ ├── api/ # API hooks & client
│ │ ├── design/ # Tailwind tokens
│ │ ├── i18n/ # Translations (en.json, ko.json, ja.json, zh.json)
│ │ ├── App.tsx # Router
│ │ ├── index.css # Global styles
│ │ └── main.tsx
│ ├── package.json
│ ├── vite.config.ts
│ ├── tsconfig.json
│ └── tailwind.config.js
│
├── .mcp.json # Claude Code MCP config
├── Makefile # Build & dev commands
├── .githooks/ # Git hooks
└── data/ # SQLite database (default)Tests
Backend-Tests
make test-backendFrontend-Tests
make test-frontendBarrierefreiheitstests
make test-a11yAlle Tests
make testHäufige Befehle
# Initial setup after cloning
make init
# Production build
make build
# Run production server
./bin/monkey-planner
# Development mode
make run-backend # Terminal 1
make run-frontend # Terminal 2
# Clean build artifacts
make cleanRegeln für Statusübergänge
Pending
↓ (approve endpoint)
Approved
↓ (PATCH status)
InProgress
↓ (PATCH status)
Done
Pending → Approved: POST /api/issues/{id}/approve (dedicated endpoint only)
Approved ↔ InProgress ↔ Done: Free transitions via PATCH
Pending: Cannot be re-entered from other statuses
Rejected: Separate rejection state with reason trackingLizenz
MIT
Mitwirken
Issues und Pull Requests sind willkommen.
Kontakt
Für Fragen oder Feedback zum Projekt öffnen Sie bitte ein GitHub-Issue.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kjm99d/MonkeyPlanner'
If you have feedback or need assistance with the MCP directory API, please join our Discord server