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.
- package/README.md +44 -15
- package/dist/cli.js +1 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
38
|
-
"@batalabs/virlow-mcp-core": "3.81.
|
|
39
|
-
"@batalabs/virlow-memory": "3.81.
|
|
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",
|