@vitalsend/mcp 0.0.0-stage → 0.2.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/LICENSE +661 -0
- package/README.md +104 -2
- package/dist/vitalsend-mcp.js +1515 -0
- package/npm-shrinkwrap.json +2297 -0
- package/package.json +51 -4
- package/server.json +38 -0
package/README.md
CHANGED
|
@@ -1,3 +1,105 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @vitalsend/mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Send a file end-to-end encrypted from your AI agent. The file is encrypted on your computer, the
|
|
4
|
+
recipient downloads it once, and then it no longer exists. The model never sees the download link,
|
|
5
|
+
its key or the password.
|
|
6
|
+
|
|
7
|
+
Built for the moment an agent has to hand something sensitive to a person: an `.env` file, a key,
|
|
8
|
+
a database dump, a finished report.
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
You need a [VitalSend](https://vitalsend.eu) account. A free account sends a few files a month.
|
|
13
|
+
|
|
14
|
+
**Claude Code**, as a plugin from this repository:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/plugin install vitalsend --marketplace vitalsend/mcp
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
or as a plain MCP server:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
claude mcp add vitalsend -- npx -y @vitalsend/mcp
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Cursor** (`~/.cursor/mcp.json` or `.cursor/mcp.json` in a project)
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"mcpServers": {
|
|
31
|
+
"vitalsend": { "command": "npx", "args": ["-y", "@vitalsend/mcp"] }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**Claude Desktop** (`claude_desktop_config.json`). Claude Desktop does not tell the tool which
|
|
37
|
+
folder you work in, so name it:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"mcpServers": {
|
|
42
|
+
"vitalsend": {
|
|
43
|
+
"command": "npx",
|
|
44
|
+
"args": ["-y", "@vitalsend/mcp"],
|
|
45
|
+
"env": { "VITALSEND_ROOT": "/Users/you/projects/acme" }
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**CI and scripts.** Create an API key under Connected apps on your
|
|
52
|
+
[account page](https://vitalsend.eu/me/), optionally limited to a list of recipients, and set it:
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
"env": { "VITALSEND_API_KEY": "vsk_…" }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
With an API key every send names a recipient, the link is emailed, and there is no password.
|
|
59
|
+
|
|
60
|
+
**Apps that connect to a URL** (claude.ai in the browser and other web clients) cannot run a local
|
|
61
|
+
tool. `https://vitalsend.eu/mcp` tells them how to install it in an app that can.
|
|
62
|
+
|
|
63
|
+
## Use
|
|
64
|
+
|
|
65
|
+
Ask your agent: "Send `.env` to kalle@example.com with VitalSend."
|
|
66
|
+
|
|
67
|
+
The first time, your browser opens on vitalsend.eu: sign in (or create an account) and allow the
|
|
68
|
+
connection. After that:
|
|
69
|
+
|
|
70
|
+
1. Your app asks you to confirm each send: file, recipient, cost and the password. Copy the
|
|
71
|
+
password and send it to the recipient yourself, by text message for example, not by email.
|
|
72
|
+
2. VitalSend emails the link to the recipient. Without a recipient, your app shows you the link to
|
|
73
|
+
share.
|
|
74
|
+
|
|
75
|
+
These dialogs go to you, not to the model. An app that cannot show them opens a page on your
|
|
76
|
+
computer for the same steps.
|
|
77
|
+
|
|
78
|
+
The agent is told who it went to and when it expires. Nothing else.
|
|
79
|
+
|
|
80
|
+
The tool is `send_file(path, recipient_email?, password?)`. It reads files only inside the folders
|
|
81
|
+
your client shares with it; if the client shares none, inside `VITALSEND_ROOT`; failing both, inside
|
|
82
|
+
the folder it was started in, unless that is your home folder or `/`, where it refuses.
|
|
83
|
+
|
|
84
|
+
## Security model
|
|
85
|
+
|
|
86
|
+
- The file is encrypted on your computer with the same code vitalsend.eu runs in the browser
|
|
87
|
+
([vitalsend/crypto](https://github.com/vitalsend/crypto)). Only ciphertext leaves it.
|
|
88
|
+
- The link key, the password, your login and the file id never go to the model: not in a tool
|
|
89
|
+
result, not in an error, not in a log.
|
|
90
|
+
- The password never reaches VitalSend. The server gets a value derived from the password and the
|
|
91
|
+
link key, which lets it count wrong attempts and nothing else.
|
|
92
|
+
- When VitalSend emails the link, its server handles the link key for that delivery. With a
|
|
93
|
+
password, that key alone does not open the file. To keep VitalSend out entirely, leave out the
|
|
94
|
+
recipient and share the link yourself.
|
|
95
|
+
- The dialogs that show the password and the link are your app's own; their text and your answer go
|
|
96
|
+
between the app and this tool, never into the conversation the model reads.
|
|
97
|
+
- The page that shows the password, for apps without such dialogs, lives on `127.0.0.1` at a random address, answers only the
|
|
98
|
+
browser tab that loaded it, and closes afterwards. A program running as you that loads it first
|
|
99
|
+
stops the send. Beyond that, anything running as you can read what you can read.
|
|
100
|
+
- Your login is a send-only grant: it can send files and spend credits, nothing else. Revoke it
|
|
101
|
+
under Connected apps on your account page.
|
|
102
|
+
|
|
103
|
+
## License
|
|
104
|
+
|
|
105
|
+
AGPL-3.0-or-later. Source: [github.com/vitalsend/mcp](https://github.com/vitalsend/mcp).
|