Skip to main content
Glama
nabossha

LandiWetter MCP Server

by nabossha
test-server.js4.04 kB
// Simple HTTP wrapper for testing the MCP server import express from 'express'; import { spawn } from 'child_process'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const app = express(); app.use(express.json()); const mcpProcess = spawn('node', [join(__dirname, 'index.js')]); let initialized = false; let messageHandlers = new Map(); // Handle communication with MCP subprocess mcpProcess.stdout.on('data', (data) => { try { const message = JSON.parse(data.toString()); console.log('MCP Response:', JSON.stringify(message, null, 2)); // Store initialization response if (message.result && message.result.serverInfo && !initialized) { initialized = true; console.log('MCP Server initialized successfully'); } // Call the appropriate handler if registered if (message.id && messageHandlers.has(message.id)) { const handler = messageHandlers.get(message.id); handler(message); messageHandlers.delete(message.id); } } catch (error) { console.error('Error processing MCP response:', error); } }); // Log errors mcpProcess.stderr.on('data', (data) => { console.error('MCP Server stderr:', data.toString()); }); // Handle process exit mcpProcess.on('close', (code) => { console.log(`MCP process exited with code ${code}`); }); // Initialize the MCP server when our HTTP server starts function initializeMcp() { const initMessage = { jsonrpc: '2.0', id: 1, method: 'initialize', params: { protocolVersion: '2025-03-26', clientInfo: { name: 'curl-test-client', version: '1.0.0' }, capabilities: { tools: {}, resources: {}, prompts: {} } } }; mcpProcess.stdin.write(JSON.stringify(initMessage) + '\n'); } // Helper function to send MCP requests function sendMcpRequest(message, callback) { messageHandlers.set(message.id, callback); mcpProcess.stdin.write(JSON.stringify(message) + '\n'); } // Endpoint to list tools app.get('/tools', (req, res) => { const listToolsMessage = { jsonrpc: '2.0', id: Date.now(), method: 'tools/list', params: {} }; sendMcpRequest(listToolsMessage, (response) => { if (response.result) { res.json(response.result); } else if (response.error) { res.status(500).json(response.error); } else { res.status(500).json({ error: 'Unknown error' }); } }); }); // Endpoint to search for a location app.get('/search/:location', (req, res) => { const callToolMessage = { jsonrpc: '2.0', id: Date.now(), method: 'tools/call', params: { name: 'searchLocation', arguments: { locationName: req.params.location } } }; sendMcpRequest(callToolMessage, (response) => { if (response.result) { res.json(response.result); } else if (response.error) { res.status(500).json(response.error); } else { res.status(500).json({ error: 'Unknown error' }); } }); }); // Endpoint to get weather forecast with optional date app.get('/forecast/:locationId', (req, res) => { const callToolMessage = { jsonrpc: '2.0', id: Date.now(), method: 'tools/call', params: { name: 'getWeatherForecast', arguments: { locationId: req.params.locationId, date: req.query.date } } }; sendMcpRequest(callToolMessage, (response) => { if (response.result) { res.json(response.result); } else if (response.error) { res.status(500).json(response.error); } else { res.status(500).json({ error: 'Unknown error' }); } }); }); // Start the server const PORT = 3000; app.listen(PORT, () => { console.log(`Test server listening on port ${PORT}`); initializeMcp(); }); // Handle server shutdown process.on('SIGINT', () => { console.log('Shutting down...'); mcpProcess.kill(); process.exit(); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nabossha/mcp-landiwetter'

If you have feedback or need assistance with the MCP directory API, please join our Discord server