{"_id":"@denkprozesse-deploy/vibe","_rev":"7-3b324487fc47aa5ecf9164ea48b49b2a","name":"@denkprozesse-deploy/vibe","dist-tags":{"latest":"0.1.8"},"versions":{"0.1.0":{"name":"@denkprozesse-deploy/vibe","version":"0.1.0","author":{"name":"Denkprozesse"},"license":"UNLICENSED","_id":"@denkprozesse-deploy/vibe@0.1.0","maintainers":[{"name":"denkprozesse","email":"brand@denkprozesse.de"}],"homepage":"https://vibedeploy.denkprozesse.de","bin":{"vibedeploy":"dist/index.js"},"dist":{"shasum":"ad7a0b801f36d9f6610ddacf6ab006d815f0d642","tarball":"https://registry.npmjs.org/@denkprozesse-deploy/vibe/-/vibe-0.1.0.tgz","fileCount":8,"integrity":"sha512-pTSjV2TfsCAqs1J1ovDcRT7ij7RG6tfJdqtc7xdl74WJ7oWgic8mfmscQwauYEORTcNq6LwKy0Q/J9pilDKwLA==","signatures":[{"sig":"MEYCIQDUsmXijbOAgd+Fd4vDplmgGNeDazEagdriy9JSGucjNQIhAP1MlKnpVl1vHVIO3gxTllNGV5LhOVbxnDyms0weh/KL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36344},"type":"module","engines":{"node":">=18"},"scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"denkprozesse","email":"brand@denkprozesse.de"},"_npmVersion":"11.6.2","description":"VibeDeploy by Denkprozesse — deploy your vibe-coded apps to EU/GDPR-safe hosting straight from your AI tool (Claude, Cursor, Windsurf …) via MCP.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","undici":"^6.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibe_0.1.0_1782251322745_0.23974632079189462","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@denkprozesse-deploy/vibe","version":"0.1.1","author":{"name":"Denkprozesse"},"license":"UNLICENSED","_id":"@denkprozesse-deploy/vibe@0.1.1","maintainers":[{"name":"denkprozesse","email":"brand@denkprozesse.de"}],"homepage":"https://vibedeploy.dev","bin":{"vibedeploy":"dist/index.js"},"dist":{"shasum":"27979931f65197f3c0a9a539eefe59c8bde05ccf","tarball":"https://registry.npmjs.org/@denkprozesse-deploy/vibe/-/vibe-0.1.1.tgz","fileCount":8,"integrity":"sha512-YTgFCPQRYAhvaRRExcQAusc/btNAmofd0FhhTKPqiIuXltGA/Ls0ttd2lcDiPaOBOiQ4LlcNizDVxHR5koLxcA==","signatures":[{"sig":"MEQCICvfTzC7xBkSbJ0165mHeTGKT6MXQJCTWIlSd5zd1DsSAiAC/x0BwE1EJ10qcSKzJ3z+jZbnPAuPd6OoqUV2hY5nsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36212},"type":"module","engines":{"node":">=18"},"scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"denkprozesse","email":"brand@denkprozesse.de"},"_npmVersion":"11.6.2","description":"VibeDeploy by Denkprozesse — deploy your vibe-coded apps to EU/GDPR-safe hosting straight from your AI tool (Claude, Cursor, Windsurf …) via MCP.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","undici":"^6.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibe_0.1.1_1782258275002_0.013280137819335902","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@denkprozesse-deploy/vibe","version":"0.1.2","author":{"name":"Denkprozesse"},"license":"UNLICENSED","_id":"@denkprozesse-deploy/vibe@0.1.2","maintainers":[{"name":"denkprozesse","email":"brand@denkprozesse.de"}],"homepage":"https://vibedeploy.dev","bin":{"vibedeploy":"dist/index.js"},"dist":{"shasum":"fe992139e61258b1bc4c3a9918f860cfa4f0ab51","tarball":"https://registry.npmjs.org/@denkprozesse-deploy/vibe/-/vibe-0.1.2.tgz","fileCount":8,"integrity":"sha512-GxhuMA16ebC8NVLXAjqgHDknRCBHZIap7gF9YtLSeoevbiVBEwOwyLCvNNDsyEEGfE6OHc/kOoDWmXXgrlzzjQ==","signatures":[{"sig":"MEUCICeY1PkenKa39QJtWEFhJ/PGJmZWDiiz6dHZ6+1sSgexAiEA5zPwZNhjlEC716TFQgWBGuQdpbZWpaibtGs1IvaHPfw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44306},"type":"module","engines":{"node":">=18"},"scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"denkprozesse","email":"brand@denkprozesse.de"},"_npmVersion":"11.6.2","description":"VibeDeploy by Denkprozesse — deploy your vibe-coded apps to EU/GDPR-safe hosting straight from your AI tool (Claude, Cursor, Windsurf …) via MCP.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","undici":"^6.0.0","@modelcontextprotocol/sdk":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibe_0.1.2_1782305459174_0.5019700215691372","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@denkprozesse-deploy/vibe","version":"0.1.4","author":{"name":"Denkprozesse"},"license":"UNLICENSED","_id":"@denkprozesse-deploy/vibe@0.1.4","maintainers":[{"name":"denkprozesse","email":"brand@denkprozesse.de"}],"homepage":"https://vibedeploy.dev","bin":{"vibedeploy":"dist/index.js"},"dist":{"shasum":"65f81f4ed1f15b27f1bc5fa887d31c503c8e0a97","tarball":"https://registry.npmjs.org/@denkprozesse-deploy/vibe/-/vibe-0.1.4.tgz","fileCount":14,"integrity":"sha512-SZjRJjFeKKrmesBnPFe/Uq9hc4/YwAZl6JAY3je8UqHWCmwNpw/7us9fGAhKBOwQvoje6YkYa9oW9jyjPkrGjw==","signatures":[{"sig":"MEUCIHhhM7gJiG43Kd1TcIYOvXxL9iaERTMwZxuPeX8bxsPlAiEAnepyi+YGmUJswTQNflXTsJlMaK50XoKG0G2rS0rlvnE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":171986},"type":"module","engines":{"node":">=18"},"gitHead":"7af6aa971eb3b8b856d179324143ed7525bbecb2","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"denkprozesse","email":"brand@denkprozesse.de"},"_npmVersion":"11.6.2","description":"VibeDeploy by Denkprozesse â€” deploy your vibe-coded apps to EU/GDPR-safe hosting straight from your AI tool (Claude, Cursor, Windsurf â€¦) via MCP.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","cors":"^2.8.5","undici":"^6.0.0","express":"^5.0.0","express-rate-limit":"^8.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/cors":"^2.8.17","@types/node":"^20.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibe_0.1.4_1783635987625_0.25368248119229375","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@denkprozesse-deploy/vibe","version":"0.1.5","author":{"name":"Denkprozesse"},"license":"UNLICENSED","_id":"@denkprozesse-deploy/vibe@0.1.5","maintainers":[{"name":"denkprozesse","email":"brand@denkprozesse.de"}],"homepage":"https://vibedeploy.dev","bin":{"vibedeploy":"dist/index.js"},"dist":{"shasum":"04049cbc72263ae5112c5518f47d5503180f3edc","tarball":"https://registry.npmjs.org/@denkprozesse-deploy/vibe/-/vibe-0.1.5.tgz","fileCount":14,"integrity":"sha512-Bld3oyiNf8o5saA9JpGoh4wtKpSCmhZLvW4MMAIsAcViSxMOrQlO1lafCu8YeR/QaeOdkhap89X9QgeE+3Qoyg==","signatures":[{"sig":"MEQCID/thEFJ4u/XjFWep10WpI15qHwHg5G+AoMIZzcT1v5XAiAKJB3KQT3psGPr16cQ4cPHRWmPi8jl40jrAbaFEp7X1g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192331},"type":"module","engines":{"node":">=18"},"gitHead":"8677dd5fa45f4a41a34ee41259eccbfbad55a253","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"denkprozesse","email":"brand@denkprozesse.de"},"_npmVersion":"11.6.2","description":"VibeDeploy by Denkprozesse â€” deploy your vibe-coded apps to EU/GDPR-safe hosting straight from your AI tool (Claude, Cursor, Windsurf â€¦) via MCP.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","cors":"^2.8.5","undici":"^6.0.0","express":"^5.0.0","express-rate-limit":"^8.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/cors":"^2.8.17","@types/node":"^20.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibe_0.1.5_1785333741303_0.4647642022330467","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@denkprozesse-deploy/vibe","version":"0.1.6","author":{"name":"Denkprozesse"},"license":"UNLICENSED","_id":"@denkprozesse-deploy/vibe@0.1.6","maintainers":[{"name":"denkprozesse","email":"brand@denkprozesse.de"}],"homepage":"https://vibedeploy.dev","bin":{"vibedeploy":"dist/index.js"},"dist":{"shasum":"5cdba80fb853012548fb177288dce00159cf6ff5","tarball":"https://registry.npmjs.org/@denkprozesse-deploy/vibe/-/vibe-0.1.6.tgz","fileCount":17,"integrity":"sha512-nNbLBe1lb4KBEpFm6DqBxxm+zHUFkFeHa2PUAOC31EIp990LRDuaqLs1+spowEFvP2h0sNN+CWNe4zj7SrigXQ==","signatures":[{"sig":"MEYCIQDjvT64IJmDmbmEn4dpBEaMiVQB5OO4ZdBTyGElOW0OsQIhAIWCwusUgRl7nNe92At06kyocKe4wiCafG32XHE+bdfg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232421},"type":"module","engines":{"node":">=18"},"gitHead":"a11c66f8cafb74f85b3adced05abb64fa2b6b5ea","scripts":{"dev":"tsc --watch","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"denkprozesse","email":"brand@denkprozesse.de"},"_npmVersion":"11.6.2","description":"VibeDeploy by Denkprozesse â€” deploy your vibe-coded apps to EU/GDPR-safe hosting straight from your AI tool (Claude, Cursor, Windsurf â€¦) via MCP.","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^3.23.0","cors":"^2.8.5","undici":"^6.0.0","express":"^5.0.0","express-rate-limit":"^8.0.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/cors":"^2.8.17","@types/node":"^20.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibe_0.1.6_1785340241347_0.674339550941059","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@denkprozesse-deploy/vibe","version":"0.1.8","description":"VibeDeploy by Denkprozesse â€” deploy your vibe-coded apps to EU/GDPR-safe hosting straight from your AI tool (Claude, Cursor, Windsurf â€¦) via MCP.","license":"UNLICENSED","author":{"name":"Denkprozesse"},"homepage":"https://vibedeploy.dev","type":"module","bin":{"vibedeploy":"dist/index.js"},"engines":{"node":">=18"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsc --watch","prepublishOnly":"npm run build"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","undici":"^6.0.0","zod":"^3.23.0","express":"^5.0.0","cors":"^2.8.5","express-rate-limit":"^8.0.0"},"devDependencies":{"@types/node":"^20.0.0","@types/express":"^5.0.0","@types/cors":"^2.8.17","typescript":"^5.5.0"},"gitHead":"6ee344ffbdd1dbf9d16731a90d34d3a94aa0c932","_id":"@denkprozesse-deploy/vibe@0.1.8","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-q02ze2Ys65M9OoIM/J81EjwNhU0VPp+4Crctg09AoxMqoPlAlQ8dVYGbfpZ4zkgHCB4CjCdcuae4r5SPM5XUzA==","shasum":"bf2cfb5e8fb99d6342dd201624f996f941167a8e","tarball":"https://registry.npmjs.org/@denkprozesse-deploy/vibe/-/vibe-0.1.8.tgz","fileCount":20,"unpackedSize":280753,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFdJRfFshRUT4yzEJTkpipEyjeGp0F/P8kTmz+TZKSX3AiEA2d6Im17h9ylQAip1EQANDZHNTOHaIS4wN8GBvR+hVCE="}]},"_npmUser":{"name":"denkprozesse","email":"brand@denkprozesse.de"},"directories":{},"maintainers":[{"name":"denkprozesse","email":"brand@denkprozesse.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vibe_0.1.8_1785363149226_0.7515114042524542"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-23T21:48:42.607Z","modified":"2026-07-29T22:12:29.540Z","0.1.0":"2026-06-23T21:48:42.892Z","0.1.1":"2026-06-23T23:44:35.150Z","0.1.2":"2026-06-24T12:50:59.308Z","0.1.4":"2026-07-09T22:26:27.783Z","0.1.5":"2026-07-29T14:02:21.458Z","0.1.6":"2026-07-29T15:50:41.485Z","0.1.8":"2026-07-29T22:12:29.370Z"},"author":{"name":"Denkprozesse"},"license":"UNLICENSED","homepage":"https://vibedeploy.dev","description":"VibeDeploy by Denkprozesse â€” deploy your vibe-coded apps to EU/GDPR-safe hosting straight from your AI tool (Claude, Cursor, Windsurf â€¦) via MCP.","maintainers":[{"name":"denkprozesse","email":"brand@denkprozesse.de"}],"readme":"# @denkprozesse-deploy/vibe\r\n\r\nThe **VibeDeploy** MCP server. Install it into your AI tool (Claude, Cursor, Windsurf …) and deploy your vibe-coded web apps to EU/GDPR-safe hosting straight from chat — live URL in seconds, security-scanned, with German legal pages auto-generated.\r\n\r\n> Part of **VibeDeploy by Denkprozesse**. Marketing & dashboard: https://vibedeploy.dev\r\n\r\n## Install (one-liner)\r\n\r\n```bash\r\nclaude mcp add vibedeploy -- npx -y @denkprozesse-deploy/vibe\r\n```\r\n\r\nThen set your API key (see below). For Cursor / Windsurf / other MCP clients, add an equivalent stdio server entry running `npx -y @denkprozesse-deploy/vibe`.\r\n\r\n## Connect to your account (API key)\r\n\r\nThe server talks to the VibeDeploy Control-Plane API over HTTPS using a Bearer key — it never touches infrastructure directly.\r\n\r\n1. Create a free key in the dashboard: https://vibedeploy.dev/app.html\r\n2. Provide it via environment variable to the MCP server.\r\n\r\n### Environment variables\r\n\r\n| Variable | Required | Default | Purpose |\r\n|---|---|---|---|\r\n| `VIBEDEPLOY_API_KEY` | no | – | Bearer key minted in the dashboard (`vd_…`). Not needed if you claimed your site from chat, see below. |\r\n| `VIBEDEPLOY_API_URL` | no | `https://api.vibedeploy.dev` | Override only for self-hosting / staging. |\r\n\r\nThe key is resolved in this order: `VIBEDEPLOY_API_KEY`, then the key stored locally after a claim (`~/.vibedeploy/api-key`), then keyless with an anonymous device id.\r\n\r\nExample MCP client config (`mcpServers` entry):\r\n\r\n```json\r\n{\r\n  \"mcpServers\": {\r\n    \"vibedeploy\": {\r\n      \"command\": \"npx\",\r\n      \"args\": [\"-y\", \"@denkprozesse-deploy/vibe\"],\r\n      \"env\": { \"VIBEDEPLOY_API_KEY\": \"vd_your_key_here\" }\r\n    }\r\n  }\r\n}\r\n```\r\n\r\nWithout a key, every tool returns friendly setup instructions instead of failing — so you always know how to connect.\r\n\r\n## Publish first, register later (the claim flow)\r\n\r\nYou do not need an account to start. Say \"deploy this\" and the site is live in seconds. The claim IS the registration, and it is not a dead end: afterwards you keep editing the same site from the same chat.\r\n\r\n1. **`deploy`** without a key → the site is live under `…vibedeploy.dev`, unclaimed, TTL 24h. The response carries a claim link and a one-time handoff code (stored in `~/.vibedeploy/handoffs.json`, mode `0600`).\r\n2. You open the **claim link** and confirm the magic-link mail. The site is now yours.\r\n3. **`finish_claim`** exchanges the handoff code for your personal API key (`POST /auth/device/token`). The key lands in `~/.vibedeploy/api-key` (mode `0600`) and every tool picks it up from there.\r\n4. **`deploy` with `app=<slug>`** now updates that exact site in place — same URL, no second copy.\r\n\r\nBefore you change a site in a NEW chat, call **`get_source`** first: it returns the live file map, so the AI edits the actual state instead of rebuilding it from memory.\r\n\r\nNotes: the handoff code is a separate 256-bit secret (never the device id), single-use and worthless after 24h. Until the claim is done, `finish_claim` answers `pending` — that is not an error, just try again. On the hosted remote connector (`mcp.vibedeploy.dev`) there is no local storage, so the code and the key are shown in chat and you pass them yourself.\r\n\r\n## Hosted connector: sign in from chat (lazy authentication)\r\n\r\nThe remote connector `https://mcp.vibedeploy.dev/mcp` is stateless. It cannot hold an API key, so it does not ask for one. Instead it signs you in only when a step actually needs your account:\r\n\r\n1. **Public tools work with no login**: `initialize`, the tool list, `deploy` **without** `app`, `claim_url`, `finish_claim`, `status`, `logs`. That keeps the whole point of VibeDeploy intact, publish first, register later.\r\n2. The moment you call a tool that touches **your** sites (`list_apps`, `get_source`, `versions`, `get_env`, `set_env`, `set_domain`, `rollback`, `analytics`, `security_autofix`, or `deploy` **with** `app`), the connector answers `401` with a `WWW-Authenticate` challenge, per [RFC 6750](https://datatracker.ietf.org/doc/html/rfc6750#section-3) and the [MCP authorization spec](https://modelcontextprotocol.io/specification/latest/basic/authorization).\r\n3. Your AI tool shows a **Connect** card, you sign in with your e-mail plus the 6-digit code (the same magic-link login as the dashboard), you confirm the access, and the tool **retries the same call automatically**. Nothing is lost.\r\n4. Your AI tool keeps the token and refreshes it. That is why a **new chat weeks later** still reaches all sites of your account, without you pasting anything.\r\n\r\nDiscovery follows [RFC 9728](https://datatracker.ietf.org/doc/html/rfc9728): `GET /.well-known/oauth-protected-resource` (and the `/mcp` path variant) name the resource and the authorization server, `https://api.vibedeploy.dev`.\r\n\r\nAccess is **account-wide**, not per site: a new chat must reach every site you own, including the ones you create later. Revoking is immediate, the connected tool shows up in the dashboard under connected AI tools and the revoke button kills it, because every call re-checks the token against the API ([RFC 7662](https://datatracker.ietf.org/doc/html/rfc7662) introspection, cached for at most five seconds).\r\n\r\nServer-side environment for self-hosting this transport:\r\n\r\n| Variable | Required | Default | Purpose |\r\n|---|---|---|---|\r\n| `MCP_TRANSPORT` | yes for HTTP | `stdio` | `http` starts the remote transport. |\r\n| `PORT` | no | `8080` | Listen port. |\r\n| `MCP_BASE_URL` | no | `https://mcp.vibedeploy.dev` | Public base URL. `${MCP_BASE_URL}/mcp` is the `resource` value in the metadata and must match the API's `MCP_RESOURCE_URL` exactly. |\r\n| `VIBEDEPLOY_INTROSPECT_TOKEN` | yes for sign-in | – | Shared service secret for token introspection. Must equal `INTROSPECT_TOKEN` on the API. Missing on either side means tokens cannot be verified, and unverified tokens are never accepted. |\r\n\r\nIn this transport `VIBEDEPLOY_API_KEY` and `VIBEDEPLOY_DEVICE_ID` are ignored on purpose: many users share one process, and a single key in the environment would put every anonymous request into that one account.\r\n\r\n## Tools\r\n\r\n| Tool | What it does |\r\n|---|---|\r\n| `deploy` | Deploy a folder (`path`) or inline `files`. Returns live URL + claim link + build status. **On failure returns the build error plus a concrete fix hint** so your AI can self-heal and re-deploy. |\r\n| `finish_claim` | Finish a keyless deploy after the claim: exchanges the one-time handoff code for your API key, so you can keep editing the site from the same chat. Answers `pending` (not an error) until the claim is done. |\r\n| `get_source` | **Get the current state of a site before you change it.** Returns the live file map (text files in full, binaries as paths only) so a new chat edits the real state instead of rebuilding it. |\r\n| `status` | App status, URL, TTL/expiry, traffic, health. |\r\n| `logs` | Build/runtime logs (for self-heal). |\r\n| `list_apps` | All apps of your account: name (slug), id, URL, status, plan. |\r\n| `versions` | Deploy history of an app (version id, commit, status, date) for a targeted rollback. |\r\n| `rollback` | Restore a previous deployment (optional `version` from `versions`). |\r\n| `set_env` | Set or remove env vars (`key`+`value`, `vars`, `deletes`); warns if a secret is given a frontend-exposed key (`VITE_`, `NEXT_PUBLIC_`, …). |\r\n| `get_env` | Names of the env vars currently set. Values are never returned. |\r\n| `set_domain` | Attach a custom domain (Starter+). Returns DNS instructions + verification. |\r\n| `claim_url` | Get the one-time claim link to present in chat. |\r\n| `scan` | Latest security scan: score, findings, whether a deploy was blocked. |\r\n| `security_autofix` | Fix the scan findings automatically, re-scan and redeploy. |\r\n| `analytics` | Cookieless traffic stats: views, unique visitors, top pages and referrers (Pro). |\r\n\r\nTier-gates, claim/TTL logic, the security scanner and the deploy orchestration all live server-side in the Control Plane.\r\n\r\n## Development\r\n\r\n```bash\r\nnpm install\r\nnpm run build      # tsc → dist/\r\nnpm start          # run the stdio server locally\r\n```\r\n\r\nThe server speaks the MCP protocol on **stdout**; all diagnostics go to **stderr**.\r\n\r\n## Privacy\r\n\r\nEU data residency (Hetzner Falkenstein). See https://vibedeploy.dev for the data-processing terms.\r\n","readmeFilename":"README.md"}