@deepset-ai/n8n-nodes-haystack-enterprise-mcp 0.0.0-stage → 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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 deepset
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 CHANGED
@@ -1,3 +1,141 @@
1
- # Temporary Holding Version
1
+ # @deepset-ai/n8n-nodes-haystack-enterprise-mcp
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ This is an n8n community node. It lets you use pipelines you've enabled as MCP tools on a
4
+ [Haystack Enterprise Platform](https://www.deepset.ai/haystack-platform) workspace as tools for an
5
+ n8n AI Agent.
6
+
7
+ New to Haystack Enterprise Platform? Start with the
8
+ [getting started guide](https://docs.cloud.deepset.ai/docs/getting-started).
9
+
10
+ [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/)
11
+ workflow automation platform.
12
+
13
+ ## Contents
14
+
15
+ - [Supported n8n versions](#supported-n8n-versions)
16
+ - [Installation](#installation)
17
+ - [Operations](#operations)
18
+ - [Example workflows](#example-workflows)
19
+ - [Credentials](#credentials)
20
+ - [Usage](#usage)
21
+ - [Resources](#resources)
22
+ - [Version history](#version-history)
23
+ - [Contributing](#contributing)
24
+
25
+ ## Supported n8n versions
26
+
27
+ This package supports n8n 2.16 and later in the 2.x series. We also check the package against the
28
+ latest n8n release.
29
+
30
+ ## Installation
31
+
32
+ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in
33
+ the n8n community nodes documentation and enter the package name
34
+ `@deepset-ai/n8n-nodes-haystack-enterprise-mcp`.
35
+
36
+ This package is **not n8n-verified**: it depends on external libraries (the MCP SDK and LangChain
37
+ core), which verified community nodes can't do. n8n therefore asks you to confirm that you trust the
38
+ package when you install it, and it can't be installed on n8n Cloud. Community nodes must be enabled
39
+ on your n8n instance. For the verified Haystack Enterprise nodes, see
40
+ [`@deepset-ai/n8n-nodes-haystack-enterprise`](https://www.npmjs.com/package/@deepset-ai/n8n-nodes-haystack-enterprise).
41
+
42
+ **This node is only supported on self-hosted n8n.** It is not available on n8n Cloud and refuses to
43
+ run there (the node checks n8n's own `N8N_DEPLOYMENT_TYPE` environment variable at runtime).
44
+
45
+ ## Operations
46
+
47
+ The node connects to a Haystack Enterprise Platform MCP server and exposes its enabled pipelines to
48
+ an n8n AI Agent as tools:
49
+
50
+ - **Workspace** — select which Haystack Enterprise Platform workspace's MCP server to connect to.
51
+ - **Tools to Include** — choose how to select which of the workspace's enabled pipeline tools are
52
+ exposed to the AI Agent: **All** (expose every tool), **Selected** (only expose the tools listed
53
+ in **Tools to Include**), or **All Except** (expose all tools except those listed in **Tools to
54
+ Exclude**).
55
+ - **Options → Timeout** — how long (in ms) to wait for a pipeline call to finish before failing it
56
+ (default 60000).
57
+
58
+ ## Example workflows
59
+
60
+ The example workflow is not part of the npm package. It lives in the repository, in
61
+ [`packages/haystack-enterprise-mcp/test/examples/`](https://github.com/deepset-ai/deepset-n8n-nodes/tree/main/packages/haystack-enterprise-mcp/test/examples):
62
+
63
+ - [`ai-agent-with-mcp-tools-example.json`](./test/examples/ai-agent-with-mcp-tools-example.json) —
64
+ an AI Agent with this node wired into its Tools input, exposing the workspace's enabled pipelines
65
+ directly to the agent.
66
+
67
+ To use it, either open the file on GitHub, click **Copy raw file**, and paste it onto the n8n canvas
68
+ (Ctrl/Cmd+V), or clone the repository and, in the n8n editor, open the menu (**⋮** in the top right)
69
+ → **Import from File** and select the JSON file. You'll still need to fill in your own credentials
70
+ (including the OpenAI Chat Model node's) and select your own workspace on the Haystack Enterprise
71
+ MCP node.
72
+
73
+ ## Credentials
74
+
75
+ The node's **Authentication** dropdown offers two ways to authenticate.
76
+
77
+ ### API Key
78
+
79
+ Choose **API Key** on the node (the default) and create a "Haystack Enterprise API" credential:
80
+
81
+ 1. In [Haystack Enterprise Platform](https://cloud.deepset.ai/), go to Settings → API Keys and
82
+ generate a key. See [Generate an API key](https://docs.cloud.deepset.ai/docs/generate-api-key).
83
+ 2. In n8n, paste the key into the credential. **Server URL** defaults to the hosted Haystack
84
+ Enterprise Platform API (`https://api.cloud.deepset.ai`); for dev or private environments, set it
85
+ to your instance's API origin.
86
+
87
+ The key needs at least workspace and search permissions.
88
+
89
+ ### OAuth2 (sign in with your Haystack Enterprise account)
90
+
91
+ OAuth2 credentials require n8n 2.19.2 or later.
92
+
93
+ Choose **OAuth2** on the node and create a "Haystack Enterprise OAuth2 API" credential.
94
+
95
+ 1. Leave **Server URL** at `https://api.cloud.deepset.ai`. The Server URL is the API origin the
96
+ nodes use for requests and OAuth2 discovery; change it only for dev or private Haystack
97
+ Enterprise deployments.
98
+ 2. Click **Connect** and sign in with your Haystack Enterprise account.
99
+
100
+ **Manual OAuth2 configuration.** Turn **Use Dynamic Client Registration** off to configure or reuse
101
+ an existing OAuth2 client, including clients for private Haystack Enterprise deployments. Keep
102
+ **Server URL** pointed at the Haystack Enterprise API, fill in the OAuth2 settings, and register the
103
+ callback URL shown on the credential as a redirect URI on the client. Leave **Client Secret** empty
104
+ for a public PKCE client; confidential clients still require their secret.
105
+
106
+ ## Usage
107
+
108
+ Add the node to an AI Agent's Tools input. Select your workspace, optionally restrict which pipeline
109
+ tools are exposed, and the Agent can then call your enabled pipelines directly.
110
+
111
+ ### Testing a pipeline directly
112
+
113
+ You can also call one pipeline directly, without an Agent, by using the node's "Execute step" test
114
+ button: pass in an item shaped like `{ "tool": "<pipeline name>", ...arguments }` and it calls that
115
+ pipeline and returns its response. This is meant for smoke-testing the MCP connection and a
116
+ pipeline's arguments, not for wiring into a live workflow — this node has no Main input/output, so
117
+ it can't be connected as a regular step between other nodes (only via an AI Agent's Tools input, or
118
+ via "Execute step").
119
+
120
+ ### "Custom API Call" option
121
+
122
+ You'll see a "Custom API Call" option at the bottom of some dropdowns. This is added automatically
123
+ by n8n to any node with a token/API-key credential — it's not something this node adds, and it has
124
+ no effect here. You can safely ignore it.
125
+
126
+ ## Resources
127
+
128
+ - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
129
+ - [Use your pipelines as MCP tools](https://docs.cloud.deepset.ai/docs/use-pipeline-as-mcp-tool)
130
+ - [Haystack Enterprise Platform](https://cloud.deepset.ai/)
131
+ - [Haystack Enterprise Platform docs](https://docs.cloud.deepset.ai/)
132
+
133
+ ## Version history
134
+
135
+ See the [changelog](./CHANGELOG.md).
136
+
137
+ ## Contributing
138
+
139
+ See [CONTRIBUTING.md](https://github.com/deepset-ai/deepset-n8n-nodes/blob/main/CONTRIBUTING.md).
140
+ Report security issues as described in
141
+ [SECURITY.md](https://github.com/deepset-ai/deepset-n8n-nodes/blob/main/SECURITY.md).
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class HaystackEnterpriseApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ icon: "file:../nodes/HaystackEnterpriseMcp/haystack-enterprise-electric-blue.svg";
6
+ documentationUrl: string;
7
+ properties: INodeProperties[];
8
+ authenticate: IAuthenticateGeneric;
9
+ test: ICredentialTestRequest;
10
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HaystackEnterpriseApi = void 0;
4
+ class HaystackEnterpriseApi {
5
+ name = 'haystackEnterpriseApi';
6
+ displayName = 'Haystack Enterprise API';
7
+ icon = 'file:../nodes/HaystackEnterpriseMcp/haystack-enterprise-electric-blue.svg';
8
+ documentationUrl = 'https://docs.cloud.deepset.ai/docs/generate-api-key';
9
+ properties = [
10
+ {
11
+ displayName: 'Server URL',
12
+ name: 'serverUrl',
13
+ type: 'string',
14
+ default: 'https://api.cloud.deepset.ai',
15
+ placeholder: 'https://api.cloud.deepset.ai',
16
+ description: 'The Haystack Enterprise API origin. Use the default for the hosted Haystack Enterprise Platform; for dev or private environments, enter your instance API origin (for example <code>https://haystack.example.com</code>).',
17
+ },
18
+ {
19
+ displayName: 'API Key',
20
+ name: 'apiKey',
21
+ type: 'string',
22
+ typeOptions: { password: true },
23
+ default: '',
24
+ required: true,
25
+ description: 'Your Haystack Enterprise <a href="https://docs.cloud.deepset.ai/docs/generate-api-key/" target="_blank" rel="noopener noreferrer">API key</a>. Generate one in Haystack Enterprise Platform under Settings → API Keys.',
26
+ },
27
+ ];
28
+ authenticate = {
29
+ type: 'generic',
30
+ properties: {
31
+ headers: {
32
+ Authorization: '=Bearer {{$credentials.apiKey}}',
33
+ },
34
+ },
35
+ };
36
+ test = {
37
+ request: {
38
+ baseURL: '={{ ((($credentials.serverUrl || "https://api.cloud.deepset.ai").trim().replace(/\\/+$/,"").replace(/\\/api\\/v[12]$/i,"")) || "https://api.cloud.deepset.ai") }}/api/v1',
39
+ url: '/workspaces',
40
+ method: 'GET',
41
+ },
42
+ rules: [
43
+ {
44
+ type: 'responseCode',
45
+ properties: {
46
+ value: 401,
47
+ message: 'Invalid API key. Check your key in Haystack Enterprise Platform under Settings → API Keys.',
48
+ },
49
+ },
50
+ {
51
+ type: 'responseCode',
52
+ properties: {
53
+ value: 403,
54
+ message: 'Access denied. The API key may not have permission to list workspaces.',
55
+ },
56
+ },
57
+ ],
58
+ };
59
+ }
60
+ exports.HaystackEnterpriseApi = HaystackEnterpriseApi;
61
+ //# sourceMappingURL=HaystackEnterpriseApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HaystackEnterpriseApi.credentials.js","sourceRoot":"","sources":["../../credentials/HaystackEnterpriseApi.credentials.ts"],"names":[],"mappings":";;;AASA,MAAa,qBAAqB;IACjC,IAAI,GAAG,uBAAuB,CAAC;IAE/B,WAAW,GAAG,yBAAyB,CAAC;IAExC,IAAI,GAAG,2EAAoF,CAAC;IAE5F,gBAAgB,GAAG,qDAAqD,CAAC;IAEzE,UAAU,GAAsB;QAC/B;YACC,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,8BAA8B;YACvC,WAAW,EAAE,8BAA8B;YAC3C,WAAW,EACV,2NAA2N;SAC5N;QACD;YACC,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC/B,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,IAAI;YACd,WAAW,EACV,wNAAwN;SACzN;KACD,CAAC;IAEF,YAAY,GAAyB;QACpC,IAAI,EAAE,SAAS;QACf,UAAU,EAAE;YACX,OAAO,EAAE;gBACR,aAAa,EAAE,iCAAiC;aAChD;SACD;KACD,CAAC;IAEF,IAAI,GAA2B;QAC9B,OAAO,EAAE;YACR,OAAO,EACN,0KAA0K;YAC3K,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,KAAK;SACb;QACD,KAAK,EAAE;YACN;gBACC,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE;oBACX,KAAK,EAAE,GAAG;oBACV,OAAO,EACN,4FAA4F;iBAC7F;aACD;YACD;gBACC,IAAI,EAAE,cAAc;gBACpB,UAAU,EAAE;oBACX,KAAK,EAAE,GAAG;oBACV,OAAO,EAAE,wEAAwE;iBACjF;aACD;SACD;KACD,CAAC;CACF;AAjED,sDAiEC"}
@@ -0,0 +1,9 @@
1
+ import type { ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class HaystackEnterpriseOAuth2Api implements ICredentialType {
3
+ name: string;
4
+ extends: string[];
5
+ displayName: string;
6
+ icon: "file:../nodes/HaystackEnterpriseMcp/haystack-enterprise-electric-blue.svg";
7
+ documentationUrl: string;
8
+ properties: INodeProperties[];
9
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HaystackEnterpriseOAuth2Api = void 0;
4
+ class HaystackEnterpriseOAuth2Api {
5
+ name = 'haystackEnterpriseOAuth2Api';
6
+ extends = ['oAuth2Api'];
7
+ displayName = 'Haystack Enterprise OAuth2 API';
8
+ icon = 'file:../nodes/HaystackEnterpriseMcp/haystack-enterprise-electric-blue.svg';
9
+ documentationUrl = 'https://github.com/deepset-ai/deepset-n8n-nodes/tree/main/packages/haystack-enterprise-mcp#credentials';
10
+ properties = [
11
+ {
12
+ displayName: 'Click <b>Connect</b> below and sign in with your Haystack Enterprise account. n8n registers itself with Haystack Enterprise automatically.',
13
+ name: 'dynamicClientRegistrationNotice',
14
+ type: 'notice',
15
+ default: '',
16
+ displayOptions: { show: { useDynamicClientRegistration: [true] } },
17
+ },
18
+ {
19
+ displayName: 'Use Dynamic Client Registration',
20
+ name: 'useDynamicClientRegistration',
21
+ type: 'boolean',
22
+ default: true,
23
+ description: 'Whether to let n8n register itself as an OAuth2 client automatically (RFC 7591); turn this off to configure or reuse an OAuth2 client manually.',
24
+ },
25
+ {
26
+ displayName: 'Server URL',
27
+ name: 'serverUrl',
28
+ type: 'string',
29
+ default: 'https://api.cloud.deepset.ai',
30
+ required: true,
31
+ description: 'The Haystack Enterprise API origin (for example, https://api.cloud.deepset.ai).',
32
+ },
33
+ {
34
+ displayName: 'Scope',
35
+ name: 'scope',
36
+ type: 'string',
37
+ default: 'openid profile email offline_access',
38
+ displayOptions: { show: { useDynamicClientRegistration: [false] } },
39
+ description: 'The OAuth2 scopes requested when using a manually configured client.',
40
+ },
41
+ {
42
+ displayName: 'Client Secret',
43
+ name: 'clientSecret',
44
+ type: 'string',
45
+ typeOptions: { password: true },
46
+ default: '',
47
+ required: false,
48
+ displayOptions: { show: { useDynamicClientRegistration: [false] } },
49
+ description: 'Optional for public PKCE clients; required for confidential OAuth2 clients.',
50
+ },
51
+ ];
52
+ }
53
+ exports.HaystackEnterpriseOAuth2Api = HaystackEnterpriseOAuth2Api;
54
+ //# sourceMappingURL=HaystackEnterpriseOAuth2Api.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HaystackEnterpriseOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/HaystackEnterpriseOAuth2Api.credentials.ts"],"names":[],"mappings":";;;AAMA,MAAa,2BAA2B;IACvC,IAAI,GAAG,6BAA6B,CAAC;IAErC,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC;IAExB,WAAW,GAAG,gCAAgC,CAAC;IAE/C,IAAI,GAAG,2EAAoF,CAAC;IAE5F,gBAAgB,GACf,wGAAwG,CAAC;IAE1G,UAAU,GAAsB;QAC/B;YACC,WAAW,EACV,4IAA4I;YAC7I,IAAI,EAAE,iCAAiC;YACvC,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,EAAE;YACX,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,4BAA4B,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE;SAClE;QACD;YAEC,WAAW,EAAE,iCAAiC;YAC9C,IAAI,EAAE,8BAA8B;YACpC,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,IAAI;YACb,WAAW,EACV,iJAAiJ;SAClJ;QACD;YAEC,WAAW,EAAE,YAAY;YACzB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,8BAA8B;YACvC,QAAQ,EAAE,IAAI;YACd,WAAW,EACV,iFAAiF;SAClF;QACD;YACC,WAAW,EAAE,OAAO;YACpB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,qCAAqC;YAC9C,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,4BAA4B,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;YACnE,WAAW,EAAE,sEAAsE;SACnF;QACD;YACC,WAAW,EAAE,eAAe;YAC5B,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC/B,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,KAAK;YACf,cAAc,EAAE,EAAE,IAAI,EAAE,EAAE,4BAA4B,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;YACnE,WAAW,EAAE,6EAA6E;SAC1F;KACD,CAAC;CACF;AA3DD,kEA2DC"}
@@ -0,0 +1,12 @@
1
+ import type { IExecuteFunctions, ILoadOptionsFunctions, INodeExecutionData, INodePropertyOptions, INodeType, INodeTypeDescription, ISupplyDataFunctions, SupplyData } from 'n8n-workflow';
2
+ export declare class HaystackEnterpriseMcp implements INodeType {
3
+ description: INodeTypeDescription;
4
+ methods: {
5
+ loadOptions: {
6
+ getWorkspaces(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
7
+ getAvailableMcpTools(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
8
+ };
9
+ };
10
+ supplyData(this: ISupplyDataFunctions, itemIndex: number): Promise<SupplyData>;
11
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
12
+ }