koala73/worldmonitor · error · SafeWebMcpError
Dashboard unavailable
Error message
Dashboard unavailable: ${boundedText(error.message, 160)} Reason: ${error.reason}. What it means
SafeWebMcpError thrown by the WebMCP tool wrapper when a dashboard dependency failed to initialize — the underlying DashboardBindingError's message (bounded to 160 chars) and reason are embedded. It signals the dashboard subsystem backing the tool is unavailable (e.g. bootstrap failure), not that the tool's arguments were wrong.
Solutions
- Check the embedded reason to identify which dashboard subsystem failed
- Reload the dashboard so the binding can re-initialize
- Retry after the underlying bootstrap/initialization issue is resolved
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at src/services/webmcp.ts:290 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of koala73/worldmonitor@e586b8b4b8 (2026-08-27).
Data as JSON: /api/errors/0cc7a70afd1d1d15.
Report an issue: GitHub.
Appendix: source
Thrown at src/services/webmcp.ts:785
successMetadata?: (
args: Record<string, unknown>,
result: unknown,
) => Record<string, unknown>;
}
function withInvocationLogging(
name: WebMcpSpaToolName,
fn: (
input: Record<string, unknown>,
extra?: { signal?: AbortSignal },
) => Promise<unknown> | unknown,
trackEvent: WebMcpAnalytics,
hooks: WebMcpInvocationHooks = {},
): DashboardWebMcpTool['execute'] {
return async (args, extra?: WebMcpToolExecutionContext) => {
const signal = isAbortSignal(extra?.signal) ? extra.signal : undefined;
const execution = signal ? { signal } : undefined;
markLcpDebug('wm:webmcp:tool-start', {
tool: name,
targetCancellationSupported: Boolean(signal),
});
try {
throwIfWebMcpAborted(signal);
const preflightResult = await hooks.preflight?.(args, execution);
throwIfWebMcpAborted(signal);
let result: unknown;
if (preflightResult !== undefined) {
result = preflightResult;
} else if (CANCELLATION_REQUIRED_WEBMCP_TOOLS.has(name) && !signal) {
// This tool declared that a phantom completion would be unsafe, and
// the host cannot deliver the target-side signal. Return a structured
// denial because some hosts erase the name and message of errors
// raised by the page callback.
result = unsupportedCancellationResult();
} else {
result = await fn(args, execution);View on GitHub (pinned to e586b8b4b8)