@echomem/mcp 1.4.18 → 1.4.20

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.
@@ -108,7 +108,7 @@ export function listToolSpecs(opts = {}) {
108
108
  const currentTime = new Date().toISOString();
109
109
  const map = opts.map?.trim();
110
110
  const updateNotice = opts.updateNotice?.trim();
111
- const paidRecallNote = "Requires Echo Pro or Power; saving conversations and memory extraction remain included.";
111
+ const recallPlanNote = "Available on every plan: Free includes 10 searches each week, Pro includes 100, and Power includes 250.";
112
112
  const searchBillingReplyInstruction = "If search returns an ACTION REQUIRED subscription message, tell the user to start their trial or subscription and include the exact URL from that result verbatim. Do not respond only with \"connect\" or \"upgrade\".";
113
113
  const updateSection = updateNotice ? `\n\nUPDATE NOTICE: ${updateNotice}` : "";
114
114
  const mapSection = map
@@ -117,7 +117,7 @@ export function listToolSpecs(opts = {}) {
117
117
  return [
118
118
  {
119
119
  name: canonicalToolNames.search,
120
- description: withMcpVersion(`Recall the user's prior decisions, preferences, and project context from EchoMem — their long-term memory across ALL their AI tools, not just this session. Use it instead of re-deriving or re-asking what the user already settled. ${paidRecallNote} ${searchBillingReplyInstruction}${mapSection}\nReturns the ranked memories; set includeAnswer=true only if you need the legacy synthesized answer. Current time: ${currentTime}.${updateSection}`),
120
+ description: withMcpVersion(`Recall the user's prior decisions, preferences, and project context from EchoMem — their long-term memory across ALL their AI tools, not just this session. Use it instead of re-deriving or re-asking what the user already settled. ${recallPlanNote} ${searchBillingReplyInstruction}${mapSection}\nReturns the ranked memories; set includeAnswer=true only if you need the legacy synthesized answer. Current time: ${currentTime}.${updateSection}`),
121
121
  inputSchema: {
122
122
  type: "object",
123
123
  properties: {
@@ -140,7 +140,7 @@ export function listToolSpecs(opts = {}) {
140
140
  },
141
141
  {
142
142
  name: "search_memories_by_description_semantic",
143
- description: `Legacy alias for search_memories. ${paidRecallNote} ${searchBillingReplyInstruction}`,
143
+ description: `Legacy alias for search_memories. ${recallPlanNote} ${searchBillingReplyInstruction}`,
144
144
  inputSchema: {
145
145
  type: "object",
146
146
  properties: {
@@ -163,7 +163,7 @@ export function listToolSpecs(opts = {}) {
163
163
  },
164
164
  {
165
165
  name: canonicalToolNames.save,
166
- description: "Save this conversation into EchoMem as long-term memory (durable memories are extracted automatically). Saving is included. passthrough=true stores the text verbatim as a session capsule; reloading/searching saved memories requires Echo Pro or Power.",
166
+ description: "Save this conversation into EchoMem as long-term memory (durable memories are extracted automatically). New extraction input uses the plan's weekly processing allowance; if the limit is reached, nothing is saved. passthrough=true stores the text verbatim as a session capsule.",
167
167
  inputSchema: {
168
168
  type: "object",
169
169
  properties: {
@@ -196,7 +196,7 @@ export function listToolSpecs(opts = {}) {
196
196
  },
197
197
  {
198
198
  name: canonicalToolNames.timeRange,
199
- description: `Retrieve memories within a specific date range. ${paidRecallNote} Current time: ${currentTime}.`,
199
+ description: `Retrieve memories within a specific date range. ${recallPlanNote} Current time: ${currentTime}.`,
200
200
  inputSchema: {
201
201
  type: "object",
202
202
  properties: {
@@ -214,7 +214,7 @@ export function listToolSpecs(opts = {}) {
214
214
  },
215
215
  {
216
216
  name: canonicalToolNames.keywords,
217
- description: `Search memories based on keywords in keys field. ${paidRecallNote}`,
217
+ description: `Search memories based on keywords in keys field. ${recallPlanNote}`,
218
218
  inputSchema: {
219
219
  type: "object",
220
220
  properties: {
@@ -371,7 +371,7 @@ export function listToolSpecs(opts = {}) {
371
371
  },
372
372
  {
373
373
  name: canonicalToolNames.getByContext,
374
- description: withMcpVersion(`Deterministically re-fetch the exact batch of memories saved under one contextId — no semantic search, no ranking, just that session's saved capsule. ${paidRecallNote} save_conversation returns a contextId; pass it here to pull back precisely those memories, e.g. to warm up a fresh session with what a prior session saved, or to verify the saved facts are still present. Current time: ${currentTime}.`),
374
+ description: withMcpVersion(`Deterministically re-fetch the exact batch of memories saved under one contextId — no semantic search, no ranking, just that session's saved capsule. ${recallPlanNote} save_conversation returns a contextId; pass it here to pull back precisely those memories, e.g. to warm up a fresh session with what a prior session saved, or to verify the saved facts are still present. Current time: ${currentTime}.`),
375
375
  inputSchema: {
376
376
  type: "object",
377
377
  properties: {
@@ -388,7 +388,7 @@ export function listToolSpecs(opts = {}) {
388
388
  },
389
389
  {
390
390
  name: canonicalToolNames.checkpointByContext,
391
- description: withMcpVersion(`Rebuild a clean-context checkpoint / decision log from one EchoMem contextId. ${paidRecallNote} Use this when the user or EchoMem HUD gives you a contextId for a renewed coding session and you need the session handoff, not a raw memory dump. It deterministically fetches that context and formats it as orientation state: decisions, carryover, constraints, and checkpoints. Current time: ${currentTime}.`),
391
+ description: withMcpVersion(`Rebuild a clean-context checkpoint / decision log from one EchoMem contextId. ${recallPlanNote} Use this when the user or EchoMem HUD gives you a contextId for a renewed coding session and you need the session handoff, not a raw memory dump. It deterministically fetches that context and formats it as orientation state: decisions, carryover, constraints, and checkpoints. Current time: ${currentTime}.`),
392
392
  inputSchema: {
393
393
  type: "object",
394
394
  properties: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@echomem/mcp",
3
- "version": "1.4.18",
3
+ "version": "1.4.20",
4
4
  "description": "EchoMem MCP bridge: cloud-first memory tools, local context HUD, and the Agent Doctor workspace forensics report (cost ledger + 3D repo city)",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: echomem-forget
3
+ description: Find, review, and delete outdated or incorrect memories from EchoMem. Use when the user asks EchoMem to forget, remove, or correct remembered information, or says a stored fact is no longer true. Require an explicit confirmation before the destructive delete step and do not operate on another memory provider unless requested.
4
+ ---
5
+
6
+ # EchoMem Forget
7
+
8
+ Use EchoMem's two-step deletion workflow.
9
+
10
+ 1. Search EchoMem when needed to identify the exact memory and its ID.
11
+ 2. Call `delete_memory` with the memory ID only to preview the target and receive a confirmation token.
12
+ 3. Show the preview and ask the user to confirm deletion of that exact memory.
13
+ 4. Only after confirmation, call `delete_memory` with `confirmed: true` and the exact token.
14
+ 5. If the user supplied corrected information, offer to save the replacement with `save_conversation` after deletion.
15
+
16
+ Never bypass the preview or confirmation step.
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "EchoMem Forget"
3
+ short_description: "Review and delete an EchoMem memory"
4
+ default_prompt: "Use $echomem-forget to find the outdated memory, show me what will be deleted, and ask for confirmation."
5
+ policy:
6
+ allow_implicit_invocation: true
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: echomem-login
3
+ description: Connect, authenticate, diagnose, or unlock the local EchoMem MCP bridge. Use when EchoMem reports a missing token, locked or expired encryption key, disconnected MCP server, setup problem, or when the user asks to log in, connect a device, check EchoMem status, or unlock their memory vault.
4
+ ---
5
+
6
+ # EchoMem Login
7
+
8
+ Use the installed EchoMem CLI and keep credentials out of chat and client configuration.
9
+
10
+ - Run `echomem-mcp status` to diagnose the current connection.
11
+ - Run `echomem-mcp login` to connect the device through the browser approval flow.
12
+ - EchoMem treats the MCP bridge as a trusted device. A verified local key stays available until the
13
+ user runs `echomem-mcp lock`, logs out, or removes the local credentials. When the key is absent,
14
+ tell the user to open their own Terminal and run `echomem-mcp unlock`.
15
+ - Run `echomem-mcp setup --client codex --skip-login` when the MCP entry itself is missing.
16
+
17
+ Do not run the bare interactive `echomem-mcp unlock` command through an agent shell: it waits for a
18
+ private passphrase that the user must enter themselves. Tell the user that the prompt reads
19
+ `Vault passphrase (typing is hidden):`, no characters appear while typing, and they should press
20
+ Return when finished. After it succeeds, retry the MCP action in the current session; no editor
21
+ restart is needed.
22
+
23
+ Use `echomem-mcp lock` when the user wants to remove the local vault key without disconnecting their
24
+ device login.
25
+
26
+ Prefer the interactive browser flow for login. Never print, log, or ask the user to paste tokens,
27
+ passphrases, or encryption keys into the conversation or expose them through command-line flags.
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "EchoMem Login"
3
+ short_description: "Connect or unlock EchoMem locally"
4
+ default_prompt: "Use $echomem-login to connect this device to EchoMem or unlock my encrypted memory vault."
5
+ policy:
6
+ allow_implicit_invocation: true
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: echomem-save
3
+ description: Save durable knowledge to EchoMem, the user's cross-agent long-term memory. Use when the user asks to remember, save, preserve, or carry forward information, or when active EchoMem guidance requires capturing a meaningful decision, resolved bug, architectural choice, preference, or project milestone. Prefer EchoMem when it is connected; do not silently save to another memory provider.
4
+ ---
5
+
6
+ # EchoMem Save
7
+
8
+ Use the `save_conversation` tool from the `echomem` MCP server.
9
+
10
+ 1. Capture the goal, decision or outcome, important reasoning, and relevant files or constraints. Omit noise and unrelated transcript content.
11
+ 2. Prefer structured `messages`; add a concise title, source, and useful tags.
12
+ 3. Use `passthrough: true` only when the user explicitly needs a verbatim session capsule.
13
+ 4. Never include secrets, credentials, or unnecessary sensitive content.
14
+ 5. Confirm what EchoMem saved. If saving fails, report the failure without switching providers silently.
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "EchoMem Save"
3
+ short_description: "Save durable project knowledge to EchoMem"
4
+ default_prompt: "Use $echomem-save to preserve this decision and its important context in EchoMem."
5
+ policy:
6
+ allow_implicit_invocation: true
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: echomem-search
3
+ description: Search EchoMem, the user's cross-agent long-term memory, for prior decisions, preferences, project context, and past work. Use when a request refers to previous work or sessions, asks what was decided or how something was implemented, needs a catch-up, or plausibly depends on context the user settled before. Prefer EchoMem when it is connected; do not silently substitute another memory provider.
4
+ ---
5
+
6
+ # EchoMem Search
7
+
8
+ Use the `echomem` MCP server as the source of long-term memory.
9
+
10
+ 1. Call `search_memories` with a concise query describing the context needed. Keep `includeAnswer` false unless an EchoMem-generated synthesis is specifically useful.
11
+ 2. Use `get_memories_by_time_range` for explicit dates, `search_memories_by_keywords` for exact terms, and `get_checkpoint_by_context` when a carryover references an EchoMem checkpoint.
12
+ 3. Distinguish recalled facts from inference and preserve dates or provenance returned by EchoMem.
13
+ 4. If EchoMem returns an action-required URL, give the user that exact URL and explanation.
14
+ 5. If EchoMem is unavailable, say so. Do not switch to another memory provider unless the user requests it.
@@ -0,0 +1,6 @@
1
+ interface:
2
+ display_name: "EchoMem Search"
3
+ short_description: "Recall decisions and context from EchoMem"
4
+ default_prompt: "Use $echomem-search to recall my prior decisions and relevant project context before continuing."
5
+ policy:
6
+ allow_implicit_invocation: true