Ask User Mcp App — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Ask User Mcp App (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP App that enables AI agents to ask users multiple questions with tab-based navigation, multiple-choice options, multi-select support, and custom text input - all rendered inline in the conversation.
Use the hosted MCP server directly with Claude's connector feature:
https://ask-user-mcp-app-seven.vercel.app/mcpBrowse the hosted landing page at ask-user-mcp-app-seven.vercel.app for a quick overview of the tool schema and install steps.
The ask_user tool will now be available to Claude.
Or clone and build locally:
git clone https://github.com/anthropics/ask-user-mcp-app
cd ask-user-mcp-app
npm install
npm run buildBuild and run locally with Claude Desktop:
# Clone and build
git clone https://github.com/anthropics/ask-user-mcp-app
cd ask-user-mcp-app
npm install
npm run buildAdd to your claude_desktop_config.json (use the absolute path to your clone):
{
"mcpServers": {
"ask-user": {
"command": "node",
"args": ["/absolute/path/to/ask-user-mcp-app/dist/main.js", "--stdio"]
}
}
}The ask_user tool accepts a questions array containing one or more questions to display as tabs:
| Parameter | Type | Required | Description |
|---|---|---|---|
questions | array | Yes | Array of question objects (minimum 1) |
| Parameter | Type | Required | Description |
|---|---|---|---|
question | string | Yes | The question to ask (also used as unique identifier) |
header | string | Yes | Short label displayed as tab name (max 12 chars) |
options | array | Yes | 2-4 choices, each with label, value, and optional description |
multiSelect | boolean | No | Allow multiple selections (default: false) |
allowOther | boolean | No | Include "Other" text input option (default: true) |
required | boolean | No | Whether this question must be answered (default: false) |
{
"name": "ask_user",
"arguments": {
"questions": [
{
"question": "Which frontend framework would you like to use for this project?",
"header": "Framework",
"options": [
{ "label": "React", "value": "react", "description": "Popular library with component-based architecture" },
{ "label": "Vue", "value": "vue", "description": "Progressive framework for simplicity" },
{ "label": "Svelte", "value": "svelte", "description": "Compiler-based, highly optimized" }
],
"required": true
},
{
"question": "How should we handle authentication?",
"header": "Auth Method",
"options": [
{ "label": "OAuth 2.0", "value": "oauth", "description": "Industry standard, supports SSO" },
{ "label": "JWT", "value": "jwt", "description": "Stateless, good for APIs" },
{ "label": "Session-based", "value": "session", "description": "Traditional, server-side state" }
]
},
{
"question": "Which testing frameworks should we include?",
"header": "Testing",
"options": [
{ "label": "Jest", "value": "jest", "description": "Popular testing framework" },
{ "label": "Vitest", "value": "vitest", "description": "Fast, Vite-native testing" },
{ "label": "Playwright", "value": "playwright", "description": "E2E testing" }
],
"multiSelect": true
}
]
}
}When the user submits their answers, the response is formatted as:
Which frontend framework would you like to use for this project? -> React
How should we handle authentication? -> JWT
Which testing frameworks should we include? -> Vitest, Playwright| Key | Action |
|---|---|
| Tab / Shift+Tab | Navigate between question tabs |
| Arrow Left / Right | Navigate between question tabs |
| Arrow Up / Down | Navigate between options in current question |
| Enter / Space | Select current option |
| Enter (on Submit tab) | Submit all answers |
| Command | Description |
|---|---|
npm run build | Build server and UI |
npm run build:server | Build only server (TypeScript) |
npm run build:ui | Build only UI (Vite + React) |
npm run serve | Start HTTP server |
npm start | Build and serve |
npm run dev | Development mode with tsx |
npm start cd ext-apps/examples/basic-host
SERVERS='["http://localhost:3001/mcp"]' npm startask_user tool┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Host Client │────▶│ MCP Server │────▶│ React UI │
│ (Claude, etc.) │ │ (server.ts) │ │ (mcp-app.tsx) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ Tool call with │ Serves bundled │
│ ui/resourceUri │ HTML via resource │
│ │ │
└───────────────────────┴───────────────────────┘
postMessage communicationask_user tool and ui:// resourcevite-plugin-singlefile| Component | Purpose |
|---|---|
TabBar | Pill-style tab navigation with progress indicator |
QuestionPanel | Renders individual question with refined card styling |
SubmitTab | Review page showing all answers with staggered animations |
OptionList / OptionButton | Elegant option cards with smooth transitions |
OtherInput | Custom text input with auto-focus behavior |
The UI uses a warm, Claude-native color palette for seamless integration:
#faf8f5, #f5f1eb)#c4704b) for selections and CTAs| Hook | Purpose |
|---|---|
useTabNavigation | Handles Tab/Shift+Tab and arrow key navigation between tabs |
useOptionNavigation | Handles arrow key navigation and Enter/Space selection within options |
@modelcontextprotocol/ext-apps - MCP Apps SDK@modelcontextprotocol/sdk - Core MCP SDKreact / react-dom - UI frameworkexpress / cors - HTTP serverzod - Schema validationtailwindcss - StylingMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.