neozip-mcp 0.1.0-beta
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/.cursor/mcp.json.global.example +10 -0
- package/CHANGELOG.md +16 -0
- package/DOCUMENTATION.md +40 -0
- package/LICENSE +16 -0
- package/README.md +223 -0
- package/SECURITY.md +37 -0
- package/dist/account/account-state.js +86 -0
- package/dist/account/format-account-status.js +37 -0
- package/dist/account/identity-provision.js +75 -0
- package/dist/account/identity-wrap.js +69 -0
- package/dist/account/profile-crypto.js +47 -0
- package/dist/account/profile-store.js +108 -0
- package/dist/account/require-account.js +29 -0
- package/dist/account/token-service-identity.js +395 -0
- package/dist/account/types.js +2 -0
- package/dist/account/wallet-evm.js +39 -0
- package/dist/archive/blockchain-status.js +303 -0
- package/dist/archive/crypto-self.js +114 -0
- package/dist/archive/detect-text.js +56 -0
- package/dist/archive/embed-metadata.js +283 -0
- package/dist/archive/encryption.js +166 -0
- package/dist/archive/extract-entry-buffer.js +18 -0
- package/dist/archive/find-entry.js +21 -0
- package/dist/archive/grep-content.js +141 -0
- package/dist/archive/identity-key.js +176 -0
- package/dist/archive/manifest.js +55 -0
- package/dist/archive/merkle.js +31 -0
- package/dist/archive/metadata-paths.js +14 -0
- package/dist/archive/mint-archive.js +61 -0
- package/dist/archive/open-archive.js +23 -0
- package/dist/archive/read-entry-buffer.js +11 -0
- package/dist/archive/read-entry-content.js +51 -0
- package/dist/archive/recipient-access.js +26 -0
- package/dist/archive/recipient-decrypt.js +21 -0
- package/dist/archive/recipient-lookup.js +55 -0
- package/dist/archive/timestamp-network.js +54 -0
- package/dist/config/capabilities.js +37 -0
- package/dist/config/index.js +74 -0
- package/dist/connect-cli.js +312 -0
- package/dist/connection/coordinator.js +74 -0
- package/dist/connection/credentials.js +29 -0
- package/dist/connection/crypto.js +56 -0
- package/dist/connection/dump.js +79 -0
- package/dist/connection/incomplete-setup.js +81 -0
- package/dist/connection/interactive.js +814 -0
- package/dist/connection/legacy-profile-reader.js +47 -0
- package/dist/connection/magic-link.js +138 -0
- package/dist/connection/migrate.js +76 -0
- package/dist/connection/onboarding.js +524 -0
- package/dist/connection/origin.js +63 -0
- package/dist/connection/phase.js +93 -0
- package/dist/connection/phone.js +20 -0
- package/dist/connection/promote-active.js +53 -0
- package/dist/connection/reset.js +20 -0
- package/dist/connection/setup-guidance.js +154 -0
- package/dist/connection/status-report.js +40 -0
- package/dist/connection/store.js +352 -0
- package/dist/connection/token-auth.js +42 -0
- package/dist/connection/types.js +2 -0
- package/dist/connection/wallet-setup.js +70 -0
- package/dist/constants/wallet-identity.js +11 -0
- package/dist/index.js +47 -0
- package/dist/load-env.js +16 -0
- package/dist/neozipkit-node.js +11 -0
- package/dist/register/resources.js +14 -0
- package/dist/register/tools.js +77 -0
- package/dist/resources/zip-resource.js +40 -0
- package/dist/resources/zip-uri.js +23 -0
- package/dist/security/auth.js +28 -0
- package/dist/security/capabilities.js +85 -0
- package/dist/security/rate-limiter.js +43 -0
- package/dist/security/resource-limiter.js +44 -0
- package/dist/security/sandbox.js +61 -0
- package/dist/server.js +32 -0
- package/dist/startup-account-gate.js +101 -0
- package/dist/startup-summary.js +40 -0
- package/dist/token-service/require-configured.js +23 -0
- package/dist/tools/account.js +504 -0
- package/dist/tools/compress.js +237 -0
- package/dist/tools/connect-status.js +143 -0
- package/dist/tools/extract.js +62 -0
- package/dist/tools/grep-entries.js +42 -0
- package/dist/tools/identity-status.js +157 -0
- package/dist/tools/info.js +147 -0
- package/dist/tools/list.js +118 -0
- package/dist/tools/lookup-recipient.js +37 -0
- package/dist/tools/mint.js +41 -0
- package/dist/tools/read-entry.js +35 -0
- package/dist/tools/search-entries.js +71 -0
- package/dist/tools/stamp.js +60 -0
- package/dist/tools/test.js +90 -0
- package/dist/tools/token-service-account.js +143 -0
- package/dist/tools/upgrade.js +60 -0
- package/dist/tools/verify.js +75 -0
- package/dist/tools/wallet-config-status.js +119 -0
- package/dist/tools/wallet-info.js +64 -0
- package/dist/translators/index.js +106 -0
- package/dist/types/index.js +7 -0
- package/dist/util/mask.js +30 -0
- package/dist/util/token-service-fetch.js +23 -0
- package/dist/vendor/neozipkit-pro.js +3 -0
- package/docs/NEOZIP_CONNECTION_STORE.md +238 -0
- package/docs/NEOZIP_CONNECT_CLI.md +185 -0
- package/docs/OPERATIONS.md +992 -0
- package/docs/examples/CLAUDE.md.example +22 -0
- package/docs/examples/claude/skills/neozip-mcp/SKILL.md +54 -0
- package/docs/examples/claude/skills/neozip-notarization/SKILL.md +75 -0
- package/docs/examples/mcp.json.claude.example +11 -0
- package/docs/examples/neozip-mcp-cursor-rule.mdc +31 -0
- package/docs/installation-guides/INSTALL_CLAUDE_CODE.md +286 -0
- package/docs/installation-guides/INSTALL_CLAUDE_WORKSPACE.md +301 -0
- package/docs/installation-guides/README.md +76 -0
- package/package.json +99 -0
|
@@ -0,0 +1,992 @@
|
|
|
1
|
+
# NeoZip MCP Operations Reference
|
|
2
|
+
|
|
3
|
+
> **Beta:** This package is in beta (`neozip-mcp@beta`). Tool names, parameters, and behavior may change before a stable release.
|
|
4
|
+
|
|
5
|
+
This document describes every MCP tool exposed by **neozip-mcp**, including parameters, options, requirements, and typical output.
|
|
6
|
+
|
|
7
|
+
Tools are enabled via capability groups (`NEOZIP_MCP_CAPABILITIES`, default **`auto`**):
|
|
8
|
+
|
|
9
|
+
| Group | Tools |
|
|
10
|
+
|-------|-------|
|
|
11
|
+
| `zip` | `compress`, `extract`, `list`, `info`, `test`, `read_entry`, `search_entries`, `grep_entries`, `upgrade_timestamped`, `token_service_status`, `lookup_recipient`, `wallet_config_status`, `identity_status`, **`connect_status`** |
|
|
12
|
+
| `blockchain` | `mint`, `verify`, `stamp`, `upgrade_timestamped`, `wallet_info`, `wallet_config_status`, `identity_status`, `token_service_status`, `token_service_register`, `token_service_verify`, `lookup_recipient`, **`connect_status`** |
|
|
13
|
+
| `readonly` | `list`, `info`, `test`, `verify`, `wallet_info`, `wallet_config_status`, `identity_status`, `read_entry`, `search_entries`, `grep_entries`, `upgrade_timestamped`, `token_service_status`, `lookup_recipient`, **`connect_status`** |
|
|
14
|
+
| `account` | `account_status`, `account_list`, `account_create`, `account_select`, `account_register_email`, `account_verify_email`, `account_create_wallet`, `account_import_wallet`, `account_link_wallet`, `account_provision_identity`, `account_remove`, `account_logout`, `account_initialize`, `wallet_config_status`, `identity_status`, **`connect_status`** |
|
|
15
|
+
|
|
16
|
+
### `auto` capabilities (default)
|
|
17
|
+
|
|
18
|
+
When unset or set to `auto`, the server resolves capabilities at startup from the NeoZip connection store:
|
|
19
|
+
|
|
20
|
+
| Connect state | Resolved groups |
|
|
21
|
+
|---------------|-----------------|
|
|
22
|
+
| `phase: ready` and access token valid | `zip`, `blockchain`, `readonly` |
|
|
23
|
+
| Otherwise (no profile, incomplete setup, expired token) | `zip`, `readonly` |
|
|
24
|
+
|
|
25
|
+
After `neozip-connect` finishes, reload MCP in your host (Cursor Settings, `claude mcp list`, etc.) so blockchain tools appear. Use an explicit comma list (e.g. `zip,readonly` or `zip`) to pin behavior regardless of connect state.
|
|
26
|
+
|
|
27
|
+
### Installed stdio: startup vs Token Service tools
|
|
28
|
+
|
|
29
|
+
The MCP server **starts by default** without requiring Token Service setup. With **`auto`** capabilities (default), blockchain tools are exposed only after `neozip-connect` reaches `phase: ready`. Tools that need the service (`stamp`, `compress` with `timestamp`/`tokenize`/`recipientEmails`, etc.) return a setup message at runtime when connect is incomplete.
|
|
30
|
+
|
|
31
|
+
Optional **startup gate** (server exits until `phase: ready`):
|
|
32
|
+
|
|
33
|
+
- Resolved capabilities include `blockchain` or `account` (happens automatically when `auto` and connect is ready)
|
|
34
|
+
- `NEOZIP_MCP_REQUIRE_ACCOUNT=true`
|
|
35
|
+
|
|
36
|
+
For strict stdio installs: run `neozip-connect`, then reload MCP.
|
|
37
|
+
|
|
38
|
+
**Host setup:** [installation-guides/INSTALL_CLAUDE_CODE.md](./installation-guides/INSTALL_CLAUDE_CODE.md), [installation-guides/INSTALL_CLAUDE_WORKSPACE.md](./installation-guides/INSTALL_CLAUDE_WORKSPACE.md), Cursor — package README and [`.cursor/mcp.json.global.example`](../.cursor/mcp.json.global.example).
|
|
39
|
+
|
|
40
|
+
All file paths must fall within the configured sandbox (`NEOZIP_MCP_SANDBOX_PATHS`, default: current working directory and home directory). Operations that read or write files validate paths before execution.
|
|
41
|
+
|
|
42
|
+
All tools return MCP text content. Errors are returned as `Error: <message>` rather than thrown.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## ZIP Operations
|
|
47
|
+
|
|
48
|
+
### `compress`
|
|
49
|
+
|
|
50
|
+
Create a ZIP archive from one or more files or directories.
|
|
51
|
+
|
|
52
|
+
**Parameters**
|
|
53
|
+
|
|
54
|
+
| Name | Type | Required | Description |
|
|
55
|
+
|------|------|----------|-------------|
|
|
56
|
+
| `input` | `string` or `string[]` | Yes | File or directory path(s) to include in the archive. Directories are expanded recursively. |
|
|
57
|
+
| `output` | `string` | Yes | Output archive path (`.zip` or `.nzip`). Parent directories are created if needed. |
|
|
58
|
+
| `options` | `object` | No | Compression and metadata options (see below). |
|
|
59
|
+
|
|
60
|
+
**Options**
|
|
61
|
+
|
|
62
|
+
| Name | Type | Default | Description |
|
|
63
|
+
|------|------|---------|-------------|
|
|
64
|
+
| `level` | `number` (0–9) | `6` | Compression level. Higher values generally produce smaller files at the cost of speed. |
|
|
65
|
+
| `method` | `"deflate"` \| `"zstd"` \| `"store"` | `"zstd"` | Compression method. Default is Zstandard; use `deflate` or `store` to override. |
|
|
66
|
+
| `password` | `string` | — | Password for encrypted archives. When set, entries are encrypted (default method: **NeoZip AES-256**). |
|
|
67
|
+
| `encryptionMethod` | `"zipcrypto"` \| `"aes256"` \| `"neo-aes256"` | `"neo-aes256"` (when `password` set) | PKZIP ZipCrypto, WinZip AES-256, or NeoZip AES-256. |
|
|
68
|
+
| `encryptionStrength` | `1` \| `2` \| `3` | — | **Deprecated.** Maps to `encryptionMethod`: `1` → zipcrypto, `2` → aes256, `3` → neo-aes256. Ignored when `encryptionMethod` is set. |
|
|
69
|
+
| `useSHA256` | `boolean` | `false` | Per-entry SHA-256 hashes and merkle root. **Auto-enabled** when `timestamp` or `tokenize` is `true`. Only needed for plain archives when you want merkle metadata without Token Service or on-chain steps. |
|
|
70
|
+
| `timestamp` | `boolean` | `false` | After compression, submit the merkle root to the **NeoZip Token Service** and embed `META-INF/TS-SUBMIT.NZIP`. Requires verified email via **neozip-connect** (or `options.recipientEmail`). Implies `useSHA256`. Mutually exclusive with `tokenize`. |
|
|
71
|
+
| `tokenize` | `boolean` | `false` | After compression, mint the merkle root on-chain and embed `META-INF/TOKEN.NZIP`. Requires wallet from **neozip-connect** (`finish`). Implies `useSHA256`. Mutually exclusive with `timestamp` — use this when a wallet is available; tokenized archives provide on-chain proof and supersede the timestamp-only path. |
|
|
72
|
+
| `recipientEmail` | `string` | connect profile email | Verified email for Token Service timestamp submission (used when `timestamp: true`). Also used as sender when `includeSenderAsRecipient` is true. |
|
|
73
|
+
| `recipientEmails` | `string[]` | — | Token Service emails for **recipient encryption** (`META-INF/ACCESS.NZIP`). Mutually exclusive with `password`, `timestamp`, and `tokenize`. |
|
|
74
|
+
| `includeSenderAsRecipient` | `boolean` | `true` | When `recipientEmails` is set, also encrypt for the neozip-connect profile email if that account has a provisioned public key. |
|
|
75
|
+
| `serverUrl` | `string` | connect profile URL | NeoZip Token Service base URL. |
|
|
76
|
+
| `network` | `string` | `NEOZIP_NETWORK` | Blockchain network for `tokenize` (e.g. `base-sepolia`). |
|
|
77
|
+
| `comment` | `string` | — | Archive comment stored in ZIP metadata. |
|
|
78
|
+
| `overwrite` | `boolean` | `false` | Overwrite `output` if it already exists. When `false`, the operation fails if the file exists. |
|
|
79
|
+
|
|
80
|
+
**Archive types**
|
|
81
|
+
|
|
82
|
+
| Goal | Options |
|
|
83
|
+
|------|---------|
|
|
84
|
+
| Plain archive (default) | Omit `useSHA256`, `timestamp`, and `tokenize` |
|
|
85
|
+
| SHA-256 archive only | `useSHA256: true` |
|
|
86
|
+
| Timestamped `.nzip` | `timestamp: true` (+ verified recipient email) |
|
|
87
|
+
| Tokenized `.nzip` | `tokenize: true` (+ wallet on supported network) |
|
|
88
|
+
| Password-protected | `password` (+ optional `encryptionMethod`) |
|
|
89
|
+
| Recipient-encrypted | `recipientEmails` (public keys from Token Service) |
|
|
90
|
+
|
|
91
|
+
**Recipient encryption (public-key)**
|
|
92
|
+
|
|
93
|
+
- Uses `@neowareinc/neozipkit-pro`: inner NeoZip AES-256 payload + ECIES-wrapped keys in `META-INF/ACCESS.NZIP`.
|
|
94
|
+
- Recipients must have provisioned X25519 keys on the Token Service (`GET /crypto/public?email=`). Use **`lookup_recipient`** before compress to verify an email.
|
|
95
|
+
- **Opening** archives: configure identity private key in MCP env only — `NEOZIP_IDENTITY_PRIVATE_KEY_HEX`, or `NEOZIP_TOKEN_SERVICE_ACCESS_TOKEN` + `NEOZIP_WALLET_PASSKEY` (wallet unwrap). Not supported via tool arguments.
|
|
96
|
+
- Cannot combine with `password`, `timestamp`, or `tokenize` in one `compress` call.
|
|
97
|
+
|
|
98
|
+
**Example — recipient-encrypted archive**
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"input": ["test/fixtures/calgary/bib"],
|
|
103
|
+
"output": "test/output/sample-recipient.nzip",
|
|
104
|
+
"options": {
|
|
105
|
+
"recipientEmails": ["colleague@example.com"],
|
|
106
|
+
"includeSenderAsRecipient": true,
|
|
107
|
+
"overwrite": true
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Password encryption**
|
|
113
|
+
|
|
114
|
+
- Supported via neozipkit: legacy **ZipCrypto** (`zipcrypto`), **WinZip AES-256** (`aes256`), and **NeoZip AES-256** (`neo-aes256`, default when only `password` is provided).
|
|
115
|
+
- When `password` is set, compression uses **deflate** instead of zstd (neozipkit encrypted path).
|
|
116
|
+
- **Security:** passwords appear in MCP tool-call JSON (visible to the model). Prefer env-driven fixture scripts (`NEOZIP_FIXTURE_PASSWORD`) for automation, not chat-inline secrets for production archives.
|
|
117
|
+
- **Blockchain:** `useSHA256`, `timestamp`, and `tokenize` operate on encrypted payloads; verification tools still need `options.password` to decrypt entries first.
|
|
118
|
+
|
|
119
|
+
**Example — encrypted archive**
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"input": ["docs/OPERATIONS.md"],
|
|
124
|
+
"output": "test/output/encrypted.nzip",
|
|
125
|
+
"options": {
|
|
126
|
+
"password": "your-secret",
|
|
127
|
+
"encryptionMethod": "neo-aes256",
|
|
128
|
+
"overwrite": true
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Example — plain archive**
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"input": ["test/fixtures/calgary"],
|
|
138
|
+
"output": "test/output/sample.nzip",
|
|
139
|
+
"options": {
|
|
140
|
+
"overwrite": true
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**Example — timestamped archive**
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"input": ["test/fixtures/calgary"],
|
|
150
|
+
"output": "test/output/sample-timestamped.nzip",
|
|
151
|
+
"options": {
|
|
152
|
+
"timestamp": true,
|
|
153
|
+
"overwrite": true
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**Example — tokenized archive**
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
{
|
|
162
|
+
"input": ["test/fixtures/calgary"],
|
|
163
|
+
"output": "test/output/sample-tokenized.nzip",
|
|
164
|
+
"options": {
|
|
165
|
+
"tokenize": true,
|
|
166
|
+
"overwrite": true
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Legacy example — explicit SHA-256 only**
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"input": ["/home/user/documents/report.pdf", "/home/user/documents/data/"],
|
|
176
|
+
"output": "/home/user/archives/report.nzip",
|
|
177
|
+
"options": {
|
|
178
|
+
"method": "zstd",
|
|
179
|
+
"level": 9,
|
|
180
|
+
"useSHA256": true,
|
|
181
|
+
"overwrite": true
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
**Output**
|
|
187
|
+
|
|
188
|
+
Summary including output path, file count, archive size, and when applicable merkle root / Token Service batch ID / on-chain token ID.
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### `extract`
|
|
193
|
+
|
|
194
|
+
Extract a ZIP archive to a directory.
|
|
195
|
+
|
|
196
|
+
**Parameters**
|
|
197
|
+
|
|
198
|
+
| Name | Type | Required | Description |
|
|
199
|
+
|------|------|----------|-------------|
|
|
200
|
+
| `input` | `string` | Yes | Path to the ZIP archive. |
|
|
201
|
+
| `output` | `string` | Yes | Destination directory for extracted files. |
|
|
202
|
+
| `options` | `object` | No | Extraction behavior (see below). |
|
|
203
|
+
|
|
204
|
+
**Options**
|
|
205
|
+
|
|
206
|
+
| Name | Type | Default | Description |
|
|
207
|
+
|------|------|---------|-------------|
|
|
208
|
+
| `password` | `string` | — | Password for encrypted archives. |
|
|
209
|
+
| `overwrite` | `boolean` | `false` | Overwrite existing files at the destination. When `false`, existing files are skipped. |
|
|
210
|
+
| `createDirectories` | `boolean` | `true` | Create the output directory (and parent paths) if it does not exist. |
|
|
211
|
+
| `preserveTimestamps` | `boolean` | `false` | Preserve original file modification times from the archive. |
|
|
212
|
+
|
|
213
|
+
**Example**
|
|
214
|
+
|
|
215
|
+
```json
|
|
216
|
+
{
|
|
217
|
+
"input": "/home/user/archives/report.nzip",
|
|
218
|
+
"output": "/home/user/extracted/report",
|
|
219
|
+
"options": {
|
|
220
|
+
"overwrite": true,
|
|
221
|
+
"preserveTimestamps": true
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Output**
|
|
227
|
+
|
|
228
|
+
Summary with extracted file count, output path, and skipped file count (if any).
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
### `list`
|
|
233
|
+
|
|
234
|
+
List the contents of a ZIP archive.
|
|
235
|
+
|
|
236
|
+
**Parameters**
|
|
237
|
+
|
|
238
|
+
| Name | Type | Required | Description |
|
|
239
|
+
|------|------|----------|-------------|
|
|
240
|
+
| `input` | `string` | Yes | Path to the ZIP archive. |
|
|
241
|
+
| `options` | `object` | No | Listing format options (see below). |
|
|
242
|
+
|
|
243
|
+
**Options**
|
|
244
|
+
|
|
245
|
+
| Name | Type | Default | Description |
|
|
246
|
+
|------|------|---------|-------------|
|
|
247
|
+
| `password` | `string` | — | Password for encrypted archives. |
|
|
248
|
+
| `verbose` | `boolean` | `false` | Include compressed size, compression method, and modification date per entry. |
|
|
249
|
+
| `format` | `"text"` \| `"json"` | `"text"` | Return terminal-style text or a structured JSON manifest with `isTextSafe` per entry. |
|
|
250
|
+
|
|
251
|
+
**Example**
|
|
252
|
+
|
|
253
|
+
```json
|
|
254
|
+
{
|
|
255
|
+
"input": "/home/user/archives/report.nzip",
|
|
256
|
+
"options": { "verbose": true }
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Output**
|
|
261
|
+
|
|
262
|
+
Formatted listing with entry names, sizes, optional compression details, and archive totals (uncompressed size, compressed size, compression ratio).
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
### `info`
|
|
267
|
+
|
|
268
|
+
Get detailed metadata about a ZIP archive.
|
|
269
|
+
|
|
270
|
+
**Parameters**
|
|
271
|
+
|
|
272
|
+
| Name | Type | Required | Description |
|
|
273
|
+
|------|------|----------|-------------|
|
|
274
|
+
| `input` | `string` | Yes | Path to the ZIP archive. |
|
|
275
|
+
| `options` | `object` | No | Archive access options (see below). |
|
|
276
|
+
|
|
277
|
+
**Options**
|
|
278
|
+
|
|
279
|
+
| Name | Type | Default | Description |
|
|
280
|
+
|------|------|---------|-------------|
|
|
281
|
+
| `password` | `string` | — | Password for encrypted archives. |
|
|
282
|
+
| `format` | `"text"` \| `"json"` | `"text"` | Return terminal-style text or a structured JSON manifest with entry summaries and merkle root. |
|
|
283
|
+
|
|
284
|
+
**Example**
|
|
285
|
+
|
|
286
|
+
```json
|
|
287
|
+
{
|
|
288
|
+
"input": "/home/user/archives/report.nzip"
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**Output**
|
|
293
|
+
|
|
294
|
+
Archive path, file size on disk, entry count, uncompressed/compressed totals, compression ratio, compression methods used, encrypted entry count and **encryption schemes** (if any), per-entry `encryptionScheme` in JSON manifests, archive comment (if present), **merkle root** (when entries contain SHA-256 hashes), **archiveKind** (`plain`, `timestamped-pending`, `timestamped-confirmed`, `tokenized`), and **blockchain** verification object when timestamp/token metadata is present (JSON format).
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
### `test`
|
|
299
|
+
|
|
300
|
+
Test the integrity of a ZIP archive by verifying each file entry.
|
|
301
|
+
|
|
302
|
+
**Parameters**
|
|
303
|
+
|
|
304
|
+
| Name | Type | Required | Description |
|
|
305
|
+
|------|------|----------|-------------|
|
|
306
|
+
| `input` | `string` | Yes | Path to the ZIP archive. |
|
|
307
|
+
| `options` | `object` | No | Verification options (see below). |
|
|
308
|
+
|
|
309
|
+
**Options**
|
|
310
|
+
|
|
311
|
+
| Name | Type | Default | Description |
|
|
312
|
+
|------|------|---------|-------------|
|
|
313
|
+
| `password` | `string` | — | Password for encrypted archives. |
|
|
314
|
+
| `verifyPassword` | `boolean` | `false` | Decrypt encrypted payload entries with `password` and confirm a wrong password does not yield the same plaintext. Requires `password`. |
|
|
315
|
+
| `skipHashCheck` | `boolean` | `false` | Skip SHA-256 / merkle hash verification during entry tests. |
|
|
316
|
+
| `skipBlockchainCheck` | `boolean` | `false` | Skip Token Service / on-chain verification for timestamped or tokenized archives. |
|
|
317
|
+
|
|
318
|
+
For archives with `META-INF/TS-SUBMIT.NZIP`, `META-INF/TIMESTAMP.NZIP`, or `META-INF/TOKEN.NZIP`, **test** also reports blockchain verification status (`VERIFIED`, `PENDING`, or `FAILED`) without failing payload integrity when the timestamp is still pending confirmation. When on-chain status is **PENDING**, output explains that the digest is queued at the Token Service until the batch is submitted to the blockchain. Archives that still contain `META-INF/TS-SUBMIT.NZIP` after the batch is confirmed emit a **WARNING**: on-chain checks go through the Token Service and cannot be verified independently until **upgrade** replaces submission metadata with `META-INF/TIMESTAMP.NZIP`.
|
|
319
|
+
|
|
320
|
+
**Example**
|
|
321
|
+
|
|
322
|
+
```json
|
|
323
|
+
{
|
|
324
|
+
"input": "/home/user/archives/report.nzip",
|
|
325
|
+
"options": { "skipHashCheck": false }
|
|
326
|
+
}
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**Example — verify password on encrypted archive**
|
|
330
|
+
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"input": "test/output/sample-encrypted.nzip",
|
|
334
|
+
"options": {
|
|
335
|
+
"password": "test-password",
|
|
336
|
+
"verifyPassword": true
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Fixture and cursor scenarios use the standard test password **`test-password`** (see `FIXTURE_TEST_PASSWORD` in `src/archive/encryption.ts`).
|
|
342
|
+
|
|
343
|
+
**Output**
|
|
344
|
+
|
|
345
|
+
Per-entry pass/fail status, overall integrity summary (`PASSED` or `FAILED`), optional **Password decrypt verification** when `verifyPassword` is true, and when metadata is present, blockchain verification status for timestamped or tokenized archives.
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
### `read_entry`
|
|
350
|
+
|
|
351
|
+
Read the text contents of a specific file inside a ZIP archive **without extracting the entire package**. Supports pagination to protect LLM context limits.
|
|
352
|
+
|
|
353
|
+
**Parameters**
|
|
354
|
+
|
|
355
|
+
| Name | Type | Required | Description |
|
|
356
|
+
|------|------|----------|-------------|
|
|
357
|
+
| `input` | `string` | Yes | Path to the ZIP archive. |
|
|
358
|
+
| `entryPath` | `string` | Yes | Relative path of the file inside the archive. |
|
|
359
|
+
| `options` | `object` | No | Archive access options (see below). |
|
|
360
|
+
| `offset` | `number` | No | Character offset to start reading from (default `0`). |
|
|
361
|
+
| `maxChars` | `number` | No | Maximum characters to return (default from `NEOZIP_MCP_DEFAULT_MAX_CHARS`, capped by `NEOZIP_MCP_MAX_READ_CHARS`). |
|
|
362
|
+
| `translate` | `boolean` | No | Apply content translators for JSON/CSV (default `true`). |
|
|
363
|
+
|
|
364
|
+
**Options (`options`)**
|
|
365
|
+
|
|
366
|
+
| Name | Type | Default | Description |
|
|
367
|
+
|------|------|---------|-------------|
|
|
368
|
+
| `password` | `string` | — | Password when the target entry (or archive) is encrypted. |
|
|
369
|
+
|
|
370
|
+
**Example**
|
|
371
|
+
|
|
372
|
+
```json
|
|
373
|
+
{
|
|
374
|
+
"input": "/home/user/archives/project.nzip",
|
|
375
|
+
"entryPath": "src/index.ts",
|
|
376
|
+
"offset": 0,
|
|
377
|
+
"maxChars": 8000
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
**Output (JSON)**
|
|
382
|
+
|
|
383
|
+
```json
|
|
384
|
+
{
|
|
385
|
+
"file_path": "src/index.ts",
|
|
386
|
+
"total_characters": 45000,
|
|
387
|
+
"has_more": true,
|
|
388
|
+
"next_offset": 8000,
|
|
389
|
+
"content": "/* file contents... */"
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
Content translators (Phase 1): plain text passthrough, JSON pretty-print/summarize, CSV to Markdown table. PDF, DOCX, XLSX, and XML are deferred.
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
### `search_entries`
|
|
398
|
+
|
|
399
|
+
Search file names inside a ZIP archive by keyword or regex without reading file contents.
|
|
400
|
+
|
|
401
|
+
**Parameters**
|
|
402
|
+
|
|
403
|
+
| Name | Type | Required | Description |
|
|
404
|
+
|------|------|----------|-------------|
|
|
405
|
+
| `input` | `string` | Yes | Path to the ZIP archive. |
|
|
406
|
+
| `query` | `string` | Yes | Keyword, glob pattern (`*`, `?`), or regex pattern. |
|
|
407
|
+
| `options` | `object` | No | Search options (see below). |
|
|
408
|
+
|
|
409
|
+
**Options**
|
|
410
|
+
|
|
411
|
+
| Name | Type | Default | Description |
|
|
412
|
+
|------|------|---------|-------------|
|
|
413
|
+
| `mode` | `"keyword"` \| `"regex"` | `"keyword"` | Match mode for the query. |
|
|
414
|
+
| `caseSensitive` | `boolean` | `false` | Case-sensitive matching. |
|
|
415
|
+
| `password` | `string` | — | Password for encrypted archives (required to read encrypted entry metadata). |
|
|
416
|
+
|
|
417
|
+
**Example**
|
|
418
|
+
|
|
419
|
+
```json
|
|
420
|
+
{
|
|
421
|
+
"input": "/home/user/archives/project.nzip",
|
|
422
|
+
"query": "src/**/*.ts",
|
|
423
|
+
"options": { "mode": "keyword" }
|
|
424
|
+
}
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
**Output**
|
|
428
|
+
|
|
429
|
+
JSON object with `matchCount` and `matches[]` including `path`, `uncompressedSize`, `isTextSafe`, and `contentType`.
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
### `grep_entries`
|
|
434
|
+
|
|
435
|
+
Search for text strings or regex matches **inside file contents** within a ZIP archive without extracting files to disk. Only scans `isTextSafe` entries.
|
|
436
|
+
|
|
437
|
+
**Parameters**
|
|
438
|
+
|
|
439
|
+
| Name | Type | Required | Description |
|
|
440
|
+
|------|------|----------|-------------|
|
|
441
|
+
| `input` | `string` | Yes | Path to the ZIP archive. |
|
|
442
|
+
| `pattern` | `string` | Yes | Text or regex pattern to search for in file contents. |
|
|
443
|
+
| `options` | `object` | No | Grep options (see below). |
|
|
444
|
+
|
|
445
|
+
**Options**
|
|
446
|
+
|
|
447
|
+
| Name | Type | Default | Description |
|
|
448
|
+
|------|------|---------|-------------|
|
|
449
|
+
| `mode` | `"keyword"` \| `"regex"` | `"keyword"` | Match mode for the pattern. |
|
|
450
|
+
| `caseSensitive` | `boolean` | `false` | Case-sensitive matching. |
|
|
451
|
+
| `pathFilter` | `string` | — | Optional glob or path prefix to limit scanned entries (e.g. `src/**/*.ts`). |
|
|
452
|
+
| `maxMatches` | `number` | `NEOZIP_MCP_GREP_MAX_MATCHES` | Cap total matches returned. |
|
|
453
|
+
| `contextLines` | `number` | `0` | Lines of context before/after each match. |
|
|
454
|
+
| `maxSnippetChars` | `number` | `NEOZIP_MCP_GREP_MAX_SNIPPET_CHARS` | Max characters per match snippet. |
|
|
455
|
+
| `password` | `string` | — | Password for encrypted archives (required to decrypt and scan entry bodies). |
|
|
456
|
+
|
|
457
|
+
**Example**
|
|
458
|
+
|
|
459
|
+
```json
|
|
460
|
+
{
|
|
461
|
+
"input": "/home/user/archives/project.nzip",
|
|
462
|
+
"pattern": "function handleError",
|
|
463
|
+
"options": {
|
|
464
|
+
"mode": "keyword",
|
|
465
|
+
"pathFilter": "src/**/*.js",
|
|
466
|
+
"contextLines": 1
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
**Output (JSON)**
|
|
472
|
+
|
|
473
|
+
```json
|
|
474
|
+
{
|
|
475
|
+
"archive": "/home/user/archives/project.nzip",
|
|
476
|
+
"pattern": "function handleError",
|
|
477
|
+
"mode": "keyword",
|
|
478
|
+
"filesScanned": 12,
|
|
479
|
+
"filesSkipped": 3,
|
|
480
|
+
"matchCount": 1,
|
|
481
|
+
"truncated": false,
|
|
482
|
+
"matches": [
|
|
483
|
+
{
|
|
484
|
+
"path": "src/utils.js",
|
|
485
|
+
"line": 87,
|
|
486
|
+
"column": 10,
|
|
487
|
+
"snippet": "export function handleError(err) {",
|
|
488
|
+
"contextBefore": ["..."],
|
|
489
|
+
"contextAfter": ["..."]
|
|
490
|
+
}
|
|
491
|
+
]
|
|
492
|
+
}
|
|
493
|
+
```
|
|
494
|
+
|
|
495
|
+
Entries larger than `NEOZIP_MCP_GREP_MAX_FILE_BYTES` (default 1 MB) are skipped. Binary or non-text-safe files are skipped without error.
|
|
496
|
+
|
|
497
|
+
---
|
|
498
|
+
|
|
499
|
+
## MCP Resources (`zip://`)
|
|
500
|
+
|
|
501
|
+
When ZIP read tools are enabled, the server exposes a resource template for direct archive entry access:
|
|
502
|
+
|
|
503
|
+
| URI pattern | Description |
|
|
504
|
+
|-------------|-------------|
|
|
505
|
+
| `zip://{archivePath}` | JSON manifest of archive entries |
|
|
506
|
+
| `zip://{archivePath}/{entryPath}` | Translated text content of a single entry |
|
|
507
|
+
|
|
508
|
+
Example: `zip:///home/user/archives/project.nzip/src/index.ts`
|
|
509
|
+
|
|
510
|
+
Pass optional resource argument **`password`** when reading encrypted entries (same as `read_entry` / `grep_entries`).
|
|
511
|
+
|
|
512
|
+
Resources reuse the same sandbox validation, in-memory extraction, and translators as `read_entry`.
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## Blockchain Operations
|
|
517
|
+
|
|
518
|
+
Blockchain tools use [neozip-blockchain](https://www.npmjs.com/package/neozip-blockchain). Wallet-backed operations require a wallet configured via **neozip-connect** (`~/.neozip/connection/`).
|
|
519
|
+
|
|
520
|
+
Default network: `base-sepolia` (`NEOZIP_NETWORK`).
|
|
521
|
+
|
|
522
|
+
---
|
|
523
|
+
|
|
524
|
+
### `mint`
|
|
525
|
+
|
|
526
|
+
Mint a ZIP merkle root as an NFT on the blockchain (Base network).
|
|
527
|
+
|
|
528
|
+
**Requirements**
|
|
529
|
+
|
|
530
|
+
- Wallet private key configured
|
|
531
|
+
- Valid 64-character hex merkle root (typically from a SHA-256-enabled archive)
|
|
532
|
+
|
|
533
|
+
**Parameters**
|
|
534
|
+
|
|
535
|
+
| Name | Type | Required | Description |
|
|
536
|
+
|------|------|----------|-------------|
|
|
537
|
+
| `merkleRoot` | `string` | Yes | 64-character hex SHA-256 merkle root to mint. |
|
|
538
|
+
| `options` | `object` | No | Minting options (see below). |
|
|
539
|
+
|
|
540
|
+
**Options**
|
|
541
|
+
|
|
542
|
+
| Name | Type | Default | Description |
|
|
543
|
+
|------|------|---------|-------------|
|
|
544
|
+
| `network` | `string` | `NEOZIP_NETWORK` | Target blockchain network (e.g. `base-sepolia`, `base`). |
|
|
545
|
+
|
|
546
|
+
**Example**
|
|
547
|
+
|
|
548
|
+
```json
|
|
549
|
+
{
|
|
550
|
+
"merkleRoot": "a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456",
|
|
551
|
+
"options": {
|
|
552
|
+
"network": "base-sepolia"
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
**Output**
|
|
558
|
+
|
|
559
|
+
Token ID, transaction hash, network, and merkle root on success.
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
### `verify`
|
|
564
|
+
|
|
565
|
+
Verify a tokenized ZIP file by checking `META-INF/TOKEN.NZIP` metadata against the blockchain.
|
|
566
|
+
|
|
567
|
+
**Parameters**
|
|
568
|
+
|
|
569
|
+
| Name | Type | Required | Description |
|
|
570
|
+
|------|------|----------|-------------|
|
|
571
|
+
| `input` | `string` | Yes | Path to the tokenized ZIP archive. |
|
|
572
|
+
| `options` | `object` | No | Verification options (see below). |
|
|
573
|
+
|
|
574
|
+
**Options**
|
|
575
|
+
|
|
576
|
+
| Name | Type | Default | Description |
|
|
577
|
+
|------|------|---------|-------------|
|
|
578
|
+
| `password` | `string` | — | Password when payload entries are encrypted. |
|
|
579
|
+
| `network` | `string` | — | Network hint for verification (passed through to verifier when supported). |
|
|
580
|
+
| `skipHash` | `boolean` | `false` | Skip local merkle root / hash comparison during verification. |
|
|
581
|
+
|
|
582
|
+
**Example**
|
|
583
|
+
|
|
584
|
+
```json
|
|
585
|
+
{
|
|
586
|
+
"input": "/home/user/archives/tokenized.nzip",
|
|
587
|
+
"options": { "skipHash": false }
|
|
588
|
+
}
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
**Output**
|
|
592
|
+
|
|
593
|
+
Verification status (`VERIFIED` or `FAILED`), token ID, network, calculated merkle root, and any verifier message.
|
|
594
|
+
|
|
595
|
+
---
|
|
596
|
+
|
|
597
|
+
### `stamp`
|
|
598
|
+
|
|
599
|
+
Submit a ZIP archive's merkle root to the **NeoZip Token Service** for blockchain timestamping.
|
|
600
|
+
|
|
601
|
+
The archive must contain per-entry SHA-256 hashes (create with `compress` and `options.timestamp: true`, or `useSHA256: true`). Stamping requires a verified recipient email on the Token Service. Metadata is embedded as `META-INF/TS-SUBMIT.NZIP`.
|
|
602
|
+
|
|
603
|
+
**Parameters**
|
|
604
|
+
|
|
605
|
+
| Name | Type | Required | Description |
|
|
606
|
+
|------|------|----------|-------------|
|
|
607
|
+
| `input` | `string` | Yes | Path to the SHA-256-enabled ZIP archive. |
|
|
608
|
+
| `options` | `object` | No | Token Service options (see below). |
|
|
609
|
+
|
|
610
|
+
**Options**
|
|
611
|
+
|
|
612
|
+
| Name | Type | Default | Description |
|
|
613
|
+
|------|------|---------|-------------|
|
|
614
|
+
| `recipientEmail` | `string` | connect profile email | Verified email address for Token Service authentication. |
|
|
615
|
+
| `serverUrl` | `string` | connect profile URL or library default | NeoZip Token Service base URL. |
|
|
616
|
+
|
|
617
|
+
**Configuration source**
|
|
618
|
+
|
|
619
|
+
| Source | Setting |
|
|
620
|
+
|--------|---------|
|
|
621
|
+
| `neozip-connect` (`~/.neozip/connection/`) | Verified email, access token, wallet key, Token Service URL |
|
|
622
|
+
|
|
623
|
+
**Example**
|
|
624
|
+
|
|
625
|
+
```json
|
|
626
|
+
{
|
|
627
|
+
"input": "/home/user/archives/report.nzip",
|
|
628
|
+
"options": {
|
|
629
|
+
"recipientEmail": "user@example.com",
|
|
630
|
+
"serverUrl": "https://testnet.token-service.neozip.io"
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
**Output**
|
|
636
|
+
|
|
637
|
+
Submission confirmation with merkle root, server URL, digest, status, and batch ID (when returned by the service).
|
|
638
|
+
|
|
639
|
+
---
|
|
640
|
+
|
|
641
|
+
### `upgrade_timestamped`
|
|
642
|
+
|
|
643
|
+
Upgrade Timestamped archive: replace pending submission metadata with confirmed timestamp metadata once the batch is on-chain.
|
|
644
|
+
|
|
645
|
+
Looks for timestamp metadata entries:
|
|
646
|
+
|
|
647
|
+
- Pending: `META-INF/TS-SUBMIT.NZIP`
|
|
648
|
+
- Confirmed: `META-INF/TIMESTAMP.NZIP`
|
|
649
|
+
|
|
650
|
+
**Parameters**
|
|
651
|
+
|
|
652
|
+
| Name | Type | Required | Description |
|
|
653
|
+
|------|------|----------|-------------|
|
|
654
|
+
| `input` | `string` | Yes | Path to the timestamped ZIP archive. |
|
|
655
|
+
| `output` | `string` | No | Output path for the upgraded archive. Defaults to `<input>-upgraded.<ext>`. |
|
|
656
|
+
| `options` | `object` | No | Token Service options (see below). |
|
|
657
|
+
|
|
658
|
+
**Options**
|
|
659
|
+
|
|
660
|
+
| Name | Type | Default | Description |
|
|
661
|
+
|------|------|---------|-------------|
|
|
662
|
+
| `serverUrl` | `string` | `TOKEN_SERVICE_URL` or library default | NeoZip Token Service base URL. |
|
|
663
|
+
| `wait` | `boolean` | `true` | Poll Token Service until the batch is confirmed (5-minute timeout, 5-second interval). Set `false` for a single verify check. |
|
|
664
|
+
| `overwrite` | `boolean` | `false` | Overwrite `output` if it already exists. |
|
|
665
|
+
|
|
666
|
+
**Example**
|
|
667
|
+
|
|
668
|
+
```json
|
|
669
|
+
{
|
|
670
|
+
"input": "/home/user/archives/pending.nzip",
|
|
671
|
+
"output": "/home/user/archives/confirmed.nzip",
|
|
672
|
+
"options": {
|
|
673
|
+
"serverUrl": "https://testnet.token-service.neozip.io",
|
|
674
|
+
"overwrite": true
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
**Output**
|
|
680
|
+
|
|
681
|
+
Upgrade status, input/output paths, merkle root, and transaction hash when the batch is confirmed. Returns an informational message if the timestamp is already confirmed or not yet ready.
|
|
682
|
+
|
|
683
|
+
*(Legacy tool name `upgrade` was renamed to `upgrade_timestamped`.)*
|
|
684
|
+
|
|
685
|
+
---
|
|
686
|
+
|
|
687
|
+
### `wallet_info`
|
|
688
|
+
|
|
689
|
+
Display wallet and network status. Does not require a wallet key to run, but balance and address details are only shown when a key is configured.
|
|
690
|
+
|
|
691
|
+
**Parameters**
|
|
692
|
+
|
|
693
|
+
| Name | Type | Required | Description |
|
|
694
|
+
|------|------|----------|-------------|
|
|
695
|
+
| `options` | `object` | No | Network selection (see below). |
|
|
696
|
+
|
|
697
|
+
**Options**
|
|
698
|
+
|
|
699
|
+
| Name | Type | Default | Description |
|
|
700
|
+
|------|------|---------|-------------|
|
|
701
|
+
| `network` | `string` | `NEOZIP_NETWORK` | Network to query for chain ID, contract address, and balance. |
|
|
702
|
+
|
|
703
|
+
**Example**
|
|
704
|
+
|
|
705
|
+
```json
|
|
706
|
+
{
|
|
707
|
+
"options": { "network": "base-sepolia" }
|
|
708
|
+
}
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
**Output**
|
|
712
|
+
|
|
713
|
+
Network name, chain ID, contract address, masked wallet key, wallet address, ETH balance (when RPC is available), and list of supported networks.
|
|
714
|
+
|
|
715
|
+
---
|
|
716
|
+
|
|
717
|
+
## NeoZip Token Service
|
|
718
|
+
|
|
719
|
+
NeoZip Token Service tools manage the **account, identity, and recipient keys** used for timestamping and recipient encryption. They talk to the Token Service API (or report local neozip-connect readiness) and are configured via **neozip-connect** (`~/.neozip/connection/`) — they do **not** operate on ZIP archives directly.
|
|
720
|
+
|
|
721
|
+
The default service URL comes from the neozip-connect profile; override per call with `options.serverUrl` where supported.
|
|
722
|
+
|
|
723
|
+
---
|
|
724
|
+
|
|
725
|
+
### `lookup_recipient`
|
|
726
|
+
|
|
727
|
+
Look up a recipient's Token Service X25519 public key by verified email (unauthenticated `GET /crypto/public`). Does not return private keys. Use before `compress` with `options.recipientEmails` to confirm an email is provisioned.
|
|
728
|
+
|
|
729
|
+
**Parameters**
|
|
730
|
+
|
|
731
|
+
| Name | Type | Required | Description |
|
|
732
|
+
|------|------|----------|-------------|
|
|
733
|
+
| `email` | `string` | Yes | Verified recipient email on the Token Service. |
|
|
734
|
+
| `options` | `object` | No | Optional `serverUrl` override. |
|
|
735
|
+
|
|
736
|
+
**Example**
|
|
737
|
+
|
|
738
|
+
```json
|
|
739
|
+
{
|
|
740
|
+
"email": "colleague@example.com"
|
|
741
|
+
}
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
**Output (JSON)**
|
|
745
|
+
|
|
746
|
+
Success object with `identity`, `identityType` (`zipstamp`), `evmAddress`, `recipientSuites`, and `cryptoProvisionedAt` when available.
|
|
747
|
+
|
|
748
|
+
---
|
|
749
|
+
|
|
750
|
+
### `token_service_status`
|
|
751
|
+
|
|
752
|
+
Check whether an email is registered and verified on the NeoZip Token Service (required before timestamping).
|
|
753
|
+
|
|
754
|
+
**Parameters**
|
|
755
|
+
|
|
756
|
+
| Name | Type | Required | Description |
|
|
757
|
+
|------|------|----------|-------------|
|
|
758
|
+
| `email` | `string` | No | Email to check. Defaults to neozip-connect profile email when configured. |
|
|
759
|
+
| `options` | `object` | No | Token Service options (see below). |
|
|
760
|
+
|
|
761
|
+
**Options**
|
|
762
|
+
|
|
763
|
+
| Name | Type | Default | Description |
|
|
764
|
+
|------|------|---------|-------------|
|
|
765
|
+
| `serverUrl` | `string` | `TOKEN_SERVICE_URL` or library default | NeoZip Token Service base URL. |
|
|
766
|
+
|
|
767
|
+
**Example**
|
|
768
|
+
|
|
769
|
+
```json
|
|
770
|
+
{
|
|
771
|
+
"email": "user@example.com"
|
|
772
|
+
}
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
**Output**
|
|
776
|
+
|
|
777
|
+
Service URL, masked email, verified yes/no, and next-step hints.
|
|
778
|
+
|
|
779
|
+
---
|
|
780
|
+
|
|
781
|
+
### `token_service_register`
|
|
782
|
+
|
|
783
|
+
Register an email and send a 6-digit verification code. Requires `blockchain` capability.
|
|
784
|
+
|
|
785
|
+
**Parameters**
|
|
786
|
+
|
|
787
|
+
| Name | Type | Required | Description |
|
|
788
|
+
|------|------|----------|-------------|
|
|
789
|
+
| `email` | `string` | Yes | Email address to register or re-send verification for. |
|
|
790
|
+
| `options` | `object` | No | Token Service options (see below). |
|
|
791
|
+
|
|
792
|
+
**Options**
|
|
793
|
+
|
|
794
|
+
| Name | Type | Default | Description |
|
|
795
|
+
|------|------|---------|-------------|
|
|
796
|
+
| `serverUrl` | `string` | `TOKEN_SERVICE_URL` or library default | NeoZip Token Service base URL. |
|
|
797
|
+
|
|
798
|
+
**Example**
|
|
799
|
+
|
|
800
|
+
```json
|
|
801
|
+
{
|
|
802
|
+
"email": "user@example.com"
|
|
803
|
+
}
|
|
804
|
+
```
|
|
805
|
+
|
|
806
|
+
**Output**
|
|
807
|
+
|
|
808
|
+
Confirmation that a verification email was sent; instructs user to call `token_service_verify` with the code.
|
|
809
|
+
|
|
810
|
+
---
|
|
811
|
+
|
|
812
|
+
### `token_service_verify`
|
|
813
|
+
|
|
814
|
+
Complete email verification with the 6-digit code from the registration email. Requires `blockchain` capability.
|
|
815
|
+
|
|
816
|
+
**Parameters**
|
|
817
|
+
|
|
818
|
+
| Name | Type | Required | Description |
|
|
819
|
+
|------|------|----------|-------------|
|
|
820
|
+
| `email` | `string` | Yes | Email address being verified. |
|
|
821
|
+
| `code` | `string` | Yes | 6-digit verification code from email. |
|
|
822
|
+
| `options` | `object` | No | Token Service options (see below). |
|
|
823
|
+
|
|
824
|
+
**Options**
|
|
825
|
+
|
|
826
|
+
| Name | Type | Default | Description |
|
|
827
|
+
|------|------|---------|-------------|
|
|
828
|
+
| `serverUrl` | `string` | `TOKEN_SERVICE_URL` or library default | NeoZip Token Service base URL. |
|
|
829
|
+
|
|
830
|
+
**Example**
|
|
831
|
+
|
|
832
|
+
```json
|
|
833
|
+
{
|
|
834
|
+
"email": "user@example.com",
|
|
835
|
+
"code": "123456"
|
|
836
|
+
}
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
**Output**
|
|
840
|
+
|
|
841
|
+
Verification success and reminder to run `neozip-connect verify` to store credentials, then reload MCP. Does not return or store Bearer session tokens in MCP env.
|
|
842
|
+
|
|
843
|
+
---
|
|
844
|
+
|
|
845
|
+
### `connect_status`
|
|
846
|
+
|
|
847
|
+
Fast **neozip-connect readiness** check for agents and users. No network calls; no secret values.
|
|
848
|
+
|
|
849
|
+
Call this **before** `compress` with `options.timestamp`, `options.tokenize`, or `options.recipientEmails`, or when setup errors mention neozip-connect.
|
|
850
|
+
|
|
851
|
+
**Parameters**
|
|
852
|
+
|
|
853
|
+
| Name | Type | Required | Description |
|
|
854
|
+
|------|------|----------|-------------|
|
|
855
|
+
| `options` | `object` | No | Output format (see below). |
|
|
856
|
+
|
|
857
|
+
**Options**
|
|
858
|
+
|
|
859
|
+
| Name | Type | Default | Description |
|
|
860
|
+
|------|------|---------|-------------|
|
|
861
|
+
| `format` | `"text"` \| `"json"` | `"text"` | Structured JSON for agents. |
|
|
862
|
+
|
|
863
|
+
**Example**
|
|
864
|
+
|
|
865
|
+
```json
|
|
866
|
+
{
|
|
867
|
+
"options": { "format": "json" }
|
|
868
|
+
}
|
|
869
|
+
```
|
|
870
|
+
|
|
871
|
+
**Output**
|
|
872
|
+
|
|
873
|
+
- **Phase** — `no_profile`, `email_unverified`, `no_wallet`, `ready`, etc.
|
|
874
|
+
- **Store** — path, connection counts, readable vs locked accounts
|
|
875
|
+
- **Store health** — `ok` or `unrecoverable` (corrupt / wrong-machine credentials; reset via `neozip-connect`)
|
|
876
|
+
- **compress options** — readiness for `timestamp`, `tokenize`, `recipientEmails`
|
|
877
|
+
- **Tool readiness** — `stamp`, `mint`, `tokenize`
|
|
878
|
+
- **Next commands** — interactive wizard (`neozip-connect`) and scriptable CLI step when different
|
|
879
|
+
- **Token expiry** — flag and re-auth guidance when the access token is expired
|
|
880
|
+
|
|
881
|
+
**Related:** `wallet_config_status` (credential sources), `identity_status` (Token Service `/crypto/self`).
|
|
882
|
+
|
|
883
|
+
---
|
|
884
|
+
|
|
885
|
+
### `wallet_config_status`
|
|
886
|
+
|
|
887
|
+
Report how MCP credentials are configured: capability groups, **neozip-connect** profile phase and store path, boolean flags for optional secret env vars (never values), and **readiness** for mint, tokenize, timestamp, and recipient decrypt. No network calls.
|
|
888
|
+
|
|
889
|
+
**Parameters**
|
|
890
|
+
|
|
891
|
+
| Name | Type | Required | Description |
|
|
892
|
+
|------|------|----------|-------------|
|
|
893
|
+
| `options` | `object` | No | Output format (see below). |
|
|
894
|
+
|
|
895
|
+
**Options**
|
|
896
|
+
|
|
897
|
+
| Name | Type | Default | Description |
|
|
898
|
+
|------|------|---------|-------------|
|
|
899
|
+
| `format` | `"text"` \| `"json"` | `"text"` | Structured JSON for agents. |
|
|
900
|
+
|
|
901
|
+
**Example**
|
|
902
|
+
|
|
903
|
+
```json
|
|
904
|
+
{
|
|
905
|
+
"options": { "format": "json" }
|
|
906
|
+
}
|
|
907
|
+
```
|
|
908
|
+
|
|
909
|
+
**Output**
|
|
910
|
+
|
|
911
|
+
Capabilities, wallet key source, network source, masked recipient email, Token Service URL, connection phase, secret flags, readiness (`mintReady`, `tokenizeReady`, `timestampReady`, `recipientDecryptConfigured`, `recipientDecryptUnwrapPath`), and pointers to `wallet_info` / `identity_status`.
|
|
912
|
+
|
|
913
|
+
---
|
|
914
|
+
|
|
915
|
+
### `identity_status`
|
|
916
|
+
|
|
917
|
+
Query Token Service `GET /crypto/self` with the neozip-connect access token (Bearer). Reports provisioned X25519 identity (`walletId`, `identityKeyId`, masked public key fingerprint, `recipientSuites`) and whether recipient-encrypted archives can be opened. Does **not** unwrap or return private keys.
|
|
918
|
+
|
|
919
|
+
**Parameters**
|
|
920
|
+
|
|
921
|
+
| Name | Type | Required | Description |
|
|
922
|
+
|------|------|----------|-------------|
|
|
923
|
+
| `options` | `object` | No | Server URL and output format. |
|
|
924
|
+
|
|
925
|
+
**Options**
|
|
926
|
+
|
|
927
|
+
| Name | Type | Default | Description |
|
|
928
|
+
|------|------|---------|-------------|
|
|
929
|
+
| `serverUrl` | `string` | `TOKEN_SERVICE_URL` / library default | Token Service base URL. |
|
|
930
|
+
| `format` | `"text"` \| `"json"` | `"text"` | Structured JSON for agents. |
|
|
931
|
+
|
|
932
|
+
**Requirements**
|
|
933
|
+
|
|
934
|
+
- neozip-connect access token; optional `NEOZIP_IDENTITY_PRIVATE_KEY_HEX` for decrypt readiness without calling `/crypto/self`.
|
|
935
|
+
- neozip-connect wallet required for the wallet+token unwrap path when env hex is not set.
|
|
936
|
+
|
|
937
|
+
**Output**
|
|
938
|
+
|
|
939
|
+
Access token configured, `/crypto/self` result (or error/hint on 404), `recipientDecryptReady`, optional warning if the connect profile email does not match the Token Service account email.
|
|
940
|
+
|
|
941
|
+
---
|
|
942
|
+
|
|
943
|
+
## Global Limits and Configuration
|
|
944
|
+
|
|
945
|
+
These settings apply across operations (not per-tool parameters):
|
|
946
|
+
|
|
947
|
+
| Variable | Default | Effect |
|
|
948
|
+
|----------|---------|--------|
|
|
949
|
+
| `NEOZIP_MCP_SANDBOX_PATHS` | cwd, home | Allowed directories for file paths |
|
|
950
|
+
| `NEOZIP_MCP_RATE_LIMIT` | `60` | ZIP tool requests per minute |
|
|
951
|
+
| `NEOZIP_MCP_BLOCKCHAIN_RATE_LIMIT` | `10` | Blockchain tool requests per minute |
|
|
952
|
+
| `NEOZIP_MCP_MAX_FILE_SIZE` | `524288000` (500 MB) | Maximum input file size |
|
|
953
|
+
| `NEOZIP_MCP_MAX_ENTRIES` | `10000` | Maximum ZIP entries per archive |
|
|
954
|
+
| `NEOZIP_MCP_TIMEOUT` | `300` | Operation timeout in seconds |
|
|
955
|
+
| `NEOZIP_MCP_DEFAULT_MAX_CHARS` | `10000` | Default `maxChars` for `read_entry` |
|
|
956
|
+
| `NEOZIP_MCP_MAX_READ_CHARS` | `100000` | Hard cap on characters returned by `read_entry` |
|
|
957
|
+
| `NEOZIP_MCP_GREP_MAX_MATCHES` | `100` | Default max matches for `grep_entries` |
|
|
958
|
+
| `NEOZIP_MCP_GREP_MAX_SNIPPET_CHARS` | `200` | Max snippet length per grep match |
|
|
959
|
+
| `NEOZIP_MCP_GREP_MAX_FILE_BYTES` | `1048576` (1 MB) | Skip grepping individual entries larger than this |
|
|
960
|
+
| `NEOZIP_NETWORK` | `base-sepolia` | Default blockchain network |
|
|
961
|
+
| `NEOZIP_TOKEN_SERVICE_INFO_URL` | `{profile URL}/info` | Setup docs link in Token Service error messages |
|
|
962
|
+
|
|
963
|
+
Token Service email, access token, wallet key, and service URL are loaded from **neozip-connect** only (`~/.neozip/connection/`).
|
|
964
|
+
|
|
965
|
+
---
|
|
966
|
+
|
|
967
|
+
## Typical Workflows
|
|
968
|
+
|
|
969
|
+
### Timestamp a ZIP
|
|
970
|
+
|
|
971
|
+
1. **compress** with `options.timestamp: true` (or `useSHA256: true` then **stamp**)
|
|
972
|
+
2. **stamp** with a verified `recipientEmail`
|
|
973
|
+
3. **upgrade_timestamped** after the batch is confirmed on-chain
|
|
974
|
+
|
|
975
|
+
### Tokenize and verify
|
|
976
|
+
|
|
977
|
+
1. **compress** with `options.timestamp: true` (or `useSHA256: true` then **stamp**)
|
|
978
|
+
2. **mint** with the merkle root from **info**
|
|
979
|
+
3. **verify** on the tokenized archive
|
|
980
|
+
|
|
981
|
+
### Integrity check
|
|
982
|
+
|
|
983
|
+
1. **list** or **info** for a quick overview
|
|
984
|
+
2. **test** for full per-entry integrity verification
|
|
985
|
+
|
|
986
|
+
### AI archive inspection (no full extraction)
|
|
987
|
+
|
|
988
|
+
1. **info** or **list** with `options.format: "json"` for a token-aware manifest (`isTextSafe` per entry)
|
|
989
|
+
2. **search_entries** to locate files by name or pattern
|
|
990
|
+
3. **grep_entries** to find matching lines across file contents
|
|
991
|
+
4. **read_entry** with `offset` / `maxChars` for paginated in-archive reading
|
|
992
|
+
5. Optionally fetch `zip://{archive}/{entry}` MCP resources for direct client binding
|