loading…
Search for a command to run...
loading…
Test, score, and inspect n8n workflows via MCP. Config-driven test suites with two-tier scoring, lightweight execution traces, and a built-in node catalog with
Test, score, and inspect n8n workflows via MCP. Config-driven test suites with two-tier scoring, lightweight execution traces, and a built-in node catalog with 436+ nodes.
Safe MCP server + CLI for testing, scoring, and inspecting n8n workflows
Config-driven test suites with tiered scoring, execution traces, and a built-in node catalog.
Most n8n MCP integrations give you full admin access — credentials, destructive operations, auto-fix loops. That's fine for development, but risky for CI, shared environments, or autonomous agents.
n8n-workflow-tester-safe takes a different approach:
| Feature | This MCP | Full admin MCPs |
|---|---|---|
| Test workflows with scoring | Yes | No |
| Execution traces (lightweight) | Yes | No |
| Node catalog with suggestions | Yes | No |
| Credential management | Excluded | Yes |
| Secret lifecycle | Excluded | Yes |
| Auto-fix loops | Excluded | Some |
Result: A focused tool that does testing and inspection really well, without the risk surface of a full admin wrapper.
git clone https://github.com/souzix76/n8n-workflow-tester-safe.git
cd n8n-workflow-tester-safe
npm install && npm run build
cp .env.example .env
# Edit .env with your n8n URL and API key
N8N_BASE_URL=http://127.0.0.1:5678
N8N_API_KEY=your_n8n_api_key_here
DEFAULT_TIMEOUT_MS=30000
As MCP server (for Claude, OpenClaw, or any MCP client):
node dist/index.js
As CLI (for scripts and CI):
node dist/cli.js --config ./workflows/example.json
~/.claude.json){
"mcpServers": {
"n8n-workflow-tester": {
"type": "stdio",
"command": "node",
"args": ["/path/to/n8n-workflow-tester-safe/dist/index.js"],
"env": {
"N8N_BASE_URL": "http://localhost:5678",
"N8N_API_KEY": "your_api_key"
}
}
}
}
The server uses stdio transport — compatible with any MCP client that supports stdio.
Define your tests in a JSON file:
{
"workflowId": "abc123",
"workflowName": "my-webhook-handler",
"triggerMode": "webhook",
"webhookPath": "/webhook/my-handler",
"timeoutMs": 15000,
"qualityThreshold": 85,
"testPayloads": [
{
"name": "happy-path",
"data": { "message": "Hello", "userId": "user_001" }
},
{
"name": "empty-input",
"data": { "message": "" }
},
{
"name": "large-payload",
"data": { "items": ["a","b","c","d","e","f","g","h","i","j"] }
}
],
"tier3Checks": [
{
"name": "has-response",
"field": "output",
"check": "not_empty",
"severity": "error"
},
{
"name": "response-length",
"field": "output.message",
"check": "min_length",
"value": 5,
"severity": "warning",
"message": "Response too short"
}
]
}
Every test run produces a two-tier score:
Final Score = (Tier 1 x 70%) + (Tier 3 x 30%)
| Tier | Weight | What it checks |
|---|---|---|
| Tier 1 (Infrastructure) | 70% | HTTP success, timeout compliance, non-empty output |
| Tier 3 (Quality) | 30% | Custom field checks: contains, equals, min/max length, not_empty |
A test passes when:
error{
"passed": true,
"score": 93,
"tier1Score": 100,
"tier3Score": 80,
"issues": [
{
"tier": "tier3",
"severity": "warning",
"check": "response-length",
"message": "Response too short"
}
]
}
| Tool | Description |
|---|---|
test_workflow |
Run a single payload test from a config file |
evaluate_workflow_result |
Run a test and return evaluation score + issues |
run_workflow_suite |
Run all payloads in a config, return per-payload scores |
| Tool | Description |
|---|---|
create_workflow |
Create a new workflow from JSON |
update_workflow |
Replace an existing workflow by ID |
delete_workflow |
Delete a workflow by ID |
add_node_to_workflow |
Append a node to an existing workflow |
connect_nodes |
Create a connection between two nodes |
| Tool | Description |
|---|---|
get_workflow_summary |
Compact summary: node count, names, types, disabled status |
list_node_types |
List all available node types from the n8n instance |
get_node_type |
Full schema/metadata for a specific node type |
list_executions |
Recent executions, filterable by workflow and status |
get_execution |
Full execution data by ID |
get_execution_trace |
Lightweight per-node trace — timing, errors, item counts |
| Tool | Description |
|---|---|
get_catalog_stats |
Node/trigger/credential counts from imported catalog |
search_nodes |
Fuzzy search by name, optional trigger-only filter |
list_triggers |
All trigger nodes from the catalog |
validate_node_type |
Check if a node type exists, get close matches |
suggest_nodes_for_task |
Natural-language task in, relevant nodes out |
The workflows/ directory includes ready-to-use test configs:
| File | Trigger Mode | Payloads | Description |
|---|---|---|---|
example.json |
webhook | 2 | Basic webhook echo test |
telegram-bot.json |
webhook | 3 | Telegram bot command handler |
api-pipeline.json |
execute | 3 | Multi-step API data pipeline |
src/
index.ts MCP server (stdio) + tool registration
cli.ts CLI runner for config-driven tests
n8n-client.ts REST client for n8n API v1
evaluator.ts Two-tier scoring engine
catalog.ts Node catalog parser + fuzzy search
config.ts JSON config reader + Zod validation
types.ts TypeScript interfaces
catalog/ Imported n8n node catalog (436 nodes, 389 credentials)
workflows/ Example test suite configs
@modelcontextprotocol/sdk and zodnpx usagegit checkout -b feat/my-feature)git commit -m 'feat: add my feature')git push origin feat/my-feature)
Originally created by James (OpenClaw). Enhanced and maintained by Souzix76.
Built for n8n operators who want testing without the risk surface.
Compatible with Claude, OpenClaw, and any MCP client.
Выполни в терминале:
claude mcp add souzix76-n8n-workflow-tester-safe -- npx pro-tip
Поставил Souzix76/n8n-workflow-tester-safe? Скажи Claude: «запомни почему я установил Souzix76/n8n-workflow-tester-safe и что хочу попробовать» — попадёт в твой Vault.
как это работает →CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.