Mindpm

by umitkavala

371 downloads
Not rated
GitHub

About

Persistent project & task management for AI coding assistants. Track tasks, decisions, and notes across sessions with a real-time Kanban board. Works with Claude Code, Cursor, Cline, Copilot, and Windsurf.

Details

Author
umitkavala
Downloads
371
Categories
Productivity, Project Management, Automation, Other, AI

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name Mindpm
    Command (node, npx, python, etc.)

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

{
  "mcpServers": {
    "mindpm": {
      "command": "npx",
      "args": [
        "-y",
        "mindpm"
      ],
      "env": {
        "MINDPM_DB_PATH": "~/.mindpm/memory.db",
        "MINDPM_PORT": "3131"
      }
    }
  }
}

create_project

Create a new project to track. Use this when starting a new project or when a user mentions a project that doesn't exist yet.

list_projects

List all tracked projects. Filter by status to see active, paused, completed, or archived projects.

get_project_status

Get a full overview of a project: active tasks, recent decisions, blockers, and last session summary. Great for getting up to speed.

set_project_repo_path

Set or update the local git repository path for a project. Required for the session brief to include git activity (commits, branch, working-tree state) since the last session.

create_task

Create a new task in a project. Proactively use this when the user mentions something that needs to be done, a bug to fix, or a feature to build.

update_task

Update any field of a task. Proactively use this when a task status changes, priorities shift, or new information comes in.

list_tasks

List tasks with filters. Defaults to showing non-completed tasks for the most recent active project.

get_task

Get full detail for a specific task including sub-tasks and related notes.

get_next_tasks

Smart query: what should be worked on next? Returns highest priority non-blocked tasks for a project.

log_decision

Record a decision with reasoning and alternatives considered. Proactively use this when the user makes a technical decision, chooses between options, or settles a debate.

list_decisions

List decisions for a project. Filter by tags to find specific decisions.

add_note

Add a note to a project or task. Proactively use this when the user shares context about architecture, bugs, ideas, research findings, or any important information worth remembering. Always specify the project parameter when you know which project is active.

search_notes

Full-text search across notes for a project.

set_context

Set a key-value context pair for a project (upsert). Proactively use this when the user shares important project context like architecture decisions, config values, conventions, or constraints.

get_context

Get context by key or list all context for a project.

start_session

Begin a work session for a project. Returns the full project overview including last session's next_steps, active tasks, blockers, and recent decisions. Call this at the start of every conversation. For multi-project conversations, call once per project — after that, pass `project` explicitly on every tool call. IMPORTANT: Always show the kanban_url to the user as a clickable link so they can open the Kanban board.

end_session

End a work session with a summary of what was accomplished and what to do next. Call this when the user is done working.

get_session_brief

Read-only: what changed since the last session ended — commits, branch and working-tree state, task status changes, new blockers, decisions, and notes. Unlike start_session, this does not open a session or mark one as started.

query

Execute a read-only SQL query against the database. Only SELECT statements are allowed. Use this for custom queries not covered by other tools.

get_project_summary

High-level summary of a project: total tasks by status, recent activity, open blockers, and upcoming priorities.

get_blockers

List all blocked tasks with what's blocking them.

search

Full-text search (FTS5, ranked by relevance) across tasks, notes, and decisions for a project.

get_agent_instructions

Returns the recommended instructions for using mindpm effectively. Call this once if you are unsure how to use mindpm, or share it with the user to paste into other LLM clients.

get_delivery_metrics

DORA-inspired delivery metrics for a project: throughput, lead time, flow efficiency, and performance tier. Use to understand delivery health and trends.

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "mindpm": {
            "mindpm": {
                "command": "npx",
                "args": [
                    "-y",
                    "mindpm"
                ],
                "env": {
                    "MINDPM_DB_PATH": "~/.mindpm/memory.db",
                    "MINDPM_PORT": "3131"
                }
            }
        }
    }
}

McpServers

{
    "mindpm": {
        "command": "npx",
        "args": [
            "-y",
            "mindpm"
        ],
        "env": {
            "MINDPM_DB_PATH": "~/.mindpm/memory.db",
            "MINDPM_PORT": "3131"
        }
    }
}

Persistent project memory for LLMs.Never re-explain your project again.

mindpm is an MCP (Model Context Protocol) server that gives LLMs a SQLite-backed brain for your projects. It tracks tasks, decisions, architecture notes, and session context — so every new conversation picks up exactly where you left off.

- "Let me remind you about my project..."
- "Last time we decided to use Redis for..."
- "Where did we leave off?"

mindpm persists your project state in a local SQLite database. The LLM reads and writes to it via MCP tools. No chat history needed. No memory features needed.

You: "What should I work on next?" LLM: [queries mindpm] "Last session you finished the auth refactor. You have 3 high-priority tasks: rate limiting, API docs, and the webhook retry bug. Rate limiting is unblocked — start there."

- Tasks— status, priority, blockers, sub-tasks
- Decisions— what was decided, why, what alternatives were rejected
- Notes— architecture, bugs, ideas, research
- Context— key-value pairs (tech stack, conventions, config)
- Sessions— what was done, what's next

mindpm includes a built-in Kanban UI. When the MCP server starts, it serves a web interface athttp://localhost:3131.

Everystart_sessioncall returns a direct link to your project's board:

Kanban board: http://localhost:3131?project=<project-id>

The port is configurable via theMINDPM_PORTenvironment variable.

get_project_statustells you what you were doing. Thesession brieftells you whatchanged while you were away— commits landed, the branch moved, the working tree got dirty, tasks changed status, blockers appeared, a decision was logged.

Everystart_sessioncall embeds a brief automatically (passbrief: falseto skip it), and you can also fetch one without opening a session viaget_session_brief. It's fully deterministic — no LLM calls happen inside mindpm — and it never touches the network: everything comes from local git subprocess calls and the local SQLite database.

To get git activity in the brief, tell mindpm where your repo lives:

set_project_repo_path(project: "my-app", repo_path: "/Users/you/code/my-app")

(or passrepo_pathdirectly tocreate_project). Without a configured repo, the brief still reports the task/blocker/decision delta — it just skips the git section.

{ "project": "my-app", "degraded": false, "degraded_reasons": [], "gap": { "last_session_ended_at": "2026-08-08T22:14:03.000Z", "hours_elapsed": 11.3, "label": "overnight" }, "handoff": { "last_session_summary": "Finished the auth refactor", "next_steps": "Wire up rate limiting, then tackle the webhook retry bug" }, "git": { "available": true, "anchor": "sha", "branch_then": "feat/phase-3", "branch_now": "feat/phase-3", "branch_changed": false, "commits": [ { "sha": "a1b2c3d", "author": "umit", "date": "2026-08-09T09:02:11+00:00", "subject": "Add rate limit middleware" } ], "commit_count": 4, "commits_truncated": false, "files_changed": [ { "path": "src/middleware/rate-limit.ts", "added": 82, "deleted": 11 } ], "files_changed_truncated": false, "working_tree_dirty": true, "untracked_count": 2, "stash_count": 0 }, "tasks": { "changed": [ { "id": "a1b2c3d4", "title": "Add rate limiting", "from_status": "in_progress", "to_status": "done", "at": "2026-08-09T09:05:00.000Z" } ], "in_progress_now": [{ "id": "e5f6a7b8", "title": "Webhook retry bug" }], "next_suggested": [{ "id": "c9d0e1f2", "title": "Write API docs", "priority": "high" }] }, "blockers": [], "decisions_since": [ { "id": "9f8e7d6c", "title": "Use token bucket for rate limiting", "at": "2026-08-09T09:00:00.000Z" } ], "notes_since_count": 3 }

gap.labelissame-day(<6h),overnight(6-20h),multi-day(20h-14d), orstale(>14d) — a stale gap adds agap.hinttelling the agent to re-verify context rather than trustnext_stepsat face value.

The git delta is anchored on the exact commit sha recorded when the prior session ended (viaend_session), not on a timestamp — sha-based anchoring survives rebases and amends that would break a clock-based diff. If that sha becomes unreachable (force-push, rebase, or the repo was pruned), the brief transparently falls back to a timestamp anchor and reports it indegraded_reasons. A broken or missing repo never fails the brief — it just comes back withgit.available: falseanddegraded: true, while the task/blocker/decision delta is unaffected.

git clone https://github.com/umitkavala/mindpm.git cd mindpm npm install npm run build

All clients use the same JSON format — just different config file locations. They all share the same~/.mindpm/memory.db, so you can switch tools mid-project without losing context.

Claude Code~/.claude/claude_desktop_config.json

{ "mcpServers": { "mindpm": { "command": "mindpm", "env": { "MINDPM_DB_PATH": "~/.mindpm/memory.db", "MINDPM_PORT": "3131" } } } }
claude mcp add mindpm -e MINDPM_DB_PATH=~/.mindpm/memory.db -- npx -y mindpm

Cursor.cursor/mcp.jsonin your project root (or~/.cursor/mcp.jsonglobally)

{ "mcpServers": { "mindpm": { "command": "npx", "args": ["-y", "mindpm"], "env": { "MINDPM_DB_PATH": "~/.mindpm/memory.db" } } } }

VS Code + Copilot.vscode/mcp.jsonin your project root

{ "servers": { "mindpm": { "type": "stdio", "command": "npx", "args": ["-y", "mindpm"], "env": { "MINDPM_DB_PATH": "~/.mindpm/memory.db" } } } }

Cline— Add via VS Code settings → Cline → MCP Servers, or editcline_mcp_settings.json:

{ "mcpServers": { "mindpm": { "command": "npx", "args": ["-y", "mindpm"], "env": { "MINDPM_DB_PATH": "~/.mindpm/memory.db" } } } }

Windsurf— Settings → Cascade → MCP, using the same JSON structure as Cline above.

On first run, mindpm writes~/.mindpm/AGENT.md— a ready-to-paste system prompt that tells your LLM how to use mindpm proactively. Paste its contents into your client's custom instructions or system prompt box.

You can also call theget_agent_instructionstool at any time to retrieve the instructions.

That's it. The LLM now has access to mindpm tools. Just start talking about your projects.

┌─────────────┐ MCP ┌─────────┐ SQLite ┌──────────┐ │ Claude Code │ ◄──────────► │ mindpm │ ◄────────────► │ memory.db│ │ / Desktop │ tools │ server │ read/write │ │ └─────────────┘ └─────────┘ └──────────┘

- You start a conversation and mention your project
- The LLM callsstart_session→ gets full context
- During the conversation, it creates tasks, logs decisions, adds notes
- When you're done, it callsend_session→ saves what's next
- Next conversation: instant context, zero re-explanation

Override withMINDPM_DB_PATHorPROJECT_MEMORY_DB_PATHenvironment variable.

Database and tables are created automatically on first run.

npm install npm run build # Build with tsup npm run typecheck # Type-check without emitting npm run dev # Build in watch mode

Keep teams & agents coordinated automatically

Connect to the Taskade platform via MCP. Access tasks, projects, workflows, and AI agents in real-time through a unified workspace and API.

The Outcome Backcasting MCP is a strategic planning tool that helps you work backwards from a desired future outcome to identify the specific steps, resources, and dependencies needed to achieve your goals. Unlike traditional forward planning, backcasting starts with your end goal and creates a reverse roadmap to get there.

Interact with the ClickUp API to manage tasks, lists, and spaces, automating project planning and workflows.

An MCP server for interacting with the Jira API to manage projects, issues, and workflows.

A Python monorepo for AI-powered project management and productivity servers, utilizing the Claude API.

Manage complex AI agent workflows with a Kanban-based task management system.

Integrate AI applications with the Rework platform to manage projects, tasks, workflows, and jobs.

Interact with task, doc, and project data in Dart, an AI-native project management tool

Perform queries and entity operations in your Fibery workspace.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.