# Souzix76/n8n-workflow-tester-safe [Health: Active]

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/Souzix76/n8n-workflow-tester-safe  
**GitHub Stars:** 1  
**Views:** 2  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/souzix76-n8n-workflow-tester-safe

## Description
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.

## Tools
Capabilities this server exposes over MCP:

- **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
- **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
- **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
- **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

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "n8n-workflow-tester-safe": {
    "command": "npx",
    "args": ["-y","souzix76-n8n-workflow-tester-safe"],
    "env": {
      "N8N_BASE_URL": "",
      "N8N_API_KEY": ""
    }
  }
}
```

**Requires environment variables:** `N8N_BASE_URL`, `N8N_API_KEY` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation & README

<p align="center">
  <img src="https://raw.githubusercontent.com/Souzix76/n8n-workflow-tester-safe/HEAD/assets/banner.svg" alt="n8n-workflow-tester-safe" width="100%"/>
</p>

<p align="center">
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-E8784A.svg" alt="License: MIT"/></a>
  <a href="https://modelcontextprotocol.io"><img src="https://img.shields.io/badge/MCP-Compatible-D4A574.svg" alt="MCP Compatible"/></a>
  <a href="https://www.typescriptlang.org"><img src="https://img.shields.io/badge/TypeScript-5.7-blue.svg" alt="TypeScript"/></a>
  <a href="https://n8n.io"><img src="https://img.shields.io/badge/n8n-2.12+-FF6D5A.svg" alt="n8n"/></a>
</p>

<p align="center">
  <strong>Safe MCP server + CLI for testing, scoring, and inspecting n8n workflows</strong><br/>
  <em>Config-driven test suites with tiered scoring, execution traces, and a built-in node catalog.</em>
</p>

<a href="https://glama.ai/mcp/servers/Souzix76/n8n-workflow-tester-safe">
  <img width="380" height="200" src="https://glama.ai/mcp/servers/Souzix76/n8n-workflow-tester-safe/badge" alt="n8n-workflow-tester-safe MCP server" />
</a>

---

## Why?

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.

---

## Quick Start

### 1. Install

```bash
git clone https://github.com/souzix76/n8n-workflow-tester-safe.git
cd n8n-workflow-tester-safe
npm install && npm run build
```

### 2. Configure

```bash
cp .env.example .env
# Edit .env with your n8n URL and API key
```

```env
N8N_BASE_URL=http://127.0.0.1:5678
N8N_API_KEY=your_n8n_api_key_here
DEFAULT_TIMEOUT_MS=30000
```

### 3. Run

**As MCP server** (for Claude, OpenClaw, or any MCP client):

```bash
node dist/index.js
```

**As CLI** (for scripts and CI):

```bash
node dist/cli.js --config ./workflows/example.json
```

---

## MCP Client Configuration

### Claude Code (`~/.claude.json`)

```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"
      }
    }
  }
}
```

### OpenClaw / Any MCP client

The server uses **stdio transport** — compatible with any MCP client that supports stdio.

---

## How It Works

### Test Config

Define your tests in a JSON file:

```json
{
  "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"
    }
  ]
}
```

### Scoring System

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:
- Tier 1 score = 100 (all infrastructure checks pass)
- Final score >= quality threshold (default 85)
- No issues with severity `error`

### Example Output

```json
{
  "passed": true,
  "score": 93,
  "tier1Score": 100,
  "tier3Score": 80,
  "issues": [
    {
      "tier": "tier3",
      "severity": "warning",
      "check": "response-length",
      "message": "Response too short"
    }
  ]
}
```

---

## Tools Reference

### Testing (3 tools)

| 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 |

### Workflow Operations (5 tools)

| 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 |

### Introspection (5 tools)

| 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 |

### Catalog (5 tools)

| 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 |

---

## Example Configs

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 |

---

## Architecture

```
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
```

### Design Constraints

- **stdio-only transport** — no HTTP server, no auth to manage
- **Explicit tool surface** — 19 tools, each with a clear purpose
- **Small dependency footprint** — only `@modelcontextprotocol/sdk` and `zod`
- **No credential lifecycle** — won't read, create, or delete credentials
- **No agentic auto-repair** — reports issues, doesn't auto-fix them

---

## Safety Posture

### Included
- Workflow test execution (webhook + API)
- Output evaluation with tiered scoring
- Workflow CRUD (create, read, update, delete)
- Graph editing (add nodes, connect)
- Execution inspection and tracing
- Node catalog lookup and validation

### Deliberately Excluded
- Credentials management
- Secrets lifecycle
- Destructive restore flows
- Autonomous LLM auto-fix loops
- Production deployment operations

---

## Roadmap

- [ ] Read-only mode flag (disable all mutation tools)
- [ ] Workflow diff summaries (before/after comparison)
- [ ] Reusable evaluation presets for common patterns
- [ ] Richer trace visualization
- [ ] Fixture libraries for test payloads
- [ ] npm package for `npx` usage

---

## Contributing

1. Fork the repo
2. Create a feature branch (`git checkout -b feat/my-feature`)
3. Commit changes (`git commit -m 'feat: add my feature'`)
4. Push to branch (`git push origin feat/my-feature`)
5. Open a Pull Request

---

## License

[MIT](https://github.com/Souzix76/n8n-workflow-tester-safe/blob/HEAD/LICENSE)

---

<p align="center">
  Originally created by James (<a href="https://openclaw.org">OpenClaw</a>). Enhanced and maintained by <a href="https://github.com/Souzix76">Souzix76</a>.<br/>
  Built for <a href="https://n8n.io">n8n</a> operators who want testing without the risk surface.<br/>
  Compatible with <a href="https://claude.ai">Claude</a>, <a href="https://openclaw.org">OpenClaw</a>, and any MCP client.
</p>
