koala73/worldmonitor · error
No result found in SSE response
Error message
No result found in SSE response
What it means
Thrown by parseJsonRpcResponse when an upstream MCP server answered with content-type text/event-stream but none of the parsed data lines contained a JSON-RPC object with a result or error field. The transport worked; the SSE payload simply never carried a JSON-RPC response (for example only keep-alive/comments, malformed data lines that were skipped, or a stream closed before the response frame).
Solutions
- Confirm the remote endpoint actually implements the MCP Streamable HTTP/SSE protocol and sends a JSON-RPC response frame
- Capture the raw SSE body to inspect which data lines were skipped by the JSON.parse guard
- Retry once: servers that flush events slowly can close the stream before the response frame
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at api/mcp-proxy.ts:291 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of koala73/worldmonitor@e586b8b4b8 (2026-08-21).
Data as JSON: /api/errors/d7dd4c93591beddc.
Report an issue: GitHub.
Appendix: source
Thrown at api/mcp-proxy.ts:294
// Generic message surfaced to the caller when a serverUrl resolves to a
// private/reserved address. The specific blocked IP is deliberately NOT echoed
// back: returning it turns the proxy into an address oracle (the caller could
// enumerate internal IPs by observing which hostnames get blocked). SSRF review
// finding — log the concrete IP server-side for debugging, tell the caller only
// that the host is disallowed.
const SSRF_BLOCKED_PUBLIC_MESSAGE = 'serverUrl host is not allowed';
function throwBlockedAddress(blockedAddress) {
// Server-side audit/debug log with the concrete blocked address. This is the
// only place the resolved internal IP appears; it never reaches the response.
console.error('[mcp-proxy]', {
event: 'mcp_proxy_ssrf_blocked',
ts: new Date().toISOString(),
blocked_address: blockedAddress,
});
throw new McpProxySsrfError(SSRF_BLOCKED_PUBLIC_MESSAGE);
}
async function resolveDnsJson(hostname, recordType, signal) {
const url = new URL(DNS_JSON_ENDPOINT);
url.searchParams.set('name', hostname);
url.searchParams.set('type', recordType);
const dnsTimeout = AbortSignal.timeout(DNS_RESOLUTION_TIMEOUT_MS);
const response = await fetch(url.toString(), {
headers: {
Accept: 'application/dns-json',
'User-Agent': 'WorldMonitor-MCP-Proxy/1.0',
},
signal: signal ? AbortSignal.any([signal, dnsTimeout]) : dnsTimeout,
});
if (!response.ok) {
throw new Error(`DNS ${recordType} lookup failed: HTTP ${response.status}`);
}
const data = await response.json();
if (data?.Status !== 0) {
throw new Error(`DNS ${recordType} lookup failed: status ${data?.Status}`);View on GitHub (pinned to e586b8b4b8)