impreza-mcp 0.48.1 → 0.49.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 CHANGED
@@ -20,6 +20,21 @@ Set `IMPREZA_BASE_URL` before pairing for a different API endpoint. HTTPS is req
20
20
 
21
21
  An existing credential file is never overwritten. Revoke an old paired key in clientarea before removing its file and pairing again. If an exchange or disk write fails, the code may already have been consumed: check and revoke the new key in clientarea before generating another code. Restart the AI client after pairing.
22
22
 
23
+ ## Install the agent, enter secrets outside the chat, and protect custom apps (0.49.0)
24
+
25
+ - **`impreza_install_agent`** offers the Impreza agent on a managed VPS that does not have it yet, only with the
26
+ customer's explicit agreement: the first call installs nothing and returns a short-lived `confirm_token`; the second
27
+ call, with the same arguments plus that token, starts the install. **`impreza_get_agent_install`** says whether a VPS
28
+ can take it and follows the install until the agent is online.
29
+ - **Secrets never pass through the chat.** `impreza_prepare_secret_entry` returns a ten-minute, single-use portal link
30
+ for a secret variable of an existing app or variable group; the account owner opens it, signs in and types the value
31
+ there. `impreza_get_secret_entry` reports only `pending`, `stored`, `expired` or `cancelled` — never the value or a
32
+ hash of it. Tools now refuse secret values (passwords, Git tokens, onion private keys, build secrets) in their
33
+ arguments and point to the portal instead; the REST API is unchanged.
34
+ - **Jurisdiction failover for custom projects:** `impreza_deploy_custom` accepts `standby: true` to create a cold
35
+ standby on another server, from the **same pinned source** (image digest, exact git commit, or the frozen Compose
36
+ upload). The project must declare every persistent volume, and a custom pair cuts over only after a verified drill.
37
+
23
38
  ## Deployment progress and agent restarts
24
39
 
25
40
  Compose review and deployment accept
@@ -278,7 +293,7 @@ Static npm sites: choose build_strategy=node_npm_static with a Git/context sourc
278
293
 
279
294
  ## Status
280
295
 
281
- **Package version: 0.48.1.** The tool catalog covers app deployment plus account +
296
+ **Package version: 0.49.0.** The tool catalog covers app deployment plus account +
282
297
  crypto balance, catalog + ordering, domains/DNS + registration, invoices, VPS
283
298
  lifecycle with snapshots and backups, dedicated / bare-metal servers, plan
284
299
  upgrades, and Titan / Google Workspace mailboxes — with a setup wizard that
@@ -290,7 +305,7 @@ output kept, outbound webhooks so you stop polling, reading the app's own
290
305
  files, and running the app's own command line.
291
306
 
292
307
  The local (`npx`) server and the hosted OAuth connector expose the **same tool
293
- catalog — 212 tools in the local package**. Declared, one-direction gaps remain:
308
+ catalog — 216 tools in the local package**. Declared, one-direction gaps remain:
294
309
  `impreza_get_log_request` stays hosted-only (only the control plane resolves a
295
310
  bare `request_id`; locally, call `impreza_tail_logs` again on the application —
296
311
  requests dedupe); `impreza_list_approvals`, `impreza_get_approval` and
@@ -4228,6 +4228,48 @@ export const OUTPUT_SCHEMAS = {
4228
4228
  }
4229
4229
  }
4230
4230
  },
4231
+ "agentless_servers": {
4232
+ "type": "array",
4233
+ "$comment": "Only with an unrestricted credential; never present for a confined one.",
4234
+ "items": {
4235
+ "type": "object",
4236
+ "additionalProperties": false,
4237
+ "required": [
4238
+ "service_id",
4239
+ "hostname",
4240
+ "product",
4241
+ "agent_installable",
4242
+ "reason",
4243
+ "detail"
4244
+ ],
4245
+ "properties": {
4246
+ "service_id": {
4247
+ "type": "integer"
4248
+ },
4249
+ "hostname": {
4250
+ "type": "string"
4251
+ },
4252
+ "product": {
4253
+ "type": "string"
4254
+ },
4255
+ "agent_installable": {
4256
+ "type": [
4257
+ "boolean",
4258
+ "null"
4259
+ ]
4260
+ },
4261
+ "reason": {
4262
+ "type": [
4263
+ "string",
4264
+ "null"
4265
+ ]
4266
+ },
4267
+ "detail": {
4268
+ "type": "string"
4269
+ }
4270
+ }
4271
+ }
4272
+ },
4231
4273
  "generated_at": {
4232
4274
  "type": "string"
4233
4275
  }
@@ -4295,6 +4337,192 @@ export const OUTPUT_SCHEMAS = {
4295
4337
  }
4296
4338
  ]
4297
4339
  },
4340
+ "impreza_get_agent_install": {
4341
+ "type": "object",
4342
+ "anyOf": [
4343
+ {
4344
+ "type": "object",
4345
+ "additionalProperties": false,
4346
+ "required": [
4347
+ "service_id",
4348
+ "hostname",
4349
+ "product",
4350
+ "agent_installable",
4351
+ "reason",
4352
+ "detail",
4353
+ "about",
4354
+ "script_sha256",
4355
+ "state",
4356
+ "job",
4357
+ "agent"
4358
+ ],
4359
+ "properties": {
4360
+ "service_id": {
4361
+ "type": "integer"
4362
+ },
4363
+ "hostname": {
4364
+ "type": "string"
4365
+ },
4366
+ "product": {
4367
+ "type": "string"
4368
+ },
4369
+ "agent_installable": {
4370
+ "type": [
4371
+ "boolean",
4372
+ "null"
4373
+ ]
4374
+ },
4375
+ "reason": {
4376
+ "type": [
4377
+ "string",
4378
+ "null"
4379
+ ],
4380
+ "enum": [
4381
+ "server_stopped",
4382
+ "guest_agent_unavailable",
4383
+ "os_rhel_family",
4384
+ "os_unsupported",
4385
+ "os_unknown",
4386
+ "service_not_active",
4387
+ "not_provisioned",
4388
+ "control_panel_server",
4389
+ "install_in_progress",
4390
+ "agent_present",
4391
+ "platform_unavailable",
4392
+ "not_checked",
4393
+ null
4394
+ ]
4395
+ },
4396
+ "detail": {
4397
+ "type": "string"
4398
+ },
4399
+ "about": {
4400
+ "type": "string"
4401
+ },
4402
+ "script_sha256": {
4403
+ "type": "string"
4404
+ },
4405
+ "state": {
4406
+ "type": "string",
4407
+ "enum": [
4408
+ "not_started",
4409
+ "installing",
4410
+ "registering",
4411
+ "registered",
4412
+ "online",
4413
+ "failed"
4414
+ ]
4415
+ },
4416
+ "job": {
4417
+ "type": [
4418
+ "object",
4419
+ "null"
4420
+ ],
4421
+ "additionalProperties": false,
4422
+ "required": [
4423
+ "status",
4424
+ "attempts",
4425
+ "created_at",
4426
+ "last_error"
4427
+ ],
4428
+ "properties": {
4429
+ "status": {
4430
+ "type": "string"
4431
+ },
4432
+ "attempts": {
4433
+ "type": "integer"
4434
+ },
4435
+ "created_at": {
4436
+ "type": "string"
4437
+ },
4438
+ "last_error": {
4439
+ "type": "string"
4440
+ }
4441
+ }
4442
+ },
4443
+ "agent": {
4444
+ "type": [
4445
+ "object",
4446
+ "null"
4447
+ ],
4448
+ "additionalProperties": false,
4449
+ "required": [
4450
+ "status",
4451
+ "version"
4452
+ ],
4453
+ "properties": {
4454
+ "status": {
4455
+ "type": "string"
4456
+ },
4457
+ "version": {
4458
+ "type": "string"
4459
+ }
4460
+ }
4461
+ }
4462
+ }
4463
+ },
4464
+ {
4465
+ "type": "object",
4466
+ "additionalProperties": false,
4467
+ "required": [
4468
+ "error"
4469
+ ],
4470
+ "properties": {
4471
+ "error": {
4472
+ "type": "object",
4473
+ "additionalProperties": false,
4474
+ "required": [
4475
+ "code",
4476
+ "message",
4477
+ "next_steps"
4478
+ ],
4479
+ "properties": {
4480
+ "code": {
4481
+ "type": "string",
4482
+ "pattern": "^[A-Z][A-Z_0-9]{1,63}$"
4483
+ },
4484
+ "message": {
4485
+ "type": "string"
4486
+ },
4487
+ "next_steps": {
4488
+ "type": "array",
4489
+ "minItems": 1,
4490
+ "items": {
4491
+ "type": "object",
4492
+ "additionalProperties": false,
4493
+ "required": [
4494
+ "action",
4495
+ "doc"
4496
+ ],
4497
+ "properties": {
4498
+ "action": {
4499
+ "type": "string"
4500
+ },
4501
+ "tool": {
4502
+ "type": "string"
4503
+ },
4504
+ "missing": {
4505
+ "type": "array",
4506
+ "items": {
4507
+ "type": "string"
4508
+ }
4509
+ },
4510
+ "doc": {
4511
+ "type": "string",
4512
+ "pattern": "^https://docs[.]imprezahost[.]com/"
4513
+ },
4514
+ "requires": {
4515
+ "type": "string"
4516
+ }
4517
+ }
4518
+ }
4519
+ }
4520
+ }
4521
+ }
4522
+ }
4523
+ }
4524
+ ]
4525
+ },
4298
4526
  "impreza_get_app_read": {
4299
4527
  "type": "object",
4300
4528
  "anyOf": [
@@ -7838,6 +8066,98 @@ export const OUTPUT_SCHEMAS = {
7838
8066
  }
7839
8067
  ]
7840
8068
  },
8069
+ "impreza_get_secret_entry": {
8070
+ "type": "object",
8071
+ "anyOf": [
8072
+ {
8073
+ "type": "object",
8074
+ "additionalProperties": false,
8075
+ "properties": {
8076
+ "session_id": {
8077
+ "type": "string",
8078
+ "pattern": "^sen_[a-f0-9]{32}$"
8079
+ },
8080
+ "variable_name": {
8081
+ "type": "string"
8082
+ },
8083
+ "status": {
8084
+ "type": "string",
8085
+ "enum": [
8086
+ "pending",
8087
+ "stored",
8088
+ "expired",
8089
+ "cancelled"
8090
+ ]
8091
+ }
8092
+ },
8093
+ "required": [
8094
+ "session_id",
8095
+ "variable_name",
8096
+ "status"
8097
+ ]
8098
+ },
8099
+ {
8100
+ "type": "object",
8101
+ "additionalProperties": false,
8102
+ "required": [
8103
+ "error"
8104
+ ],
8105
+ "properties": {
8106
+ "error": {
8107
+ "type": "object",
8108
+ "additionalProperties": false,
8109
+ "required": [
8110
+ "code",
8111
+ "message",
8112
+ "next_steps"
8113
+ ],
8114
+ "properties": {
8115
+ "code": {
8116
+ "type": "string",
8117
+ "pattern": "^[A-Z][A-Z_0-9]{1,63}$"
8118
+ },
8119
+ "message": {
8120
+ "type": "string"
8121
+ },
8122
+ "next_steps": {
8123
+ "type": "array",
8124
+ "minItems": 1,
8125
+ "items": {
8126
+ "type": "object",
8127
+ "additionalProperties": false,
8128
+ "required": [
8129
+ "action",
8130
+ "doc"
8131
+ ],
8132
+ "properties": {
8133
+ "action": {
8134
+ "type": "string"
8135
+ },
8136
+ "tool": {
8137
+ "type": "string"
8138
+ },
8139
+ "missing": {
8140
+ "type": "array",
8141
+ "items": {
8142
+ "type": "string"
8143
+ }
8144
+ },
8145
+ "doc": {
8146
+ "type": "string",
8147
+ "pattern": "^https://docs[.]imprezahost[.]com/"
8148
+ },
8149
+ "requires": {
8150
+ "type": "string"
8151
+ }
8152
+ }
8153
+ }
8154
+ }
8155
+ }
8156
+ }
8157
+ }
8158
+ }
8159
+ ]
8160
+ },
7841
8161
  "impreza_get_service_binding_plan": {
7842
8162
  "type": "object",
7843
8163
  "anyOf": [
@@ -14201,6 +14521,114 @@ export const OUTPUT_SCHEMAS = {
14201
14521
  }
14202
14522
  ]
14203
14523
  },
14524
+ "impreza_prepare_secret_entry": {
14525
+ "type": "object",
14526
+ "anyOf": [
14527
+ {
14528
+ "type": "object",
14529
+ "additionalProperties": false,
14530
+ "properties": {
14531
+ "session_id": {
14532
+ "type": "string",
14533
+ "pattern": "^sen_[a-f0-9]{32}$"
14534
+ },
14535
+ "variable_name": {
14536
+ "type": "string"
14537
+ },
14538
+ "status": {
14539
+ "type": "string",
14540
+ "enum": [
14541
+ "pending",
14542
+ "stored",
14543
+ "expired",
14544
+ "cancelled"
14545
+ ]
14546
+ },
14547
+ "expires_at": {
14548
+ "type": "string"
14549
+ },
14550
+ "url": {
14551
+ "type": "string"
14552
+ },
14553
+ "onion_url": {
14554
+ "type": "string"
14555
+ },
14556
+ "note": {
14557
+ "type": "string"
14558
+ }
14559
+ },
14560
+ "required": [
14561
+ "session_id",
14562
+ "variable_name",
14563
+ "status",
14564
+ "expires_at",
14565
+ "url",
14566
+ "onion_url",
14567
+ "note"
14568
+ ]
14569
+ },
14570
+ {
14571
+ "type": "object",
14572
+ "additionalProperties": false,
14573
+ "required": [
14574
+ "error"
14575
+ ],
14576
+ "properties": {
14577
+ "error": {
14578
+ "type": "object",
14579
+ "additionalProperties": false,
14580
+ "required": [
14581
+ "code",
14582
+ "message",
14583
+ "next_steps"
14584
+ ],
14585
+ "properties": {
14586
+ "code": {
14587
+ "type": "string",
14588
+ "pattern": "^[A-Z][A-Z_0-9]{1,63}$"
14589
+ },
14590
+ "message": {
14591
+ "type": "string"
14592
+ },
14593
+ "next_steps": {
14594
+ "type": "array",
14595
+ "minItems": 1,
14596
+ "items": {
14597
+ "type": "object",
14598
+ "additionalProperties": false,
14599
+ "required": [
14600
+ "action",
14601
+ "doc"
14602
+ ],
14603
+ "properties": {
14604
+ "action": {
14605
+ "type": "string"
14606
+ },
14607
+ "tool": {
14608
+ "type": "string"
14609
+ },
14610
+ "missing": {
14611
+ "type": "array",
14612
+ "items": {
14613
+ "type": "string"
14614
+ }
14615
+ },
14616
+ "doc": {
14617
+ "type": "string",
14618
+ "pattern": "^https://docs[.]imprezahost[.]com/"
14619
+ },
14620
+ "requires": {
14621
+ "type": "string"
14622
+ }
14623
+ }
14624
+ }
14625
+ }
14626
+ }
14627
+ }
14628
+ }
14629
+ }
14630
+ ]
14631
+ },
14204
14632
  "impreza_prepare_service_binding": {
14205
14633
  "type": "object",
14206
14634
  "anyOf": [