n8n-mcp-community 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +116 -0
- package/CODE_OF_CONDUCT.md +51 -0
- package/CONTRIBUTING.md +69 -0
- package/LICENSE +21 -0
- package/README.md +271 -0
- package/ROADMAP.md +41 -0
- package/SECURITY.md +53 -0
- package/SUPPORT.md +19 -0
- package/THIRD_PARTY_NOTICES.md +48 -0
- package/dist/config.js +76 -0
- package/dist/content/node-docs.js +47 -0
- package/dist/content/official-urls.js +11 -0
- package/dist/doctor.js +88 -0
- package/dist/index.js +119 -0
- package/dist/introspect/collector.js +642 -0
- package/dist/introspect/contracts.js +309 -0
- package/dist/introspect/engine.js +184 -0
- package/dist/introspect/http-client.js +142 -0
- package/dist/introspect/index.js +5 -0
- package/dist/introspect/order.js +3 -0
- package/dist/introspect/render.js +25 -0
- package/dist/introspect/rule-ids.js +25 -0
- package/dist/introspect/rules.js +905 -0
- package/dist/introspect/sanitize.js +66 -0
- package/dist/n8n/client.js +170 -0
- package/dist/prompts.js +69 -0
- package/dist/resources.js +42 -0
- package/dist/security/operation-policy.js +20 -0
- package/dist/security/redaction.js +253 -0
- package/dist/server.js +16 -0
- package/dist/tools/common.js +54 -0
- package/dist/tools/credentials.js +259 -0
- package/dist/tools/definition.js +169 -0
- package/dist/tools/endpoint-contracts.js +53 -0
- package/dist/tools/executions.js +180 -0
- package/dist/tools/registry.js +24 -0
- package/dist/tools/schemas.js +203 -0
- package/dist/tools/tags.js +73 -0
- package/dist/tools/users.js +130 -0
- package/dist/tools/utilities.js +347 -0
- package/dist/tools/workflows.js +771 -0
- package/dist/version.js +1 -0
- package/docs/README.md +21 -0
- package/docs/architecture.md +122 -0
- package/docs/assets/demo.gif +0 -0
- package/docs/clients.md +95 -0
- package/docs/compatibility.md +112 -0
- package/docs/configuration.md +87 -0
- package/docs/demo-transcript.md +31 -0
- package/docs/examples.md +86 -0
- package/docs/faq.md +90 -0
- package/docs/getting-started.md +93 -0
- package/docs/installation.md +120 -0
- package/docs/provenance.md +152 -0
- package/docs/security-model.md +170 -0
- package/docs/tools.md +937 -0
- package/docs/troubleshooting.md +185 -0
- package/package.json +126 -0
- package/server.json +51 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and releases use
|
|
5
|
+
[Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.1.0] - 2026-07-20
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Secure stdio MCP runtime with exactly 44 tools, five resources, and four prompts.
|
|
14
|
+
- Three operation modes with exact confirmations for unsafe calls.
|
|
15
|
+
- Deterministic local Introspect engine v2 with 23 diagnostic rules.
|
|
16
|
+
- Strict Node 22/24 test, build, dependency-license, and package gates.
|
|
17
|
+
- Native-English public documentation and complete tool reference.
|
|
18
|
+
- Embedded synthetic terminal demonstration with a packaged transcript and an
|
|
19
|
+
automated orphan-asset documentation gate.
|
|
20
|
+
|
|
21
|
+
- Optional `doctor` floor-compatibility probe behind `N8N_MCP_DOCTOR_PROBE=1`:
|
|
22
|
+
two bounded single-item reads diagnose `floor_compatible`,
|
|
23
|
+
`below_floor_indicators`, or `inconclusive` without claiming a remote version.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
|
|
27
|
+
- Every confirmation-guarded tool now documents its exact required confirmation
|
|
28
|
+
phrase (for example `DELETE <workflowId>`) directly in the `confirmation`
|
|
29
|
+
field description, derived from the tool's own confirmation function so the
|
|
30
|
+
documented and enforced phrases can never drift. The phrase is discoverable in
|
|
31
|
+
the tool schema an MCP client sees, yet is still never echoed back on a
|
|
32
|
+
mismatch, so the deliberate-action guard is preserved.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- Redact URL userinfo credentials, cookie and session values, suffixed secret
|
|
37
|
+
keys, and complete quoted multi-word secrets in strings.
|
|
38
|
+
- Reject API keys that are illegal HTTP header values at configuration load and
|
|
39
|
+
keep request-construction failures value-free.
|
|
40
|
+
- Validate surgical node updates against per-field type contracts and
|
|
41
|
+
re-validate the mutated node before any write reaches n8n.
|
|
42
|
+
- Stop re-validating trusted server round-trip data under caller input rules so
|
|
43
|
+
workflows with large or prototype-keyed upstream data remain updatable.
|
|
44
|
+
- Reject out-of-bounds array indexes in update paths instead of fabricating
|
|
45
|
+
sparse null elements.
|
|
46
|
+
- Exclude pinned data from workflow-diff and introspect reads, and fail before
|
|
47
|
+
writing when an instance omits workflow version identity.
|
|
48
|
+
- Distinguish below-floor endpoint absence from retention pruning in
|
|
49
|
+
version-history errors and add version-floor guidance to floor-marker 404s.
|
|
50
|
+
- Tolerate name-only credential references in usage scans and expose value-free
|
|
51
|
+
coverage counts instead of aborting.
|
|
52
|
+
- Report over-cap successful mutations as truncated successes, derive
|
|
53
|
+
execution-stop outcomes from the validated upstream body, and preserve
|
|
54
|
+
completed credential-test outcomes by truncating over-long diagnostics.
|
|
55
|
+
- Map upstream response-shape mismatches to a stable `upstream_shape_mismatch`
|
|
56
|
+
code without exposing schema internals.
|
|
57
|
+
- Emit stable, secret-free configuration reason codes aligned with `doctor`
|
|
58
|
+
guidance, and end broken-stdio sessions with one structured stderr line.
|
|
59
|
+
- Count literal secrets in canonical `{name, value}` parameter entries and
|
|
60
|
+
recognize core entry nodes without "trigger" in their type names.
|
|
61
|
+
- Authenticate artifact-baseline approval receipts with an operator-held HMAC
|
|
62
|
+
key, bind `server.json` and SBOM digests to the reviewed baseline, verify the
|
|
63
|
+
MCPB dependency file count, and pin gitleaks and npm versions in CI.
|
|
64
|
+
- Remove private identifiers from the public-language gate, scan the gate
|
|
65
|
+
itself, and align registry metadata with the HTTP(S) connection contract.
|
|
66
|
+
|
|
67
|
+
- Report all mutable node execution-behavior fields in value-free workflow
|
|
68
|
+
diffs instead of silently omitting nine supported fields, while normalizing
|
|
69
|
+
absent and explicit `false` default-false flags.
|
|
70
|
+
- Validate the real n8n invitation response, report truthful delivery metadata,
|
|
71
|
+
and keep capability-bearing invitation URLs out of MCP output.
|
|
72
|
+
- Invoke npm, npx-compatible execution, and MCPB through JavaScript entrypoints
|
|
73
|
+
so package, audit, baseline, and bundle gates remain shell-free and portable
|
|
74
|
+
on Windows and Corepack-managed layouts.
|
|
75
|
+
- Encode every valid email selector as one RFC 3986-safe path segment, including
|
|
76
|
+
apostrophe-containing addresses accepted by the public input contract.
|
|
77
|
+
- Reject retained workflow snapshots whose returned version identity differs
|
|
78
|
+
from either selector requested by the workflow-diff tool.
|
|
79
|
+
- Publish every tool input and output schema fully inline. Reusing one Zod
|
|
80
|
+
instance across two properties of the same tool previously emitted
|
|
81
|
+
intra-schema `$ref` pointers that not every MCP client resolves.
|
|
82
|
+
|
|
83
|
+
### Security
|
|
84
|
+
|
|
85
|
+
- Same-origin Public API client with redirect rejection, timeouts, body limits,
|
|
86
|
+
boundary validation, output redaction, and zero-request policy denial.
|
|
87
|
+
- Official documentation URLs and validated Introspect identifiers survive
|
|
88
|
+
output sanitization. Untrusted values that merely look similar stay redacted.
|
|
89
|
+
- All 23 Introspect rule identifiers come from one closed list. Long workflow
|
|
90
|
+
identifiers receive bounded hash suffixes so distinct findings stay distinct.
|
|
91
|
+
- Introspect detects stored non-positive node type versions and keeps partial
|
|
92
|
+
reports within their output budget after synchronizing disclosed findings.
|
|
93
|
+
- Git ignores and index checks reject every `.env*` form and transient npm or
|
|
94
|
+
MCPB artifact. Only fixed public CA slots may appear during an active release
|
|
95
|
+
transition.
|
|
96
|
+
- Executable metadata gates protect the private-to-public transition. Semgrep
|
|
97
|
+
rules are pinned to an exact commit instead of a mutable remote alias.
|
|
98
|
+
- Changelog anchors handle prerelease versions, both release-verification layers
|
|
99
|
+
enforce fixed certificate paths, and a real `private: false` package survives
|
|
100
|
+
pack and install.
|
|
101
|
+
- Public certificates must be regular files. CI pins exact runners and Node
|
|
102
|
+
versions for Linux, macOS, and Windows.
|
|
103
|
+
- Explicit rejection tests for inconsistent package/signing states, an isolated
|
|
104
|
+
empty-cache public-package round trip, package-derived Markdown scan coverage,
|
|
105
|
+
and a SemVer-constrained unpublished-candidate anchor.
|
|
106
|
+
- Artifact receipts are required only for a publishable `private: false`
|
|
107
|
+
candidate. Private development remains fully automated, while an absent or
|
|
108
|
+
stale receipt still blocks the actual release transition.
|
|
109
|
+
- Public-boundary verification now rejects shallow checkouts and scans every
|
|
110
|
+
changed path in the complete ancestry reachable from `HEAD` and all locally
|
|
111
|
+
available refs. Deleted SDDs, private-development receipts, local context,
|
|
112
|
+
credentials, keys, and generated release artifacts cannot survive in that
|
|
113
|
+
publishable history; authenticated public release receipts remain supported.
|
|
114
|
+
|
|
115
|
+
[Unreleased]: https://github.com/drzamarian/n8n-mcp-community/compare/v0.1.0...HEAD
|
|
116
|
+
[0.1.0]: https://github.com/drzamarian/n8n-mcp-community/releases/tag/v0.1.0
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our pledge
|
|
4
|
+
|
|
5
|
+
We pledge to make participation in this project a harassment-free experience
|
|
6
|
+
for everyone, regardless of age, body size, visible or invisible disability,
|
|
7
|
+
ethnicity, sex characteristics, gender identity and expression, level of
|
|
8
|
+
experience, education, socioeconomic status, nationality, personal appearance,
|
|
9
|
+
race, caste, color, religion, or sexual identity and orientation.
|
|
10
|
+
|
|
11
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
12
|
+
diverse, inclusive, and healthy community.
|
|
13
|
+
|
|
14
|
+
## Our standards
|
|
15
|
+
|
|
16
|
+
Positive behavior includes demonstrating empathy, respecting differing
|
|
17
|
+
viewpoints and experiences, giving and accepting constructive feedback,
|
|
18
|
+
accepting responsibility and apologizing for mistakes, and focusing on what is
|
|
19
|
+
best for the community.
|
|
20
|
+
|
|
21
|
+
Unacceptable behavior includes sexualized language or imagery, trolling,
|
|
22
|
+
insulting or derogatory comments, personal or political attacks, public or
|
|
23
|
+
private harassment, publishing another person's private information without
|
|
24
|
+
permission, and other conduct reasonably considered inappropriate in a
|
|
25
|
+
professional setting.
|
|
26
|
+
|
|
27
|
+
## Enforcement responsibilities
|
|
28
|
+
|
|
29
|
+
Project maintainers are responsible for clarifying and enforcing acceptable
|
|
30
|
+
behavior and may remove, edit, or reject contributions, comments, commits, code,
|
|
31
|
+
issues, and other contributions that are not aligned with this Code of Conduct.
|
|
32
|
+
|
|
33
|
+
## Scope
|
|
34
|
+
|
|
35
|
+
This Code applies within project spaces and when an individual officially
|
|
36
|
+
represents the project in public spaces.
|
|
37
|
+
|
|
38
|
+
## Enforcement
|
|
39
|
+
|
|
40
|
+
Report abusive, harassing, or otherwise unacceptable behavior through a private
|
|
41
|
+
maintainer channel. Until a dedicated conduct address is published, request a
|
|
42
|
+
private contact through a non-sensitive GitHub issue. Do not include personal or
|
|
43
|
+
sensitive details in the public request.
|
|
44
|
+
|
|
45
|
+
All complaints will be reviewed promptly and fairly. Maintainers will respect
|
|
46
|
+
the privacy and security of reporters.
|
|
47
|
+
|
|
48
|
+
## Attribution
|
|
49
|
+
|
|
50
|
+
This Code of Conduct is adapted from the Contributor Covenant, version 2.1,
|
|
51
|
+
available at <https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thank you for helping make n8n MCP Community safer and more useful. Changes are
|
|
4
|
+
welcome when they preserve the Community Edition scope, the exact documented
|
|
5
|
+
tool contract, and the project's data-minimization defaults.
|
|
6
|
+
|
|
7
|
+
## Before you begin
|
|
8
|
+
|
|
9
|
+
- Read the [security model](docs/security-model.md) and
|
|
10
|
+
[architecture](docs/architecture.md).
|
|
11
|
+
- Use synthetic fixtures only. Never submit real credentials, workflows,
|
|
12
|
+
executions, instance URLs, cookies, or identifying data.
|
|
13
|
+
- For a vulnerability, follow [SECURITY.md](SECURITY.md) instead of opening a
|
|
14
|
+
public issue.
|
|
15
|
+
- Discuss a new tool or public behavior before implementing it. Tool additions
|
|
16
|
+
change the compatibility, documentation, and release contract.
|
|
17
|
+
|
|
18
|
+
## Development setup
|
|
19
|
+
|
|
20
|
+
Node.js 22 and 24 are the supported development lines.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm ci
|
|
24
|
+
npm run check
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The complete gate covers formatting, dependency licenses and notices, strict
|
|
28
|
+
TypeScript, the full automated test suite, a real stdio inventory check, and the
|
|
29
|
+
production build.
|
|
30
|
+
Run `npm run sbom > sbom.cdx.json` when reviewing dependency changes.
|
|
31
|
+
|
|
32
|
+
## Branch and commit conventions
|
|
33
|
+
|
|
34
|
+
- Create a focused branch from `dev`: `feat/<topic>`, `fix/<topic>`,
|
|
35
|
+
`docs/<topic>`, or `chore/<topic>`.
|
|
36
|
+
- Keep changes small and traceable. Avoid unrelated refactors.
|
|
37
|
+
- Use Conventional Commit subjects such as `feat:`, `fix:`, `docs:`,
|
|
38
|
+
`test:`, or `chore:`.
|
|
39
|
+
- Never commit `.env`, generated packages, build output, logs, or secrets.
|
|
40
|
+
- Do not force-push a shared review branch.
|
|
41
|
+
|
|
42
|
+
## Pull requests
|
|
43
|
+
|
|
44
|
+
A pull request should explain the problem, the chosen minimal change, security
|
|
45
|
+
and compatibility impact, tests performed, and documentation updated. Every
|
|
46
|
+
tool change must update both the runtime contract and
|
|
47
|
+
[docs/tools.md](docs/tools.md). A registration-only tool is not acceptable.
|
|
48
|
+
|
|
49
|
+
Reviewers will check:
|
|
50
|
+
|
|
51
|
+
- Community Edition support through a documented Public API path;
|
|
52
|
+
- operation mode and MCP annotations matching actual side effects;
|
|
53
|
+
- input validation before upstream requests;
|
|
54
|
+
- response allowlisting, redaction, pagination, and size limits;
|
|
55
|
+
- zero-request denial for invalid or unauthorized operations;
|
|
56
|
+
- Node 22 and 24 behavior;
|
|
57
|
+
- documentation and inventory parity;
|
|
58
|
+
- package, provenance, and license impact.
|
|
59
|
+
|
|
60
|
+
All actionable review findings must be resolved or explicitly dispositioned with
|
|
61
|
+
evidence before merge. `dev` is the integration branch; releasable changes reach
|
|
62
|
+
`main` only through the reviewed release process.
|
|
63
|
+
|
|
64
|
+
## Style
|
|
65
|
+
|
|
66
|
+
Write code, tests, comments, commit messages, issues, and documentation in clear
|
|
67
|
+
native-quality English. TypeScript is strict, `any` is prohibited, and external
|
|
68
|
+
data must be validated at the boundary. Prefer the smallest implementation that
|
|
69
|
+
satisfies the actual contract.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Walter Zamarian Jr.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# n8n MCP Community
|
|
2
|
+
|
|
3
|
+
**A security-focused Model Context Protocol server for self-hosted n8n Community Edition.**
|
|
4
|
+
|
|
5
|
+
Connect an MCP client to n8n through 44 carefully bounded tools for workflows,
|
|
6
|
+
executions, credentials, tags, users, diagnostics, and instance metadata. The
|
|
7
|
+
server starts offline, defaults to read-only, uses the supported n8n Public API,
|
|
8
|
+
and never sends workflow data to an external AI provider.
|
|
9
|
+
|
|
10
|
+
> **v0.1.0:** install the exact published version or use a source checkout. See
|
|
11
|
+
> [Installation](docs/installation.md) for the pinned npm and signed MCPB
|
|
12
|
+
> options.
|
|
13
|
+
|
|
14
|
+
[Read the synthetic terminal demo transcript](docs/demo-transcript.md). It shows
|
|
15
|
+
the planned exact-version startup, 44-tool inventory, and local Introspect
|
|
16
|
+
diagnostics using only synthetic identifiers and documented output shapes.
|
|
17
|
+
|
|
18
|
+
[](docs/demo-transcript.md)
|
|
19
|
+
|
|
20
|
+
## Why this project
|
|
21
|
+
|
|
22
|
+
- **Community Edition first.** The release surface is designed for self-hosted
|
|
23
|
+
n8n Community Edition, without presenting paid-only capabilities as available.
|
|
24
|
+
- **44 useful tools, one explicit contract.** Every tool has bounded inputs,
|
|
25
|
+
documented side effects, MCP safety annotations, and contract tests.
|
|
26
|
+
- **Safe by default.** Read-only mode is the default. Writes and destructive or
|
|
27
|
+
externally contacting operations require progressively stronger gates.
|
|
28
|
+
- **Deterministic Introspect.** `n8n_introspect` runs a local 23-rule engine;
|
|
29
|
+
it does not execute workflows, call an agent, or contact an external model.
|
|
30
|
+
- **Surgical node updates.** `n8n_update_node` changes one validated node path
|
|
31
|
+
while preserving the rest of the workflow and disclosing the Public API's
|
|
32
|
+
non-atomic limitation.
|
|
33
|
+
- **Truthful discovery.** `n8n_list_node_types` reports only types observed in
|
|
34
|
+
accessible workflows. It does not claim to be a complete installed catalog.
|
|
35
|
+
- **Data minimization.** Credential values, raw execution values, pin data, and
|
|
36
|
+
static workflow data are not returned by the generic public tools.
|
|
37
|
+
|
|
38
|
+
## Current verification
|
|
39
|
+
|
|
40
|
+
The current source candidate has been verified with:
|
|
41
|
+
|
|
42
|
+
- exactly **44 tools**, **5 resources**, and **4 prompts** over real stdio;
|
|
43
|
+
- **271 passing tests** and the complete verification gate on Node.js 22.23.1
|
|
44
|
+
and 24.18.0;
|
|
45
|
+
- zero findings from Gitleaks, Semgrep, Trivy, and both production/full
|
|
46
|
+
`npm audit` runs; all three source scanners are reproduced in CI, with
|
|
47
|
+
immutable scanner/action identities;
|
|
48
|
+
- a reproducible dependency-license gate covering 224 installed package paths;
|
|
49
|
+
- bounded same-origin HTTP contracts and zero-request policy-denial tests;
|
|
50
|
+
- all 44 compiled tool lifecycles on disposable n8n Community 2.30.5 and 2.30.7
|
|
51
|
+
instances with egress isolation, revoked keys, cleanup, and zero residue; and
|
|
52
|
+
- a clean-installed npm tarball plus a byte-reproducible unsigned MCPB with the
|
|
53
|
+
same compiled runtime and complete production dependency notices.
|
|
54
|
+
|
|
55
|
+
Publication proceeds only through the reviewed release procedure: the
|
|
56
|
+
repository-pinned MCPB signing identity, a human artifact-baseline receipt,
|
|
57
|
+
tag-scoped protected-environment approval, and an externally signed MCPB
|
|
58
|
+
handoff verified byte for byte against the reviewed unsigned candidate.
|
|
59
|
+
|
|
60
|
+
## Quick start from source
|
|
61
|
+
|
|
62
|
+
Requirements: Node.js 22 or 24, npm, a self-hosted n8n Community Edition
|
|
63
|
+
instance, and an n8n Public API key with only the permissions you need.
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
npm ci
|
|
67
|
+
npm run build
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Configure your MCP client to run the compiled stdio entry point:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"mcpServers": {
|
|
75
|
+
"n8n-community": {
|
|
76
|
+
"command": "node",
|
|
77
|
+
"args": ["/absolute/path/to/n8n-mcp-community/dist/index.js"],
|
|
78
|
+
"env": {
|
|
79
|
+
"N8N_API_URL": "https://n8n.example.com",
|
|
80
|
+
"N8N_API_KEY": "replace-with-your-api-key",
|
|
81
|
+
"N8N_MCP_MODE": "read-only"
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Restart the MCP client and list tools. The server can initialize and expose its
|
|
89
|
+
inventory without n8n credentials; connected tools validate the URL and API key
|
|
90
|
+
only when called.
|
|
91
|
+
|
|
92
|
+
The release provides both a signed MCPB for compatible clients and
|
|
93
|
+
exact-version `npx` configuration for portability. `@latest`, global installs,
|
|
94
|
+
and `curl | shell` are not reproducible defaults. See
|
|
95
|
+
[Installation](docs/installation.md) for the release policy and client-specific
|
|
96
|
+
guidance.
|
|
97
|
+
|
|
98
|
+
## Safety modes
|
|
99
|
+
|
|
100
|
+
| Mode | What it allows | Required configuration |
|
|
101
|
+
| --------- | ----------------------------------------------------------------- | ---------------------------------------------------------- |
|
|
102
|
+
| Read-only | Read-only tools only | Default, or `N8N_MCP_MODE=read-only` |
|
|
103
|
+
| Write | Read-only and mutation tools without the unsafe confirmation gate | `N8N_MCP_MODE=write` |
|
|
104
|
+
| Unsafe | All tools | `N8N_MCP_MODE=unsafe` plus the exact per-call confirmation |
|
|
105
|
+
|
|
106
|
+
Unsafe mode is necessary but not sufficient. Every unsafe call also requires a
|
|
107
|
+
confirmation such as `DELETE wf_123`, `STOP exec_123`, or `TEST cred_123`.
|
|
108
|
+
The n8n API key remains the final upstream permission boundary.
|
|
109
|
+
|
|
110
|
+
Plain HTTP is accepted automatically only for loopback URLs. A non-loopback
|
|
111
|
+
HTTP instance additionally requires `N8N_ALLOW_INSECURE_HTTP=1`, which accepts
|
|
112
|
+
the risk of exposing the API key and data in transit.
|
|
113
|
+
|
|
114
|
+
## Tool catalog
|
|
115
|
+
|
|
116
|
+
Every entry links to its complete input, output, endpoint, compatibility,
|
|
117
|
+
failure, and security reference.
|
|
118
|
+
|
|
119
|
+
### Workflows
|
|
120
|
+
|
|
121
|
+
| Tool | Mode | Purpose |
|
|
122
|
+
| ---------------------------------------------------------------------- | --------- | ---------------------------------------------------------------------- |
|
|
123
|
+
| [`n8n_workflows_list`](docs/tools.md#n8n_workflows_list) | Read-only | List accessible workflows with bounded filters and pagination. |
|
|
124
|
+
| [`n8n_workflows_get`](docs/tools.md#n8n_workflows_get) | Read-only | Read one workflow while withholding pin and static data values. |
|
|
125
|
+
| [`n8n_workflows_create`](docs/tools.md#n8n_workflows_create) | Write | Create a validated workflow through the Public API. |
|
|
126
|
+
| [`n8n_workflows_update`](docs/tools.md#n8n_workflows_update) | Write | Guard and update selected fields while preserving omitted fields. |
|
|
127
|
+
| [`n8n_update_node`](docs/tools.md#n8n_update_node) | Write | Change one validated node property with non-atomic concurrency guards. |
|
|
128
|
+
| [`n8n_workflows_delete`](docs/tools.md#n8n_workflows_delete) | Unsafe | Permanently delete one workflow after exact confirmation. |
|
|
129
|
+
| [`n8n_workflows_activate`](docs/tools.md#n8n_workflows_activate) | Unsafe | Activate one workflow after exact confirmation. |
|
|
130
|
+
| [`n8n_workflows_deactivate`](docs/tools.md#n8n_workflows_deactivate) | Unsafe | Deactivate one workflow after exact confirmation. |
|
|
131
|
+
| [`n8n_workflows_get_version`](docs/tools.md#n8n_workflows_get_version) | Read-only | Retrieve one retained historical workflow version. |
|
|
132
|
+
| [`n8n_workflows_get_tags`](docs/tools.md#n8n_workflows_get_tags) | Read-only | List tags assigned to a workflow. |
|
|
133
|
+
| [`n8n_workflows_update_tags`](docs/tools.md#n8n_workflows_update_tags) | Write | Replace a workflow's complete tag assignment. |
|
|
134
|
+
| [`n8n_workflows_archive`](docs/tools.md#n8n_workflows_archive) | Unsafe | Archive one workflow after exact confirmation. |
|
|
135
|
+
| [`n8n_workflows_unarchive`](docs/tools.md#n8n_workflows_unarchive) | Unsafe | Restore one archived workflow after exact confirmation. |
|
|
136
|
+
| [`n8n_workflows_diff`](docs/tools.md#n8n_workflows_diff) | Read-only | Compare nodes and connections without returning raw values. |
|
|
137
|
+
|
|
138
|
+
### Executions
|
|
139
|
+
|
|
140
|
+
| Tool | Mode | Purpose |
|
|
141
|
+
| -------------------------------------------------------------- | --------- | ------------------------------------------------------------------ |
|
|
142
|
+
| [`n8n_executions_list`](docs/tools.md#n8n_executions_list) | Read-only | List execution metadata with value-free data-presence summaries. |
|
|
143
|
+
| [`n8n_executions_get`](docs/tools.md#n8n_executions_get) | Read-only | Read one execution's metadata without returning workflow payloads. |
|
|
144
|
+
| [`n8n_executions_delete`](docs/tools.md#n8n_executions_delete) | Unsafe | Permanently delete a saved execution. |
|
|
145
|
+
| [`n8n_executions_retry`](docs/tools.md#n8n_executions_retry) | Unsafe | Retry an eligible saved execution. |
|
|
146
|
+
| [`n8n_executions_stop`](docs/tools.md#n8n_executions_stop) | Unsafe | Stop one running execution and bind identity from validated input. |
|
|
147
|
+
|
|
148
|
+
### Credentials
|
|
149
|
+
|
|
150
|
+
| Tool | Mode | Purpose |
|
|
151
|
+
| ---------------------------------------------------------------- | --------- | ---------------------------------------------------------------------- |
|
|
152
|
+
| [`n8n_credentials_create`](docs/tools.md#n8n_credentials_create) | Write | Create a credential without returning its values. |
|
|
153
|
+
| [`n8n_credentials_delete`](docs/tools.md#n8n_credentials_delete) | Unsafe | Permanently delete one credential. |
|
|
154
|
+
| [`n8n_credentials_schema`](docs/tools.md#n8n_credentials_schema) | Read-only | Read the public schema for a credential type. |
|
|
155
|
+
| [`n8n_credentials_list`](docs/tools.md#n8n_credentials_list) | Read-only | List credential metadata verified on n8n 2.30.5 and 2.30.7. |
|
|
156
|
+
| [`n8n_credentials_get`](docs/tools.md#n8n_credentials_get) | Read-only | Read one credential's public metadata. |
|
|
157
|
+
| [`n8n_credentials_update`](docs/tools.md#n8n_credentials_update) | Write | Update credential metadata or values without echoing secrets. |
|
|
158
|
+
| [`n8n_credentials_test`](docs/tools.md#n8n_credentials_test) | Unsafe | Test a stored credential, potentially contacting its external service. |
|
|
159
|
+
| [`n8n_credentials_usage`](docs/tools.md#n8n_credentials_usage) | Read-only | Find exact credential-ID references in one bounded workflow page. |
|
|
160
|
+
|
|
161
|
+
### Tags
|
|
162
|
+
|
|
163
|
+
| Tool | Mode | Purpose |
|
|
164
|
+
| -------------------------------------------------- | --------- | ------------------------------------------------ |
|
|
165
|
+
| [`n8n_tags_list`](docs/tools.md#n8n_tags_list) | Read-only | List workflow tags. |
|
|
166
|
+
| [`n8n_tags_get`](docs/tools.md#n8n_tags_get) | Read-only | Read one tag. |
|
|
167
|
+
| [`n8n_tags_create`](docs/tools.md#n8n_tags_create) | Write | Create a tag with the live 1–24 character bound. |
|
|
168
|
+
| [`n8n_tags_update`](docs/tools.md#n8n_tags_update) | Write | Rename a tag with the live 1–24 character bound. |
|
|
169
|
+
| [`n8n_tags_delete`](docs/tools.md#n8n_tags_delete) | Unsafe | Permanently delete one tag. |
|
|
170
|
+
|
|
171
|
+
### Users
|
|
172
|
+
|
|
173
|
+
| Tool | Mode | Purpose |
|
|
174
|
+
| ---------------------------------------------------- | --------- | ----------------------------------------------------------------- |
|
|
175
|
+
| [`n8n_users_list`](docs/tools.md#n8n_users_list) | Read-only | List users visible to the API key. |
|
|
176
|
+
| [`n8n_users_get`](docs/tools.md#n8n_users_get) | Read-only | Read one user by stable ID or exact email. |
|
|
177
|
+
| [`n8n_users_create`](docs/tools.md#n8n_users_create) | Unsafe | Invite a member or admin after exact email confirmation. |
|
|
178
|
+
| [`n8n_users_delete`](docs/tools.md#n8n_users_delete) | Unsafe | Delete one API-eligible user without unsupported transfer claims. |
|
|
179
|
+
|
|
180
|
+
### Diagnostics and instance metadata
|
|
181
|
+
|
|
182
|
+
| Tool | Mode | Purpose |
|
|
183
|
+
| -------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------- |
|
|
184
|
+
| [`n8n_health`](docs/tools.md#n8n_health) | Read-only | Perform a bounded same-origin health check. |
|
|
185
|
+
| [`n8n_insights_summary`](docs/tools.md#n8n_insights_summary) | Read-only | Read the official insights summary with optional date filters. |
|
|
186
|
+
| [`n8n_audit_generate`](docs/tools.md#n8n_audit_generate) | Unsafe | Generate n8n's instance security audit after exact confirmation. |
|
|
187
|
+
| [`n8n_search_workflows`](docs/tools.md#n8n_search_workflows) | Read-only | Search one workflow page locally by name, node type, or tag. |
|
|
188
|
+
| [`n8n_get_node_docs`](docs/tools.md#n8n_get_node_docs) | Read-only | Read one of four immutable offline core-node references. |
|
|
189
|
+
| [`n8n_list_node_types`](docs/tools.md#n8n_list_node_types) | Read-only | Inventory node types observed in bounded accessible workflow pages. |
|
|
190
|
+
| [`n8n_introspect`](docs/tools.md#n8n_introspect) | Read-only | Run deterministic local workflow and execution diagnostics. |
|
|
191
|
+
| [`n8n_community_packages_list`](docs/tools.md#n8n_community_packages_list) | Read-only | List installed community-package metadata without mutation paths. |
|
|
192
|
+
|
|
193
|
+
## Resources and prompts
|
|
194
|
+
|
|
195
|
+
The server also exposes five static resources:
|
|
196
|
+
|
|
197
|
+
- `n8n://usage-guide`
|
|
198
|
+
- `n8n://node-docs/webhook`
|
|
199
|
+
- `n8n://node-docs/code`
|
|
200
|
+
- `n8n://node-docs/http-request`
|
|
201
|
+
- `n8n://node-docs/if`
|
|
202
|
+
|
|
203
|
+
Four prompts guide safe workflow creation, debugging, optimization, and
|
|
204
|
+
credential management: `create-workflow`, `debug-workflow`,
|
|
205
|
+
`optimize-workflow`, and `manage-credentials`.
|
|
206
|
+
|
|
207
|
+
## Security model in one minute
|
|
208
|
+
|
|
209
|
+
- The server uses local stdio; it does not expose an inbound HTTP listener.
|
|
210
|
+
- Connected requests are same-origin and limited to the configured n8n host.
|
|
211
|
+
- Redirects are rejected; request and response bodies are bounded to 2 MiB.
|
|
212
|
+
- Generic output is validated, sanitized, bounded to 256 KiB, and wrapped as
|
|
213
|
+
`{ "data": ..., "redacted": boolean, "untrusted": true }`.
|
|
214
|
+
- Raw credential values and generic execution payload values are never returned.
|
|
215
|
+
- `n8n_introspect` uses fixed local rules and has no external-model code path.
|
|
216
|
+
- Security controls reduce risk; they do not make untrusted n8n content safe to
|
|
217
|
+
execute or authorize broader API-key permissions.
|
|
218
|
+
|
|
219
|
+
Read the complete [security model](docs/security-model.md) and use
|
|
220
|
+
[SECURITY.md](SECURITY.md) to report a vulnerability privately.
|
|
221
|
+
|
|
222
|
+
## Documentation
|
|
223
|
+
|
|
224
|
+
- [Documentation map](docs/README.md)
|
|
225
|
+
- [Getting started](docs/getting-started.md)
|
|
226
|
+
- [Installation and upgrades](docs/installation.md)
|
|
227
|
+
- [Configuration](docs/configuration.md)
|
|
228
|
+
- [Complete tool reference](docs/tools.md)
|
|
229
|
+
- [Tested examples](docs/examples.md)
|
|
230
|
+
- [FAQ](docs/faq.md)
|
|
231
|
+
- [Client configuration](docs/clients.md)
|
|
232
|
+
- [Architecture](docs/architecture.md)
|
|
233
|
+
- [Security model](docs/security-model.md)
|
|
234
|
+
- [Compatibility](docs/compatibility.md)
|
|
235
|
+
- [Troubleshooting](docs/troubleshooting.md)
|
|
236
|
+
- [Provenance](docs/provenance.md)
|
|
237
|
+
- [Roadmap](ROADMAP.md)
|
|
238
|
+
- [Changelog](CHANGELOG.md)
|
|
239
|
+
|
|
240
|
+
## Development
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
npm ci
|
|
244
|
+
npm run check
|
|
245
|
+
npm run sbom > sbom.cdx.json
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
`npm run check` verifies formatting, dependency licenses/notices, strict
|
|
249
|
+
TypeScript, all tests, the compiled runtime, and documentation inventory parity.
|
|
250
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) before opening a change.
|
|
251
|
+
|
|
252
|
+
## Scope and non-affiliation
|
|
253
|
+
|
|
254
|
+
This project is not affiliated with, endorsed by, or sponsored by n8n GmbH.
|
|
255
|
+
“n8n” is used only to identify compatibility with the n8n product and Public
|
|
256
|
+
API. The project does not redistribute the `n8n-nodes-base` catalog and does not
|
|
257
|
+
use browser cookies, interactive session routes, or runtime package downloads to
|
|
258
|
+
construct one.
|
|
259
|
+
|
|
260
|
+
The v0.1.0 surface intentionally excludes arbitrary workflow execution,
|
|
261
|
+
credential/workflow transfer, folders, data tables, beta evaluation endpoints,
|
|
262
|
+
and execution annotations. See the [roadmap](ROADMAP.md) for the annotation
|
|
263
|
+
proposal retained outside the release target.
|
|
264
|
+
|
|
265
|
+
## License and maintainer
|
|
266
|
+
|
|
267
|
+
The project is released under the [MIT License](LICENSE). Third-party
|
|
268
|
+
dependencies retain their own licenses.
|
|
269
|
+
|
|
270
|
+
Created and maintained by
|
|
271
|
+
[Dr. Walter Zamarian Jr.](https://www.walterzamarianjr.com/).
|
package/ROADMAP.md
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Roadmap
|
|
2
|
+
|
|
3
|
+
This roadmap communicates direction, not a promise of features or dates. A
|
|
4
|
+
proposal enters the release surface only after a versioned specification,
|
|
5
|
+
Community Edition evidence, security review, documentation, tests, and
|
|
6
|
+
maintainer approval.
|
|
7
|
+
|
|
8
|
+
## v0.1.0 release gate
|
|
9
|
+
|
|
10
|
+
- Complete native-English documentation and inventory parity.
|
|
11
|
+
- Pass disposable release-candidate lifecycles on n8n Community 2.30.5 and
|
|
12
|
+
2.30.7 using synthetic data and no production credentials.
|
|
13
|
+
- Inspect clean npm and MCPB artifacts, SBOMs, checksums, signatures, and
|
|
14
|
+
dependency notices.
|
|
15
|
+
- Pass two independent adversarial implementation audits with zero actionable
|
|
16
|
+
findings.
|
|
17
|
+
- Enable repository security controls before the first public release.
|
|
18
|
+
|
|
19
|
+
## Accepted backlog proposal
|
|
20
|
+
|
|
21
|
+
Execution annotations remain a coherent two-tool proposal outside v0.1.0:
|
|
22
|
+
|
|
23
|
+
- `n8n_executions_get_tags`
|
|
24
|
+
- `n8n_executions_update_tags`
|
|
25
|
+
|
|
26
|
+
They will not be added individually. A future proposal must prove that both
|
|
27
|
+
operate through supported Community Edition endpoints and define strict IDs,
|
|
28
|
+
write policy, bounds, redaction, tests, and migration behavior.
|
|
29
|
+
|
|
30
|
+
## Areas for future evaluation
|
|
31
|
+
|
|
32
|
+
- Additional deterministic Introspect rules backed by counterexamples and
|
|
33
|
+
stable evidence.
|
|
34
|
+
- More immutable offline node references where provenance and maintenance cost
|
|
35
|
+
are clear.
|
|
36
|
+
- Client-specific MCPB installation verification as compatible clients evolve.
|
|
37
|
+
- Performance and pagination improvements justified by measured workloads.
|
|
38
|
+
|
|
39
|
+
Folders, data tables, beta evaluation APIs, paid-only project transfers,
|
|
40
|
+
arbitrary workflow execution, browser-cookie access, and runtime package
|
|
41
|
+
downloads are not implied by this roadmap.
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
Security is part of the product contract. Please report suspected
|
|
4
|
+
vulnerabilities privately and give the maintainer reasonable time to investigate
|
|
5
|
+
before public disclosure.
|
|
6
|
+
|
|
7
|
+
## Supported versions
|
|
8
|
+
|
|
9
|
+
No public version is supported until the first signed release. After release,
|
|
10
|
+
the latest maintained minor line will receive security fixes. Older lines may be
|
|
11
|
+
asked to upgrade when a safe backport is impractical.
|
|
12
|
+
|
|
13
|
+
## Report a vulnerability
|
|
14
|
+
|
|
15
|
+
Use GitHub's **Security → Report a vulnerability** form. This repository will
|
|
16
|
+
not be published until GitHub private vulnerability reporting is enabled and
|
|
17
|
+
verified. Do not open a public issue with exploit details, credentials, workflow
|
|
18
|
+
payloads, or identifying instance data.
|
|
19
|
+
|
|
20
|
+
If the private form is unavailable, open a public issue containing only the
|
|
21
|
+
sentence “Private security contact requested.” Do not include technical details
|
|
22
|
+
until a private channel has been established.
|
|
23
|
+
|
|
24
|
+
Include, when safe:
|
|
25
|
+
|
|
26
|
+
- the affected version or commit;
|
|
27
|
+
- the tool, resource, prompt, or package path involved;
|
|
28
|
+
- a minimal reproduction using synthetic data;
|
|
29
|
+
- the expected and observed security boundary;
|
|
30
|
+
- impact and any known prerequisites;
|
|
31
|
+
- whether the issue may already have been exploited.
|
|
32
|
+
|
|
33
|
+
Never send a real n8n API key, credential value, cookie, workflow payload,
|
|
34
|
+
execution payload, or private instance URL. Replace them with unmistakable
|
|
35
|
+
placeholders.
|
|
36
|
+
|
|
37
|
+
## Response process
|
|
38
|
+
|
|
39
|
+
The maintainer will acknowledge a complete report, reproduce it against a safe
|
|
40
|
+
environment, classify impact, prepare a fix and regression test, and coordinate
|
|
41
|
+
disclosure. Timelines depend on severity and reproducibility; no fixed response
|
|
42
|
+
time is promised before the project has a public support process.
|
|
43
|
+
|
|
44
|
+
Security fixes must pass the normal Node 22/24 checks, secret and static scans,
|
|
45
|
+
package inspection, and independent review before release.
|
|
46
|
+
|
|
47
|
+
## Security boundaries
|
|
48
|
+
|
|
49
|
+
The MCP server reduces risk but does not replace n8n access control. The n8n API
|
|
50
|
+
key determines upstream permissions; unsafe mode can authorize destructive
|
|
51
|
+
requests; explicitly allowing non-loopback HTTP accepts transport risk; and all
|
|
52
|
+
n8n content remains untrusted after sanitization. See
|
|
53
|
+
[docs/security-model.md](docs/security-model.md) for the complete model.
|
package/SUPPORT.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Support
|
|
2
|
+
|
|
3
|
+
This project is pre-release and currently has no guaranteed support response
|
|
4
|
+
time. Before requesting help, read the
|
|
5
|
+
[getting-started guide](docs/getting-started.md),
|
|
6
|
+
[configuration reference](docs/configuration.md), and
|
|
7
|
+
[troubleshooting guide](docs/troubleshooting.md).
|
|
8
|
+
|
|
9
|
+
Use a GitHub issue for reproducible, non-sensitive bugs and documentation
|
|
10
|
+
questions after the public repository is available. Include the project version,
|
|
11
|
+
Node version, n8n Community version, operating system, MCP client, configured
|
|
12
|
+
mode, safe reproduction steps, and sanitized error code. Never include secrets,
|
|
13
|
+
cookies, real workflow or execution payloads, or a private instance URL.
|
|
14
|
+
|
|
15
|
+
Feature requests should explain the Community Edition Public API path, user
|
|
16
|
+
outcome, security and compatibility implications, and why an existing tool
|
|
17
|
+
cannot satisfy the need.
|
|
18
|
+
|
|
19
|
+
Report vulnerabilities privately according to [SECURITY.md](SECURITY.md).
|