← Back to search

io.github.kaaustubh/project-memory-mcp

kaaustubh Scanned 14d ago

Local MCP server giving AI coding agents (Claude Code, Cursor) a shared, persistent memory of your projects and the bugs you've faced.

? Not scanned yet

Versions

1.4.1latest
first seen Jun 30, 2026

Tools 16

list_projects
annotations: none low

List all projects under ~/code that have an AGENTS.md memory file.

get_project
annotations: none low

Return the full AGENTS.md memory for one project.

project string
search_memory
annotations: none low

Case-insensitive search across every project's AGENTS.md. Returns matching lines with their project.

query string
append_decision
annotations: none low

Append a dated bullet under '## Decisions' in a project's AGENTS.md (auto-loaded memory). Call this PROACTIVELY right after a non-obvious or architectural decision is made — don't wait to be asked — then tell the user in one line what you recorded. For concise, durable decisions and WHY; not bugs (use log_issue) and not trivia.

text string project string
append_learning
annotations: none low

Append a dated bullet under '## Learnings' in a project's AGENTS.md (auto-loaded memory). Call this PROACTIVELY when you discover a durable gotcha/workaround future sessions should know — don't wait to be asked — then tell the user what you recorded. For a specific bug use log_issue instead.

text string project string
remember_preference
annotations: none low

Append a dated bullet under '## Preferences' in an AGENTS.md (auto-loaded memory), turning a user correction or stated habit into a remembered pattern that comes back next session. Call this PROACTIVELY when the user corrects HOW you work or states a durable preference — code style, workflow habit, a 'from now on' rule (e.g. 'never add a co-author trailer', 'always run the typecheck before committing') — don't wait to be asked, then tell the user in one line what you saved. Use scope 'global' (root AGENTS.md, applies to EVERY project) for a cross-project habit; scope 'project' for a preference about one project. This is about agent behaviour/preferences; for a project DECISION use append_decision, for a bug use log_issue.

text string scope enum project string
log_issue
annotations: none low

Append a structured bug/issue to <project>/issues.jsonl (high-volume memory, NOT auto-loaded). Call this PROACTIVELY whenever you resolve (or get blocked by) a non-trivial bug — don't wait to be asked — then tell the user in one line what you logged. Skip trivial/transient issues.

fix string tags array cause string files array status enum project string symptom string
search_issues
annotations: none low

Search bug/issue history across all projects (or one) over the TEXT FIELDS only (symptom, cause, fix, id, tags) — not the raw JSON, so you won't get false hits on field names like 'fix' or 'status'. Optionally filter by tags (issue must carry all of them). Either query or tags may be given. Call this PROACTIVELY when the user reports an error or you hit a familiar-looking failure, BEFORE debugging from scratch, to check for a prior fix ('have we hit this before?').

tags array query string project string
list_open_issues
annotations: none low

List unresolved issues across all projects (or one).

project string
resolve_issue
annotations: none low

Mark an issue resolved and record the fix.

id string fix string
start_initiative
annotations: none low

Start tracking a named, multi-session effort under a codename — a plan plus an evolving todo list stored in <project>/initiatives/<slug>.md, with a pointer kept in the project's auto-loaded AGENTS.md under '## Active Initiatives' so a BRAND NEW session sees it's in flight without calling any tool. Call this PROACTIVELY when the user names a multi-step effort with a codename or asks you to 'track this as X' / 'remember this under the name X' — don't wait to be asked. If the codename already exists, returns the existing initiative unchanged (safe to call again on a resumed session) rather than overwriting progress.

plan string todos array project string codename string
get_initiative
annotations: none low

Fetch the full plan/todos/progress log for one named initiative by codename (case/spacing-insensitive — 'hash gate' matches 'HashGate'). Call this PROACTIVELY at the start of a session when the user references resuming a specific named effort. If the codename doesn't resolve, lists that project's known initiatives instead of erroring blindly.

project string codename string
list_initiatives
annotations: none low

List named initiatives (codename, status, last updated) across one project or — if project is omitted — ALL projects, most-recently-updated first. Call this PROACTIVELY when the user references resuming past work ('continue X', 'where were we on Y') WITHOUT stating an exact codename or which project, instead of guessing or searching blindly.

status enum project string
update_initiative
annotations: none low

Update a named initiative: append a dated progress-log line, add new todos, check off completed todos (matched by case-insensitive substring against existing unchecked items), and/or change status. Call this PROACTIVELY as todos complete or real progress happens — not just at session end — then tell the user in one line what you recorded. Setting status to 'done' removes its pointer from AGENTS.md's Active Initiatives (the file itself is kept as history, still reachable via get_initiative/list_initiatives).

status enum project string codename string progress string add_todos array complete_todos array
sync_registry
annotations: none low

Reconcile the root AGENTS.md projects table with what's actually on disk: list projects that have an AGENTS.md but no table row (and add a stub row for each), flag rows whose directory no longer exists, and show live open-issue counts. Automates the 'new project → add a row' step so the cross-project index never silently drifts. Hand-curated columns (Stack, Status, descriptions) are preserved — stubs use the project's '## What this is' line and leave Stack/Status as '?'. Set apply=false to report drift without writing.

apply boolean
find_by_file
annotations: none low

Given a file path or filename fragment, return the issues (matched via their 'files' field) and the decisions/learnings (matched via AGENTS.md bullets that mention it) that touch that file — i.e. 'why is this code the way it is?' answered from memory. Searches all projects unless one is given. Useful when you land on confusing code and want the history behind it.

file string project string

Permissions 3

filesystem low
Server uses filesystem capabilities via: fs sync ops
shell high
Server uses shell capabilities via: child_process, spawn(), spawnSync()
env_vars low
Server uses env_vars capabilities via: process.env

Scan Findings 44

low
Tool 'remember_preference' has no annotations annotation_checker · 100%
low
Tool 'list_projects' has no annotations annotation_checker · 100%
low
Tool 'get_project' has no annotations annotation_checker · 100%
low
Tool 'search_memory' has no annotations annotation_checker · 100%
low
Tool 'append_decision' has no annotations annotation_checker · 100%
low
Tool 'append_learning' has no annotations annotation_checker · 100%
low
Tool 'log_issue' has no annotations annotation_checker · 100%
low
Tool 'search_issues' has no annotations annotation_checker · 100%
low
Tool 'list_open_issues' has no annotations annotation_checker · 100%
low
Tool 'resolve_issue' has no annotations annotation_checker · 100%
low
Tool 'start_initiative' has no annotations annotation_checker · 100%
low
Tool 'get_initiative' has no annotations annotation_checker · 100%
low
Tool 'list_initiatives' has no annotations annotation_checker · 100%
low
Tool 'update_initiative' has no annotations annotation_checker · 100%
low
Tool 'sync_registry' has no annotations annotation_checker · 100%
low
Tool 'find_by_file' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: @modelcontextprotocol/sdk@1.0.0 (GHSA-w48q-cv73-mx4w) dependency_analyzer · 95%
info
package.json metadata manifest_parser · 100%
info
Tool: list_projects manifest_parser · 85%
info
Tool: get_project manifest_parser · 85%
info
Tool: search_memory manifest_parser · 85%
info
Tool: append_decision manifest_parser · 85%
info
Tool: append_learning manifest_parser · 85%
info
Tool: remember_preference manifest_parser · 85%
info
Tool: log_issue manifest_parser · 85%
info
Tool: search_issues manifest_parser · 85%
info
Tool: list_open_issues manifest_parser · 85%
info
Tool: resolve_issue manifest_parser · 85%
info
Tool: start_initiative manifest_parser · 85%
info
Tool: get_initiative manifest_parser · 85%
info
Tool: list_initiatives manifest_parser · 85%
info
Tool: update_initiative manifest_parser · 85%
info
Tool: sync_registry manifest_parser · 85%
info
Tool: find_by_file manifest_parser · 85%
info
Transport: stdio manifest_parser · 90%
info
Required env vars (7) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
low
Permission: filesystem access detected permission_analyzer · 90%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Tool poisoning in 'remember_preference': Directive language: 'always' poisoning · 85%
info
SBOM generated: 169 components sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%