npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mcp-popup-ui

v1.1.0

Published

MCP server that provides interactive popup UI tools for user input collection

Readme

mcp-popup-ui

An MCP (Model Context Protocol) server that lets AI assistants ask you questions through a visual popup in your browser - instead of just printing text options.

MCP Popup UI in action with LM Studio

What This Does

When you chat with an AI assistant (like GitHub Copilot, Claude, or a local LLM), the AI sometimes needs your input - for example, "Which framework do you want?" or "Select the features to include."

Without this tool, the AI would print a numbered list and ask you to type your choice. With mcp-popup-ui, a clean popup opens in your browser where you can click your selection directly.

Two tools are provided:

| Tool | Purpose | UI Element | |------|---------|------------| | ask_user | Pick exactly one option | Radio buttons | | ask_user_multiple | Pick one or more options | Checkboxes |

Installation

Install globally via npm:

npm install -g mcp-popup-ui

Or run directly without installing:

npx y- mcp-popup-ui

Requirements: Node.js 18 or higher.

Setup

Choose the setup guide for your AI application:

VS Code (GitHub Copilot)

  1. Open your project folder in VS Code

  2. Create or edit the file .vscode/mcp.json:

    {
      "servers": {
        "popup-ui": {
          "command": "npx",
          "args": ["mcp-popup-ui"]
        }
      }
    }
  3. Restart VS Code or reload the window

LM Studio

  1. Open LM Studio settings

  2. Navigate to the MCP Servers section

  3. Add a new server with these settings:

    {
      "mcp-popup-ui": {
        "command": "npx",
        "args": ["mcp-popup-ui"]
      }
    }
  4. Enable the server and start a new chat

Ollama (via Open WebUI or similar)

Ollama itself does not natively support MCP. However, you can use it with frontends that support MCP, such as Open WebUI with MCP plugins. The configuration depends on your specific frontend - consult its documentation for adding MCP servers.

Claude Desktop

Add to your Claude Desktop configuration file:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "popup-ui": {
      "command": "npx",
      "args": ["mcp-popup-ui"]
    }
  }
}

Restart Claude Desktop after saving.

Copilot Instructions (Optional)

To ensure the AI uses the popup tools automatically instead of listing options in text, add this to your project's .github/copilot-instructions.md:

## User Input Collection

Use MCP tools for user choices:

- `ask_user` - single selection (radio buttons)
- `ask_user_multiple` - multiple selection (checkboxes)

Use these tools when presenting options like framework choices, implementation approaches, or any list of alternatives.

Tool Reference

ask_user

Displays a popup with radio buttons. The user picks exactly one option.

Parameters:

| Parameter | Required | Description | |-----------|----------|-------------| | options | Yes | Array of options (minimum 2). Each option has a label (required), optional description, and optional recommended flag. | | title | No | Heading displayed above the options | | description | No | Additional text displayed below the title | | allow_other | No | If true, adds a text field for custom input | | other_label | No | Label for the custom input option (default: "Other") |

Example call:

{
  "options": [
    { "label": "React", "description": "Component-based UI library" },
    { "label": "Vue", "description": "Progressive JavaScript framework" },
    { "label": "Svelte", "description": "Compile-time framework", "recommended": true }
  ],
  "title": "Choose a Frontend Framework",
  "description": "Select one framework for your project."
}

Response:

{
  "action": "submit",
  "selection": "Svelte"
}

If the user clicks Skip:

{
  "action": "skip"
}

ask_user_multiple

Displays a popup with checkboxes. The user picks one or more options.

Parameters:

| Parameter | Required | Description | |-----------|----------|-------------| | options | Yes | Array of options (minimum 2). Each option has a label (required), optional description, and optional recommended flag. | | title | No | Heading displayed above the options | | description | No | Additional text displayed below the title | | allow_other | No | If true, adds a text field for custom input | | other_label | No | Label for the custom input option (default: "Other") |

Example call:

{
  "options": [
    { "label": "TypeScript", "recommended": true },
    { "label": "ESLint" },
    { "label": "Prettier" },
    { "label": "Jest" }
  ],
  "title": "Select Project Features",
  "description": "Choose all features to include."
}

Response:

{
  "action": "submit",
  "selections": ["TypeScript", "ESLint", "Prettier"]
}

Additional Features

  • Skip button: Users can skip any question without selecting an option
  • Comments field: Users can add additional notes with their selection
  • Explanation request: Users can ask for more details about an option before deciding
  • Markdown support: Option descriptions support Markdown formatting

Documentation

Contributing

See CONTRIBUTING.md for development setup and guidelines.

License

MIT