Skip to main content
Glama

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

MonkeyPlanner

AIコーディングエージェントのためのローカルファーストなタスクメモリ。 クリック一つで承認し、あとはエージェントにお任せ。クラウド不要。テレメトリなし。永久無料、MITライセンス。

Claude Code · Claude Desktop · Cursor · Continue · その他MCP互換クライアントで動作します。

MonkeyPlanner Demo

クイックスタート

# 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

http://localhost:8080 を開いてください。組み込みのウェルカムボードが操作方法を案内します。

機能

課題とボードの管理

  • カンバンボード — ドラッグ&ドロップ、水平スクロール、フィルタリング、ソート、テーブル表示切り替え

  • 課題作成 — タイトル、Markdown本文、カスタムプロパティ

  • カスタムプロパティ — 6つの型をサポート:

    • テキスト

    • 数値

    • セレクト

    • マルチセレクト

    • 日付

    • チェックボックス

承認ゲート

  • 保留中 → 承認済み — 専用の承認エンドポイント経由(汎用的なPATCHでは実行不可)

  • 承認キュー — ボードを横断して保留中の課題を一括承認

  • 承認済み → 進行中 → 完了 — 柔軟なステータス遷移

  • 却下ステータス — 却下理由の記録

エージェント機能

  • エージェント指示フィールド — MCPエージェントが従うべき詳細な指示を提供

  • 成功基準 — チェックリストとして完了条件を管理

  • コメント — 進捗の記録と課題ごとのコミュニケーション

  • 依存関係 — 課題間のブロック関係を表現

データ可視化

  • カレンダー — 月間グリッド + 日次アクティビティ(作成、承認、完了数)

  • ダッシュボード — 統計カード + 週次アクティビティチャート

  • サイドバー — ボード一覧、課題数、最近のアイテム

ユーザーエクスペリエンス

  • グローバル検索 — Cmd+Kによるクイック検索

  • キーボードショートカット

    • h — ダッシュボードへ移動

    • a — 承認キューへ移動

    • ? — ショートカットヘルプを表示

    • Cmd+S — 保存

    • Escape — モーダル/ダイアログを閉じる

  • 折りたたみ可能なサイドバー — 画面スペースを最大化

  • ダークモード — テーマ切り替え

  • 国際化 — 韓国語、英語、日本語、中国語

自動化と統合

  • Webhook — Discord、Slack、Telegramをサポート

    • イベント: issue.created, issue.approved, issue.status_changed, issue.updated, issue.deleted, comment.created

  • リアルタイムUI同期 (SSE) — MCP/CLI経由の変更がブラウザタブに自動反映(リロード不要)

  • JSONエクスポート — すべての課題データのエクスポート

  • 右クリックコンテキストメニュー — クイックアクション

  • 課題テンプレート — ボードごとのlocalStorage永続化

MCPサーバー (AIエージェント統合)

AIエージェント自動化のための13個のツール:

  1. list_boards — 全ボードの一覧表示

  2. list_issues — 課題のクエリ(boardId、ステータスでフィルタリング)

  3. get_issue — 指示、基準、コメントを含む課題の詳細取得

  4. create_issue — 新規課題の作成

  5. approve_issue — 承認: 保留中 → 承認済み

  6. claim_issue — 引き受け: 承認済み → 進行中

  7. submit_qa — QA提出: 進行中 → QA

  8. complete_issue — 完了: QA → 完了(オプションでコメント)

  9. reject_issue — 却下: QA → 進行中(必須の理由付き)

  10. add_comment — 課題へのコメント追加

  11. update_criteria — 成功基準のチェック/チェック解除

  12. search_issues — タイトルによる課題検索

  13. get_version — MCPサーバーバージョンの取得(診断用)

技術スタック

バックエンド

  • 言語: Go 1.26

  • ルーター: chi/v5

  • データベース: SQLite / PostgreSQL (設定可能)

  • マイグレーション: goose/v3

  • 埋め込みファイル: embed.FS (単一バイナリデプロイ)

フロントエンド

  • フレームワーク: React 18

  • 言語: TypeScript

  • バンドラー: Vite 6

  • CSS: Tailwind CSS

  • 状態管理: React Query (TanStack)

  • ドラッグ&ドロップ: @dnd-kit/core, @dnd-kit/sortable

  • アイコン: lucide-react

  • チャート: recharts

  • i18n: react-i18next

  • Markdown: react-markdown + rehype-sanitize

MCP

  • プロトコル: JSON-RPC 2.0 over stdio

  • ターゲット: Claude Code, Claude Desktop

はじめに

要件

  • Go 1.26 以降

  • Node.js 18 以降

  • npm または yarn

インストールと実行

1. クローンと初期化

git clone https://github.com/kjm99d/MonkeyPlanner.git
cd monkey-planner
make init

2. 本番ビルド (単一バイナリ)

make build
./bin/monkey-planner

サーバーは http://localhost:8080 で実行され、フロントエンドが埋め込まれます。

3. 開発モード (別々のプロセス)

ターミナル 1 — バックエンド:

make run-backend

ターミナル 2 — フロントエンド (Vite開発サーバー, :5173):

make run-frontend

フロントエンドは /api リクエストを自動的に :8080 にプロキシします。

環境変数

# 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サーバーの設定

推奨: 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

フラグ: --dry-run でプレビュー、--scope user でグローバル設定 (~/.mcp.json)、--force で上書き、--base-url <url> でデフォルト以外のサーバーを指定。

設定後にクライアントを再起動して設定を再読み込みしてください。

手動設定

Claude Code (.mcp.json)、Claude Desktop (OSネイティブ設定)、Cursor (.cursor/mcp.json) で同様に動作します:

{
  "mcpServers": {
    "monkey-planner": {
      "command": "/path/to/monkey-planner",
      "args": ["mcp"],
      "env": {
        "MP_BASE_URL": "http://localhost:8080"
      }
    }
  }
}

バイナリはHTTPサーバーに到達できる必要があります (MP_BASE_URL で設定)。同じマシンで実行する場合はデフォルトのままで構いません。

MCPツール使用例

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()

ワークフロー — 実際の使用シナリオ

以下は、言語切り替えバグを修正する実際のワークフローです。人間とAIエージェントがMonkeyPlannerを通じてどのように協力するかを示しています。

ステータスフロー

Pending → Approved → InProgress → QA → Done
                         ↑              │ (reject with reason)
                         └──────────────┘

ステップバイステップ

1. 課題作成 — 人間がバグを発見し、AIに登録を依頼

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. 承認 — 人間がレビューして承認

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

3. 作業開始 — AIが課題を引き受け、コーディングを開始

AI:    claim_issue(issueId)  →  status: InProgress
       - Reads code, identifies root cause
       - Implements fix, runs tests
       - Commits changes

4. QA提出 — AIが完了し、レビューのために提出

AI:    submit_qa(issueId, comment: "commit abc1234 — fixed click handler")
       →  status: QA
       add_comment(issueId, "Commit info: ...")

5. レビュー — 人間が修正をテスト

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. フィードバックループ — コメントを通じたコミュニケーション

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 ✓

主なポイント

  • 人間がゲートを制御: 承認、QA合格/却下、完了

  • AIが作業を実行: コード分析、実装、テスト、コミット

  • コメントがコミュニケーションチャネル: 双方が add_comment を使用してフィードバックを交換

  • QAループが早すぎる完了を防止: 課題は完了前に人間のレビューを通過する必要がある

APIリファレンス

OpenAPI 3.0仕様: backend/docs/swagger.yaml

主要エンドポイント

ボード

GET    /api/boards                  # List boards
POST   /api/boards                  # Create board
PATCH  /api/boards/{id}             # Update board
DELETE /api/boards/{id}             # Delete board

課題

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)

コメント

GET    /api/issues/{issueId}/comments    # List comments
POST   /api/issues/{issueId}/comments    # Add comment
DELETE /api/comments/{commentId}         # Delete comment

プロパティ (カスタム属性)

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

Webhook

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

カレンダー

GET /api/calendar           # Monthly stats (year, month required)
GET /api/calendar/day       # Daily issue list (date required)

スキーマの詳細は backend/docs/swagger.yaml を参照してください。

プロジェクト構造

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)

テスト

バックエンドテスト

make test-backend

フロントエンドテスト

make test-frontend

アクセシビリティテスト

make test-a11y

すべてのテスト

make test

一般的なコマンド

# 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

ステータス遷移ルール

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

ライセンス

MIT

貢献

Issueやプルリクエストを歓迎します。

お問い合わせ

プロジェクトに関する質問やフィードバックは、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