UNPKG

@whyuds/ask-user

Version:

A cross-platform command-line tool and MCP server to show dialog windows and get user input for AI code editors

87 lines (75 loc) 2.03 kB
#!/usr/bin/env node import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { spawn } from 'child_process'; import { z } from 'zod'; import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // Create MCP server const server = new McpServer({ name: 'ask-user', version: '1.0.0' }, { capabilities: { tools: {} } }); // Add ask-user tool server.tool( 'ask_user', { title: z.string().optional().describe('Title of the dialog window'), message: z.string().describe('Message to display to the user') }, async ({ title, message }) => { try { const result = await askUser(title || 'Input Required', message); return { content: [{ type: 'text', text: result }] }; } catch (error) { return { content: [{ type: 'text', text: `Error: ${error.message}` }], isError: true }; } } ); // Function to call the existing ask-user functionality function askUser(title, message) { return new Promise((resolve, reject) => { const askPath = path.join(__dirname, 'bin', 'ask.js'); const args = ['--title', title, '--message', message]; const child = spawn('node', [askPath, ...args], { stdio: ['inherit', 'pipe', 'inherit'] }); let output = ''; child.stdout.on('data', (data) => { output += data.toString(); }); child.on('close', (code) => { if (code === 0) { resolve(output.trim()); } else { reject(new Error(`Process exited with code ${code}`)); } }); child.on('error', (error) => { reject(error); }); }); } // Start the server async function main() { const transport = new StdioServerTransport(); await server.connect(transport); } main().catch(console.error);