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
- Use one of the six recognized tool names.
- Call tools/list on this server first and invoke only names it advertises.
- 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
- Always enumerate tools/list on the target server before invoking.
- Do not hardcode tool names across releases.
- Invoke against the same server that advertised the tool.
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
- codex mcp add failed: ${failureDetail(result)}
- codex mcp remove failed: ${failureDetail(result)}
- unsupported local_file refresh tool: ${toolName}
- local daemon refresh sources require source.type daemon_tool
- unsupported local daemon refresh tool: ${options.source.tool
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/7c1b8d33153ede8f.
Report an issue: GitHub.