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

@pylotlight/ask-mcp

v0.4.1

Published

MCP server that replaces the built-in question tool: spec-driven HTML forms for collecting and presenting info from users

Readme

ask-mcp

npm license MIT node

An MCP tool that asks you questions — as real HTML forms in the browser. The agent calls ask, a form opens, and the call blocks until you answer. Approvals, choices, tables, markdown, short forms in; structured, validated answers out.

How it works

  1. The agent calls ask with a title, context blocks, and an input.
  2. A form opens in your browser. The tool call waits — minutes, not seconds.
  3. You answer, cancel, or it times out. The agent gets validated structured data.

Built-in question tools (opencode's question, Claude Code's AskUserQuestion) render as inline chat chips: no room for context, loose free-text answers, nothing saved afterwards. ask-mcp gives every question a proper surface instead — with a live queue you can cancel from an admin panel, a history of every spec and response, and archived renders of exactly what you saw.

Screenshots

Choice cards — multi-select grid over the starfield background.

Choice cards

Free-text escape hatch — the Other option over the dot-grid background.

Other input

Plan approval — long-form context with the sticky action bar over contour lines.

Sticky bar

Info blocks — headings, tables, callouts, and diffs on minimal.

Blocks

Install

bunx @pylotlight/ask-mcp              # run without installing
npx -y @pylotlight/ask-mcp            # same, via npm
npm i -g @pylotlight/ask-mcp          # or install globally → `ask-mcp`

Requires Node ≥ 22 or Bun ≥ 1.2.

Connect your client

One command — detects opencode, Claude Code, and Claude Desktop, adds the ask server to each, and installs /ask-admin:

npx -y @pylotlight/ask-mcp install

Existing entries are left alone unless --force; every touched file is backed up to .bak first.

  • --client opencode|claude-code|claude-desktop — target one client (default: all detected)
  • --bun — launch via bunx --bun (Bun runtime; plain bunx uses the Node shebang)
  • --force — overwrite an existing ask entry

The installer also sets opencode's experimental.mcp_timeout: blocking asks need a long tool timeout (client defaults ~30 s kill them — ten minutes is a good start; match it with --timeout-ms).

Other MCP clients: launch the package over stdio with command npx -y @pylotlight/ask-mcp --stdio (bunx --bun … for the Bun runtime). A small loopback HTTP server serves the form pages (falls back to a free port if 8787 is busy).

Slash command (opencode / openchamber)

npx -y @pylotlight/ask-mcp install-commands   # installs /ask-admin

/ask-admin opens the admin panel in the browser. All ask flows stay agent-driven via the MCP tools. See docs/commands.md.

Admin panel

/admin just opens on the default localhost bind — no setup. Live asks with one-click cancel, the artifact history trail, a config editor (safe fields apply live), and template CRUD. A token (--admin-token, falling back to --auth-token) adds a sign-in gate for shared machines and network binds. See docs/admin.md.

Features

  • Five input kindsapprove, single_choice, multi_choice, text, form, with type inference and server-side validation.
  • Other escape hatch — choice prompts accept other: { placeholder }: typing auto-selects it, empty blocks submit, the answer arrives as otherText.
  • Info blocks — headings, paragraphs, markdown (safe subset), callouts, steps, option cards, tables, diffs, dividers.
  • Dry rundryRun: true validates, renders, and archives without blocking, opening, or prompting. Self-check a form before the real call.
  • Artifacts — every ask persisted (spec.json, response.json, render.html) under ~/.config/ask-mcp/YYYY-MM-DD/<token>/, with retention pruning.
  • Live pages — status tracked over SSE; after answering, a settle view shows what was recorded plus a permalink, with auto-close countdown + Close now / Stay open / Copy link (--settle-view-ms, default 3 s; 0 stays open).
  • Keyboard-first19 to pick, Enter to confirm, ⌘/Ctrl+Enter from text areas.
  • Themes — four monochrome form backgrounds (minimal, starfield, dots, contour) with tunable density and motion, per-install or live from the admin Config tab.
  • HTTP twinPOST /api/ask + GET /api/templates give scripts and CI the same pipeline as the MCP tool.
  • Safe by construction — escaped rendering, strict schemas, per-ask 128-bit capability tokens, strict CSP, loopback-by-default binding.

Docs