UNPKG

websearch-mcp

Version:

A Model Context Protocol (MCP) server implementation that provides real-time web search capabilities through a simple API

138 lines (137 loc) 5.81 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const child_process_1 = require("child_process"); const readline_1 = require("readline"); const path = __importStar(require("path")); function main() { return __awaiter(this, void 0, void 0, function* () { // Start the MCP server as a child process const serverProcess = (0, child_process_1.spawn)('ts-node', [path.join(__dirname, 'index.ts')], { stdio: ['pipe', 'pipe', process.stderr], env: Object.assign(Object.assign({}, process.env), { API_URL: process.env.API_URL || 'http://localhost:3001', MAX_SEARCH_RESULT: process.env.MAX_SEARCH_RESULT || '5' }) }); // Set up readline for nice formatting const readline = (0, readline_1.createInterface)({ input: process.stdin, output: process.stdout }); let messageId = 1; // Handle server output serverProcess.stdout.on('data', (data) => { try { const message = JSON.parse(data.toString()); console.log('\nReceived from server:'); console.log(JSON.stringify(message, null, 2)); if (message.result) { try { const resultContent = JSON.parse(message.result.content[0].text); console.log('\nSearch Results:'); console.log(JSON.stringify(resultContent, null, 2)); } catch (e) { console.log('\nResult Content:'); console.log(message.result.content[0].text); } } readline.prompt(); } catch (error) { console.error('Error parsing server response:', error); console.log('Raw response:', data.toString()); readline.prompt(); } }); // Initial prompt console.log('WebSearch MCP Test Client'); console.log('------------------------'); console.log('Type a search query and press Enter to search.'); console.log('Type \'exit\' to quit.'); console.log(''); readline.setPrompt('Search> '); readline.prompt(); // Handle user input readline.on('line', (line) => { const input = line.trim(); if (input.toLowerCase() === 'exit') { console.log('Exiting...'); serverProcess.kill(); process.exit(0); } // Create a web_search request const request = { jsonrpc: '2.0', id: messageId++, method: 'call_tool', params: { name: 'web_search', arguments: { query: input, numResults: parseInt(process.env.MAX_SEARCH_RESULT || '3', 10) } } }; console.log('\nSending request:'); console.log(JSON.stringify(request, null, 2)); // Send the request to the server serverProcess.stdin.write(JSON.stringify(request) + '\n'); }); // Handle exit readline.on('close', () => { console.log('Exiting...'); serverProcess.kill(); process.exit(0); }); // Handle server exit serverProcess.on('exit', (code) => { console.log(`Server exited with code ${code}`); process.exit(code || 0); }); }); } main().catch(error => { console.error('Error running test client:', error); process.exit(1); });