mirror of
https://github.com/czlonkowski/n8n-mcp.git
synced 2026-02-07 14:03:08 +00:00
* feat: add MCP Apps with rich HTML UIs for tool results Add MCP Apps infrastructure that allows MCP hosts like Claude Desktop to render rich HTML UIs alongside tool results via `_meta.ui` and the MCP resources protocol. - Server-side UI module (src/mcp/ui/) with UIAppRegistry, tool-to-UI mapping, and _meta.ui injection into tool responses - React + Vite build pipeline (ui-apps/) producing self-contained HTML per app using vite-plugin-singlefile - Operation Result UI for workflow CRUD tools (create, update, delete, test, autofix, deploy) - Validation Summary UI for validation tools (validate_node, validate_workflow, n8n_validate_workflow) - Shared component library (Card, Badge, Expandable) with n8n dark theme - MCP resources protocol support (ListResources, ReadResource handlers) - Graceful degradation when ui-apps/dist/ is not built - 22 unit tests across 3 test files Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * test: improve MCP Apps test coverage and add security hardening - Expand test suite from 22 to 57 tests across 3 test files - Add UIAppRegistry.reset() for proper test isolation between tests - Replace some fs mocks with real temp directory tests in registry - Add edge case coverage: empty strings, pre-load state, double load, malformed URIs, duplicate tool patterns, empty HTML files - Add regression tests for specific tool-to-UI mappings - Add URI format consistency validation across all configs - Improve _meta.ui injection tests with structuredContent coexistence - Coverage: statements 79.4% -> 80%, lines 79.4% -> 80% Conceived by Romuald Członkowski - https://www.aiadvisors.pl/en Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: align MCP Apps with official ext-apps spec Update URI scheme from n8n-mcp://ui/ to ui://n8n-mcp/ per MCP spec. Move _meta.ui.resourceUri to tool definitions (tools/list) instead of tool call responses. Rewrite UI apps hook to use @modelcontextprotocol/ext-apps App class instead of window.__MCP_DATA__. Conceived by Romuald Czlonkowski - https://www.aiadvisors.pl/en Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
181 lines
8.4 KiB
JSON
181 lines
8.4 KiB
JSON
{
|
|
"name": "n8n-mcp",
|
|
"version": "2.34.1",
|
|
"description": "Integration between n8n workflow automation and Model Context Protocol (MCP)",
|
|
"main": "dist/index.js",
|
|
"types": "dist/index.d.ts",
|
|
"exports": {
|
|
".": {
|
|
"types": "./dist/index.d.ts",
|
|
"require": "./dist/index.js",
|
|
"import": "./dist/index.js"
|
|
}
|
|
},
|
|
"bin": {
|
|
"n8n-mcp": "./dist/mcp/index.js"
|
|
},
|
|
"scripts": {
|
|
"build": "tsc -p tsconfig.build.json",
|
|
"build:ui": "cd ui-apps && npm install && npm run build",
|
|
"build:all": "npm run build:ui && npm run build",
|
|
"rebuild": "node dist/scripts/rebuild.js",
|
|
"rebuild:optimized": "node dist/scripts/rebuild-optimized.js",
|
|
"validate": "node dist/scripts/validate.js",
|
|
"test-nodes": "node dist/scripts/test-nodes.js",
|
|
"start": "node dist/mcp/index.js",
|
|
"start:http": "MCP_MODE=http node dist/mcp/index.js",
|
|
"start:http:fixed:deprecated": "echo 'DEPRECATED: USE_FIXED_HTTP is deprecated. Use npm run start:http instead.' && MCP_MODE=http USE_FIXED_HTTP=true node dist/mcp/index.js",
|
|
"start:n8n": "N8N_MODE=true MCP_MODE=http node dist/mcp/index.js",
|
|
"http": "npm run build && npm run start:http",
|
|
"dev": "npm run build && npm run rebuild && npm run validate",
|
|
"dev:http": "MCP_MODE=http nodemon --watch src --ext ts --exec 'npm run build && npm run start:http'",
|
|
"test:single-session": "./scripts/test-single-session.sh",
|
|
"test:mcp-endpoint": "node scripts/test-mcp-endpoint.js",
|
|
"test:mcp-endpoint:curl": "./scripts/test-mcp-endpoint.sh",
|
|
"test:mcp-stdio": "npm run build && node scripts/test-mcp-stdio.js",
|
|
"test": "vitest",
|
|
"test:ui": "vitest --ui",
|
|
"test:run": "vitest run",
|
|
"test:coverage": "vitest run --coverage",
|
|
"test:ci": "vitest run --coverage --coverage.thresholds.lines=0 --coverage.thresholds.functions=0 --coverage.thresholds.branches=0 --coverage.thresholds.statements=0 --reporter=default --reporter=junit",
|
|
"test:watch": "vitest watch",
|
|
"test:unit": "vitest run tests/unit",
|
|
"test:integration": "vitest run --config vitest.config.integration.ts",
|
|
"test:integration:n8n": "vitest run tests/integration/n8n-api",
|
|
"test:cleanup:orphans": "tsx tests/integration/n8n-api/scripts/cleanup-orphans.ts",
|
|
"test:e2e": "vitest run tests/e2e",
|
|
"lint": "tsc --noEmit",
|
|
"typecheck": "tsc --noEmit",
|
|
"update:n8n": "node scripts/update-n8n-deps.js",
|
|
"update:n8n:check": "node scripts/update-n8n-deps.js --dry-run",
|
|
"fetch:templates": "node dist/scripts/fetch-templates.js",
|
|
"fetch:templates:update": "node dist/scripts/fetch-templates.js --update",
|
|
"fetch:templates:extract": "node dist/scripts/fetch-templates.js --extract-only",
|
|
"fetch:templates:robust": "node dist/scripts/fetch-templates-robust.js",
|
|
"fetch:community": "node dist/scripts/fetch-community-nodes.js",
|
|
"fetch:community:verified": "node dist/scripts/fetch-community-nodes.js --verified-only",
|
|
"fetch:community:update": "node dist/scripts/fetch-community-nodes.js --update",
|
|
"generate:docs": "node dist/scripts/generate-community-docs.js",
|
|
"generate:docs:readme-only": "node dist/scripts/generate-community-docs.js --readme-only",
|
|
"generate:docs:summary-only": "node dist/scripts/generate-community-docs.js --summary-only",
|
|
"generate:docs:incremental": "node dist/scripts/generate-community-docs.js --incremental",
|
|
"generate:docs:stats": "node dist/scripts/generate-community-docs.js --stats",
|
|
"migrate:readme-columns": "node dist/scripts/migrate-readme-columns.js",
|
|
"prebuild:fts5": "npx tsx scripts/prebuild-fts5.ts",
|
|
"test:templates": "node dist/scripts/test-templates.js",
|
|
"test:protocol-negotiation": "npx tsx src/scripts/test-protocol-negotiation.ts",
|
|
"test:workflow-validation": "node dist/scripts/test-workflow-validation.js",
|
|
"test:template-validation": "node dist/scripts/test-template-validation.js",
|
|
"test:essentials": "node dist/scripts/test-essentials.js",
|
|
"test:enhanced-validation": "node dist/scripts/test-enhanced-validation.js",
|
|
"test:ai-workflow-validation": "node dist/scripts/test-ai-workflow-validation.js",
|
|
"test:mcp-tools": "node dist/scripts/test-mcp-tools.js",
|
|
"test:n8n-manager": "node dist/scripts/test-n8n-manager-integration.js",
|
|
"test:n8n-validate-workflow": "node dist/scripts/test-n8n-validate-workflow.js",
|
|
"test:typeversion-validation": "node dist/scripts/test-typeversion-validation.js",
|
|
"test:error-handling": "node dist/scripts/test-error-handling-validation.js",
|
|
"test:workflow-diff": "node dist/scripts/test-workflow-diff.js",
|
|
"test:transactional-diff": "node dist/scripts/test-transactional-diff.js",
|
|
"test:tools-documentation": "node dist/scripts/test-tools-documentation.js",
|
|
"test:structure-validation": "npx tsx scripts/test-structure-validation.ts",
|
|
"test:url-configuration": "npm run build && ts-node scripts/test-url-configuration.ts",
|
|
"test:search-improvements": "node dist/scripts/test-search-improvements.js",
|
|
"test:fts5-search": "node dist/scripts/test-fts5-search.js",
|
|
"migrate:fts5": "node dist/scripts/migrate-nodes-fts.js",
|
|
"test:mcp:update-partial": "node dist/scripts/test-mcp-n8n-update-partial.js",
|
|
"test:update-partial:debug": "node dist/scripts/test-update-partial-debug.js",
|
|
"test:issue-45-fix": "node dist/scripts/test-issue-45-fix.js",
|
|
"test:auth-logging": "tsx scripts/test-auth-logging.ts",
|
|
"test:docker": "./scripts/test-docker-config.sh all",
|
|
"test:docker:unit": "./scripts/test-docker-config.sh unit",
|
|
"test:docker:integration": "./scripts/test-docker-config.sh integration",
|
|
"test:docker:security": "./scripts/test-docker-config.sh security",
|
|
"sanitize:templates": "node dist/scripts/sanitize-templates.js",
|
|
"db:rebuild": "node dist/scripts/rebuild-database.js",
|
|
"benchmark": "vitest bench --config vitest.config.benchmark.ts",
|
|
"benchmark:watch": "vitest bench --watch --config vitest.config.benchmark.ts",
|
|
"benchmark:ui": "vitest bench --ui --config vitest.config.benchmark.ts",
|
|
"benchmark:ci": "CI=true node scripts/run-benchmarks-ci.js",
|
|
"db:init": "node -e \"new (require('./dist/services/sqlite-storage-service').SQLiteStorageService)(); console.log('Database initialized')\"",
|
|
"docs:rebuild": "ts-node src/scripts/rebuild-database.ts",
|
|
"sync:runtime-version": "node scripts/sync-runtime-version.js",
|
|
"update:readme-version": "node scripts/update-readme-version.js",
|
|
"prepare:publish": "./scripts/publish-npm.sh",
|
|
"update:all": "./scripts/update-and-publish-prep.sh",
|
|
"test:release-automation": "node scripts/test-release-automation.js",
|
|
"prepare:release": "node scripts/prepare-release.js"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/czlonkowski/n8n-mcp.git"
|
|
},
|
|
"keywords": [
|
|
"n8n",
|
|
"mcp",
|
|
"model-context-protocol",
|
|
"ai",
|
|
"workflow",
|
|
"automation"
|
|
],
|
|
"author": "Romuald Czlonkowski @ www.aiadvisors.pl/en",
|
|
"license": "MIT",
|
|
"bugs": {
|
|
"url": "https://github.com/czlonkowski/n8n-mcp/issues"
|
|
},
|
|
"homepage": "https://github.com/czlonkowski/n8n-mcp#readme",
|
|
"files": [
|
|
"dist/**/*",
|
|
"ui-apps/dist/**/*",
|
|
"data/nodes.db",
|
|
".env.example",
|
|
"README.md",
|
|
"LICENSE",
|
|
"package.runtime.json"
|
|
],
|
|
"devDependencies": {
|
|
"@faker-js/faker": "^9.9.0",
|
|
"@testing-library/jest-dom": "^6.6.4",
|
|
"@types/better-sqlite3": "^7.6.13",
|
|
"@types/express": "^5.0.3",
|
|
"@types/node": "^22.15.30",
|
|
"@types/ws": "^8.18.1",
|
|
"@vitest/coverage-v8": "^3.2.4",
|
|
"@vitest/runner": "^3.2.4",
|
|
"@vitest/ui": "^3.2.4",
|
|
"axios": "^1.11.0",
|
|
"axios-mock-adapter": "^2.1.0",
|
|
"fishery": "^2.3.1",
|
|
"msw": "^2.10.4",
|
|
"nodemon": "^3.1.10",
|
|
"ts-node": "^10.9.2",
|
|
"typescript": "^5.8.3",
|
|
"vitest": "^3.2.4"
|
|
},
|
|
"dependencies": {
|
|
"@modelcontextprotocol/sdk": "1.20.1",
|
|
"@n8n/n8n-nodes-langchain": "^2.6.2",
|
|
"@supabase/supabase-js": "^2.57.4",
|
|
"dotenv": "^16.5.0",
|
|
"express": "^5.1.0",
|
|
"express-rate-limit": "^7.1.5",
|
|
"form-data": "^4.0.5",
|
|
"lru-cache": "^11.2.1",
|
|
"n8n": "^2.6.3",
|
|
"n8n-core": "^2.6.1",
|
|
"n8n-workflow": "^2.6.0",
|
|
"openai": "^4.77.0",
|
|
"sql.js": "^1.13.0",
|
|
"tslib": "^2.6.2",
|
|
"uuid": "^10.0.0",
|
|
"zod": "3.24.1"
|
|
},
|
|
"optionalDependencies": {
|
|
"@rollup/rollup-darwin-arm64": "^4.50.0",
|
|
"@rollup/rollup-linux-x64-gnu": "^4.50.0",
|
|
"better-sqlite3": "^11.10.0"
|
|
},
|
|
"overrides": {
|
|
"pyodide": "0.26.4"
|
|
}
|
|
}
|