mcp-vibepowerpack 1.2.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jens Duttke
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,406 @@
1
+ <h1 align="center">๐ŸŽจ Vibe Powerpack MCP ๐ŸŽจ</h1>
2
+ <h3 align="center">Stop typing choices into chat. Start clicking them in a real UI.</h3>
3
+
4
+ <p align="center">
5
+ <strong>
6
+ <em>Beautiful browser-based popup forms for your AI coding assistant. When your LLM needs user input, it opens a real UI โ€” radio buttons, checkboxes, comments โ€” instead of dumping numbered lists into the chat.</em>
7
+ </strong>
8
+ </p>
9
+
10
+ <p align="center">
11
+ <!-- Package Info -->
12
+ <a href="https://www.npmjs.com/package/mcp-vibepowerpack"><img alt="npm" src="https://img.shields.io/npm/v/mcp-vibepowerpack.svg?style=flat-square&color=4D87E6"></a>
13
+ <a href="#"><img alt="node" src="https://img.shields.io/badge/node-18+-4D87E6.svg?style=flat-square"></a>
14
+ &nbsp;&nbsp;โ€ข&nbsp;&nbsp;
15
+ <!-- Features -->
16
+ <a href="https://opensource.org/licenses/MIT"><img alt="license" src="https://img.shields.io/badge/License-MIT-F9A825.svg?style=flat-square"></a>
17
+ <a href="#"><img alt="platform" src="https://img.shields.io/badge/platform-macOS_|_Linux_|_Windows-2ED573.svg?style=flat-square"></a>
18
+ <a href="#-tool-reference"><img alt="tools" src="https://img.shields.io/badge/tools-2-2ED573.svg?style=flat-square"></a>
19
+ </p>
20
+
21
+ <p align="center">
22
+ <img alt="zero config" src="https://img.shields.io/badge/๐Ÿ”ง_zero_config-no_API_keys_needed-2ED573.svg?style=for-the-badge">
23
+ <img alt="ephemeral" src="https://img.shields.io/badge/๐Ÿ”’_ephemeral-popup_closes_after_use-2ED573.svg?style=for-the-badge">
24
+ </p>
25
+
26
+ <div align="center">
27
+
28
+ ### ๐Ÿงญ Quick Navigation
29
+
30
+ [**โšก Get Started**](#-get-started-in-60-seconds) โ€ข
31
+ [**๐ŸŽฏ Why Vibe Powerpack**](#-why-vibe-powerpack) โ€ข
32
+ [**๐ŸŽฎ Tools**](#-tool-reference) โ€ข
33
+ [**โš™๏ธ Configuration**](#%EF%B8%8F-environment-variables) โ€ข
34
+ [**๐Ÿ“š Workflows**](#-recommended-workflows) โ€ข
35
+ [**๐Ÿ› ๏ธ Development**](#%EF%B8%8F-development)
36
+
37
+ </div>
38
+
39
+ ---
40
+
41
+ **`mcp-vibepowerpack`** replaces the clunky "type a number" workflow with a polished browser popup. When your AI needs a decision, it opens a real form โ€” radio buttons for single-select, checkboxes for multi-select โ€” and waits for your click. No more miscounted options. No more "I said option 3, not 4."
42
+
43
+ <div align="center">
44
+ <table>
45
+ <tr>
46
+ <td align="center">
47
+ <h3>๐Ÿ”˜</h3>
48
+ <b>Single-Select</b><br/>
49
+ <sub>Radio buttons with descriptions</sub>
50
+ </td>
51
+ <td align="center">
52
+ <h3>โ˜‘๏ธ</h3>
53
+ <b>Multi-Select</b><br/>
54
+ <sub>Checkboxes for multiple picks</sub>
55
+ </td>
56
+ <td align="center">
57
+ <h3>๐Ÿ’ฌ</h3>
58
+ <b>Comments</b><br/>
59
+ <sub>Add context to your choices</sub>
60
+ </td>
61
+ <td align="center">
62
+ <h3>โ“</h3>
63
+ <b>Explain First</b><br/>
64
+ <sub>Ask for details before deciding</sub>
65
+ </td>
66
+ </tr>
67
+ </table>
68
+ </div>
69
+
70
+ Here's how it works:
71
+ - **AI:** "Which database should I use?" โ†’ Opens a popup with your options
72
+ - **You:** Click your choice, optionally add a comment, hit Submit
73
+ - **AI:** Gets structured JSON back โ€” no parsing, no ambiguity
74
+ - **Result:** Faster decisions, zero miscommunication. โ˜•
75
+
76
+ > **Fork note:** This is a fork of [mcp-popup-ui](https://github.com/nicobailon/mcp-popup-ui) by Jens Duttke, enhanced with additional features like "Other" input, explanation requests, and Markdown descriptions.
77
+
78
+ ---
79
+
80
+ ## ๐ŸŽฏ Why Vibe Powerpack
81
+
82
+ Text-based option selection is error-prone and slow. `mcp-vibepowerpack` replaces it with a real UI.
83
+
84
+ <table align="center">
85
+ <tr>
86
+ <td align="center"><b>โŒ Old Way (Text Chat)</b></td>
87
+ <td align="center"><b>โœ… New Way (Vibe Powerpack)</b></td>
88
+ </tr>
89
+ <tr>
90
+ <td>
91
+ <ol>
92
+ <li>AI dumps a numbered list into chat.</li>
93
+ <li>You squint at 8 options with no descriptions.</li>
94
+ <li>You type "3" โ€” wait, was PostgreSQL 3 or 4?</li>
95
+ <li>AI misparses your response half the time.</li>
96
+ <li>Repeat until frustrated.</li>
97
+ </ol>
98
+ </td>
99
+ <td>
100
+ <ol>
101
+ <li>AI calls <code>ask_user</code> with labeled options.</li>
102
+ <li>A popup opens with clear descriptions.</li>
103
+ <li>You click the one you want.</li>
104
+ <li>AI gets structured data โ€” zero ambiguity.</li>
105
+ <li>Move on with your life. โ˜•</li>
106
+ </ol>
107
+ </td>
108
+ </tr>
109
+ </table>
110
+
111
+ **Key advantages:**
112
+ - **Markdown descriptions** โ€” options can include code snippets, pros/cons, links
113
+ - **Recommended highlights** โ€” flag the best option so users see it immediately
114
+ - **Skip button** โ€” user can opt out without breaking the flow
115
+ - **Explanation requests** โ€” ask the AI to elaborate before committing
116
+ - **"Other" input** โ€” let users type a custom answer if nothing fits
117
+ - **Ephemeral server** โ€” popup opens on `127.0.0.1`, auto-closes after submit, zero cleanup
118
+
119
+ ---
120
+
121
+ ## ๐Ÿš€ Get Started in 60 Seconds
122
+
123
+ ### 1. Install
124
+
125
+ <div align="center">
126
+
127
+ | Client | One-Line Install | Manual Config |
128
+ |:------:|:----------------:|:-------------:|
129
+ | ๐Ÿ–ฅ๏ธ **Claude Desktop** | `npx install-mcp mcp-vibepowerpack --client claude-desktop` | [Config](#claude-desktop) |
130
+ | โŒจ๏ธ **Claude Code** | `npx install-mcp mcp-vibepowerpack --client claude-code` | [Config](#claude-code-cli) |
131
+ | ๐ŸŽฏ **Cursor / ๐Ÿ„ Windsurf** | `npx install-mcp mcp-vibepowerpack --client cursor` | [Config](#cursorwindsurf) |
132
+
133
+ </div>
134
+
135
+ That's it. No API keys. No environment variables. Just install and go.
136
+
137
+ ### 2. Manual Configuration
138
+
139
+ #### Claude Desktop
140
+
141
+ Add to your `claude_desktop_config.json`:
142
+
143
+ ```json
144
+ {
145
+ "mcpServers": {
146
+ "vibepowerpack": {
147
+ "command": "npx",
148
+ "args": ["-y", "mcp-vibepowerpack"]
149
+ }
150
+ }
151
+ }
152
+ ```
153
+
154
+ #### Claude Code (CLI)
155
+
156
+ ```bash
157
+ claude mcp add vibepowerpack npx --scope user -- -y mcp-vibepowerpack
158
+ ```
159
+
160
+ Or manually add to `~/.claude.json`:
161
+
162
+ ```json
163
+ {
164
+ "mcpServers": {
165
+ "vibepowerpack": {
166
+ "command": "npx",
167
+ "args": ["-y", "mcp-vibepowerpack"]
168
+ }
169
+ }
170
+ }
171
+ ```
172
+
173
+ #### Cursor/Windsurf
174
+
175
+ Add to `.cursor/mcp.json` or equivalent:
176
+
177
+ ```json
178
+ {
179
+ "mcpServers": {
180
+ "vibepowerpack": {
181
+ "command": "npx",
182
+ "args": ["-y", "mcp-vibepowerpack"]
183
+ }
184
+ }
185
+ }
186
+ ```
187
+
188
+ > **Backward compatibility:** The old binary name `vibe-powerpack` still works if you have existing configs using it.
189
+
190
+ ---
191
+
192
+ ## ๐ŸŽฎ Tool Reference
193
+
194
+ <div align="center">
195
+ <table>
196
+ <tr>
197
+ <td align="center">
198
+ <h3>๐Ÿ”˜</h3>
199
+ <b><code>ask_user</code></b><br/>
200
+ <sub>Single-select (radio buttons)</sub>
201
+ </td>
202
+ <td align="center">
203
+ <h3>โ˜‘๏ธ</h3>
204
+ <b><code>ask_user_multiple</code></b><br/>
205
+ <sub>Multi-select (checkboxes)</sub>
206
+ </td>
207
+ </tr>
208
+ </table>
209
+ </div>
210
+
211
+ ### `ask_user`
212
+
213
+ **Single-select popup** โ€” presents radio buttons and returns exactly one selection.
214
+
215
+ Use this whenever your AI is about to list numbered options and ask "which do you prefer?"
216
+
217
+ | Parameter | Type | Required | Default | Description |
218
+ |-----------|------|:--------:|:-------:|-------------|
219
+ | `options` | `object[]` | โœ… | โ€” | Options to display (min 2). Each: `{ label, description?, recommended? }` |
220
+ | `title` | `string` | โ€” | โ€” | Heading displayed above the options |
221
+ | `description` | `string` | โ€” | โ€” | Subheading below the title |
222
+ | `allow_other` | `boolean` | โ€” | `false` | Show an "Other" free-text input |
223
+ | `other_label` | `string` | โ€” | `"Other"` | Custom label for the Other option |
224
+
225
+ **Example call:**
226
+
227
+ ```json
228
+ {
229
+ "options": [
230
+ { "label": "PostgreSQL", "description": "Battle-tested RDBMS with JSON support", "recommended": true },
231
+ { "label": "SQLite", "description": "Zero-config, embedded, perfect for prototyping" },
232
+ { "label": "MongoDB", "description": "Document store, flexible schema" }
233
+ ],
234
+ "title": "Which database?",
235
+ "description": "Choose the database for your new project.",
236
+ "allow_other": true
237
+ }
238
+ ```
239
+
240
+ **Response format:**
241
+
242
+ ```json
243
+ {
244
+ "action": "submit",
245
+ "selection": "PostgreSQL",
246
+ "comments": "Let's use the latest v17"
247
+ }
248
+ ```
249
+
250
+ Possible `action` values: `"submit"` | `"skip"` | `"request_explanation"`
251
+
252
+ ---
253
+
254
+ ### `ask_user_multiple`
255
+
256
+ **Multi-select popup** โ€” presents checkboxes and returns one or more selections.
257
+
258
+ Use this when the user can pick multiple non-exclusive options (e.g., "Which features to include?").
259
+
260
+ | Parameter | Type | Required | Default | Description |
261
+ |-----------|------|:--------:|:-------:|-------------|
262
+ | `options` | `object[]` | โœ… | โ€” | Options to display (min 2). Each: `{ label, description?, recommended? }` |
263
+ | `title` | `string` | โ€” | โ€” | Heading displayed above the options |
264
+ | `description` | `string` | โ€” | โ€” | Subheading below the title |
265
+ | `allow_other` | `boolean` | โ€” | `false` | Show an "Other" free-text input |
266
+ | `other_label` | `string` | โ€” | `"Other"` | Custom label for the Other option |
267
+
268
+ **Example call:**
269
+
270
+ ```json
271
+ {
272
+ "options": [
273
+ { "label": "Authentication", "description": "JWT + OAuth2 login flow", "recommended": true },
274
+ { "label": "Rate Limiting", "description": "Token bucket per API key" },
275
+ { "label": "Caching", "description": "Redis-backed response cache" },
276
+ { "label": "Logging", "description": "Structured JSON logs with correlation IDs" }
277
+ ],
278
+ "title": "Select features to scaffold",
279
+ "description": "Pick all that apply. You can add more later."
280
+ }
281
+ ```
282
+
283
+ **Response format:**
284
+
285
+ ```json
286
+ {
287
+ "action": "submit",
288
+ "selections": ["Authentication", "Rate Limiting", "Logging"],
289
+ "comments": "Skip caching for now, we'll add it in v2"
290
+ }
291
+ ```
292
+
293
+ ---
294
+
295
+ ## โš™๏ธ Environment Variables
296
+
297
+ **None required.** Vibe Powerpack works out of the box with zero configuration.
298
+
299
+ The server spins up an ephemeral HTTP server on `127.0.0.1` (random port), opens the user's browser, and tears everything down after the response. No API keys, no tokens, no secrets.
300
+
301
+ ---
302
+
303
+ ## ๐Ÿ“š Recommended Workflows
304
+
305
+ ### Architecture Decisions
306
+
307
+ ```
308
+ AI: "I can implement this three ways..."
309
+ โ†’ Calls ask_user with pros/cons in descriptions
310
+ โ†’ User clicks their choice in the popup
311
+ โ†’ AI proceeds with the selected approach
312
+ ```
313
+
314
+ ### Feature Selection
315
+
316
+ ```
317
+ AI: "Here are the available modules for your project..."
318
+ โ†’ Calls ask_user_multiple with feature list
319
+ โ†’ User checks the ones they want
320
+ โ†’ AI scaffolds only the selected features
321
+ ```
322
+
323
+ ### Clarification Before Proceeding
324
+
325
+ ```
326
+ AI: "Which testing framework?"
327
+ โ†’ Calls ask_user with allow_other: true
328
+ โ†’ User picks "Other" and types "Bun test"
329
+ โ†’ AI uses the custom answer
330
+ ```
331
+
332
+ ### Explain-Then-Decide
333
+
334
+ ```
335
+ AI: "Which caching strategy?"
336
+ โ†’ Calls ask_user with options
337
+ โ†’ User clicks "Explain" on an unfamiliar option
338
+ โ†’ AI gets request_explanation action, explains that option
339
+ โ†’ AI re-opens the popup for the final decision
340
+ ```
341
+
342
+ ---
343
+
344
+ ## ๐Ÿ› ๏ธ Development
345
+
346
+ ```bash
347
+ git clone https://github.com/yigitkonur/mcp-vibepowerpack.git
348
+ cd mcp-vibepowerpack
349
+ npm install
350
+ npm run dev # Start Vite dev server with hot reload
351
+ npm run build # Build for production
352
+ npm run lint # Run linters
353
+ ```
354
+
355
+ ### How It Works Under the Hood
356
+
357
+ 1. MCP client calls `ask_user` or `ask_user_multiple`
358
+ 2. Server creates an **ephemeral HTTP server** on `127.0.0.1` (random available port)
359
+ 3. Server opens the user's **browser in app mode** (no address bar) โ€” prefers Edge/Chrome, falls back to system default
360
+ 4. The React frontend loads the form config from `/api/config`
361
+ 5. An **SSE connection** at `/api/connection` detects if the browser closes (auto-skips)
362
+ 6. User submits โ†’ frontend POSTs to `/api/submit` โ†’ server returns structured JSON to the MCP client
363
+ 7. Ephemeral server shuts down โ€” nothing left running
364
+
365
+ ### Project Structure
366
+
367
+ ```
368
+ mcp-vibepowerpack/
369
+ โ”œโ”€โ”€ mcp/ # MCP server (TypeScript)
370
+ โ”‚ โ”œโ”€โ”€ server/ # Server setup & tool routing
371
+ โ”‚ โ”œโ”€โ”€ tools/ # Tool definitions & handlers
372
+ โ”‚ โ”œโ”€โ”€ http/ # Ephemeral HTTP server & static serving
373
+ โ”‚ โ””โ”€โ”€ types/ # Shared TypeScript types
374
+ โ”œโ”€โ”€ frontend/ # React popup UI (Vite + React 19)
375
+ โ”œโ”€โ”€ dist/ # Built output (published to npm)
376
+ โ””โ”€โ”€ assets/ # Screenshots
377
+ ```
378
+
379
+ ---
380
+
381
+ ## ๐Ÿ”ง Troubleshooting
382
+
383
+ <details>
384
+ <summary><b>Expand for troubleshooting tips</b></summary>
385
+
386
+ | Problem | Solution |
387
+ | :--- | :--- |
388
+ | **Popup doesn't open** | Make sure you have Chrome or Edge installed. The server tries to open a chromium-based browser in app mode first. If none is found, it falls back to your system default browser. |
389
+ | **Popup opens but shows blank page** | The built frontend assets may be missing. Run `npm run build` if running from source, or reinstall the package with `npx -y mcp-vibepowerpack`. |
390
+ | **Tool not appearing in Claude** | Restart Claude Desktop / Claude Code after adding the MCP config. Check that the config JSON is valid (no trailing commas). |
391
+ | **"Unknown tool" error** | Make sure you're using `ask_user` or `ask_user_multiple` (exact names). Tool names are case-sensitive. |
392
+ | **Browser closes = response lost?** | No โ€” if the browser closes before submission, the server detects it via SSE and returns a `"skip"` action automatically. |
393
+ | **Port conflicts** | The server uses a random available port each time. If you're seeing port issues, another instance may still be running. Check for stale `node` processes. |
394
+ | **Windows: popup blocked by firewall** | The server only binds to `127.0.0.1` (localhost). No firewall rule should be needed. If prompted, allow the connection โ€” it never leaves your machine. |
395
+
396
+ </details>
397
+
398
+ ---
399
+
400
+ <div align="center">
401
+
402
+ MIT ยฉ [YiฤŸit Konur](https://github.com/yigitkonur)
403
+
404
+ Based on [mcp-popup-ui](https://github.com/nicobailon/mcp-popup-ui) by [Jens Duttke](https://github.com/nicobailon) โ€” original MIT license preserved.
405
+
406
+ </div>