koala73/worldmonitor · error

tools/list error

Error message

tools/list error: ${listData.error.message}

What it means

Thrown by mcpListTools when the tools/list JSON-RPC call returned HTTP 2xx but the response payload contained a JSON-RPC error object. The MCP server explicitly reported a protocol-level error while enumerating tools (e.g. unknown method, internal server error in the handler).

Solutions

  1. Read the embedded error.message — it is the upstream server's JSON-RPC error text
  2. Verify the server supports the tools/list method in its advertised capabilities
  3. Restart or reconfigure the MCP server if it reports an internal tool listing failure
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at api/mcp-proxy.ts:322 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/6ff4cdd5d688713b. Report an issue: GitHub.

Appendix: source

Thrown at api/mcp-proxy.ts:325

  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}`);
  }
  const expectedType = recordType === 'A' ? 1 : 28;
  return (Array.isArray(data?.Answer) ? data.Answer : [])
    .filter(answer => answer?.type === expectedType && typeof answer?.data === 'string')
    .map(answer => answer.data);
}

async function defaultResolveHostname(hostname, signal) {
  const resolveHostnameForTest = getResolveHostnameForTest();
  if (resolveHostnameForTest) return resolveHostnameForTest(hostname, signal);
  const records = await Promise.all([
    resolveDnsJson(hostname, 'A', signal),
    resolveDnsJson(hostname, 'AAAA', signal),
  ]);
  return records.flat();
}

async function assertServerUrlSafe(url, signal) {
  signal?.throwIfAborted();
  const hostname = url.hostname.toLowerCase();
  if (BLOCKED_HOSTNAMES.has(hostname)) {
    throw new McpProxySsrfError('serverUrl hostname is blocked');
  }
  if (isBlockedResolvedAddress(hostname)) {
    throwBlockedAddress(hostname);
  }

  let resolvedAddresses;
  try {
    resolvedAddresses = await defaultResolveHostname(hostname, signal);
  } catch (error) {

View on GitHub (pinned to e586b8b4b8)