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
JavaScript
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();
}