Skip to main content
Glama

Englisch | 한국어 | 日本語 | 中文

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.

MonkeyPlanner Demo

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 Dashboard

    • a — Zur Genehmigungswarteschlange

    • ? — Hilfe zu Tastaturkürzeln anzeigen

    • Cmd+S — Speichern

    • Escape — 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:

  1. list_boards — Alle Boards auflisten

  2. list_issues — Issues abfragen (filtern nach boardId, Status)

  3. get_issue — Issue-Details inklusive Anweisungen, Kriterien und Kommentaren

  4. create_issue — Ein neues Issue erstellen

  5. approve_issue — Genehmigen: Ausstehend → Genehmigt

  6. claim_issue — Übernehmen: Genehmigt → In Bearbeitung

  7. submit_qa — Zur QA einreichen: In Bearbeitung → QA

  8. complete_issue — Abschließen: QA → Erledigt (optionaler Kommentar)

  9. reject_issue — Ablehnen: QA → In Bearbeitung mit erforderlichem Grund

  10. add_comment — Einen Kommentar zu einem Issue hinzufügen

  11. update_criteria — Ein Erfolgskriterium abhaken oder abwählen

  12. search_issues — Issues nach Titel suchen

  13. get_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 init

2. Production-Build (einzelne Binary)

make build
./bin/monkey-planner

Der Server läuft unter http://localhost:8080 mit eingebettetem Frontend.

3. Entwicklungsmodus (separate Prozesse)

Terminal 1 — Backend:

make run-backend

Terminal 2 — Frontend (Vite Dev-Server, :5173):

make run-frontend

Das 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 cursor

Flags: --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: Pending

2. Genehmigen — Mensch prüft und genehmigt

Human: (clicks Approve on the board or tells AI)
AI:    approve_issue(issueId)  →  status: Approved

3. 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 changes

4. 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: Done

6. 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 auszutauschen

  • QA-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 board

Issues

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 comment

Eigenschaften (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 property

Webhooks

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 webhook

Kalender

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-backend

Frontend-Tests

make test-frontend

Barrierefreiheitstests

make test-a11y

Alle Tests

make test

Hä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 clean

Regeln 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 tracking

Lizenz

MIT

Mitwirken

Issues und Pull Requests sind willkommen.

Kontakt

Für Fragen oder Feedback zum Projekt öffnen Sie bitte ein GitHub-Issue.

-
security - not tested
A
license - permissive license
-
quality - not tested

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