@llmnesia/mcp 0.1.0 → 0.1.2

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
@@ -1,7 +1,7 @@
1
1
  # @llmnesia/mcp
2
2
 
3
3
  Search your own AI chat history from Claude Desktop, Claude Code, Cursor,
4
- Codex, and other MCP clients. Covers every conversation the
4
+ Codex, and other MCP clients. It is designed to cover every conversation the
5
5
  [LLMnesia browser extension](https://llmnesia.com) has captured across
6
6
  ChatGPT, Claude, Gemini, Character.AI, Grok, DeepSeek, and the rest of the
7
7
  supported platforms.
@@ -10,23 +10,35 @@ supported platforms.
10
10
  machine and the MCP server speaks [Model Context Protocol](https://modelcontextprotocol.io)
11
11
  over stdio.
12
12
 
13
- Requires **Node.js ≥ 22.13.0** (for the built-in `node:sqlite` module).
13
+ Requires **Node.js ≥ 22.13.0** (for the built-in `node:sqlite` module). The
14
+ installer checks this before changing anything and prints the exact recovery
15
+ steps when the installed version is too old.
14
16
 
15
17
  ## Install
16
18
 
17
19
  ```bash
18
- npx @llmnesia/mcp install
20
+ npx -y @llmnesia/mcp@latest install
19
21
  ```
20
22
 
23
+ That is the same command in Terminal on macOS/Linux and PowerShell on Windows.
24
+ It requires Node.js 22.13 or newer; there is no global package install and no
25
+ client config to edit by hand in the normal path.
26
+
27
+ If `npx` is not recognised, Node.js is not installed. Install the current LTS
28
+ release from [nodejs.org](https://nodejs.org/), reopen Terminal/PowerShell, and
29
+ run the command again. `npx` cannot prompt for or install Node.js because it is
30
+ itself part of Node.js.
31
+
21
32
  The installer:
22
33
 
23
34
  1. sets up the native host that bridges the browser extension to your local
24
35
  corpus,
25
36
  2. copies the server into `~/.llmnesia/bin` so it has a permanent home,
26
- 3. detects which MCP clients you have (Claude Code, Claude Desktop, Cursor,
27
- Codex, and others), and
28
- 4. registers that copy with each of them — after a confirm prompt and a backup
29
- of any config file it edits.
37
+ 3. detects supported MCP clients you have (Claude Code, Claude Desktop,
38
+ Cursor, and Codex), and
39
+ 4. registers that copy with each detected client — using the client's own CLI
40
+ where available, or after a confirm prompt and backup for config files it
41
+ edits.
30
42
 
31
43
  Then **fully quit and reopen** your MCP client. Clients read their config once
32
44
  at startup, so reloading a window is not enough.
@@ -49,7 +61,7 @@ The copy is self-contained (no `node_modules` beside it) and re-running
49
61
  ### Updating
50
62
 
51
63
  ```bash
52
- npx @llmnesia/mcp@latest install
64
+ npx -y @llmnesia/mcp@latest install
53
65
  ```
54
66
 
55
67
  Your corpus is untouched; only the server copy is replaced.
@@ -62,11 +74,14 @@ the [Chrome Web Store](https://chromewebstore.google.com/detail/llmnesia/leekfgb
62
74
 
63
75
  1. Install the extension and run a one-time backfill to import existing history.
64
76
  2. After that, the extension captures new conversations as you chat.
65
- 3. It writes them to the local corpus at `~/.llmnesia/corpus/`. `@llmnesia/mcp`
66
- reads from the same folder — there is nothing to configure.
77
+ 3. Run the installer above, fully restart the browser, then open LLMnesia
78
+ Settings and click **Enable automatic sync** once. Chrome requires this
79
+ one-time permission confirmation.
80
+ 4. The extension immediately backfills its indexed history to the local corpus
81
+ at `~/.llmnesia/corpus/`, then syncs new and changed chats automatically.
82
+ `@llmnesia/mcp` reads from the same folder — there is nothing to configure.
67
83
 
68
- If you have not run the extension yet, the corpus will be empty and every
69
- search will come back empty too.
84
+ If nothing has written to the corpus yet, search results will be empty.
70
85
 
71
86
  ## Tools
72
87
 
@@ -87,10 +102,10 @@ received data — check it before concluding a chat does not exist.
87
102
 
88
103
  | Client | How `install` wires it |
89
104
  | --- | --- |
90
- | Claude Code | Runs `claude mcp add` with the absolute Node and installed runtime paths (detects `claude` on PATH). |
105
+ | Claude Code | Runs `claude mcp add --scope user` with the absolute Node and installed runtime paths, making it available in every project (detects `claude` on PATH). |
91
106
  | Claude Desktop | Edits `claude_desktop_config.json` at the standard OS-specific path. |
92
107
  | Cursor | Edits `~/.cursor/mcp.json`. |
93
- | Codex | Prints a TOML block for `~/.codex/config.toml` (auto-edit is too fragile). |
108
+ | Codex | Runs `codex mcp add` with the absolute runtime paths. It also detects the CLI bundled in the macOS desktop app; prints a TOML fallback only if no Codex CLI is available. |
94
109
  | Others (Windsurf, Zed, LM Studio, …) | Prints the generic stdio block for you to paste. |
95
110
 
96
111
  **Cloud-only clients cannot reach a local stdio server** (web ChatGPT, Lovable,
@@ -100,7 +115,7 @@ close it.
100
115
  ## Diagnose an install
101
116
 
102
117
  ```bash
103
- npx @llmnesia/mcp doctor
118
+ npx -y @llmnesia/mcp@latest doctor
104
119
  ```
105
120
 
106
121
  Checks whether the native host is installed, the server runtime is present, the
@@ -115,7 +130,7 @@ reminder).
115
130
  ## Uninstall
116
131
 
117
132
  ```bash
118
- npx @llmnesia/mcp uninstall
133
+ npx -y @llmnesia/mcp@latest uninstall
119
134
  ```
120
135
 
121
136
  Removes native-host manifests and registry keys, the copied server in
@@ -145,8 +160,7 @@ llmnesia-mcp --version # print the installed version
145
160
 
146
161
  ## Support
147
162
 
148
- Questions and bug reports: [llmnesia.com/mcp](https://llmnesia.com/mcp) or
149
- hello@llmnesia.com.
163
+ Questions and bug reports: [hello@llmnesia.com](mailto:hello@llmnesia.com).
150
164
 
151
165
  ## License
152
166
 
@@ -1,5 +1,75 @@
1
1
  @llmnesia/mcp includes portions of the following third-party software.
2
2
 
3
+ -------------------------------------------------------------------------------
4
+ cross-spawn
5
+
6
+ The MIT License (MIT)
7
+
8
+ Copyright (c) 2018 Made With MOXY Lda <hello@moxy.studio>
9
+
10
+ Permission is hereby granted, free of charge, to any person obtaining a copy
11
+ of this software and associated documentation files (the "Software"), to deal
12
+ in the Software without restriction, including without limitation the rights
13
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14
+ copies of the Software, and to permit persons to whom the Software is
15
+ furnished to do so, subject to the following conditions:
16
+
17
+ The above copyright notice and this permission notice shall be included in
18
+ all copies or substantial portions of the Software.
19
+
20
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
26
+ THE SOFTWARE.
27
+
28
+ -------------------------------------------------------------------------------
29
+ path-key, shebang-command, and shebang-regex
30
+
31
+ MIT License
32
+
33
+ Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
34
+ Copyright (c) Kevin Mårtensson <kevinmartensson@gmail.com> (github.com/kevva)
35
+
36
+ Permission is hereby granted, free of charge, to any person obtaining a copy
37
+ of this software and associated documentation files (the "Software"), to deal
38
+ in the Software without restriction, including without limitation the rights
39
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
40
+ copies of the Software, and to permit persons to whom the Software is
41
+ furnished to do so, subject to the following conditions:
42
+
43
+ The above copyright notice and this permission notice shall be included in
44
+ all copies or substantial portions of the Software.
45
+
46
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
47
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
48
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
49
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
50
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
51
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
52
+ THE SOFTWARE.
53
+
54
+ -------------------------------------------------------------------------------
55
+ which and isexe
56
+
57
+ The ISC License
58
+
59
+ Copyright (c) Isaac Z. Schlueter and Contributors
60
+
61
+ Permission to use, copy, modify, and/or distribute this software for any
62
+ purpose with or without fee is hereby granted, provided that the above
63
+ copyright notice and this permission notice appear in all copies.
64
+
65
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
66
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
67
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
68
+ SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
69
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
70
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
71
+ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
72
+
3
73
  -------------------------------------------------------------------------------
4
74
  @modelcontextprotocol/sdk
5
75
 
@@ -1,33 +1,6 @@
1
1
  #!/usr/bin/env node
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __commonJS = (cb, mod) => function __require() {
9
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
- };
11
- var __export = (target, all) => {
12
- for (var name in all)
13
- __defProp(target, name, { get: all[name], enumerable: true });
14
- };
15
- var __copyProps = (to, from, except, desc) => {
16
- if (from && typeof from === "object" || typeof from === "function") {
17
- for (let key of __getOwnPropNames(from))
18
- if (!__hasOwnProp.call(to, key) && key !== except)
19
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
- }
21
- return to;
22
- };
23
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
- // If the importer is in node compatibility mode or this is not an ESM
25
- // file that has been converted to a CommonJS file using a Babel-
26
- // compatible transform (i.e. "__esModule" has not been set), then set
27
- // "default" to the CommonJS "module.exports" for node compatibility.
28
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
- mod
30
- ));
2
+ import { createRequire as __llmnesiaCreateRequire } from "node:module";
3
+ const require = __llmnesiaCreateRequire(import.meta.url);
31
4
 
32
5
  // src/config.ts
33
6
  import { readFileSync } from "fs";
@@ -863,13 +836,7 @@ function normalizeMatchRole(role) {
863
836
  return role === "assistant" || role === "user" || role === "system" ? role : "unknown";
864
837
  }
865
838
 
866
- // src/version.ts
867
- var VERSION = true ? "0.1.0" : "0.0.0-dev";
868
-
869
839
  export {
870
- __commonJS,
871
- __export,
872
- __toESM,
873
840
  resolveCorpusDir,
874
841
  Corpus,
875
842
  ingestFile,
@@ -877,7 +844,5 @@ export {
877
844
  drainInbox,
878
845
  SearchIndex,
879
846
  openSearchIndex,
880
- deleteIndexDb,
881
- VERSION
847
+ deleteIndexDb
882
848
  };
883
- //# sourceMappingURL=chunk-OBJD6H4A.js.map
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __llmnesiaCreateRequire } from "node:module";
3
+ const require = __llmnesiaCreateRequire(import.meta.url);
4
+ var __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
11
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
12
+ }) : x)(function(x) {
13
+ if (typeof require !== "undefined") return require.apply(this, arguments);
14
+ throw Error('Dynamic require of "' + x + '" is not supported');
15
+ });
16
+ var __commonJS = (cb, mod) => function __require2() {
17
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, { get: all[name], enumerable: true });
22
+ };
23
+ var __copyProps = (to, from, except, desc) => {
24
+ if (from && typeof from === "object" || typeof from === "function") {
25
+ for (let key of __getOwnPropNames(from))
26
+ if (!__hasOwnProp.call(to, key) && key !== except)
27
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
28
+ }
29
+ return to;
30
+ };
31
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
32
+ // If the importer is in node compatibility mode or this is not an ESM
33
+ // file that has been converted to a CommonJS file using a Babel-
34
+ // compatible transform (i.e. "__esModule" has not been set), then set
35
+ // "default" to the CommonJS "module.exports" for node compatibility.
36
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
37
+ mod
38
+ ));
39
+
40
+ // src/version.ts
41
+ var VERSION = true ? "0.1.2" : "0.0.0-dev";
42
+
43
+ export {
44
+ __require,
45
+ __commonJS,
46
+ __export,
47
+ __toESM,
48
+ VERSION
49
+ };