@couleetech/n8n-nodes-enlightenedmsp 0.0.1

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.
Files changed (34) hide show
  1. package/README.md +124 -0
  2. package/dist/credentials/BraveSearchApi.credentials.d.ts +9 -0
  3. package/dist/credentials/BraveSearchApi.credentials.js +47 -0
  4. package/dist/credentials/BraveSearchApi.credentials.js.map +1 -0
  5. package/dist/credentials/EnlightenedMspApi.credentials.d.ts +8 -0
  6. package/dist/credentials/EnlightenedMspApi.credentials.js +30 -0
  7. package/dist/credentials/EnlightenedMspNats.credentials.d.ts +7 -0
  8. package/dist/credentials/EnlightenedMspNats.credentials.js +47 -0
  9. package/dist/credentials/McpClientApi.credentials.d.ts +7 -0
  10. package/dist/credentials/McpClientApi.credentials.js +29 -0
  11. package/dist/nodes/BraveSearch/BraveSearch.node.d.ts +5 -0
  12. package/dist/nodes/BraveSearch/BraveSearch.node.js +213 -0
  13. package/dist/nodes/BraveSearch/BraveSearch.node.js.map +1 -0
  14. package/dist/nodes/BraveSearch/brave-logo-sans-text.svg +1 -0
  15. package/dist/nodes/BraveSearch/types.d.ts +21 -0
  16. package/dist/nodes/BraveSearch/types.js +2 -0
  17. package/dist/nodes/BraveSearch/types.js.map +1 -0
  18. package/dist/nodes/BraveSearchTool/BraveSearchTool.node.d.ts +7 -0
  19. package/dist/nodes/BraveSearchTool/BraveSearchTool.node.js +208 -0
  20. package/dist/nodes/BraveSearchTool/brave-logo-sans-text.svg +1 -0
  21. package/dist/nodes/EnlightenedMsp/McpClient.node.d.ts +5 -0
  22. package/dist/nodes/EnlightenedMsp/McpClient.node.js +95 -0
  23. package/dist/nodes/EnlightenedMsp/TicketCreated.node.d.ts +5 -0
  24. package/dist/nodes/EnlightenedMsp/TicketCreated.node.js +104 -0
  25. package/dist/nodes/EnlightenedMsp/index.d.ts +2 -0
  26. package/dist/nodes/EnlightenedMsp/index.js +5 -0
  27. package/dist/nodes/EnlightenedMsp/mcpClient.svg +7 -0
  28. package/dist/nodes/McpClient/McpClient.node.d.ts +5 -0
  29. package/dist/nodes/McpClient/McpClient.node.js +95 -0
  30. package/dist/nodes/McpClient/mcpClient.svg +7 -0
  31. package/dist/nodes/NpmSearch/NpmSearch.node.d.ts +5 -0
  32. package/dist/nodes/NpmSearch/NpmSearch.node.js +94 -0
  33. package/dist/nodes/NpmSearch/npm.svg +5 -0
  34. package/package.json +77 -0
package/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # n8n-nodes-mcp-client
2
+
3
+ This package provides an n8n node for interacting with Model Context Protocol (MCP) tools. It allows you to integrate MCP-compatible AI tools into your n8n workflows.
4
+
5
+ ## Installation
6
+
7
+ To install this package in your n8n instance:
8
+
9
+ ```bash
10
+ npm install @coulee-tech/n8n-nodes-mcp-client
11
+ ```
12
+
13
+ ## Features
14
+
15
+ - List available MCP tools
16
+ - Call specific MCP tools with custom arguments
17
+ - Full integration with n8n workflows
18
+ - Support for standard MCP protocol communication
19
+
20
+ ## MCP Protocol Requirements
21
+
22
+ Your MCP client must:
23
+ 1. Accept JSON-RPC style messages via stdin
24
+ 2. Output responses via stdout
25
+ 3. Support the following methods:
26
+ - `tools/list`: Lists available tools
27
+ - `tools/call`: Calls a specific tool with arguments
28
+
29
+ Example MCP message format:
30
+ ```json
31
+ // Request
32
+ {
33
+ "method": "tools/call",
34
+ "params": {
35
+ "name": "tool-name",
36
+ "arguments": {
37
+ // tool-specific arguments
38
+ }
39
+ }
40
+ }
41
+
42
+ // Response
43
+ {
44
+ "result": {
45
+ // tool-specific response
46
+ }
47
+ }
48
+ ```
49
+
50
+ ## Configuration
51
+
52
+ ### Credentials
53
+
54
+ To use the MCP Client node, you need to configure the following credentials:
55
+
56
+ 1. **Command**: The command to execute for the MCP client (e.g., the path to your MCP-compatible tool)
57
+ 2. **Arguments**: Command-line arguments for the MCP client (comma-separated)
58
+
59
+ ### Node Configuration
60
+
61
+ The node provides two operations:
62
+
63
+ 1. **List Tools**
64
+ - Lists all available MCP tools from your configured client
65
+ - No additional parameters required
66
+
67
+ 2. **Call Tool**
68
+ - Calls a specific MCP tool with custom arguments
69
+ - Required parameters:
70
+ - Tool Name: The name of the tool to call
71
+ - Tool Arguments: JSON object containing the arguments for the tool
72
+
73
+ ## Usage Example
74
+
75
+ Here's an example of how to use the MCP Client node in your workflow:
76
+
77
+ 1. Add the MCP Client node to your workflow
78
+ 2. Configure the credentials with your MCP client command and arguments
79
+ 3. Choose an operation:
80
+ - To list tools: Select "List Tools" operation
81
+ - To call a tool: Select "Call Tool" operation and provide:
82
+ ```json
83
+ {
84
+ "toolName": "your-tool-name",
85
+ "toolArguments": {
86
+ "param1": "value1",
87
+ "param2": "value2"
88
+ }
89
+ }
90
+ ```
91
+
92
+ ## Error Handling
93
+
94
+ The node includes comprehensive error handling:
95
+ - Invalid command or arguments
96
+ - Tool execution failures
97
+ - MCP protocol communication errors
98
+ - JSON parsing errors
99
+
100
+ ## Development
101
+
102
+ To contribute to this package:
103
+
104
+ 1. Clone the repository
105
+ 2. Install dependencies:
106
+ ```bash
107
+ npm install
108
+ ```
109
+ 3. Build the package:
110
+ ```bash
111
+ npm run build
112
+ ```
113
+ 4. Run tests:
114
+ ```bash
115
+ npm test
116
+ ```
117
+
118
+ ## License
119
+
120
+ This project is licensed under the MIT License - see the LICENSE file for details.
121
+
122
+ ## Support
123
+
124
+ For issues and feature requests, please use the GitHub issue tracker.
@@ -0,0 +1,9 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class BraveSearchApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ authenticate: IAuthenticateGeneric;
8
+ test: ICredentialTestRequest;
9
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BraveSearchApi = void 0;
4
+ class BraveSearchApi {
5
+ constructor() {
6
+ this.name = 'braveSearchApi';
7
+ this.displayName = 'Brave Search API';
8
+ this.documentationUrl = 'https://api.search.brave.com/app/documentation/web-search';
9
+ this.properties = [
10
+ {
11
+ displayName: 'API Key',
12
+ name: 'apiKey',
13
+ type: 'string',
14
+ typeOptions: {
15
+ password: true,
16
+ },
17
+ default: '',
18
+ required: true,
19
+ description: 'The API key for Brave Search. Get it from https://api.search.brave.com/app/keys',
20
+ },
21
+ ];
22
+ this.authenticate = {
23
+ type: 'generic',
24
+ properties: {
25
+ headers: {
26
+ 'X-Subscription-Token': '={{$credentials.apiKey}}',
27
+ 'Accept': 'application/json',
28
+ },
29
+ },
30
+ };
31
+ this.test = {
32
+ request: {
33
+ baseURL: 'https://api.search.brave.com/res/v1',
34
+ url: '/web/search',
35
+ method: 'GET',
36
+ qs: {
37
+ q: 'test'
38
+ },
39
+ headers: {
40
+ 'Accept': 'application/json',
41
+ },
42
+ skipSslCertificateValidation: false,
43
+ },
44
+ };
45
+ }
46
+ }
47
+ exports.BraveSearchApi = BraveSearchApi;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BraveSearchApi.credentials.js","sourceRoot":"","sources":["../../credentials/BraveSearchApi.credentials.ts"],"names":[],"mappings":";;;AAOA,MAAa,cAAc;IAA3B;QACI,SAAI,GAAG,gBAAgB,CAAC;QACxB,gBAAW,GAAG,kBAAkB,CAAC;QACjC,qBAAgB,GAAG,2DAA2D,CAAC;QAE/E,eAAU,GAAsB;YAC5B;gBACI,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACT,QAAQ,EAAE,IAAI;iBACjB;gBACD,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,8BAA8B;aAC9C;SACJ,CAAC;QAEF,iBAAY,GAAyB;YACjC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACR,OAAO,EAAE;oBACL,sBAAsB,EAAE,0BAA0B;iBACrD;aACJ;SACJ,CAAC;QAEF,SAAI,GAA2B;YAC3B,OAAO,EAAE;gBACL,OAAO,EAAE,qCAAqC;gBAC9C,GAAG,EAAE,aAAa;gBAClB,MAAM,EAAE,KAAK;gBACb,EAAE,EAAE;oBACA,CAAC,EAAE,MAAM;iBACZ;aACJ;SACJ,CAAC;IACN,CAAC;CAAA;AAtCD,wCAsCC"}
@@ -0,0 +1,8 @@
1
+ import { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class EnlightenedMspApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ authenticate: IAuthenticateGeneric;
8
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnlightenedMspApi = void 0;
4
+ class EnlightenedMspApi {
5
+ constructor() {
6
+ this.name = 'enlightenedMspApi';
7
+ this.displayName = 'EnlightenedMSP API';
8
+ this.documentationUrl = '';
9
+ this.properties = [
10
+ {
11
+ displayName: 'API Key',
12
+ name: 'apiKey',
13
+ type: 'string',
14
+ typeOptions: {
15
+ password: true,
16
+ },
17
+ default: '',
18
+ },
19
+ ];
20
+ this.authenticate = {
21
+ type: 'generic',
22
+ properties: {
23
+ headers: {
24
+ 'x-api-key': '={{$credentials.apiKey}}',
25
+ },
26
+ },
27
+ };
28
+ }
29
+ }
30
+ exports.EnlightenedMspApi = EnlightenedMspApi;
@@ -0,0 +1,7 @@
1
+ import { ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class EnlightenedMspNats implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnlightenedMspNats = void 0;
4
+ class EnlightenedMspNats {
5
+ constructor() {
6
+ this.name = 'enlightenedMspNats';
7
+ this.displayName = 'EnlightenedMSP NATS';
8
+ this.documentationUrl = 'https://docs.nats.io/';
9
+ this.properties = [
10
+ {
11
+ displayName: 'NATS Server URL',
12
+ name: 'natsServer',
13
+ type: 'string',
14
+ default: 'nats://localhost:4222',
15
+ description: 'URL of the NATS server',
16
+ },
17
+ {
18
+ displayName: 'Username',
19
+ name: 'username',
20
+ type: 'string',
21
+ default: '',
22
+ description: 'Username for NATS authentication',
23
+ },
24
+ {
25
+ displayName: 'Password',
26
+ name: 'password',
27
+ type: 'string',
28
+ typeOptions: {
29
+ password: true,
30
+ },
31
+ default: '',
32
+ description: 'Password for NATS authentication',
33
+ },
34
+ {
35
+ displayName: 'Token',
36
+ name: 'token',
37
+ type: 'string',
38
+ typeOptions: {
39
+ password: true,
40
+ },
41
+ default: '',
42
+ description: 'Token for NATS authentication (if using token-based auth instead of username/password)',
43
+ },
44
+ ];
45
+ }
46
+ }
47
+ exports.EnlightenedMspNats = EnlightenedMspNats;
@@ -0,0 +1,7 @@
1
+ import { ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class McpClientApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ properties: INodeProperties[];
7
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.McpClientApi = void 0;
4
+ class McpClientApi {
5
+ constructor() {
6
+ this.name = 'mcpClientApi';
7
+ this.displayName = 'MCP Client API';
8
+ this.documentationUrl = 'https://github.com/modelcontextprotocol/sdk';
9
+ this.properties = [
10
+ {
11
+ displayName: 'Command',
12
+ name: 'command',
13
+ type: 'string',
14
+ default: '',
15
+ required: true,
16
+ description: 'The command to execute for MCP client',
17
+ },
18
+ {
19
+ displayName: 'Arguments',
20
+ name: 'args',
21
+ type: 'string',
22
+ default: '',
23
+ required: true,
24
+ description: 'Command arguments (comma-separated)',
25
+ },
26
+ ];
27
+ }
28
+ }
29
+ exports.McpClientApi = McpClientApi;
@@ -0,0 +1,5 @@
1
+ import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class BraveSearch implements INodeType {
3
+ description: INodeTypeDescription;
4
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
5
+ }
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BraveSearch = void 0;
7
+ const n8n_workflow_1 = require("n8n-workflow");
8
+ const axios_1 = __importDefault(require("axios"));
9
+ class BraveSearch {
10
+ constructor() {
11
+ this.description = {
12
+ displayName: 'Brave Search',
13
+ name: 'braveSearch',
14
+ icon: 'file:brave-logo-sans-text.svg',
15
+ group: ['transform'],
16
+ version: 1,
17
+ subtitle: '={{$parameter["operation"]}}',
18
+ description: 'Make requests to Brave Search API',
19
+ defaults: {
20
+ name: 'Brave Search',
21
+ },
22
+ inputs: ['main'],
23
+ outputs: ['main'],
24
+ credentials: [
25
+ {
26
+ name: 'braveSearchApi',
27
+ required: true,
28
+ },
29
+ ],
30
+ properties: [
31
+ {
32
+ displayName: 'Operation',
33
+ name: 'operation',
34
+ type: 'options',
35
+ noDataExpression: true,
36
+ options: [
37
+ {
38
+ name: 'Web Search',
39
+ value: 'webSearch',
40
+ description: 'Perform a web search',
41
+ action: 'Perform a web search',
42
+ },
43
+ ],
44
+ default: 'webSearch',
45
+ },
46
+ {
47
+ displayName: 'Query',
48
+ name: 'query',
49
+ type: 'string',
50
+ default: '',
51
+ required: true,
52
+ displayOptions: {
53
+ show: {
54
+ operation: ['webSearch'],
55
+ },
56
+ },
57
+ description: 'The search query to execute',
58
+ },
59
+ {
60
+ displayName: 'Additional Fields',
61
+ name: 'additionalFields',
62
+ type: 'collection',
63
+ placeholder: 'Add Field',
64
+ default: {},
65
+ displayOptions: {
66
+ show: {
67
+ operation: ['webSearch'],
68
+ },
69
+ },
70
+ options: [
71
+ {
72
+ displayName: 'Country',
73
+ name: 'country',
74
+ type: 'string',
75
+ default: '',
76
+ description: 'Country code for search results (e.g., US, GB)',
77
+ },
78
+ {
79
+ displayName: 'Results Count',
80
+ name: 'count',
81
+ type: 'number',
82
+ typeOptions: {
83
+ minValue: 1,
84
+ maxValue: 20,
85
+ },
86
+ default: 10,
87
+ description: 'Number of results to return (max: 20)',
88
+ },
89
+ {
90
+ displayName: 'Offset',
91
+ name: 'offset',
92
+ type: 'number',
93
+ typeOptions: {
94
+ minValue: 0,
95
+ },
96
+ default: 0,
97
+ description: 'Offset for pagination',
98
+ },
99
+ {
100
+ displayName: 'Safe Search',
101
+ name: 'safesearch',
102
+ type: 'options',
103
+ options: [
104
+ {
105
+ name: 'Strict',
106
+ value: 'strict',
107
+ },
108
+ {
109
+ name: 'Moderate',
110
+ value: 'moderate',
111
+ },
112
+ {
113
+ name: 'Off',
114
+ value: 'off',
115
+ },
116
+ ],
117
+ default: 'moderate',
118
+ description: 'Safe search setting',
119
+ },
120
+ ],
121
+ },
122
+ ],
123
+ };
124
+ }
125
+ async execute() {
126
+ var _a, _b, _c, _d, _e;
127
+ const items = this.getInputData();
128
+ const returnData = [];
129
+ let query = '';
130
+ let params;
131
+ for (let i = 0; i < items.length; i++) {
132
+ try {
133
+ const operation = this.getNodeParameter('operation', i);
134
+ if (operation === 'webSearch') {
135
+ query = this.getNodeParameter('query', i);
136
+ const additionalFields = this.getNodeParameter('additionalFields', i);
137
+ const credentials = await this.getCredentials('braveSearchApi');
138
+ if (!(credentials === null || credentials === void 0 ? void 0 : credentials.apiKey)) {
139
+ throw new Error('No API key provided in credentials');
140
+ }
141
+ params = {
142
+ q: query,
143
+ ...additionalFields,
144
+ };
145
+ try {
146
+ const response = await axios_1.default.get('https://api.search.brave.com/res/v1/web/search', {
147
+ params,
148
+ headers: {
149
+ 'X-Subscription-Token': credentials.apiKey,
150
+ 'Accept': 'application/json',
151
+ },
152
+ });
153
+ console.log('Response status:', response.status);
154
+ console.log('Response data structure:', Object.keys(response.data));
155
+ if (!response.data) {
156
+ throw new Error('Empty response from Brave Search API');
157
+ }
158
+ if (!response.data.web || !Array.isArray(response.data.web.results)) {
159
+ throw new Error(`Invalid response structure. Got: ${JSON.stringify(response.data)}`);
160
+ }
161
+ const responseData = {
162
+ ...response.data,
163
+ web: {
164
+ ...(response.data.web || {}),
165
+ results: response.data.web.results.map((result) => ({
166
+ ...result,
167
+ title: result.title || '',
168
+ url: result.url || '',
169
+ description: result.description || ''
170
+ }))
171
+ }
172
+ };
173
+ returnData.push({
174
+ json: responseData,
175
+ pairedItem: i,
176
+ });
177
+ }
178
+ catch (error) {
179
+ if (axios_1.default.isAxiosError(error)) {
180
+ throw new Error(`API Request failed: ${error.message}. ` +
181
+ `Status: ${(_a = error.response) === null || _a === void 0 ? void 0 : _a.status}. ` +
182
+ `Response: ${JSON.stringify((_b = error.response) === null || _b === void 0 ? void 0 : _b.data)}`);
183
+ }
184
+ throw error;
185
+ }
186
+ }
187
+ }
188
+ catch (error) {
189
+ if (this.continueOnFail()) {
190
+ returnData.push({
191
+ json: {
192
+ error: error.message,
193
+ details: ((_c = error.response) === null || _c === void 0 ? void 0 : _c.data) || 'No additional error details available',
194
+ status: ((_d = error.response) === null || _d === void 0 ? void 0 : _d.status) || 'Unknown status',
195
+ query: query || 'No query provided',
196
+ params: params || 'No params available'
197
+ },
198
+ pairedItem: i,
199
+ });
200
+ continue;
201
+ }
202
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Execution failed: ${error.message}`, {
203
+ description: ((_e = error.response) === null || _e === void 0 ? void 0 : _e.data)
204
+ ? `API Response: ${JSON.stringify(error.response.data)}`
205
+ : undefined,
206
+ itemIndex: i,
207
+ });
208
+ }
209
+ }
210
+ return [returnData];
211
+ }
212
+ }
213
+ exports.BraveSearch = BraveSearch;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BraveSearch.node.js","sourceRoot":"","sources":["../../../nodes/BraveSearch/BraveSearch.node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ <svg width="56" height="64" viewBox="0 0 56 64" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M53.292 15.321l1.5-3.676s-1.909-2.043-4.227-4.358c-2.317-2.315-7.225-.953-7.225-.953L37.751 0H18.12l-5.589 6.334s-4.908-1.362-7.225.953C2.988 9.602 1.08 11.645 1.08 11.645l1.5 3.676-1.91 5.447s5.614 21.236 6.272 23.83c1.295 5.106 2.181 7.08 5.862 9.668 3.68 2.587 10.36 7.08 11.45 7.762 1.091.68 2.455 1.84 3.682 1.84 1.227 0 2.59-1.16 3.68-1.84 1.091-.681 7.77-5.175 11.452-7.762 3.68-2.587 4.567-4.562 5.862-9.668.657-2.594 6.27-23.83 6.27-23.83l-1.908-5.447z" fill="url(#paint0_linear)"/><path fill-rule="evenodd" clip-rule="evenodd" d="M34.888 11.508c.818 0 6.885-1.157 6.885-1.157s7.189 8.68 7.189 10.536c0 1.534-.619 2.134-1.347 2.842-.152.148-.31.3-.467.468l-5.39 5.717a9.42 9.42 0 01-.176.18c-.538.54-1.33 1.336-.772 2.658l.115.269c.613 1.432 1.37 3.2.407 4.99-1.025 1.906-2.78 3.178-3.905 2.967-1.124-.21-3.766-1.589-4.737-2.218-.971-.63-4.05-3.166-4.05-4.137 0-.809 2.214-2.155 3.29-2.81.214-.13.383-.232.48-.298.111-.075.297-.19.526-.332.981-.61 2.754-1.71 2.799-2.197.055-.602.034-.778-.758-2.264-.168-.316-.365-.654-.568-1.004-.754-1.295-1.598-2.745-1.41-3.784.21-1.173 2.05-1.845 3.608-2.415.194-.07.385-.14.567-.209l1.623-.609c1.556-.582 3.284-1.229 3.57-1.36.394-.181.292-.355-.903-.468a54.655 54.655 0 01-.58-.06c-1.48-.157-4.209-.446-5.535-.077-.261.073-.553.152-.86.235-1.49.403-3.317.897-3.493 1.182-.03.05-.06.093-.089.133-.168.238-.277.394-.091 1.406.055.302.169.895.31 1.629.41 2.148 1.053 5.498 1.134 6.25.011.106.024.207.036.305.103.84.171 1.399-.805 1.622l-.255.058c-1.102.252-2.717.623-3.3.623-.584 0-2.2-.37-3.302-.623l-.254-.058c-.976-.223-.907-.782-.804-1.622.012-.098.024-.2.035-.305.081-.753.725-4.112 1.137-6.259.14-.73.253-1.32.308-1.62.185-1.012.076-1.168-.092-1.406a3.743 3.743 0 01-.09-.133c-.174-.285-2-.779-3.491-1.182-.307-.083-.6-.162-.86-.235-1.327-.37-4.055-.08-5.535.077-.226.024-.422.045-.58.06-1.196.113-1.297.287-.903.468.285.131 2.013.778 3.568 1.36.597.223 1.17.437 1.624.609.183.069.373.138.568.21 1.558.57 3.398 1.241 3.608 2.414.187 1.039-.657 2.489-1.41 3.784-.204.35-.4.688-.569 1.004-.791 1.486-.812 1.662-.757 2.264.044.488 1.816 1.587 2.798 2.197.229.142.415.257.526.332.098.066.266.168.48.298 1.076.654 3.29 2 3.29 2.81 0 .97-3.078 3.507-4.05 4.137-.97.63-3.612 2.008-4.737 2.218-1.124.21-2.88-1.061-3.904-2.966-.963-1.791-.207-3.559.406-4.99l.115-.27c.559-1.322-.233-2.118-.772-2.658a9.377 9.377 0 01-.175-.18l-5.39-5.717c-.158-.167-.316-.32-.468-.468-.728-.707-1.346-1.308-1.346-2.842 0-1.855 7.189-10.536 7.189-10.536s6.066 1.157 6.884 1.157c.653 0 1.913-.433 3.227-.885.333-.114.669-.23 1-.34 1.635-.545 2.726-.549 2.726-.549s1.09.004 2.726.549c.33.11.667.226 1 .34 1.313.452 2.574.885 3.226.885zm-1.041 30.706c1.282.66 2.192 1.128 2.536 1.343.445.278.174.803-.232 1.09-.405.285-5.853 4.499-6.381 4.965l-.215.191c-.509.459-1.159 1.044-1.62 1.044-.46 0-1.11-.586-1.62-1.044l-.213-.191c-.53-.466-5.977-4.68-6.382-4.966-.405-.286-.677-.81-.232-1.09.344-.214 1.255-.683 2.539-1.344l1.22-.629c1.92-.992 4.315-1.837 4.689-1.837.373 0 2.767.844 4.689 1.837.436.226.845.437 1.222.63z" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M43.34 6.334L37.751 0H18.12l-5.589 6.334s-4.908-1.362-7.225.953c0 0 6.544-.59 8.793 3.064 0 0 6.066 1.157 6.884 1.157.818 0 2.59-.68 4.226-1.225 1.636-.545 2.727-.549 2.727-.549s1.09.004 2.726.549 3.408 1.225 4.226 1.225c.818 0 6.885-1.157 6.885-1.157 2.249-3.654 8.792-3.064 8.792-3.064-2.317-2.315-7.225-.953-7.225-.953z" fill="url(#paint1_linear)"/><defs><linearGradient id="paint0_linear" x1=".671" y1="64.319" x2="55.2" y2="64.319" gradientUnits="userSpaceOnUse"><stop stop-color="#F50"/><stop offset=".41" stop-color="#F50"/><stop offset=".582" stop-color="#FF2000"/><stop offset="1" stop-color="#FF2000"/></linearGradient><linearGradient id="paint1_linear" x1="6.278" y1="11.466" x2="50.565" y2="11.466" gradientUnits="userSpaceOnUse"><stop stop-color="#FF452A"/><stop offset="1" stop-color="#FF2000"/></linearGradient></defs></svg>
@@ -0,0 +1,21 @@
1
+ import { IDataObject } from 'n8n-workflow';
2
+ export interface IBraveSearchCredentials {
3
+ apiKey: string;
4
+ }
5
+ export interface IBraveSearchParams extends IDataObject {
6
+ q: string;
7
+ country?: string;
8
+ count?: number;
9
+ offset?: number;
10
+ safesearch?: 'strict' | 'moderate' | 'off';
11
+ }
12
+ export interface IBraveSearchResponse {
13
+ web: {
14
+ results: Array<{
15
+ title: string;
16
+ url: string;
17
+ description: string;
18
+ }>;
19
+ total?: number;
20
+ };
21
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../nodes/BraveSearch/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class BraveSearchTool implements INodeType {
3
+ description: INodeTypeDescription & {
4
+ usableAsTool?: boolean;
5
+ };
6
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
7
+ }