Skip to content

Commit 449bbd8

Browse files
authored
Merge pull request #863 from czlonkowski/feat/mcpb-bundle-improvements
feat: MCPB bundle with generated manifest and release packaging
2 parents f3d96cb + 9b773be commit 449bbd8

6 files changed

Lines changed: 408 additions & 0 deletions

File tree

.github/workflows/release.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,46 @@ jobs:
265265
echo "id=$RELEASE_ID" >> $GITHUB_OUTPUT
266266
echo "upload_url=https://uploads.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID/assets{?name,label}" >> $GITHUB_OUTPUT
267267
268+
package-mcpb:
269+
name: Package MCPB Bundle
270+
runs-on: ubuntu-latest
271+
needs: [detect-version-change, create-release]
272+
if: needs.detect-version-change.outputs.version-changed == 'true'
273+
steps:
274+
- name: Checkout repository
275+
uses: actions/checkout@v4
276+
277+
- name: Setup Node.js
278+
uses: actions/setup-node@v4
279+
with:
280+
node-version: 20
281+
cache: 'npm'
282+
283+
- name: Install dependencies
284+
# See test.yml for the --legacy-peer-deps rationale (mappersmith / diff conflict).
285+
run: npm ci --legacy-peer-deps
286+
287+
# Build so dist/mcp/index.js exists at pack time: `mcpb pack` runs existsSync
288+
# on the manifest entry_point against the source dir, and dist/ is gitignored.
289+
- name: Build project
290+
run: npm run build
291+
292+
- name: Generate MCPB manifest from package.json + tool registry
293+
run: npm run generate:mcpb-manifest
294+
295+
- name: Validate and pack MCPB bundle
296+
run: |
297+
VERSION="${{ needs.detect-version-change.outputs.new-version }}"
298+
npx -y @anthropic-ai/mcpb validate manifest.json
299+
npx -y @anthropic-ai/mcpb pack . "n8n-mcp-${VERSION}.mcpb"
300+
301+
- name: Upload MCPB bundle to GitHub Release
302+
env:
303+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
304+
run: |
305+
VERSION="${{ needs.detect-version-change.outputs.new-version }}"
306+
gh release upload "v$VERSION" "n8n-mcp-${VERSION}.mcpb" --clobber
307+
268308
build-and-verify:
269309
name: Build and Verify
270310
runs-on: ubuntu-latest

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ out/
2323
.cache/
2424
.parcel-cache/
2525

26+
# MCPB bundle (built artifact — produced by `mcpb pack`, attached to releases)
27+
*.mcpb
28+
2629
# IDE and editor files
2730
.vscode/
2831
.idea/

.mcpbignore

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# MCPB bundle ignore file (.mcpbignore) — gitignore semantics, combined with
2+
# mcpb's built-in default exclusions (node_modules, .git, *.map, lockfiles, ...).
3+
#
4+
# This is an npx-based bundle: the server is fetched from npm at runtime via
5+
# `npx -y n8n-mcp` (see manifest.json), so NO project code ships inside the .mcpb.
6+
# The packed bundle should contain only manifest.json (and icon.png, if added).
7+
#
8+
# Strategy: exclude everything, then re-include the few files the bundle needs.
9+
# A later "!" re-include overrides an earlier broad exclude — order matters.
10+
11+
*
12+
13+
# Files the bundle actually needs:
14+
!manifest.json
15+
!icon.png

manifest.json

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
{
2+
"manifest_version": "0.3",
3+
"name": "n8n-mcp",
4+
"display_name": "n8n-MCP",
5+
"version": "2.59.3",
6+
"description": "MCP server providing AI assistants with comprehensive access to n8n node documentation and workflow management capabilities",
7+
"author": {
8+
"name": "Romuald Członkowski",
9+
"url": "https://www.aiadvisors.pl/en"
10+
},
11+
"repository": {
12+
"type": "git",
13+
"url": "https://github.com/czlonkowski/n8n-mcp"
14+
},
15+
"homepage": "https://www.n8n-mcp.com/",
16+
"documentation": "https://github.com/czlonkowski/n8n-mcp#readme",
17+
"support": "https://github.com/czlonkowski/n8n-mcp/issues",
18+
"license": "MIT",
19+
"keywords": [
20+
"n8n",
21+
"mcp",
22+
"workflow",
23+
"automation",
24+
"ai",
25+
"documentation",
26+
"model-context-protocol"
27+
],
28+
"privacy_policies": [
29+
"https://n8n.io/legal/privacy/"
30+
],
31+
"server": {
32+
"type": "node",
33+
"entry_point": "dist/mcp/index.js",
34+
"mcp_config": {
35+
"command": "npx",
36+
"args": [
37+
"-y",
38+
"n8n-mcp"
39+
],
40+
"env": {
41+
"MCP_MODE": "stdio",
42+
"LOG_LEVEL": "error",
43+
"DISABLE_CONSOLE_OUTPUT": "true",
44+
"N8N_API_URL": "${user_config.n8n_api_url}",
45+
"N8N_API_KEY": "${user_config.n8n_api_key}",
46+
"N8N_MCP_TELEMETRY_DISABLED": "${user_config.n8n_mcp_telemetry_disabled}"
47+
}
48+
}
49+
},
50+
"user_config": {
51+
"n8n_api_url": {
52+
"type": "string",
53+
"title": "n8n Instance URL",
54+
"description": "URL of your n8n instance (e.g., https://your-n8n.com or http://localhost:5678). Leave empty for documentation-only mode.",
55+
"required": false
56+
},
57+
"n8n_api_key": {
58+
"type": "string",
59+
"title": "n8n API Key",
60+
"description": "API key from your n8n instance Settings > API. Required for workflow management features.",
61+
"required": false,
62+
"sensitive": true
63+
},
64+
"n8n_mcp_telemetry_disabled": {
65+
"type": "boolean",
66+
"title": "Disable Telemetry",
67+
"description": "Enable to turn off anonymous usage telemetry. Telemetry is on by default.",
68+
"required": false,
69+
"default": false
70+
}
71+
},
72+
"compatibility": {
73+
"claude_desktop": ">=0.10.0",
74+
"platforms": [
75+
"darwin",
76+
"win32",
77+
"linux"
78+
],
79+
"runtimes": {
80+
"node": ">=20"
81+
}
82+
},
83+
"tools_generated": false,
84+
"tools": [
85+
{
86+
"name": "tools_documentation",
87+
"description": "Get documentation for n8n MCP tools."
88+
},
89+
{
90+
"name": "search_nodes",
91+
"description": "Search n8n nodes by keyword with optional real-world examples."
92+
},
93+
{
94+
"name": "get_node",
95+
"description": "Get node info with progressive detail levels and multiple modes."
96+
},
97+
{
98+
"name": "validate_node",
99+
"description": "Validate n8n node configuration."
100+
},
101+
{
102+
"name": "get_template",
103+
"description": "Get template by ID."
104+
},
105+
{
106+
"name": "search_templates",
107+
"description": "Search templates with multiple modes."
108+
},
109+
{
110+
"name": "validate_workflow",
111+
"description": "Full workflow validation: structure, connections, expressions, AI tools."
112+
},
113+
{
114+
"name": "n8n_create_workflow",
115+
"description": "Create workflow."
116+
},
117+
{
118+
"name": "n8n_get_workflow",
119+
"description": "Get workflow by ID with different detail levels."
120+
},
121+
{
122+
"name": "n8n_update_full_workflow",
123+
"description": "Full workflow update."
124+
},
125+
{
126+
"name": "n8n_update_partial_workflow",
127+
"description": "Update workflow incrementally with diff operations."
128+
},
129+
{
130+
"name": "n8n_delete_workflow",
131+
"description": "Permanently delete a workflow."
132+
},
133+
{
134+
"name": "n8n_list_workflows",
135+
"description": "List workflows (minimal metadata only)."
136+
},
137+
{
138+
"name": "n8n_validate_workflow",
139+
"description": "Validate workflow by ID."
140+
},
141+
{
142+
"name": "n8n_autofix_workflow",
143+
"description": "Automatically fix common workflow validation errors."
144+
},
145+
{
146+
"name": "n8n_test_workflow",
147+
"description": "Test/trigger workflow execution."
148+
},
149+
{
150+
"name": "n8n_executions",
151+
"description": "Manage workflow executions: get details, list, or delete."
152+
},
153+
{
154+
"name": "n8n_health_check",
155+
"description": "Check n8n instance health and API connectivity."
156+
},
157+
{
158+
"name": "n8n_workflow_versions",
159+
"description": "Manage workflow version history, rollback, and cleanup."
160+
},
161+
{
162+
"name": "n8n_deploy_template",
163+
"description": "Deploy a workflow template from n8n.io directly to your n8n instance."
164+
},
165+
{
166+
"name": "n8n_manage_datatable",
167+
"description": "Manage n8n data tables and rows."
168+
},
169+
{
170+
"name": "n8n_manage_credentials",
171+
"description": "Manage n8n credentials."
172+
},
173+
{
174+
"name": "n8n_generate_workflow",
175+
"description": "Generate an n8n workflow from a natural language description using AI."
176+
},
177+
{
178+
"name": "n8n_audit_instance",
179+
"description": "Security audit of n8n instance."
180+
}
181+
]
182+
}

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
"build:ui": "cd ui-apps && npm install && npm run build",
2020
"build:all": "npm run sync:skills && npm run build:ui && npm run build",
2121
"sync:skills": "npx tsx scripts/sync-skills.ts",
22+
"generate:mcpb-manifest": "node scripts/generate-mcpb-manifest.js",
23+
"build:mcpb": "npm run build && npm run generate:mcpb-manifest && npx -y @anthropic-ai/mcpb validate manifest.json && npx -y @anthropic-ai/mcpb pack .",
2224
"rebuild": "node dist/scripts/rebuild.js",
2325
"rebuild:optimized": "node dist/scripts/rebuild-optimized.js",
2426
"validate": "node dist/scripts/validate.js",

0 commit comments

Comments
 (0)