Query Markup Documents - On-device hybrid search for markdown files with BM25, vector search, and LLM reranking
Purmemo is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
MCP server for pūrmemo - AI conversation memory that works everywhere. Save and recall conversations across Claude Desktop, Cursor, and other MCP-compatible platforms. Intelligent context extraction, smart titles, living documents.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user purmemo-mcp '--' npx -y purmemo-mcp
# 2 — ask your agent for something these tools do
# snapshot_sources, save_snapshot, get_snapshot and 26 more
Purmemo costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Purmemo as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user purmemo-mcp '--' npx -y purmemo-mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
29 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Fetch citation bundle + conflict detection for a topic so YOU can synthesize the snapshot in-context. Step 1 of the MCP snapshot path (ADR-032 Amendment A). WHEN TO USE: When you want to generate a snapshot from inside Claude. Returns source memories + conflicts so you synthesize, then call…
No parameter schema on file.
Persist your synthesized snapshot content as a draft. Step 3 of the MCP snapshot path (ADR-032 Amendment A). Call this after synthesizing from snapshot_sources(). Backend derives evidence_tier from cited_ids — not caller-controlled. Runs claim verification on your content.
No parameter schema on file.
Read an existing canonical snapshot into context. Fast — no LLM calls. WHEN TO USE: When you need the current canonical state document for a topic (e.g. architecture, auth, glossary) without generating a new one.
No parameter schema on file.
Promote a draft snapshot to canonical. Supersedes the prior canonical for this topic. If gate blockers exist (conflicts detected, tier downgrade, or first canonical), returns them for review. Pass force: true to approve and promote anyway.
No parameter schema on file.
TIMELINE OF A THING: what facts about an entity (a project, machine, person, product) were TRUE and then REPLACED by newer facts, with dates — plus any open contradictions. Served by the purmemo-next ledger, which knows when a fact became true and when it stopped; plain search cannot answer this.…
No parameter schema on file.
Browse the memory map. With NO arguments, returns the user's PROJECT -> THEME hierarchy with member counts (the "galaxy" as text) — use this to show "what projects/topics do I have?". With cluster="<title or UUID>", OPENS that cluster and lists its member memories (a project title pulls every…
No parameter schema on file.
List artifacts linked to a parent conversation. Pairs with save_artifact.
No parameter schema on file.
List error investigation results (admin). Pairs with save_investigation_result.
No parameter schema on file.
Save a single artifact (research report, table, framework, spec, code) linked to a conversation memory. WHEN TO USE: After calling save_conversation for a session that produced artifacts. Call this ONCE PER ARTIFACT with the full verbatim content — do NOT summarize or truncate. WHY: Artifacts…
No parameter schema on file.
Persist a commitment-shaped artifact (PRD, ADR, spec, OKR) as a memory with intent='commitment'. WHEN TO USE: This is the write primitive for /prd, /decide, /spec, /commit slash commands. Call after the artifact is fully drafted in the conversation. Send the COMPLETE artifact verbatim — do NOT…
No parameter schema on file.
Generate a state-shaped artifact for a topic from your saved memories. WHEN TO USE: When you want a current-state document derived from saved conversations — architecture map, glossary, runbook, manifesto, project state. The slash command /snapshot calls this. HOW IT WORKS: 1. Queries memories…
No parameter schema on file.
Run a Purmemo workflow — structured, memory-powered processes for product, engineering, business, and operations tasks. Your relevant memories and identity are automatically loaded to personalize every workflow. WHEN TO USE THIS TOOL: - User wants to write a PRD, debug an issue, plan a sprint,…
No parameter schema on file.
List all available Purmemo workflows — structured, memory-powered processes you can run. WHEN TO USE THIS TOOL: - User asks "what can you help me with?" or "what workflows do you have?" - User wants to see available capabilities before choosing one - User says "show me what's available" or "list…
No parameter schema on file.
Set the visibility of a memory you own. VISIBILITY LEVELS: - private: Only you can see it (default) - unlisted: Anyone with the direct link can view it - public: Discoverable in the community tab by all users WHEN TO USE: - User says "share this memory" or "make this public" - User wants to…
No parameter schema on file.
Search public memories shared by all Purmemo users. This is the community knowledge base. WHEN TO USE: - User asks "what have other people saved about X?" - User wants to explore community knowledge - User asks to search public/shared memories - Looking for solutions others have found DOES NOT…
No parameter schema on file.
Retrieve the FULL content of a public or unlisted memory by ID. WHEN TO USE: - After recall_public returns a preview and you need the complete content - When a user wants to read or implement from a shared community memory - When you have a public memory ID and need the full text This is the…
No parameter schema on file.
Report a public memory for inappropriate content. WHEN TO USE: - User encounters spam, misleading, or inappropriate public content - User wants to flag content that contains personal information REASONS: spam, inappropriate, misleading, personal_info, other After 3 reports, a memory is…
No parameter schema on file.
Fetch open and acknowledged errors waiting for AI investigation. Returns errors with status 'open' or 'acknowledged' — all errors needing attention. Each error includes recent_occurrences[] with per-request context (user_id, path, method) for investigation. USAGE: - Call this…
No parameter schema on file.
Save AI investigation results for an error incident. Used to store investigation results for audit trail and learning from past fixes. Call this after investigating an error and proposing/deploying a fix. USAGE: - Call after completing investigation and deploying fix - Stores…
No parameter schema on file.
Generate a surgical context brief for a new AI session. Instead of re-explaining your context, the AI already knows where you left off. Uses a 5-layer compaction hierarchy to maximize signal in ~2,000 tokens: 1. Intent — What you were trying to accomplish (never cut) 2. Decisions — What was…
No parameter schema on file.
Save a test result memory for a project, linked to the current active task. Call this after running tests — pass or fail — to record the outcome. Saves a memory with category='test_result' and links it to the most recent active task. Re-running with the same test_suite name updates the existing…
No parameter schema on file.
List recent test results for a project, newest first. Pairs with save_test_result — use this to recall past test outcomes without having to query the conversational memory layer. USAGE: - Latest 50 results: get_test_results({ project_name: "polymathematics" }) - Only failures: get_test_results({…
No parameter schema on file.
Get the next pending task for a project and mark it active. Fetches the lowest-sequence pending task from the project_tasks queue, sets its status to 'active', and returns the task details plus a brief from the linked PRD memory. NOTE: project_tasks is a structured work queue — separate from…
No parameter schema on file.
Mark a project task as done and close the Jered Loop for this session. Sets status='done', records completion_summary, clears active_session_id. Returns the next pending task so you know what comes next before closing. Call this BEFORE ending a session — Jered's rule: consciously close each…
No parameter schema on file.
No parameter schema on file.
No parameter schema on file.
No parameter schema on file.
No parameter schema on file.
No parameter schema on file.
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Purmemo or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (29 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
29 of the 29 recovered tools are registered only when !_arg && _isInteractiveTTY && !_isRemoteMode is false (dist/server.js:93) — typically when a key or option is configured. They are part of the server's surface and were analysed; a server started without that configuration exposes none of the recovered tools.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
No tool is registered unconditionally · 29 only when !_arg && _isInteractiveTTY && !_isRemoteMode is false (dist/server.js:93) — typically when a key or option is configured. All 29 are in the table below and were analysed; the conditional ones are marked.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| save_artifact conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| commit conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| snapshot conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| snapshot_sources conditional | untrusted-input | untrusted-input: keyword "fetch", declares openWorldHint: true (interacts with entities outside the server) |
| save_snapshot conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| get_snapshot conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| accept_snapshot conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| recall_memories conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| what_changed conditional | no tags | |
| list_clusters conditional | untrusted-input | untrusted-input: keyword "browse" |
| get_memory_details conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| discover_related_conversations conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_user_context conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| run_workflow conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| list_workflows conditional | no tags | |
| share_memory conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| recall_public conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_public_memory conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| report_memory conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| get_acknowledged_errors conditional | untrusted-input | untrusted-input: keyword "fetch", declares openWorldHint: true (interacts with entities outside the server) |
| save_investigation_result conditional | untrusted-inputexternal-sink | untrusted-input: keyword "search web"; external-sink: declares readOnlyHint: false, openWorldHint: true |
| generate_handoff_brief conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| save_test_result conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| get_test_results conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_artifacts conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_investigations conditional | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_next_task conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| complete_task conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| save_conversation conditional | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 15.7.31. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Purmemo can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.