From 54fff3b663797f6b0b770a7221b238db2220cbe3 Mon Sep 17 00:00:00 2001 From: czlonkowski Date: Mon, 9 Feb 2026 23:56:27 +0800 Subject: [PATCH] fix: disable MCP Apps that don't render in Claude.ai Disable 3 MCP Apps (workflow-list, execution-history, health-dashboard) that show as collapsed accordions and remove n8n_deploy_template tool mapping that renders blank content. The server sets _meta correctly on the wire but the Claude.ai host ignores it for these tools. Keep the 2 working apps (operation-result, validation-summary) active. Conceived by Romuald Czlonkowski - https://www.aiadvisors.pl/en Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 8 ++++++ package.json | 2 +- src/mcp/ui/app-configs.ts | 36 ++++----------------------- tests/unit/mcp/ui/app-configs.test.ts | 29 ++++++--------------- tests/unit/mcp/ui/registry.test.ts | 7 ++++-- 5 files changed, 26 insertions(+), 56 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d579fc0..320b661 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.35.2] - 2026-02-09 + +### Changed + +- **MCP Apps: Disable non-rendering apps in Claude.ai**: Disabled 3 MCP Apps (workflow-list, execution-history, health-dashboard) that render as collapsed accordions in Claude.ai, and removed `n8n_deploy_template` tool mapping which renders blank content. The server sets `_meta` correctly on the wire but the Claude.ai host ignores it for these tools. The 2 working apps (operation-result for 6 tools, validation-summary for 3 tools) remain active. Disabled apps can be re-enabled once the host-side issue is resolved. + +Conceived by Romuald Czlonkowski - https://www.aiadvisors.pl/en + ## [2.35.1] - 2026-02-09 ### Fixed diff --git a/package.json b/package.json index d20d3f0..dea22b9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "n8n-mcp", - "version": "2.35.1", + "version": "2.35.2", "description": "Integration between n8n workflow automation and Model Context Protocol (MCP)", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/src/mcp/ui/app-configs.ts b/src/mcp/ui/app-configs.ts index 8021845..31f21d1 100644 --- a/src/mcp/ui/app-configs.ts +++ b/src/mcp/ui/app-configs.ts @@ -14,7 +14,7 @@ export const UI_APP_CONFIGS: UIAppConfig[] = [ 'n8n_delete_workflow', 'n8n_test_workflow', 'n8n_autofix_workflow', - 'n8n_deploy_template', + // n8n_deploy_template disabled: Claude.ai renders blank content for this tool ], }, { @@ -29,34 +29,8 @@ export const UI_APP_CONFIGS: UIAppConfig[] = [ 'n8n_validate_workflow', ], }, - { - id: 'workflow-list', - displayName: 'Workflow List', - description: 'Compact table of workflows with status, tags, and metadata', - uri: 'ui://n8n-mcp/workflow-list', - mimeType: 'text/html;profile=mcp-app', - toolPatterns: [ - 'n8n_list_workflows', - ], - }, - { - id: 'execution-history', - displayName: 'Execution History', - description: 'Execution history table with status summary bar', - uri: 'ui://n8n-mcp/execution-history', - mimeType: 'text/html;profile=mcp-app', - toolPatterns: [ - 'n8n_executions', - ], - }, - { - id: 'health-dashboard', - displayName: 'Health Dashboard', - description: 'Connection status, versions, and performance metrics', - uri: 'ui://n8n-mcp/health-dashboard', - mimeType: 'text/html;profile=mcp-app', - toolPatterns: [ - 'n8n_health_check', - ], - }, + // workflow-list, execution-history, health-dashboard disabled: + // Claude.ai does not render these apps (shows collapsed accordions). + // The server sets _meta correctly on the wire but the host ignores it. + // Re-enable once the host-side issue is resolved. ]; diff --git a/tests/unit/mcp/ui/app-configs.test.ts b/tests/unit/mcp/ui/app-configs.test.ts index 12d88b9..26359eb 100644 --- a/tests/unit/mcp/ui/app-configs.test.ts +++ b/tests/unit/mcp/ui/app-configs.test.ts @@ -86,7 +86,7 @@ describe('UI_APP_CONFIGS', () => { expect(config!.toolPatterns).toContain('n8n_update_full_workflow'); expect(config!.toolPatterns).toContain('n8n_delete_workflow'); expect(config!.toolPatterns).toContain('n8n_test_workflow'); - expect(config!.toolPatterns).toContain('n8n_deploy_template'); + expect(config!.toolPatterns).not.toContain('n8n_deploy_template'); }); it('should contain the validation-summary config', () => { @@ -98,29 +98,14 @@ describe('UI_APP_CONFIGS', () => { expect(config!.toolPatterns).toContain('n8n_validate_workflow'); }); - it('should have exactly 5 configs', () => { - expect(UI_APP_CONFIGS.length).toBe(5); + it('should have exactly 2 configs', () => { + expect(UI_APP_CONFIGS.length).toBe(2); }); - it('should contain the workflow-list config', () => { - const config = UI_APP_CONFIGS.find(c => c.id === 'workflow-list'); - expect(config).toBeDefined(); - expect(config!.displayName).toBe('Workflow List'); - expect(config!.toolPatterns).toContain('n8n_list_workflows'); - }); - - it('should contain the execution-history config', () => { - const config = UI_APP_CONFIGS.find(c => c.id === 'execution-history'); - expect(config).toBeDefined(); - expect(config!.displayName).toBe('Execution History'); - expect(config!.toolPatterns).toContain('n8n_executions'); - }); - - it('should contain the health-dashboard config', () => { - const config = UI_APP_CONFIGS.find(c => c.id === 'health-dashboard'); - expect(config).toBeDefined(); - expect(config!.displayName).toBe('Health Dashboard'); - expect(config!.toolPatterns).toContain('n8n_health_check'); + it('should not contain disabled apps', () => { + expect(UI_APP_CONFIGS.find(c => c.id === 'workflow-list')).toBeUndefined(); + expect(UI_APP_CONFIGS.find(c => c.id === 'execution-history')).toBeUndefined(); + expect(UI_APP_CONFIGS.find(c => c.id === 'health-dashboard')).toBeUndefined(); }); it('should have IDs that are valid URI path segments (no spaces or special chars)', () => { diff --git a/tests/unit/mcp/ui/registry.test.ts b/tests/unit/mcp/ui/registry.test.ts index 3d85167..ca5316a 100644 --- a/tests/unit/mcp/ui/registry.test.ts +++ b/tests/unit/mcp/ui/registry.test.ts @@ -187,8 +187,11 @@ describe('UIAppRegistry', () => { expect(UIAppRegistry.getAppForTool('n8n_autofix_workflow')!.config.id).toBe('operation-result'); }); - it('should map n8n_deploy_template to operation-result', () => { - expect(UIAppRegistry.getAppForTool('n8n_deploy_template')!.config.id).toBe('operation-result'); + it('should not map disabled tools', () => { + expect(UIAppRegistry.getAppForTool('n8n_deploy_template')).toBeNull(); + expect(UIAppRegistry.getAppForTool('n8n_list_workflows')).toBeNull(); + expect(UIAppRegistry.getAppForTool('n8n_executions')).toBeNull(); + expect(UIAppRegistry.getAppForTool('n8n_health_check')).toBeNull(); }); it('should map validate_node to validation-summary', () => {