Atlas / MCP servers / imprezahost / impreza-mcp

impreza-mcpCAUTION

mcp/imprezahost/impreza-mcp

MCP server for Impreza Host: deploy custom apps to managed VPSes from your AI editor.

Verdict
CAUTION
Grade
B
Trust score
81 /100
Exposed tools
127 70r · 42w · 15d
Transport
stdio · streamable-http
License
MIT
Stars
0
01

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

Read from source at commit d18a7d4ca53cOBSERVED · 2026-10-11
02

Connect

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-code (npm)
claude mcp add impreza-mcp --env IMPREZA_API_KEY=${IMPREZA_API_KEY} --env IMPREZA_API_SECRET=${IMPREZA_API_SECRET} -- npx -y [email protected]
03

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.

ToolRiskDescription
impreza_account_inforeadGet the account profile: name, email, account status, currency, and current account balance (credit).
impreza_add_dns_recordwriteAdd a DNS record to an Impreza-managed domain.
impreza_add_onionwriteAdd a Tor v3 hidden service (.onion mirror) to a deployment that\
impreza_agent_activityreadWhat credentials on this account have actually DONE: every MCP tool call, newest first, with the
impreza_api_callreadRead one endpoint found with
impreza_api_searchreadFind a READ endpoint of the Impreza API by plain words —
impreza_app_cliwriteRun the app
impreza_backup_appreadBack up a running deployment
impreza_cancel_servicereadRequest cancellation of a service (VPS, dedicated, hosting) so it stops renewing.
impreza_change_domainreadRe-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_keywriteAttach SSH public keys to an Impreza Cloud VPS, so the customer can log in without a password.
impreza_cloud_create_imagewriteTake an image of an Impreza Cloud VPS — a point-in-time copy of the whole disk, kept at the
impreza_cloud_delete_imagedestructiveDelete a saved Impreza Cloud VPS image. This destroys a restore point — after it, that state
impreza_cloud_delete_rdnsdestructiveRemove the reverse DNS (PTR) of an Impreza Cloud VPS IP. Mail sent from the box will likely start being
impreza_cloud_powerwriteStart, stop or reboot an Impreza Cloud VPS. These are the cloud-VPS machines (a different
impreza_cloud_rdnsreadRead the reverse DNS (PTR) currently published for an IP on an Impreza Cloud VPS. Check it before changing
impreza_cloud_rescuereadBoot an Impreza Cloud VPS into rescue mode, or return it to normal. Rescue boots a live
impreza_cloud_resizewriteMove an Impreza Cloud VPS to a different instance size — more CPU/RAM/disk. Pick the size with
impreza_cloud_restore_imagereadRoll an Impreza Cloud VPS back to a saved image. DESTRUCTIVE: everything written since that
impreza_cloud_set_rdnswriteSet the reverse DNS (PTR) of an Impreza Cloud VPS IP. Needed before the box can send mail that is not rejected
impreza_configure_previewswriteTurn dark previews on or off for a git deployment, and set how long they live and how many may run at
impreza_create_taskwriteCreate a scheduled task on an app. Two kinds:
impreza_create_webhookwriteSubscribe an HTTPS endpoint to events on this account, so you stop polling. Everything here is
impreza_dedicated_bandwidthreadBandwidth / traffic graph data for a dedicated server. Use it to answer questions about usage, saturation or
impreza_dedicated_firewallreadChange the DDoS filtering on one IP of a dedicated server. Read the current state first with
impreza_dedicated_inforeadFull detail for one dedicated server — product and specs, location, contract dates, and which capabilities the
impreza_dedicated_ipsreadList the IP addresses assigned to a dedicated server together with their current reverse DNS (PTR). Feed one of
impreza_dedicated_kvmreadTurn the KVM-over-IP console on or off for a dedicated server — the out-of-band console that
impreza_dedicated_powerreadPower-control a dedicated server: boot it, shut it down, or reboot it. A shutdown or reboot interrupts
impreza_dedicated_reinstallreadReinstall the operating system on a dedicated server. DESTRUCTIVE AND NOT REVERSIBLE: the disks
impreza_dedicated_set_rdnswriteSet the reverse DNS (PTR) of one IP on a dedicated server — needed for mail delivery and for TLS/SSH banners
impreza_dedicated_statusreadCurrent power state of a dedicated server — the cheapest way to answer
impreza_delete_contextdestructivePermanently 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_recorddestructiveDelete a DNS record from an Impreza-managed domain. Identify it by
impreza_delete_taskdestructiveDelete 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_webhookdestructiveRemove a subscription and drop its pending deliveries. The secret goes with it, so this is not a way
impreza_deploy_catalog_appwriteInstall an app from the Impreza catalog (Vaultwarden, n8n, Nextcloud, etc.) on a target VPS. Use
impreza_deploy_customwriteDeploy a custom (non-catalog) app to an Impreza VPS. Four modes — pick exactly one:\n
impreza_discard_replaceddestructivePermanently delete the copy of the old data that a restore set aside, freeing that disk on the server. Pass the RESTORE job
impreza_doctorreadDiagnose this account in one call: the credential you are holding (scopes, expiry, spend ceiling),
impreza_domain_checkreadCheck domain availability + price before registering. Pass one domain or several comma-separated. Read-only.
impreza_domain_detailsreadGet a registered domain
impreza_domain_id_protectionreadBuy WHOIS privacy (ID protection) for a domain — replaces the registrant
impreza_domain_lockreadLock or unlock a domain at the registrar. Locked is the safe default and blocks transfers away —
impreza_domain_pricingwritePer-TLD registration, renewal and transfer pricing in the account currency. Use it to answer
impreza_domain_registrar_actionwriteRun one of the registrar
impreza_domain_transferwriteTransfer a domain in to Impreza from another registrar. Needs the EPP/auth code, which the
impreza_export_onion_keyreadExport 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_readreadCollect the result of an impreza_inspect_app read, or — with no read_id — list which of the app
impreza_get_cli_runwriteCollect 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_logsreadFetch 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_entryreadPoll 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_connectwriteWire up auto-deploy: connect a push webhook so every push to the deployment\
impreza_git_webhook_disconnectwriteStop 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_statuswriteCheck 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_detailsreadDetails of the Google Workspace service on a domain: plan, seats, status and renewal date. Use
impreza_google_dnsreadThe DNS records required for Google Workspace mail (MX and verification). Publish them with
impreza_google_setup_adminwriteCreate the administrator account that activates a Google Workspace order — the step that turns a paid order
impreza_hosting_autosslreadAsk cPanel to issue or renew the free AutoSSL certificate for a shared-hosting account — the
impreza_inspect_appreadLook at an app
impreza_list_appsreadList apps available in the Impreza curated catalog (Vaultwarden, n8n, Nextcloud, etc.).
impreza_list_backupsreadList this account
impreza_list_contextsreadList 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_credentialsreadEvery MCP credential on this account: what each may do, what it may touch, its budget and what is left
impreza_list_dedicatedreadList the dedicated / bare-metal servers on the account: service_id, hostname, product, location and state. The
impreza_list_deploymentsreadList the customer\
impreza_list_dnsreadList the DNS records (host, type, value, TTL, priority) for a domain on Impreza-managed DNS. Read-only.
impreza_list_invoicesreadList the account invoices with status, due date and total — the way to find what is owed before paying.
impreza_list_previewsreadLive dark previews of a git deployment — one ephemeral .onion per branch. Every mainstream preview
impreza_list_productswriteList the products the customer can order (VPS, Tor hosting, dedicated servers, ...) with pricing in the account currency.
impreza_list_serversreadList every Impreza-managed VPS the customer owns (and any external bring-your-own server they registered),
impreza_list_servicesreadList the customer
impreza_list_tasksreadList 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_webhooksreadEvery webhook subscription on this account: where each one posts, which events it asked for, whether
impreza_mint_subcredentialreadMint a NARROWER credential from the one you are holding, and hand it to a subtask. This is how you
impreza_onion_auth_addwriteAuthorize a new client on a deployment\
impreza_onion_auth_listreadList the authorized clients of a deployment\
impreza_onion_auth_revokedestructiveRevoke one client\
impreza_order_vpswriteOrder a VPS and pay from the account credit balance — the balance must already cover the price (top up first with
impreza_pay_invoicewritePay an invoice from the account CREDIT BALANCE (not a card). Get the id from
impreza_prepare_secret_entryreadPrepare 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_reportreadEverything Impreza stores about this account: every field, what it is for, how long it survives,
impreza_probe_deploymentreadCheck 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_domainreadRegister a new domain on the account. Check availability first with
impreza_restart_deploymentwriteRestart a deployment\
impreza_retire_previewreadTear down one preview now, without waiting for its TTL. The container goes, and so do the hidden
impreza_revoke_credentialdestructiveKill a credential immediately, and everything it minted, however deep — a kill switch that leaves the
impreza_rotate_build_secretsreadReplace 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_secretreadIssue a fresh HMAC secret for a subscription. The old one stops verifying the instant this returns, so
impreza_run_taskwriteRun 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_docsreadSearch the Impreza documentation and get the actual paragraph back. Use this BEFORE guessing an
impreza_set_deployment_varswriteChange a custom app
impreza_set_nameserverswriteReplace the authoritative nameservers for a domain (2–4 hostnames). Use to point a domain at Impreza DNS or
impreza_set_onion_profilewriteChange the hardening tier of a deployment\
impreza_titan_detailsreadDetails of the Titan Email service on a domain: plan, mailbox count and quota, status and renewal date. Titan is
impreza_titan_dnsreadThe exact DNS records a domain needs for Titan Email to work — MX plus SPF/DKIM. If the domain uses Impreza DNS
impreza_titan_webmailreadA one-time sign-in link to the Titan webmail / mail admin panel for a domain, so the customer can read mail or
impreza_topupwriteCreate an account-balance top-up invoice payable in crypto (BTC, XMR, USDT-TRC20, TRX) — Impreza is no-KYC
impreza_topup_paymentreadGet the crypto payment details for a top-up invoice so you can complete payment in-chat: the wallet ADDRESS +
impreza_topup_statusreadPoll a top-up invoice created by
impreza_uninstall_deploymentdestructiveUninstall a deployment (catalog or custom) by
impreza_update_accountwriteSet the registrant contact fields on this account (name, address, city, state, postcode, country, phone).
impreza_update_dns_recordwriteUpdate an existing DNS record on an Impreza-managed domain. Locate the record by
impreza_update_webhookwriteChange where a subscription posts, which events it wants, its label, or switch it off without deleting
impreza_upgrade_servicewriteMove an existing service (VPS, dedicated, hosting) to a different plan — the answer to
impreza_validate_manifestwriteCheck a custom-deploy manifest BEFORE deploying it. Returns
impreza_vps_create_backupwriteTrigger an on-demand backup of a Proxmox VPS. Poll
impreza_vps_create_backup_schedulewriteSet up automatic backups for a Proxmox VPS — the answer to
impreza_vps_create_snapshotwriteTake a snapshot of a VPS before doing something risky. Cheap and fast, and it is what makes a rollback possible
impreza_vps_delete_backupdestructiveDelete a VPS backup to free storage. Irreversible — if it is the only copy of a given date, that restore point
impreza_vps_delete_backup_scheduledestructiveStop an automatic backup schedule on a Proxmox VPS. Get the schedule_id from
impreza_vps_delete_snapshotdestructiveDelete 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_schedulesreadList the automatic backup schedules on a VPS — use it to answer
impreza_vps_list_backupsreadList the available backups for a Proxmox VPS (id, timestamp, size). Read-only.
impreza_vps_list_snapshotsreadList 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_templatesreadList the OS templates available for reinstalling a Proxmox VPS (template_id + label). Use to pick a
impreza_vps_offerreadWhat a new VPS can be, and what it costs. Lists the locations (with each jurisdiction\
impreza_vps_powerwriteChange a Proxmox VPS power state: start, shutdown (graceful ACPI), reboot, or stop (hard power-off).
impreza_vps_reinstalldestructiveDESTRUCTIVE: wipe and reinstall a Proxmox VPS from an OS template — ALL DATA ON THE VPS IS ERASED. Pick a
impreza_vps_reset_passworddestructiveSet a new root/administrator password on a VPS. Available for Proxmox VPS only. This REPLACES the
impreza_vps_resizereadGive a VPS more CPU, memory or disk — the answer to
impreza_vps_resize_recommendationreadWhether a configurable VPS needs more CPU, memory or disk, judged from its sustained load — the answer to
impreza_vps_restore_backupreadDESTRUCTIVE: restore a VPS from a backup, overwriting the current disk. Everything newer than the backup is
impreza_vps_rollback_snapshotreadDESTRUCTIVE: revert a VPS to a snapshot. Everything written after that snapshot — files, databases, mail, new
impreza_vps_set_hostnamewriteRename a VPS — sets the hostname the machine reports and, on Proxmox, the label shown in the
impreza_vps_statusreadGet a Proxmox VPS
impreza_webhook_deliveriesreadThe last 100 delivery attempts for one subscription: event type, how many tries, the HTTP code we got
04

Trust audit

CAUTIONgrade B · trust 81/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (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)

MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/setup.ts:67
console.log(`  ${step++}. replace \`imp_...\` / the secret with your real Impreza API key + secret`);
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/service-bindings-mcp.mjs:28
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
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/service-bindings-mcp.mjs:33
{deployment_id,binding_id,mode:'rotate',password:'must-not-be-forwarded'},
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
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
Why it matters. 15 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/fixtures/request-log.mjs:31
args: ['--import', new URL('./logged-fetch.mjs', import.meta.url).href, fileURLToPath(new URL('../../dist/server.js', import.meta.url))],
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/host-plan-mcp.mjs:18
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_
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/prompts-mcp.mjs:18
await assert.rejects(c.getPrompt({name:'../../private'}));checks++;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/onion-base-url-mcp.mjs:48
assert.equal(parse({ IMPREZA_PROXY: 'http://127.0.0.1:9050' }).success, false, 'http proxy scheme accepted');
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/privileged-audit-boundary-mcp.mjs:14
const url='http://127.0.0.1:'+port;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/redirect-mcp.mjs:12
srv.listen(0, '127.0.0.1', () => resolve({ srv, url: `http://127.0.0.1:${srv.address().port}` }));
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/socks5-faults-mcp.mjs:37
['redirect','HTTP/1.1 302 Found\r\nLocation: http://127.0.0.1/steal\r\nContent-Length: 0\r\n\r\n',/UNEXPECTED_REDIRECT/],
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/socks5-proxy-mcp.mjs:136
baseURL: `http://127.0.0.1:${apiPort}/v1`,
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, tar, zod, @types/node, @types/tar, @typescript-eslint/eslint-plugin, @typescript-eslint/parser, eslint
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
README.md:17
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
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
README.md:189
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
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha d18a7d4ca53cfull audit observations/trust-audit/mcp-server/imprezahost__impreza-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11d18a7d4ca53cCAUTIONB81first audit
06

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.

Advertisement