relic-mcp 0.1.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/README.md ADDED
@@ -0,0 +1,90 @@
1
+ # relic-mcp
2
+
3
+ Publish a file as an encrypted relic and get back a shareable link. The
4
+ encryption key is generated on your machine and is never sent to the service.
5
+
6
+ ```bash
7
+ claude mcp add relic \
8
+ --env RELIC_SERVICE_ORIGIN=https://your-relic-service \
9
+ -- npx -y relic-mcp
10
+ ```
11
+
12
+ Then: *"publish ./report.md as a relic."*
13
+
14
+ For any client that takes a JSON config:
15
+
16
+ ```json
17
+ {
18
+ "mcpServers": {
19
+ "relic": {
20
+ "command": "npx",
21
+ "args": ["-y", "relic-mcp"],
22
+ "env": { "RELIC_SERVICE_ORIGIN": "https://your-relic-service" }
23
+ }
24
+ }
25
+ }
26
+ ```
27
+
28
+ ## What it does with your file
29
+
30
+ 1. Reads it from disk, in this process. It is never sent anywhere in plaintext.
31
+ 2. Draws a 128-bit key and a 26-character relic id independently from your
32
+ machine's CSPRNG. Neither derives from the other.
33
+ 3. Encrypts locally with AES-128-GCM under RFC 8188 `aes128gcm` framing.
34
+ 4. Uploads **only ciphertext**, straight to object storage under a signed URL.
35
+ It does not pass through the Relic service.
36
+ 5. Tells the service three things: a coarse renderer class from a seven-value
37
+ list, this client's name, and the ciphertext's byte length. Not your
38
+ filename, not the mimetype, not the contents.
39
+
40
+ Call the `relic_describe_client` tool and it will tell you all of this itself,
41
+ without reading a file or making a request.
42
+
43
+ ## What it does not protect against
44
+
45
+ The tool returns the full URL, and the key lives in that URL's fragment,
46
+ because handing you a usable link is the point. **So the key enters your
47
+ model's context and your session transcript on every publish.** Zero-knowledge
48
+ holds against the Relic operator. It does not hold against your model provider
49
+ or whoever stores your transcripts. That is structural, not a defect awaiting
50
+ a fix.
51
+
52
+ ## Why it runs locally
53
+
54
+ Encryption has to happen where the plaintext is, so a hosted version of this
55
+ would have to receive your file, which defeats the point. Nothing here is
56
+ fetched from the network and executed.
57
+
58
+ Because a local client is otherwise opaque, it ships as **readable source
59
+ rather than a compiled binary**. `dist/relic-mcp.js` is a single unminified
60
+ file and it is exactly what runs; the TypeScript it was built from is in the
61
+ same package. Releases carry npm provenance, a cryptographic attestation
62
+ binding the tarball to a specific commit and workflow.
63
+
64
+ ## Tools
65
+
66
+ | Tool | Input | Notes |
67
+ |---|---|---|
68
+ | `relic_publish` | `path`, optional `filename` | A filesystem path. Inline content is deliberately not accepted, so the plaintext never joins the key in your transcript. |
69
+ | `relic_describe_client` | none | Explains the encryption path. Reads nothing, sends nothing. |
70
+
71
+ ## Environment
72
+
73
+ | Variable | Meaning |
74
+ |---|---|
75
+ | `RELIC_SERVICE_ORIGIN` | The Relic service to publish to. |
76
+ | `RELIC_ORIGIN` | Origin used to build the shareable URL. Defaults to the above. |
77
+ | `RELIC_CLIENT_NAME` | Reported to the service as the publishing client. |
78
+ | `RELIC_MCP_HTTP` | `1` to serve Streamable HTTP instead of stdio. |
79
+ | `RELIC_MCP_PORT`, `RELIC_MCP_HOST` | HTTP bind. Defaults to `127.0.0.1:7333`. |
80
+ | `RELIC_MCP_ALLOWED_ORIGINS` | Comma-separated `Origin` allowlist for HTTP. |
81
+
82
+ ## Protocol
83
+
84
+ MCP revision `2026-07-28`, the stateless one: no handshake, no session, no
85
+ `Mcp-Session-Id`. Nothing is retained between calls. The handshake-based
86
+ revisions (`2025-11-25` and earlier) are still answered.
87
+
88
+ Requires Node 18 or newer.
89
+
90
+ MIT licensed. Source: https://github.com/TheBushidoCollective/artifacts