vpsnet-mcp 2.3.10 → 2.3.11
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 +4 -2
- package/build/index.js +2 -2
- package/build/remote-policy.js +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -262,7 +262,9 @@ one. `list_restore_file_points`, `browse_restore_files` and
|
|
|
262
262
|
charge the account, never overwrite the disk, and never put a file back on the
|
|
263
263
|
server. Initially supported on Firecracker VPS.
|
|
264
264
|
|
|
265
|
-
Browsing is asynchronous. `browse_restore_files`
|
|
265
|
+
Browsing is asynchronous. `browse_restore_files` creates a persisted job and
|
|
266
|
+
queues worker activity, so its MCP annotation is `readOnlyHint: false` even
|
|
267
|
+
though the backup and running server are unchanged. It returns a browse id in a
|
|
266
268
|
pending state; poll `get_restore_file_browse` until `state` is `succeeded`.
|
|
267
269
|
Entries exist only in that state — a `failed` browse carries an `errorCode` and
|
|
268
270
|
no listing, and must not be presented as an empty directory.
|
|
@@ -736,7 +738,7 @@ everything else.
|
|
|
736
738
|
| `list_restore_points` | List whole-service restore points | `services:read` | free |
|
|
737
739
|
| `request_restore` | **Paid and destructive:** restore the whole service disk from a point | `services:read` | Paid: `services:restore` |
|
|
738
740
|
| `list_restore_file_points` | List browsable backup points and whether folder search is available (free) | `services:read` | free |
|
|
739
|
-
| `browse_restore_files` | Queue a
|
|
741
|
+
| `browse_restore_files` | Queue a backup directory listing job without restoring files | `services:read` | free |
|
|
740
742
|
| `get_restore_file_browse` | Poll a queued backup directory listing (free, read-only) | `services:read` | free |
|
|
741
743
|
|
|
742
744
|
### SSH Keys
|
package/build/index.js
CHANGED
|
@@ -3739,7 +3739,7 @@ export function createVpsnetServer(options = {}) {
|
|
|
3739
3739
|
};
|
|
3740
3740
|
});
|
|
3741
3741
|
server.registerTool("browse_restore_files", {
|
|
3742
|
-
description: "
|
|
3742
|
+
description: "Create a persisted asynchronous browse job to list one directory inside a backup point. This queues worker activity and stores the listing result; it does not restore files, change backup contents or the running server, or charge the account. Start at the backup root by passing only backupPointId. To open a subdirectory, pass sourceBrowseId plus the directoryEntryId of a type=directory entry from that result; filesystem paths are never accepted. A directory can hold an enormous number of files, so the server selects pages of 200 or 1,000 entries: while result.nextOffset is non-null, call again with the same sourceBrowseId and directoryEntryId and offset set to result.nextOffset. Use result.pageSize rather than assuming 200 when moving backwards. When nextOffset is null the listing cannot be paged further even if truncated is true — that is a capped scan; check result.listingStatus: 'complete' means the folder was read end to end, 'partial' means the listing is a bounded lower-bound slice, so never present it as the whole folder. Optionally pass filter to search entry NAMES in that one directory (substring, case-insensitive, never recursive) — but only when list_restore_file_points reported searchAvailable=true, otherwise this tool refuses rather than silently returning an unfiltered listing. The call is asynchronous: it returns a browse id in a pending state, and you must poll get_restore_file_browse until state is succeeded. Requires services:read and, because it is a POST, an API key that permits write operations plus an idempotencyKey.",
|
|
3743
3743
|
inputSchema: {
|
|
3744
3744
|
orderNo: serviceOrderNoSchema,
|
|
3745
3745
|
backupPointId: fileBrowsePointIdSchema,
|
|
@@ -3755,7 +3755,7 @@ export function createVpsnetServer(options = {}) {
|
|
|
3755
3755
|
},
|
|
3756
3756
|
annotations: {
|
|
3757
3757
|
title: "Browse backup files",
|
|
3758
|
-
readOnlyHint:
|
|
3758
|
+
readOnlyHint: false,
|
|
3759
3759
|
destructiveHint: false,
|
|
3760
3760
|
idempotentHint: true,
|
|
3761
3761
|
},
|
package/build/remote-policy.js
CHANGED
|
@@ -185,9 +185,9 @@ const deduplicatedTools = new Set([
|
|
|
185
185
|
'run_vm_command', 'inspect_vm', 'read_vm_file', 'write_vm_file', 'create_vm_file', 'cancel_vm_operation',
|
|
186
186
|
'create_function', 'invoke_function', 'confirm_service_order', 'confirm_domain_register',
|
|
187
187
|
]);
|
|
188
|
-
// These read guest state but queue durable operations, so their read scopes do
|
|
188
|
+
// These read guest or backup state but queue durable operations, so their read scopes do
|
|
189
189
|
// not imply a read-only MCP call.
|
|
190
|
-
const queuedReadTools = new Set(['inspect_vm', 'read_vm_file', 'get_application_health', 'get_application_logs', 'discover_service_containers']);
|
|
190
|
+
const queuedReadTools = new Set(['browse_restore_files', 'inspect_vm', 'read_vm_file', 'get_application_health', 'get_application_logs', 'discover_service_containers']);
|
|
191
191
|
// Keep cached aggregate calls valid, but advertise the individually scoped
|
|
192
192
|
// actions to new directory clients. The SDK uses one handler for tools/list;
|
|
193
193
|
// filtering its result leaves the normal tools/call dispatcher intact.
|