memshare-mcp 0.2.6 → 0.3.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 +25 -8
- package/dist/cli/index.js +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +48 -2
- package/dist/mcp/server.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,11 +43,16 @@ After setup, capture and recall happen in conversation — there is no command t
|
|
|
43
43
|
|
|
44
44
|
The commands exist for the decisions you should not delegate to a model: **what becomes shareable, what gets exported, and what you accept from someone else.** That is the point, not an unfinished UI.
|
|
45
45
|
|
|
46
|
+
Promoting happens either way — in conversation, or at a prompt:
|
|
47
|
+
|
|
48
|
+
> *"make the project-x notes shareable"* → the AI calls `memory_set_visibility`
|
|
49
|
+
|
|
46
50
|
```bash
|
|
47
|
-
# The AI captures everything as private. Promote what the team should have:
|
|
48
51
|
memshare mark --tags project-x --shareable
|
|
49
52
|
```
|
|
50
53
|
|
|
54
|
+
Either route only makes an item **eligible**. Nothing is shared until you run `memshare export` and approve the preview — that step stays deliberately out of the model's hands.
|
|
55
|
+
|
|
51
56
|
### Tags name themselves
|
|
52
57
|
|
|
53
58
|
You never have to say "tag this project-x". The project tag is derived from the git checkout the assistant is working in, so every tool, every session and every teammate on that repo agrees on it — and the model is told to add only subject-matter tags (`auth`, `deploy`) on top. Turn it off with `memshare config --set autoProjectTag=false`.
|
|
@@ -66,6 +71,18 @@ memshare list
|
|
|
66
71
|
memshare list --tags project-x
|
|
67
72
|
```
|
|
68
73
|
|
|
74
|
+
## Try it in a sandbox first
|
|
75
|
+
|
|
76
|
+
The whole flow — capture, the consent step, PII getting blocked, export, per-item import — against throwaway stores:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
git clone https://github.com/kampana/memshare.git
|
|
80
|
+
cd memshare && npm install && npm run build
|
|
81
|
+
bash examples/try-it.sh
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
This does install the project's dependencies locally, in the folder you cloned. What it does **not** do: install anything globally, create or modify `~/.memshare`, or add anything to your Claude config. It builds two fake stores under a temp directory and deletes cleanly. Nothing carries over to a real setup.
|
|
85
|
+
|
|
69
86
|
## Sharing with someone else
|
|
70
87
|
|
|
71
88
|
```bash
|
|
@@ -154,13 +171,14 @@ It does **not** delete the bundle file, and it is **cooperative, not enforced**:
|
|
|
154
171
|
|
|
155
172
|
## MCP tools
|
|
156
173
|
|
|
157
|
-
The server exposes
|
|
174
|
+
The server exposes five tools to any MCP client:
|
|
158
175
|
|
|
159
176
|
| Tool | What it does |
|
|
160
177
|
|---|---|
|
|
161
|
-
| `memory_set` | Save one durable fact. Routed to the approval queue in `suggest` mode. |
|
|
178
|
+
| `memory_set` | Save one durable fact, choosing `private` or `shareable` for it. Routed to the approval queue in `suggest` mode. |
|
|
162
179
|
| `memory_get` | Recall memories by free text, tags, or most-recent. |
|
|
163
180
|
| `memory_suggest` | Propose memories for the user to approve later. |
|
|
181
|
+
| `memory_set_visibility` | Mark memories shareable or private, when the user asks in conversation. |
|
|
164
182
|
| `memory_list_tags` | List every tag, so the model reuses tags instead of inventing near-duplicates. |
|
|
165
183
|
|
|
166
184
|
## CLI reference
|
|
@@ -203,11 +221,10 @@ The same code, four ways to run it — pick one, switch whenever:
|
|
|
203
221
|
|
|
204
222
|
## Roadmap
|
|
205
223
|
|
|
206
|
-
- **
|
|
207
|
-
- **
|
|
208
|
-
- **
|
|
209
|
-
- **
|
|
210
|
-
- **v1.0:** when the bundle format freezes and `SCHEMA_VERSION` goes to 1.0.0
|
|
224
|
+
- **Shipped:** CLI, MCP server, export/import bundles, PII guard, consent flow
|
|
225
|
+
- **Next:** a ChatGPT route — only if people ask for one. Claude Code, Cursor, Copilot and Windsurf already work; they speak MCP and need no adapter.
|
|
226
|
+
- **Later:** Docker deploy, remote MCP server, revocable sharing
|
|
227
|
+
- **Someday:** discovery and live sync
|
|
211
228
|
|
|
212
229
|
## Use as a library
|
|
213
230
|
|
package/dist/cli/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import { readBundleFile, writeBundleFile } from "../sharing/bundle.js";
|
|
|
9
9
|
import { buildExportBundle, describeSkipReason, selectForExport, } from "../sharing/export.js";
|
|
10
10
|
import { applyImport, planImport, senderTag } from "../sharing/import.js";
|
|
11
11
|
import { c, fail, formatItemLine, formatPii, heading, info, isInteractive, ok, relativeTime, shortId, table, truncate, warn, } from "./ui.js";
|
|
12
|
-
const VERSION = "0.
|
|
12
|
+
const VERSION = "0.3.0";
|
|
13
13
|
const program = new Command();
|
|
14
14
|
program
|
|
15
15
|
.name("memshare")
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAsBjD,wBAAsB,YAAY,CAAC,KAAK,GAAE,WAA+B,GAAG,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAsBjD,wBAAsB,YAAY,CAAC,KAAK,GAAE,WAA+B,GAAG,OAAO,CAAC,SAAS,CAAC,CAkP7F;AAED,yEAAyE;AACzE,wBAAsB,KAAK,CAAC,KAAK,GAAE,WAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBjF"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -36,7 +36,7 @@ export async function createServer(store = new MemoryStore()) {
|
|
|
36
36
|
const name = server.server.getClientVersion()?.name?.trim().toLowerCase();
|
|
37
37
|
return name && name !== "" ? name : "mcp";
|
|
38
38
|
};
|
|
39
|
-
const server = new McpServer({ name: "memshare", version: "0.
|
|
39
|
+
const server = new McpServer({ name: "memshare", version: "0.3.0" }, {
|
|
40
40
|
instructions: "memshare is this user's own memory store, shared across every AI tool they use. " +
|
|
41
41
|
"Treat it as your long-term memory of them.\n\n" +
|
|
42
42
|
"At the start of a conversation, call memory_get to recall what you already know about " +
|
|
@@ -72,7 +72,13 @@ export async function createServer(store = new MemoryStore()) {
|
|
|
72
72
|
.describe("Short lowercase topic tags for the subject matter, e.g. ['auth', 'deploy']. " +
|
|
73
73
|
"Do not invent a name for the project or repository -- that tag is added automatically. " +
|
|
74
74
|
"Call memory_list_tags first and reuse existing tags rather than near-duplicates."),
|
|
75
|
-
visibility: Visibility.
|
|
75
|
+
visibility: Visibility.describe("Decide this every time; there is no default.\n" +
|
|
76
|
+
"'shareable' — facts about the project, codebase, team conventions or technical " +
|
|
77
|
+
"decisions. Things a colleague working on the same thing would want to know. " +
|
|
78
|
+
"It still cannot leave the machine without the user approving an export.\n" +
|
|
79
|
+
"'private' — anything about the person rather than the work: their preferences, " +
|
|
80
|
+
"their circumstances, their opinions about people, anything sensitive. " +
|
|
81
|
+
"When the two are arguable, choose 'private'."),
|
|
76
82
|
},
|
|
77
83
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },
|
|
78
84
|
}, async ({ content, tags, visibility }) => {
|
|
@@ -142,6 +148,46 @@ export async function createServer(store = new MemoryStore()) {
|
|
|
142
148
|
parts.push("Nothing is stored until the user runs `memshare review`.");
|
|
143
149
|
return text(parts.join(" "));
|
|
144
150
|
});
|
|
151
|
+
server.registerTool("memory_set_visibility", {
|
|
152
|
+
title: "Change what may be shared",
|
|
153
|
+
description: "Mark memories as 'shareable' so they can be included in an export, or back to 'private'. " +
|
|
154
|
+
"Select them by id, by tag, or by a text query.\n\n" +
|
|
155
|
+
"Only call this when the user has actually asked for it -- \"make the project-x notes " +
|
|
156
|
+
"shareable\", \"don't share that one\". Never decide on your own that something should " +
|
|
157
|
+
"become shareable.\n\n" +
|
|
158
|
+
"This does not share anything. It only makes an item eligible for an export that the user " +
|
|
159
|
+
"still has to run and approve.",
|
|
160
|
+
inputSchema: {
|
|
161
|
+
visibility: Visibility.describe("'shareable' to allow it into a future export, 'private' to rule it out."),
|
|
162
|
+
ids: z.array(z.string()).optional().describe("Memory ids, as returned by memory_get."),
|
|
163
|
+
tags: z.array(z.string()).optional().describe("Every memory carrying any of these tags."),
|
|
164
|
+
query: z.string().optional().describe("Every memory matching this text."),
|
|
165
|
+
},
|
|
166
|
+
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },
|
|
167
|
+
}, async ({ visibility, ids, tags, query }) => {
|
|
168
|
+
if ((!ids || ids.length === 0) && (!tags || tags.length === 0) && !query) {
|
|
169
|
+
return text("Nothing selected. Pass ids, tags, or a query -- this tool will not change every memory at once.");
|
|
170
|
+
}
|
|
171
|
+
const selected = ids && ids.length > 0
|
|
172
|
+
? (await store.all()).filter((i) => ids.includes(i.id))
|
|
173
|
+
: await store.list({
|
|
174
|
+
...(tags && tags.length > 0 ? { tags } : {}),
|
|
175
|
+
...(query ? { query } : {}),
|
|
176
|
+
});
|
|
177
|
+
const changing = selected.filter((i) => i.visibility !== visibility);
|
|
178
|
+
if (selected.length === 0)
|
|
179
|
+
return text("Nothing matched.");
|
|
180
|
+
if (changing.length === 0) {
|
|
181
|
+
return text(`All ${selected.length} matching memory(s) are already ${visibility}.`);
|
|
182
|
+
}
|
|
183
|
+
for (const item of changing)
|
|
184
|
+
await store.update(item.id, { visibility });
|
|
185
|
+
const listed = changing.map((i) => `- ${i.content}`).join("\n");
|
|
186
|
+
return text(`${changing.length} memory(s) are now ${visibility}:\n${listed}\n\n` +
|
|
187
|
+
(visibility === "shareable"
|
|
188
|
+
? "They are still on this machine only. Sharing them takes an explicit `memshare export`, which the user runs and approves."
|
|
189
|
+
: "They can no longer be included in any export."));
|
|
190
|
+
});
|
|
145
191
|
server.registerTool("memory_list_tags", {
|
|
146
192
|
title: "List memory tags",
|
|
147
193
|
description: "List every tag in the store. Useful before memory_get, to see which topics exist and to reuse " +
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAa,MAAM,oBAAoB,CAAC;AAE3D;;;;;;GAMG;AAEH,MAAM,UAAU,GAAyB;IACvC,IAAI,EACF,mFAAmF;QACnF,8EAA8E;IAChF,OAAO,EACL,oGAAoG;QACpG,6HAA6H;IAC/H,MAAM,EACJ,8GAA8G;CACjH,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAK,GAAgB,IAAI,WAAW,EAAE;IACvE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEzC,4EAA4E;IAC5E,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1E,MAAM,WAAW,GAAG,CAAC,IAAc,EAAY,EAAE,CAC/C,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1E;;;;;OAKG;IACH,MAAM,UAAU,GAAG,GAAW,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1E,OAAO,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,EACtC;QACE,YAAY,EACV,kFAAkF;YAClF,gDAAgD;YAChD,wFAAwF;YACxF,qEAAqE;YACrE,+FAA+F;YAC/F,QAAQ;YACR,6FAA6F;YAC7F,iFAAiF;KACpF,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,0FAA0F;YAC1F,4EAA4E;YAC5E,0FAA0F;YAC1F,wFAAwF;YACxF,yFAAyF;YACzF,8EAA8E;YAC9E,gEAAgE;YAChE,kEAAkE;YAClE,yFAAyF;YACzF,2EAA2E;YAC3E,qFAAqF;YACrF,WAAW;YACX,QAAQ;QACV,WAAW,EAAE;YACX,OAAO,EAAE,CAAC;iBACP,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CAAC,sFAAsF,CAAC;YACnG,IAAI,EAAE,CAAC;iBACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,OAAO,CAAC,EAAE,CAAC;iBACX,QAAQ,CACP,8EAA8E;gBAC5E,yFAAyF;gBACzF,kFAAkF,CACrF;YACH,UAAU,EAAE,UAAU,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|