UNPKG

jawt-mcp-client

Version:

MCP client bridge for JAWT voice notes - connects Claude Desktop to JAWT cloud server

85 lines (75 loc) 2.04 kB
#!/usr/bin/env node const https = require('https'); const API_KEY = process.argv[2]; let buffer = ''; process.stdin.on('data', data => { buffer += data.toString(); // Process complete JSON messages let lines = buffer.split('\n'); buffer = lines.pop() || ''; // Keep incomplete line in buffer for (const line of lines) { if (!line.trim()) continue; try { const request = JSON.parse(line); handleRequest(request); } catch (e) { console.error('Parse error:', e.message); } } }); function handleRequest(request) { // Handle initialization if (request.method === 'initialize') { console.log(JSON.stringify({ jsonrpc: "2.0", id: request.id, result: { protocolVersion: "2024-11-05", capabilities: { tools: {}, prompts: {}, resources: {} }, serverInfo: {name: "JAWT Voice Notes", version: "1.0.0"} } })); return; } // Handle notifications (no response needed) if (request.method === 'notifications/initialized') { return; } // Forward other requests to the cloud endpoint const postData = JSON.stringify(request); const req = https.request('https://www.jawt.ai/api/mcp-http', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY } }, res => { let responseData = ''; res.on('data', chunk => responseData += chunk); res.on('end', () => { try { const response = JSON.parse(responseData); console.log(JSON.stringify(response)); } catch (e) { console.log(JSON.stringify({ jsonrpc: "2.0", id: request.id, error: {code: -32603, message: "Invalid response from server"} })); } }); }); req.on('error', (e) => { console.log(JSON.stringify({ jsonrpc: "2.0", id: request.id, error: {code: -32603, message: `Connection failed: ${e.message}`} })); }); req.write(postData); req.end(); }