@plur-ai/mcp 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -50,31 +50,32 @@ Your agent gets these tools automatically:
50
50
 
51
51
  | Tool | What it does |
52
52
  |------|-------------|
53
- | `plur.learn` | Store a memorycorrection, preference, convention, or decision |
54
- | `plur.recall` | Keyword search (BM25, instant) |
55
- | `plur.recall.hybrid` | **Best default** — BM25 + embeddings merged via RRF. Zero cost. |
56
- | `plur.inject` | Load relevant memories for the current task |
57
- | `plur.feedback` | Rate a memory trains relevance over time |
58
- | `plur.forget` | Retire a memory (history preserved) |
59
- | `plur.sync` | Sync memory across machines via git |
60
- | `plur.sync.status` | Check sync state |
61
- | `plur.capture` | Record a session event |
62
- | `plur.timeline` | Query session history |
63
- | `plur.ingest` | Extract learnings from text |
64
- | `plur.packs.install` | Install a shareable memory pack |
65
- | `plur.packs.list` | List installed packs |
66
- | `plur.status` | System health |
53
+ | `plur_session_start` | Start a sessioninjects relevant engrams for your task |
54
+ | `plur_learn` | Store a memory — correction, preference, convention, or decision |
55
+ | `plur_recall_hybrid` | **Best default** — BM25 + embeddings merged via RRF. Zero cost. |
56
+ | `plur_recall` | Keyword search (BM25 only, instant) |
57
+ | `plur_inject_hybrid` | Load relevant memories for the current task |
58
+ | `plur_feedback` | Rate a memory trains relevance over time |
59
+ | `plur_forget` | Retire a memory (history preserved) |
60
+ | `plur_session_end` | End a session — captures summary and new learnings |
61
+ | `plur_capture` | Record a session event |
62
+ | `plur_timeline` | Query session history |
63
+ | `plur_ingest` | Extract learnings from text |
64
+ | `plur_sync` | Sync memory across machines via git |
65
+ | `plur_packs_install` | Install a shareable memory pack |
66
+ | `plur_packs_list` | List installed packs |
67
+ | `plur_status` | System health |
67
68
 
68
69
  ## Sync across machines
69
70
 
70
71
  Your agent can sync memory to any git remote:
71
72
 
72
73
  ```
73
- Agent: plur.sync({ remote: "git@github.com:you/plur-memory.git" })
74
+ Agent: plur_sync({ remote: "git@github.com:you/plur-memory.git" })
74
75
  → "Initialized and pushed."
75
76
 
76
77
  # On another machine, same remote:
77
- Agent: plur.sync()
78
+ Agent: plur_sync()
78
79
  → "Synced. Pulled 12 remote commits."
79
80
  ```
80
81
 
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
5
5
  import { join } from "path";
6
6
  import { homedir } from "os";
7
- var VERSION = "0.5.3";
7
+ var VERSION = "0.6.0";
8
8
  var HELP = `plur-mcp v${VERSION} \u2014 persistent memory for AI agents
9
9
 
10
10
  Usage:
@@ -143,7 +143,7 @@ if (arg === "init") {
143
143
  process.exit(0);
144
144
  }
145
145
  if (arg === "serve" || arg === void 0) {
146
- const { runStdio } = await import("./server-VFKTDY7O.js");
146
+ const { runStdio } = await import("./server-5BXYBMHX.js");
147
147
  runStdio().catch((err) => {
148
148
  console.error("Failed to start PLUR MCP server:", err);
149
149
  process.exit(1);
@@ -297,8 +297,15 @@ function getToolDefinitions() {
297
297
  }
298
298
  return { mode: "batch", results, summary };
299
299
  }
300
- plur.feedback(args.id, args.signal);
301
- return { success: true, id: args.id, signal: args.signal };
300
+ try {
301
+ plur.feedback(args.id, args.signal);
302
+ return { success: true, id: args.id, signal: args.signal };
303
+ } catch (err) {
304
+ if (err.message?.includes("readonly store")) {
305
+ return { success: false, id: args.id, signal: args.signal, note: "Engram is in a readonly store. Feedback noted for this session but not persisted." };
306
+ }
307
+ throw err;
308
+ }
302
309
  }
303
310
  },
304
311
  {
@@ -742,27 +749,35 @@ You have ${store_stats.engram_count} engrams but none matched this task. Call pl
742
749
  },
743
750
  {
744
751
  name: "plur_session_end",
745
- description: "End a session \u2014 captures an episode and creates engrams from suggestions. Call before the conversation ends.",
752
+ description: `End a session. BEFORE calling this tool, review the conversation and extract learnings:
753
+
754
+ 1. Corrections the user made ("no, use X not Y") \u2192 type: behavioral
755
+ 2. Preferences stated ("always X", "never Y") \u2192 type: behavioral
756
+ 3. Codebase patterns discovered (naming, structure, conventions) \u2192 type: architectural
757
+ 4. Technical facts learned (API quirks, config, gotchas) \u2192 type: procedural
758
+ 5. Terminology defined or clarified \u2192 type: terminological
759
+
760
+ Include at least one engram_suggestion if ANYTHING was learned. An empty suggestions array means nothing worth remembering happened \u2014 this should be rare.`,
746
761
  annotations: { title: "Session End", destructiveHint: false, idempotentHint: false },
747
762
  inputSchema: {
748
763
  type: "object",
749
764
  properties: {
750
- summary: { type: "string", description: "What happened in this session" },
765
+ summary: { type: "string", description: "What happened in this session (1-3 sentences)" },
751
766
  session_id: { type: "string", description: "Session ID from plur_session_start" },
752
767
  engram_suggestions: {
753
768
  type: "array",
754
769
  items: {
755
770
  type: "object",
756
771
  properties: {
757
- statement: { type: "string", description: "The knowledge assertion" },
772
+ statement: { type: "string", description: "A concise, reusable assertion. Write it as advice to your future self." },
758
773
  type: { type: "string", enum: ["behavioral", "terminological", "procedural", "architectural"] }
759
774
  },
760
775
  required: ["statement"]
761
776
  },
762
- description: "New learnings to capture as engrams"
777
+ description: "Learnings from this session. Review the conversation for corrections, preferences, patterns, and technical facts before calling."
763
778
  }
764
779
  },
765
- required: ["summary"]
780
+ required: ["summary", "engram_suggestions"]
766
781
  },
767
782
  handler: async (args, plur) => {
768
783
  const summary = args.summary;
@@ -896,7 +911,7 @@ You have ${store_stats.engram_count} engrams but none matched this task. Call pl
896
911
 
897
912
  // src/server.ts
898
913
  import { z } from "zod";
899
- var VERSION = "0.5.3";
914
+ var VERSION = "0.6.0";
900
915
  var INSTRUCTIONS = `PLUR is your persistent memory. Corrections, preferences, and conventions persist across sessions as engrams.
901
916
 
902
917
  REQUIRED at session boundaries:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plur-ai/mcp",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "plur-mcp": "dist/index.js"
@@ -12,7 +12,7 @@
12
12
  "dependencies": {
13
13
  "@modelcontextprotocol/sdk": "^1.12.0",
14
14
  "zod": "^3.23.0",
15
- "@plur-ai/core": "0.5.2"
15
+ "@plur-ai/core": "0.6.0"
16
16
  },
17
17
  "devDependencies": {
18
18
  "@types/node": "^25.5.0"