impreza-mcpCAUTION
MCP server for Impreza Host: deploy custom apps to managed VPSes from your AI editor.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Model Context Protocol server for Impreza Host. Lets AI coding tools (Claude Code, Cursor, Codex CLI, Continue, Zed, ...) deploy customer-built apps to managed Impreza VPSes without leaving the chat.
When you say "deploy this for me" to Claude with this MCP server loaded, Claude calls impreza_deploy_custom directly — packages your project, uploads it, builds + runs on your Impreza VPS, and reports back the URL.
Pair the local CLI
Generate a one-time code in clientarea under Impreza API → Connect an AI assistant, choosing the permissions the assistant needs. Run npx -y impreza-mcp login --code on the machine running the local MCP server. Codes expire after 10 minutes and can be used once.
The CLI exchanges the code at POST /v1/mcp/pair without sending any existing API credentials. It saves the returned key, secret, scopes and expiry in ~/.impreza/credentials.json; the code and secret are never printed. The directory uses mode 0700 and the file 0600 on POSIX. Windows uses a protected ACL granting access only to your account. The server reads this file automatically when neither credential environment variable is set. Explicit IMPREZA_API_KEY and IMPREZA_API_SECRET take precedence together; partial environment credentials never use a saved counterpart.
Set IMPREZA_BASE_URL before pairing for a different API endpoint. HTTPS is required; a v3 onion endpoint requires IMPREZA_PROXY with an explicit SOCKS5 proxy and never falls back to a direct connection. The endpoint and proxy are saved with the credential. A different API URL refuses the saved credential. Pairing never follows redirects or retries a code automatically.
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 revok
d18a7d4ca53cOBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add impreza-mcp --env IMPREZA_API_KEY=${IMPREZA_API_KEY} --env IMPREZA_API_SECRET=${IMPREZA_API_SECRET} -- npx -y [email protected]Exposed tools (127)
70 read · 42 write · 15 destructive. Blast radius: 15 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
impreza_account_info | read | Get the account profile: name, email, account status, currency, and current account balance (credit). |
impreza_add_dns_record | write | Add a DNS record to an Impreza-managed domain. |
impreza_add_onion | write | Add a Tor v3 hidden service (.onion mirror) to a deployment that\ |
impreza_agent_activity | read | What credentials on this account have actually DONE: every MCP tool call, newest first, with the |
impreza_api_call | read | Read one endpoint found with |
impreza_api_search | read | Find a READ endpoint of the Impreza API by plain words — |
impreza_app_cli | write | Run the app |
impreza_backup_app | read | Back up a running deployment |
impreza_cancel_service | read | Request cancellation of a service (VPS, dedicated, hosting) so it stops renewing. |
impreza_change_domain | read | Re-route a RUNNING deployment to a new clearnet hostname without touching its container or data. The agent regenerates its Caddy fragment + reloads zero-downtime; Let\ |
impreza_cloud_add_ssh_key | write | Attach SSH public keys to an Impreza Cloud VPS, so the customer can log in without a password. |
impreza_cloud_create_image | write | Take an image of an Impreza Cloud VPS — a point-in-time copy of the whole disk, kept at the |
impreza_cloud_delete_image | destructive | Delete a saved Impreza Cloud VPS image. This destroys a restore point — after it, that state |
impreza_cloud_delete_rdns | destructive | Remove the reverse DNS (PTR) of an Impreza Cloud VPS IP. Mail sent from the box will likely start being |
impreza_cloud_power | write | Start, stop or reboot an Impreza Cloud VPS. These are the cloud-VPS machines (a different |
impreza_cloud_rdns | read | Read the reverse DNS (PTR) currently published for an IP on an Impreza Cloud VPS. Check it before changing |
impreza_cloud_rescue | read | Boot an Impreza Cloud VPS into rescue mode, or return it to normal. Rescue boots a live |
impreza_cloud_resize | write | Move an Impreza Cloud VPS to a different instance size — more CPU/RAM/disk. Pick the size with |
impreza_cloud_restore_image | read | Roll an Impreza Cloud VPS back to a saved image. DESTRUCTIVE: everything written since that |
impreza_cloud_set_rdns | write | Set the reverse DNS (PTR) of an Impreza Cloud VPS IP. Needed before the box can send mail that is not rejected |
impreza_configure_previews | write | Turn dark previews on or off for a git deployment, and set how long they live and how many may run at |
impreza_create_task | write | Create a scheduled task on an app. Two kinds: |
impreza_create_webhook | write | Subscribe an HTTPS endpoint to events on this account, so you stop polling. Everything here is |
impreza_dedicated_bandwidth | read | Bandwidth / traffic graph data for a dedicated server. Use it to answer questions about usage, saturation or |
impreza_dedicated_firewall | read | Change the DDoS filtering on one IP of a dedicated server. Read the current state first with |
impreza_dedicated_info | read | Full detail for one dedicated server — product and specs, location, contract dates, and which capabilities the |
impreza_dedicated_ips | read | List the IP addresses assigned to a dedicated server together with their current reverse DNS (PTR). Feed one of |
impreza_dedicated_kvm | read | Turn the KVM-over-IP console on or off for a dedicated server — the out-of-band console that |
impreza_dedicated_power | read | Power-control a dedicated server: boot it, shut it down, or reboot it. A shutdown or reboot interrupts |
impreza_dedicated_reinstall | read | Reinstall the operating system on a dedicated server. DESTRUCTIVE AND NOT REVERSIBLE: the disks |
impreza_dedicated_set_rdns | write | Set the reverse DNS (PTR) of one IP on a dedicated server — needed for mail delivery and for TLS/SSH banners |
impreza_dedicated_status | read | Current power state of a dedicated server — the cheapest way to answer |
impreza_delete_context | destructive | Permanently remove an unused source upload after customer confirmation. Refuses versions referenced by apps. Does not uninstall apps or remove app volumes. Requires manage scope. |
impreza_delete_dns_record | destructive | Delete a DNS record from an Impreza-managed domain. Identify it by |
impreza_delete_task | destructive | Delete a scheduled task and its run history. Irreversible. To stop a task without losing what it did, call impreza_update_task with enabled=false instead — that is almost always what someone means by |
impreza_delete_webhook | destructive | Remove a subscription and drop its pending deliveries. The secret goes with it, so this is not a way |
impreza_deploy_catalog_app | write | Install an app from the Impreza catalog (Vaultwarden, n8n, Nextcloud, etc.) on a target VPS. Use |
impreza_deploy_custom | write | Deploy a custom (non-catalog) app to an Impreza VPS. Four modes — pick exactly one:\n |
impreza_discard_replaced | destructive | Permanently delete the copy of the old data that a restore set aside, freeing that disk on the server. Pass the RESTORE job |
impreza_doctor | read | Diagnose this account in one call: the credential you are holding (scopes, expiry, spend ceiling), |
impreza_domain_check | read | Check domain availability + price before registering. Pass one domain or several comma-separated. Read-only. |
impreza_domain_details | read | Get a registered domain |
impreza_domain_id_protection | read | Buy WHOIS privacy (ID protection) for a domain — replaces the registrant |
impreza_domain_lock | read | Lock or unlock a domain at the registrar. Locked is the safe default and blocks transfers away — |
impreza_domain_pricing | write | Per-TLD registration, renewal and transfer pricing in the account currency. Use it to answer |
impreza_domain_registrar_action | write | Run one of the registrar |
impreza_domain_transfer | write | Transfer a domain in to Impreza from another registrar. Needs the EPP/auth code, which the |
impreza_export_onion_key | read | Export the hidden-service identity as a JSON version:1 bundle containing onion, secret_key_b64 and public_key_b64 (both C Tor key files). The agent seals the bundle on the server to your X25519 |
impreza_get_app_read | read | Collect the result of an impreza_inspect_app read, or — with no read_id — list which of the app |
impreza_get_cli_run | write | Collect the output of an impreza_app_cli run, or — with no run_id — list which command lines this app has, what each is for, one working example, and the recent runs. The command runs on the customer |
impreza_get_logs | read | Fetch the last N lines of container logs for a deployment. Synchronous — the server enqueues a log-tail command for the agent, then waits up to ~25 seconds for the chunks to come back. Use this to debug a failed deploy ( |
impreza_get_secret_entry | read | Poll a session created by this credential: variable name and pending, stored, expired or cancelled only; never the secret value or its hash. |
impreza_git_webhook_connect | write | Wire up auto-deploy: connect a push webhook so every push to the deployment\ |
impreza_git_webhook_disconnect | write | Stop auto-deploying from git. Always clears the Impreza-side webhook state (further pushes are rejected — the token/signature no longer matches). For a GitHub one-click hook, supply |
impreza_git_webhook_status | write | Check whether a custom deployment is wired up for git-push auto-deploy. Returns the git url, branch, the mode (github one-click | manual generic | none), whether the webhook is active, and the payload URL the provider posts to. Use before calling |
impreza_google_details | read | Details of the Google Workspace service on a domain: plan, seats, status and renewal date. Use |
impreza_google_dns | read | The DNS records required for Google Workspace mail (MX and verification). Publish them with |
impreza_google_setup_admin | write | Create the administrator account that activates a Google Workspace order — the step that turns a paid order |
impreza_hosting_autossl | read | Ask cPanel to issue or renew the free AutoSSL certificate for a shared-hosting account — the |
impreza_inspect_app | read | Look at an app |
impreza_list_apps | read | List apps available in the Impreza curated catalog (Vaultwarden, n8n, Nextcloud, etc.). |
impreza_list_backups | read | List this account |
impreza_list_contexts | read | List uploaded source versions or inspect one context_id. Returns label, SHA256, size, retention, expiry and references; no archive bytes or storage paths. Retained sources in use do not expire. Use a listed context_id to create or redeploy an uploaded-source app. |
impreza_list_credentials | read | Every MCP credential on this account: what each may do, what it may touch, its budget and what is left |
impreza_list_dedicated | read | List the dedicated / bare-metal servers on the account: service_id, hostname, product, location and state. The |
impreza_list_deployments | read | List the customer\ |
impreza_list_dns | read | List the DNS records (host, type, value, TTL, priority) for a domain on Impreza-managed DNS. Read-only. |
impreza_list_invoices | read | List the account invoices with status, due date and total — the way to find what is owed before paying. |
impreza_list_previews | read | Live dark previews of a git deployment — one ephemeral .onion per branch. Every mainstream preview |
impreza_list_products | write | List the products the customer can order (VPS, Tor hosting, dedicated servers, ...) with pricing in the account currency. |
impreza_list_servers | read | List every Impreza-managed VPS the customer owns (and any external bring-your-own server they registered), |
impreza_list_services | read | List the customer |
impreza_list_tasks | read | List the scheduled tasks on an app — what runs, how often, and whether it is on. Pass a task_id to get that task |
impreza_list_webhooks | read | Every webhook subscription on this account: where each one posts, which events it asked for, whether |
impreza_mint_subcredential | read | Mint a NARROWER credential from the one you are holding, and hand it to a subtask. This is how you |
impreza_onion_auth_add | write | Authorize a new client on a deployment\ |
impreza_onion_auth_list | read | List the authorized clients of a deployment\ |
impreza_onion_auth_revoke | destructive | Revoke one client\ |
impreza_order_vps | write | Order a VPS and pay from the account credit balance — the balance must already cover the price (top up first with |
impreza_pay_invoice | write | Pay an invoice from the account CREDIT BALANCE (not a card). Get the id from |
impreza_prepare_secret_entry | read | Prepare a ten-minute, single-use portal link for a secret variable of an existing app or project/environment group. Send only target identifiers and variable_name, NEVER a value. The account owner opens the link and signs in. The secret is encrypted and applies on the next deployment. |
impreza_privacy_report | read | Everything Impreza stores about this account: every field, what it is for, how long it survives, |
impreza_probe_deployment | read | Check public DNS, certificate validation and the HTTPS HEAD response for an owned deployment hostname. No arbitrary URL, redirects, credentials, body reads or repairs. One attempt per account every 30 seconds. This does not verify application content or dependencies. |
impreza_register_domain | read | Register a new domain on the account. Check availability first with |
impreza_restart_deployment | write | Restart a deployment\ |
impreza_retire_preview | read | Tear down one preview now, without waiting for its TTL. The container goes, and so do the hidden |
impreza_revoke_credential | destructive | Kill a credential immediately, and everything it minted, however deep — a kill switch that leaves the |
impreza_rotate_build_secrets | read | Replace all existing build credential values for a custom deployment without redeploying. Supply exactly its build_secret_names. Refuses active operations. Values are encrypted and never returned. Explicitly redeploy when ready. Requires a control plane supporting build-secrets-v1. |
impreza_rotate_webhook_secret | read | Issue a fresh HMAC secret for a subscription. The old one stops verifying the instant this returns, so |
impreza_run_task | write | Run a scheduled task once, right now, without waiting for its next slot. This is how you confirm a task you just wrote does what was meant — an untested timer quietly does the wrong thing for a month. Returns a run id immediately; read the output with impreza_list_tasks once it lands. |
impreza_search_docs | read | Search the Impreza documentation and get the actual paragraph back. Use this BEFORE guessing an |
impreza_set_deployment_vars | write | Change a custom app |
impreza_set_nameservers | write | Replace the authoritative nameservers for a domain (2–4 hostnames). Use to point a domain at Impreza DNS or |
impreza_set_onion_profile | write | Change the hardening tier of a deployment\ |
impreza_titan_details | read | Details of the Titan Email service on a domain: plan, mailbox count and quota, status and renewal date. Titan is |
impreza_titan_dns | read | The exact DNS records a domain needs for Titan Email to work — MX plus SPF/DKIM. If the domain uses Impreza DNS |
impreza_titan_webmail | read | A one-time sign-in link to the Titan webmail / mail admin panel for a domain, so the customer can read mail or |
impreza_topup | write | Create an account-balance top-up invoice payable in crypto (BTC, XMR, USDT-TRC20, TRX) — Impreza is no-KYC |
impreza_topup_payment | read | Get the crypto payment details for a top-up invoice so you can complete payment in-chat: the wallet ADDRESS + |
impreza_topup_status | read | Poll a top-up invoice created by |
impreza_uninstall_deployment | destructive | Uninstall a deployment (catalog or custom) by |
impreza_update_account | write | Set the registrant contact fields on this account (name, address, city, state, postcode, country, phone). |
impreza_update_dns_record | write | Update an existing DNS record on an Impreza-managed domain. Locate the record by |
impreza_update_webhook | write | Change where a subscription posts, which events it wants, its label, or switch it off without deleting |
impreza_upgrade_service | write | Move an existing service (VPS, dedicated, hosting) to a different plan — the answer to |
impreza_validate_manifest | write | Check a custom-deploy manifest BEFORE deploying it. Returns |
impreza_vps_create_backup | write | Trigger an on-demand backup of a Proxmox VPS. Poll |
impreza_vps_create_backup_schedule | write | Set up automatic backups for a Proxmox VPS — the answer to |
impreza_vps_create_snapshot | write | Take a snapshot of a VPS before doing something risky. Cheap and fast, and it is what makes a rollback possible |
impreza_vps_delete_backup | destructive | Delete a VPS backup to free storage. Irreversible — if it is the only copy of a given date, that restore point |
impreza_vps_delete_backup_schedule | destructive | Stop an automatic backup schedule on a Proxmox VPS. Get the schedule_id from |
impreza_vps_delete_snapshot | destructive | Delete a snapshot to free disk space. The snapshot is gone for good, so anything it was the only copy of can no |
impreza_vps_list_backup_schedules | read | List the automatic backup schedules on a VPS — use it to answer |
impreza_vps_list_backups | read | List the available backups for a Proxmox VPS (id, timestamp, size). Read-only. |
impreza_vps_list_snapshots | read | List the snapshots of a VPS with their names and dates. A snapshot is a point-in-time image of the whole disk — |
impreza_vps_list_templates | read | List the OS templates available for reinstalling a Proxmox VPS (template_id + label). Use to pick a |
impreza_vps_offer | read | What a new VPS can be, and what it costs. Lists the locations (with each jurisdiction\ |
impreza_vps_power | write | Change a Proxmox VPS power state: start, shutdown (graceful ACPI), reboot, or stop (hard power-off). |
impreza_vps_reinstall | destructive | DESTRUCTIVE: wipe and reinstall a Proxmox VPS from an OS template — ALL DATA ON THE VPS IS ERASED. Pick a |
impreza_vps_reset_password | destructive | Set a new root/administrator password on a VPS. Available for Proxmox VPS only. This REPLACES the |
impreza_vps_resize | read | Give a VPS more CPU, memory or disk — the answer to |
impreza_vps_resize_recommendation | read | Whether a configurable VPS needs more CPU, memory or disk, judged from its sustained load — the answer to |
impreza_vps_restore_backup | read | DESTRUCTIVE: restore a VPS from a backup, overwriting the current disk. Everything newer than the backup is |
impreza_vps_rollback_snapshot | read | DESTRUCTIVE: revert a VPS to a snapshot. Everything written after that snapshot — files, databases, mail, new |
impreza_vps_set_hostname | write | Rename a VPS — sets the hostname the machine reports and, on Proxmox, the label shown in the |
impreza_vps_status | read | Get a Proxmox VPS |
impreza_webhook_deliveries | read | The last 100 delivery attempts for one subscription: event type, how many tries, the HTTP code we got |
Trust audit
CAUTIONgrade B · trust 81/100 Install with care. The audit found things worth knowing before you trust its output.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | WARN |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (4 observation(s))
- Shell
- declared (1 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (15)
console.log(` ${step++}. replace \`imp_...\` / the secret with your real Impreza API key + secret`);for(const args of [{deployment_id,binding_id:'../other'},{deployment_id:'../other',binding_id},{deployment_id,binding_id,password:'must-not-be-forwarded'}]) assert((await client.callTool({name:'imprez{deployment_id,binding_id,mode:'rotate',password:'must-not-be-forwarded'},impreza_cloud_delete_image, impreza_cloud_delete_rdns, impreza_delete_context, impreza_delete_dns_record, impreza_delete_task, impreza_delete_webhook, impreza_discard_replaced, impreza_onion_auth_revo
args: ['--import', new URL('./logged-fetch.mjs', import.meta.url).href, fileURLToPath(new URL('../../dist/server.js', import.meta.url))],const bad=[['host_permissions',{approved:true}],['prepare_host_plan',{service_id:true,operation:'vps.reinstall',template_id:3}],['prepare_host_plan',{service_id:799,operation:'vps.reinstall',template_await assert.rejects(c.getPrompt({name:'../../private'}));checks++;assert.equal(parse({ IMPREZA_PROXY: 'http://127.0.0.1:9050' }).success, false, 'http proxy scheme accepted');const url='http://127.0.0.1:'+port;
srv.listen(0, '127.0.0.1', () => resolve({ srv, url: `http://127.0.0.1:${srv.address().port}` }));['redirect','HTTP/1.1 302 Found\r\nLocation: http://127.0.0.1/steal\r\nContent-Length: 0\r\n\r\n',/UNEXPECTED_REDIRECT/],
baseURL: `http://127.0.0.1:${apiPort}/v1`,@modelcontextprotocol/sdk, tar, zod, @types/node, @types/tar, @typescript-eslint/eslint-plugin, @typescript-eslint/parser, eslint
The CLI exchanges the code at `POST /v1/mcp/pair` without sending any existing API credentials. It saves the returned key, secret, scopes and expiry in `~/.impreza/credentials.json`; the code and secr
Public build settings: generated node_npm and node_npm_static recipes accept public_build_vars, an object of string values available only to npm run build (including its prebuild/postbuild scripts). F
Gates applied: no_behavioural_pass.
d18a7d4ca53cfull audit observations/trust-audit/mcp-server/imprezahost__impreza-mcp.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | d18a7d4ca53c | CAUTION | B | 81 | first audit |
Questions
What is the impreza-mcp MCP server?
MCP server for Impreza Host: deploy custom apps to managed VPSes from your AI editor.
What tools does impreza-mcp expose?
127 in total: 70 read-only, 42 that write, and 15 that can delete or overwrite (impreza_cloud_delete_image, impreza_cloud_delete_rdns, impreza_delete_context, impreza_delete_dns_record, impreza_delete_task). Every one is listed on this page with its risk.
Is impreza-mcp safe to connect to an agent?
With care. The audit graded it B (81/100) and found 15 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 15 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does impreza-mcp need?
It reads IMPREZA_API_KEY and IMPREZA_API_SECRET from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does impreza-mcp run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as impreza-mcp at 0.49.0.
How current is this page?
The grade is for one exact copy of the source (d18a7d4ca53c), read on 2026-10-11. The repository is watched and re-audited when it changes.