nexu-io/open-design · error · Error
unknown MCP tool
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.
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
- artifactManifest must be an object
- artifactType must be one of
- codex mcp add failed
- codex mcp remove failed
- confirm_brief requires the same local MCP session that…
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/7c1b8d33153ede8f.
Report an issue: GitHub.
Appendix: 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)