nexu-io/open-design · error · Error

unknown MCP tool: ${name}

Error message

unknown MCP tool: ${name}

What it means

The live-artifacts MCP server's callTool dispatcher recognizes exactly six tool names: live_artifacts_create, live_artifacts_list, live_artifacts_update, live_artifacts_refresh, connectors_list, connectors_execute. Any other name falls through to the final throw.

Source

Thrown at apps/daemon/src/mcp-live-artifacts-server.ts:201

        ...(typeof args.templateHtml === 'string' ? { templateHtml: args.templateHtml } : {}),
        ...(args.provenanceJson && typeof args.provenanceJson === 'object' && !Array.isArray(args.provenanceJson) ? { provenanceJson: args.provenanceJson } : {}),
      }),
    });
  }
  if (name === 'live_artifacts_refresh') {
    return await requestJson('/api/tools/live-artifacts/refresh', { method: 'POST', body: JSON.stringify({ artifactId: args.artifactId }) });
  }
  if (name === 'connectors_list') {
    const useCase = args.useCase === 'personal_daily_digest' ? '?useCase=personal_daily_digest' : '';
    return await requestJson(`/api/tools/connectors/list${useCase}`, { method: 'GET' });
  }
  if (name === 'connectors_execute') {
    return await requestJson('/api/tools/connectors/execute', {
      method: 'POST',
      body: JSON.stringify({ connectorId: args.connectorId, toolName: args.toolName, input: args.input ?? {} }),
    });
  }
  throw new Error(`unknown MCP tool: ${name}`);
}

export async function handleLiveArtifactsMcpRequest(request: JsonRpcRequest): Promise<JsonObject | undefined> {
  const id = request.id ?? null;
  const method = request.method;

  if (method === 'notifications/initialized') return undefined;

  try {
    if (method === 'initialize') {
      return {
        jsonrpc: '2.0',
        id,
        result: {
          protocolVersion: '2025-03-26',
          capabilities: { tools: {} },
          serverInfo: { name: 'open-design-live-artifacts', version: '0.1.0' },
        },

View on GitHub (pinned to 5be4028344)

Solutions

  1. Use one of the six recognized tool names.
  2. Call tools/list on this server first and invoke only names it advertises.
  3. Check the spelling and the current name.

Example fix

// before
callTool('live_artifact_create', { input }) // singular -> throws [368]

// after
callTool('live_artifacts_create', { input })
Defensive patterns

Strategy: validation

Validate before calling

const KNOWN = new Set([
  'live_artifacts_create',
  'live_artifacts_list',
  'live_artifacts_update',
  'live_artifacts_refresh',
  'connectors_list',
  'connectors_execute',
]);
if (!KNOWN.has(name)) throw new Error(`unknown MCP tool: ${name}`);

Prevention

When it happens

Trigger: Invoking a tool name that does not exist on this server; a typo; calling a tool advertised by a different MCP server against this one; version skew where a tool was renamed.

Common situations: A client lists tools from server A and invokes against server B; a hardcoded tool name from an older release.

Related errors


AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12). Data as JSON: /api/errors/7c1b8d33153ede8f. Report an issue: GitHub.