{"name":"io.github.plur-ai/plur","slug":"plur-ai-plur","title":null,"description":"Open, local-first engram memory for AI agents: read, correct, delete; shared over MCP.","url":"https://mcp.market/server/plur-ai-plur","rating":null,"grade":"A","score":91,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":53,"stars":290,"forks":36,"downloads_week":891,"last_push_at":"2026-09-19T00:19:19.000Z","license":"Apache-2.0"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/plur-ai/plur","website":null,"version":"0.20.1","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@plur-ai/mcp","version":"0.20.1","transport":{"type":"stdio"}}],"tools":[{"name":"plur_admin","description":"Gateway to the … PLUR operations that are not top-level tools under the current profile (collapsed into one dispatch tool so Cursor's ~40-tool-per-workspace limit is not exhausted by PLUR alone). A plur_* name missing from tools/list means it moved HERE \\u2014 not that the MCP is unavailable. Calling convention: { action: \"<tool name>\", args: { ...that tool's normal arguments } } \\u2014 same argum","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_capture","description":"Append an episode to the episodic timeline \\u2014 records what happened in a session","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_doctor","description":"Diagnose the PLUR ENGINE (embedder, hybrid search, remote-store auth) \\u2014 not hook/MCP wiring. Reports whether the embedding model loaded, whether hybrid search is fully operational, and \\u2014 for any configured enterprise/remote store \\u2014 whether its auth is valid (probes /api/v1/me and decodes token expiry), so a dead or soon-to-expire token surfaces instead of hiding behind a \"healthy\" r","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_episode_to_engram","description":"Promote an episode to a persistent episodic engram \\u2014 useful when a session event deserves long-term memory","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_extract_meta","description":"Extract meta-engrams from stored engrams using the 6-stage pipeline (structural analysis \\u2192 clustering \\u2192 alignment \\u2192 formulation \\u2192 hierarchy). Requires an LLM API endpoint.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_feedback","description":"Rate an engram's usefulness \\u2014 trains injection relevance over time. Supports single or batch mode.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_forget","description":"Retire an engram by ID or search term \\u2014 marks it as no longer active without deleting history","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_history","description":"View the event-sourced history of an engram or all recent history \\u2014 shows creation, updates, feedback, and evolution events","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_ingest","description":"Extract engram candidates from content using pattern matching \\u2014 optionally auto-save them","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_inject","description":"Get a scored context injection for a task \\u2014 returns directives and considerations within token budget","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_inject_hybrid","description":"Hybrid injection \\u2014 BM25 + embeddings for better context selection. Falls back to BM25 if embeddings unavailable. Best default for injection.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_learn","description":"Create an engram \\u2014 record a reusable learning, preference, or correction. A write is never suppressed by similarity: exact content-hash duplicates NOOP, and anything merely SIMILAR is written and reported back in `dedup.near_duplicates` (closest existing engrams, their cosine scores, and a preview of each neighbour's own statement \\u2014 read them before moving on; that is what they are for) ","write_action":true,"price_micros":0,"input_schema":null},{"name":"plur_learn_batch","description":"Create many engrams in one call \\u2014 the batch form of plur_learn. Accepts an array of engram objects and writes them sequentially through the SAME dedup + policy pipeline as plur_learn (content-hash NOOP \\u2192 semantic recall \\u2192 LLM ADD/UPDATE/MERGE decision, or local cosine REPORTING when no LLM is configured). Exact-hash dedup also applies WITHIN the batch: a statement duplicating an ear","write_action":true,"price_micros":0,"input_schema":null},{"name":"plur_meta_engrams","description":"List existing meta-engrams (engrams with META- prefix) with their structural templates and confidence scores","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_outbox","description":"Inspect the remote-write outbox \\u2014 team-scoped writes queued locally because their remote store was unreachable. Read-only by default; pass flush:true to retry them now. Entries never include the target URL or token.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_packs_discover","description":"Browse available engram packs from the registry \\u2014 discover curated expertise packs to install","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_packs_export","description":"Export engrams as a shareable thematic pack with privacy scanning and integrity hash. Filters out private and secret-containing engrams automatically. Output goes to ~/plur-packs/<name> by default.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_packs_install","description":"Install an engram pack from a local directory path or an https:// URL pointing to a .tar.gz archive. Runs a mandatory security scan (blocks if secrets found), detects conflicts with existing engrams, and records install metadata in the registry. Call plur_packs_preview first to show the user what the pack contains.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_packs_list","description":"List all installed engram packs with integrity hashes, install dates, and source paths","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_packs_preview","description":"Preview a pack before installing \\u2014 shows manifest, engram list, security scan, and warnings. Always call this before plur_packs_install to let the user review what they are importing. Accepts a local directory path or an https:// URL pointing to a .tar.gz archive.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_packs_uninstall","description":"Uninstall an engram pack by name \\u2014 removes the pack and all its engrams","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_pin","description":"Toggle the always-load (pinned) flag on an engram. Pinned engrams bypass the keyword-relevance gate and load on every session regardless of overlap with the task. Use sparingly \\u2014 meta-rules, safety conventions, core operating principles; a fact you need only sometimes should be recalled, not pinned. The pinned set has a QUOTA (injection_budget \\xD7 injection.pinned_ratio): \"always-load\" only ","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_profile","description":"Generate or retrieve a cognitive profile \\u2014 a narrative summary synthesized from stored engrams. Cached for 24h.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_promote","description":"Activate candidate engrams so they appear in injection results. Status change only \\u2014 it does NOT move an engram to another scope; to promote an engram into a team/shared scope use plur_rescope (#676).","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_provenance","description":"Where a memory came from: who asserted it, whether a person stated it or a model worked it out, when, what it came from, and whether you may reuse it. Read-only. Accepts an engram id or a search term \\u2014 nobody remembers ids. IMPORTANT when relaying to the user: report the `not_recorded` list as prominently as the rest. A memory written before provenance was captured genuinely cannot say who as","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_recall","description":"Search engrams by topic. Default mode is hybrid (BM25 + local embeddings via RRF) \\u2014 set mode:\"keyword\" for BM25-only. Local search plus, when a configured enterprise store is part of the current project/work, one live timeout-bounded recall per remote host merged in (a `remote_stores` block + warning appears when a host is degraded; no host configured or implicated = fully local). Note: a pro","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_recall_hybrid","description":"[Deprecated since 0.16 \\u2014 use plur_recall (mode defaults to hybrid). Alias kept for backwards compatibility; removal earliest 0.18.] Hybrid search \\u2014 BM25 + local embeddings merged via Reciprocal Rank Fusion, plus the live enterprise-store recall leg when one is configured and project-relevant.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_receipt","description":"Counted report of what your memory retrieved for you: engrams stored, how many were retrieved and how often, which are most relied on, and how much of the store is dormant. Local and read-only; every figure is directly counted, never estimated. IMPORTANT when relaying to the user: `activation_rate` is COVERAGE over the logging window (\\u2248 how much of the store was surfaced), NOT a quality or ef","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_report_failure","description":"Report a failure for a procedural engram \\u2014 triggers procedure evolution via LLM if configured. Only works on procedural engrams. Max 3 revisions per procedure per 24h.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_rescope","description":"Move existing engram(s) to a different scope (#676) \\u2014 e.g. promote a personal/local engram into a team scope so it reaches the shared store. Bypasses the content-hash dedup that makes a plur_learn re-emit a silent no-op: rescope matches by id and moves the engram. Remote targets (a configured writable store scope): a copy is pushed via the routed write path (the server assigns the id, provena","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_scopes_discover","description":"Discover which scopes your remote token is authorized for via the enterprise server (GET /api/v1/me), and which of those are not yet registered locally. Read-only by default; pass register:true to register all authorized-but-unregistered scopes in one step. Only shared-family scopes (group:/project:/space:/team:/org:/public) are auto-registered \\u2014 personal-family scopes (global/local/user:*/ag","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_session_end","description":"End a session. BEFORE calling this tool, review the conversation and extract learnings: 1. Corrections the user made (\"no, use X not Y\") \\u2192 type: behavioral 2. Preferences stated (\"always X\", \"never Y\") \\u2192 type: behavioral 3. Codebase patterns discovered (naming, structure, conventions) \\u2192 type: architectural 4. Technical facts learned (API quirks, config, gotchas) \\u2192 type: procedu","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_session_scope","description":"Adjust or inspect the session default write scope MID-session \\u2014 narrow, expand, or switch context without restarting the session (#243). op:\"set\" replaces the default scope used by unscoped plur_learn calls for the rest of the session AND the org context that decides which enterprise hosts plur_recall dials; op:\"show\" reports the effective scope and how it was derived (project config, session","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_session_start","description":"Start a session \\u2014 inject relevant engrams for your task. Call at the beginning of every session.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_similarity_search","description":"Search engrams by cosine similarity, returning scores. Used for dedup classification \\u2014 scores > 0.9 indicate duplicates, 0.7-0.9 related, < 0.7 new.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_status","description":"Return system health \\u2014 running version, engram count, episode count, pack count, storage root. Optionally filter engram counts by domain prefix and/or creation date.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_stores_add","description":"Register an additional engram store. Either filesystem (path) or remote (url+token, e.g. PLUR Enterprise). One remote URL can host multiple scopes \\u2014 call once per team scope you are authorized for; each registers independently. Returns status: \"added\" or \"already_registered\".","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_stores_list","description":"List all configured engram stores with their scope, path, and engram count. When a store declares self-describing scope metadata, its description and covers (topics the scope is the home for) are included so you can pick the right scope.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_suggest_scope","description":"Suggest which registered scope(s) an engram belongs in, ranked by fit. Deterministic \\u2014 no LLM, no network. Scores the statement keywords, optional domain (a dotted namespace like \"plur.core.security\"), and tags against the covers[] each scope declares. ADVISORY ONLY: this does not route or store anything; pass the chosen scope to plur_learn yourself. Returns candidates sorted by confidence (e","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_sync","description":"Sync engrams via git AND refresh the derived index from YAML. Initializes repo on first call, commits and pushes/pulls on subsequent calls. Provide a remote URL on first call to enable cross-device sync. Pass full=true to drop-and-rebuild the index from YAML (recovery path; YAML stays untouched). Also flushes the remote-write outbox \\u2014 retries team-scoped writes that were queued while their re","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_sync_status","description":"Check git sync status \\u2014 whether repo is initialized, has remote, is dirty, ahead/behind counts","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_tensions","description":"Tension lifecycle (#181). Default: list persisted tension records (unresolved first). scan:true runs an LLM contradiction scan, persists NEW detections as records, and skips already-recorded pairs. Lifecycle actions: action:\"confirm\" (real conflict), action:\"dismiss\" (false positive \\u2014 pair suppressed from future scans), action:\"resolve\" + winner:<engram_id> (loser engram retired). Scan requir","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_tensions_purge","description":"Purge all conflict relations from local engrams \\u2014 removes accumulated false positives from the legacy tension-detection system","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_timeline","description":"Query the episodic timeline \\u2014 retrieve past episodes filtered by time, agent, or search","write_action":false,"price_micros":0,"input_schema":null},{"name":"plur_validate_meta","description":"Test a meta-engram template against engrams from a new domain \\u2014 updates confidence and domain_coverage","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":91,"grade":"A","scanned_at":"2026-09-19T19:34:13.862Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:34:13.817Z","components":{"code":{"score":25,"max":25,"notes":["10 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@plur-ai/mcp","version":"0.20.1","found":true,"license":"Apache-2.0","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-09-18T09:53:49.726Z","repositoryUrl":"git+https://github.com/plur-ai/plur.git","weeklyDownloads":891}],"repo":{"found":true,"owner":"plur-ai","repo":"plur","archived":false,"pushedAt":"2026-09-19T00:19:19Z","stars":290,"forks":36,"openIssues":211,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/269585694?v=4","ownerCreatedAt":"2026-03-19T21:31:32Z","license":"Apache-2.0"},"icon":{"url":null,"source":"none"},"presence":{"stars":290,"forks":36,"downloadsWeek":891,"license":"Apache-2.0","lastPushAt":"2026-09-19T00:19:19.000Z","score":53}}}},"grade_history":[],"reviews":[]}