virlow-mcp 3.81.0 → 3.81.1

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.
Files changed (3) hide show
  1. package/README.md +44 -15
  2. package/dist/cli.js +1 -1
  3. package/package.json +4 -4
package/README.md CHANGED
@@ -7,8 +7,8 @@ entire time.
7
7
 
8
8
  ## What it is
9
9
 
10
- virlow-mcp runs on your machine as a local process (`npx -y virlow-mcp`, launched by your
11
- AI client over stdio). It exposes 24 tools for three things:
10
+ virlow-mcp runs on your machine as a local process (`npx -y virlow-mcp@latest`, launched by your
11
+ AI client over stdio). It exposes tools for four things:
12
12
 
13
13
  - **Memories** — short, durable facts ("the user prefers TypeScript", "this repo's CI
14
14
  runs on self-hosted runners") that any AI tool can add, search semantically, and recall
@@ -30,6 +30,16 @@ AI client over stdio). It exposes 24 tools for three things:
30
30
  schema and values in the note's encrypted attrs, so the server sees neither. Properties
31
31
  ship in the Virlow app as of its epic 3, so what is written here is what the user sees in
32
32
  the note, the table, the board and the calendar.
33
+ - **Attachments**: files on a note. `list_attachments`, `add_attachment`,
34
+ `read_attachment`, `rename_attachment`, `move_attachment`, `delete_attachment` and
35
+ `restore_attachment`. Files are encrypted in this process before upload, the same way the
36
+ app does it. `add_attachment` takes `text` or `content_base64` (up to 2 MB), or `path`, an
37
+ absolute path to a file on this machine (up to 35 MB). `read_attachment` returns text and
38
+ small files inline, and with `save_to` writes the decrypted file to disk instead; it never
39
+ replaces an existing file unless `overwrite` is true. `delete_attachment` moves a file to the
40
+ note's Recently deleted, where `restore_attachment` can bring it back for 30 days. `path` and
41
+ `save_to` exist only when this server runs on your machine over stdio (or `--http` on
42
+ loopback); the hosted connector and a non-loopback `--http` take inline content only.
33
43
 
34
44
  Everything is **end-to-end encrypted, zero-knowledge**: the encryption key is derived
35
45
  from your Virlow master password inside this local process and never leaves it. Every
@@ -44,7 +54,7 @@ through a tool call, and never seen by the AI model.
44
54
  ### This is the local server, and that distinction is the whole security model
45
55
 
46
56
  Every claim above is about **this package**, running on **your machine**. Virlow also
47
- offers a **hosted connector**: the same 24 tools, served from Virlow's own servers, so a
57
+ offers a **hosted connector**: the same tools, served from Virlow's own servers, so a
48
58
  client can connect by URL with nothing installed. It is a genuinely different trust model,
49
59
  and the sentence "the key never leaves it" is the part that stops being true:
50
60
 
@@ -66,15 +76,25 @@ guarantee.
66
76
 
67
77
  ## Install / configure
68
78
 
69
- virlow-mcp needs no separate install — `npx -y virlow-mcp` fetches and runs it directly.
79
+ virlow-mcp needs no separate install: `npx -y virlow-mcp@latest` fetches and runs it directly.
70
80
  Add it to your client's MCP config:
71
81
 
72
82
  ### Claude Code
73
83
 
74
84
  ```
75
- claude mcp add virlow -- npx -y virlow-mcp
85
+ claude mcp add virlow -- npx -y virlow-mcp@latest
76
86
  ```
77
87
 
88
+ On Windows, `npx` is a batch script, so wrap it in `cmd /c`:
89
+
90
+ ```
91
+ claude mcp add virlow -- cmd /c npx -y virlow-mcp@latest
92
+ ```
93
+
94
+ Run that from PowerShell or cmd. Git Bash rewrites `/c` into a path; there, edit
95
+ `~/.claude.json` so the server's `"command"` is `"cmd"` and its `"args"` are
96
+ `["/c", "npx", "-y", "virlow-mcp@latest"]`.
97
+
78
98
  ### Claude Desktop
79
99
 
80
100
  Add to your `claude_desktop_config.json`
@@ -86,7 +106,7 @@ Windows: `%APPDATA%\Claude\claude_desktop_config.json`):
86
106
  "mcpServers": {
87
107
  "virlow": {
88
108
  "command": "npx",
89
- "args": ["-y", "virlow-mcp"]
109
+ "args": ["-y", "virlow-mcp@latest"]
90
110
  }
91
111
  }
92
112
  }
@@ -101,7 +121,7 @@ Add to `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project-local):
101
121
  "mcpServers": {
102
122
  "virlow": {
103
123
  "command": "npx",
104
- "args": ["-y", "virlow-mcp"]
124
+ "args": ["-y", "virlow-mcp@latest"]
105
125
  }
106
126
  }
107
127
  }
@@ -114,7 +134,7 @@ Codex's MCP config is TOML, not JSON. Add to `~/.codex/config.toml`:
114
134
  ```toml
115
135
  [mcp_servers.virlow]
116
136
  command = "npx"
117
- args = ["-y", "virlow-mcp"]
137
+ args = ["-y", "virlow-mcp@latest"]
118
138
  ```
119
139
 
120
140
  ### Self-hosting Virlow
@@ -128,7 +148,7 @@ Claude Desktop / Cursor:
128
148
  "mcpServers": {
129
149
  "virlow": {
130
150
  "command": "npx",
131
- "args": ["-y", "virlow-mcp"],
151
+ "args": ["-y", "virlow-mcp@latest"],
132
152
  "env": { "VIRLOW_API_URL": "https://api.your-domain.com" }
133
153
  }
134
154
  }
@@ -147,7 +167,7 @@ only spawn a command use this package as a pipe:
147
167
  "mcpServers": {
148
168
  "virlow": {
149
169
  "command": "npx",
150
- "args": ["-y", "virlow-mcp", "--connect", "http://127.0.0.1:47821/mcp",
170
+ "args": ["-y", "virlow-mcp@latest", "--connect", "http://127.0.0.1:47821/mcp",
151
171
  "--token-file", "<path the app shows you>"]
152
172
  }
153
173
  }
@@ -156,6 +176,15 @@ only spawn a command use this package as a pipe:
156
176
 
157
177
  In this mode nothing is decrypted in this process. It forwards to the app and back.
158
178
 
179
+ ### Staying up to date
180
+
181
+ With `virlow-mcp@latest` in the command, your client gets the newest release each time it
182
+ starts the server, so restarting the client (or opening a new session) is the whole update.
183
+ Without `@latest`, `npx` can keep running a copy it downloaded earlier; add `@latest` to an
184
+ existing config to fix that. Pin an exact version (`virlow-mcp@3.81.0`) only if you want
185
+ updates to wait for you. The desktop app updates itself and its built-in server, and the
186
+ hosted connector is updated on Virlow's side.
187
+
159
188
  ## First use
160
189
 
161
190
  1. Ask your AI client to run the **`unlock`** tool. This opens a browser window pointed
@@ -206,13 +235,13 @@ just give you two versions to keep in sync.
206
235
  ## Reaching your vault from a session that is not on this machine
207
236
 
208
237
  By default `virlow-mcp` speaks stdio, so your AI client spawns it as a child
209
- process and everything stays on one machine. `--http` serves the same 24 tools
238
+ process and everything stays on one machine. `--http` serves the same tools
210
239
  over HTTP instead, so a client that cannot spawn a local process — a cloud
211
240
  coding session, another laptop — can reach this vault:
212
241
 
213
242
  ```bash
214
- npx -y virlow-mcp --http # loopback, random port
215
- npx -y virlow-mcp --http --port 8787 # pick the port
243
+ npx -y virlow-mcp@latest --http # loopback, random port
244
+ npx -y virlow-mcp@latest --http --port 8787 # pick the port
216
245
  ```
217
246
 
218
247
  It prints the URL and the path to a bearer token, generated on first run and
@@ -295,12 +324,12 @@ account cannot be reached, the tools refuse rather than assume consent.
295
324
  unregistered, so they do not appear in `tools/list` at all:
296
325
 
297
326
  ```bash
298
- npx -y virlow-mcp --no-memories
327
+ npx -y virlow-mcp@latest --no-memories
299
328
  ```
300
329
 
301
330
  Use it when you want a connector that structurally cannot touch memories,
302
331
  regardless of the account setting. Notes tools, `unlock`, `lock`, and `status`
303
- are unaffected either way (18 tools instead of 23).
332
+ are unaffected either way.
304
333
 
305
334
  ## Suggested agent rules
306
335
 
package/dist/cli.js CHANGED
@@ -4742,7 +4742,7 @@ function startUnlockServer(api, vault, opts = {}) {
4742
4742
  }
4743
4743
 
4744
4744
  // src/version.ts
4745
- var VERSION = true ? "3.81.0" : "dev";
4745
+ var VERSION = true ? "3.81.1" : "dev";
4746
4746
 
4747
4747
  // src/server.ts
4748
4748
  function defaultEmbeddingCacheDir() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "virlow-mcp",
3
- "version": "3.81.0",
3
+ "version": "3.81.1",
4
4
  "description": "Local MCP server for Virlow Secure Notes: end-to-end-encrypted AI memories and notes for Cursor, Claude, Codex, and any MCP client.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -34,9 +34,9 @@
34
34
  "esbuild": "^0.25.0",
35
35
  "typescript": "^5.8.0",
36
36
  "vitest": "^3.0.0",
37
- "@batalabs/virlow-crypto": "3.81.0",
38
- "@batalabs/virlow-mcp-core": "3.81.0",
39
- "@batalabs/virlow-memory": "3.81.0"
37
+ "@batalabs/virlow-crypto": "3.81.1",
38
+ "@batalabs/virlow-mcp-core": "3.81.1",
39
+ "@batalabs/virlow-memory": "3.81.1"
40
40
  },
41
41
  "scripts": {
42
42
  "build": "node build.mjs",