n8n-nodes-clientify 0.2.0 → 0.2.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.
package/README.md CHANGED
@@ -126,6 +126,8 @@ This node dynamically supports **26 operations** from the Clientify MCP API:
126
126
 
127
127
  **NEW in v0.2.0!** The Clientify Trigger node enables automatic workflow execution when events occur in Clientify CRM.
128
128
 
129
+ 📚 **For complete trigger documentation with payload examples and webhook URLs, see [TRIGGERS_REFERENCE.md](TRIGGERS_REFERENCE.md)**
130
+
129
131
  ### Available Triggers
130
132
 
131
133
  #### 👥 Contact Triggers
package/dist/README.md ADDED
@@ -0,0 +1,514 @@
1
+ # n8n-nodes-clientify
2
+
3
+ [![npm version](https://badge.fury.io/js/n8n-nodes-clientify.svg)](https://www.npmjs.com/package/n8n-nodes-clientify)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ Official n8n node for integrating with Clientify CRM via Model Context Protocol (MCP). This node provides seamless access to all Clientify CRM operations including contacts, companies, deals, tasks, and more.
7
+
8
+ ## Table of Contents
9
+
10
+ - [Installation](#installation)
11
+ - [Prerequisites](#prerequisites)
12
+ - [Configuration](#configuration)
13
+ - [Available Operations](#available-operations)
14
+ - [Trigger Events](#trigger-events)
15
+ - [Usage Examples](#usage-examples)
16
+ - [Troubleshooting](#troubleshooting)
17
+ - [Support](#support)
18
+ - [License](#license)
19
+
20
+ ## Installation
21
+
22
+ ### In n8n (GUI)
23
+
24
+ 1. Go to **Settings** → **Community Nodes**
25
+ 2. Click **Install**
26
+ 3. Enter: `n8n-nodes-clientify`
27
+ 4. Click **I understand the risks** and then **Install**
28
+ 5. **Restart n8n** (important - the node won't appear until you restart)
29
+
30
+ ### Via npm (Command Line)
31
+
32
+ ```bash
33
+ cd ~/.n8n/nodes
34
+ npm install n8n-nodes-clientify
35
+ # Restart n8n
36
+ ```
37
+
38
+ ### Docker
39
+
40
+ If running n8n in Docker, ensure you persist the nodes directory:
41
+
42
+ ```yaml
43
+ volumes:
44
+ - n8n_data:/home/node/.n8n
45
+ ```
46
+
47
+ Or enable auto-reinstall on restart:
48
+
49
+ ```yaml
50
+ environment:
51
+ - N8N_REINSTALL_MISSING_PACKAGES=true
52
+ ```
53
+
54
+ ## Prerequisites
55
+
56
+ - **n8n version:** 0.180.0 or higher
57
+ - **Node.js version:** 20.15 or higher
58
+ - **Clientify Account:** Active Clientify CRM account with API access
59
+ - **Authentication Token:** JWT token from Clientify MCP server
60
+
61
+ ## Configuration
62
+
63
+ ### Step 1: Obtain Your Clientify MCP Token
64
+
65
+ 1. Log into your Clientify account
66
+ 2. Navigate to API settings or contact your Clientify administrator
67
+ 3. Generate or copy your MCP authentication token (JWT format)
68
+
69
+ ### Step 2: Add Credentials in n8n
70
+
71
+ 1. In n8n, go to **Credentials** → **New**
72
+ 2. Search for **"Clientify MCP API"**
73
+ 3. Enter your **Authentication Token** (JWT)
74
+ 4. Click **Save**
75
+
76
+ ### Step 3: Use the Node
77
+
78
+ 1. In your workflow, click **+** to add a node
79
+ 2. Search for **"Clientify"**
80
+ 3. Select the **Clientify** node
81
+ 4. Choose your saved credentials
82
+ 5. Select an operation from the dropdown
83
+ 6. Configure the parameters for your operation
84
+
85
+ ## Available Operations
86
+
87
+ This node dynamically supports **26 operations** from the Clientify MCP API:
88
+
89
+ ### 📊 Companies
90
+ - **List Companies** - Retrieve all companies with pagination
91
+ - **Get Company** - Get detailed information for a specific company by ID
92
+ - **Create Company** - Create a new company in the CRM
93
+ - **Update Company** - Update an existing company
94
+ - **Delete Company** - Remove a company from the CRM
95
+ - **Search Companies** - Search for companies by criteria
96
+
97
+ ### 👥 Contacts
98
+ - **List Contacts** - Retrieve all contacts or search for specific contacts
99
+ - **Get Contact** - Get detailed information for a specific contact by ID
100
+ - **Create Contact** - Create a new contact in the CRM
101
+ - **Update Contact** - Update an existing contact
102
+ - **Delete Contact** - Remove a contact from the CRM
103
+
104
+ ### 💼 Deals
105
+ - **List Deals** - Retrieve all deals with filtering and pagination
106
+ - **List Deals By Stage** - Filter deals by pipeline stage
107
+ - **Get Deal** - Get detailed information for a specific deal by ID
108
+ - **Create Deal** - Create a new deal/opportunity
109
+ - **Update Deal** - Update an existing deal
110
+ - **Delete Deal** - Remove a deal from the CRM
111
+ - **Mark Deal Won** - Mark a deal as won/closed successfully
112
+ - **Mark Deal Lost** - Mark a deal as lost/closed unsuccessfully
113
+
114
+ ### ✅ Tasks
115
+ - **List Tasks** - Retrieve all tasks with pagination
116
+ - **Get Task** - Get detailed information for a specific task by ID
117
+ - **Create Task** - Create a new task/activity
118
+ - **List Activity Types** - Get available activity types for tasks
119
+
120
+ ### ⚙️ Configuration & Utilities
121
+ - **List Pipelines** - Retrieve all available sales pipelines
122
+ - **Get Current User** - Get information about the authenticated user
123
+ - **Get Current Time** - Get current date/time with timezone awareness
124
+
125
+ ## Trigger Events
126
+
127
+ **NEW in v0.2.0!** The Clientify Trigger node enables automatic workflow execution when events occur in Clientify CRM.
128
+
129
+ 📚 **For complete trigger documentation with payload examples and webhook URLs, see [TRIGGERS_REFERENCE.md](TRIGGERS_REFERENCE.md)**
130
+
131
+ ### Available Triggers
132
+
133
+ #### 👥 Contact Triggers
134
+ - **Contact Created** - Fires when a new contact is added to Clientify
135
+ - **Contact Updated** - Fires when contact details are modified
136
+ - **Contact Deleted** - Fires when a contact is removed
137
+
138
+ #### 📊 Company Triggers
139
+ - **Company Created** - Fires when a new company is added to Clientify
140
+ - **Company Updated** - Fires when company details are modified
141
+ - **Company Deleted** - Fires when a company is removed
142
+
143
+ #### 💼 Deal Triggers
144
+ - **Deal Created** - Fires when a new deal is created
145
+ - **Deal Updated** - Fires when deal details are modified
146
+ - **Deal Won** - Fires when a deal is marked as won
147
+ - **Deal Lost** - Fires when a deal is marked as lost
148
+ - **Deal Stage Changed** - Fires when a deal moves to a different pipeline stage
149
+ - **Deal Deleted** - Fires when a deal is removed
150
+
151
+ #### ✅ Task Triggers
152
+ - **Task Created** - Fires when a new task is created
153
+ - **Task Completed** - Fires when a task is marked as completed
154
+ - **Task Due Soon** - Fires when a task is approaching its due date
155
+ - **Task Overdue** - Fires when a task passes its due date
156
+
157
+ ### Setting Up Webhooks
158
+
159
+ 1. **Add Clientify Trigger node** to your workflow in n8n
160
+ 2. **Select the event** you want to listen for (e.g., "Contact Created")
161
+ 3. **Save and activate** the workflow to generate webhook URL
162
+ 4. **Copy the webhook URL** from the trigger node
163
+ 5. **Configure webhook in Clientify:**
164
+ - Go to Clientify Settings → Webhooks
165
+ - Add new webhook
166
+ - Paste the n8n webhook URL
167
+ - Select the corresponding event type
168
+ - Save the webhook configuration
169
+
170
+ ### Webhook Data Structure
171
+
172
+ When a webhook triggers your workflow, the data is automatically flattened for easy access:
173
+
174
+ **Contact Created Example:**
175
+ ```json
176
+ {
177
+ "event": "contact.created",
178
+ "timestamp": "2025-10-02T15:30:00Z",
179
+ "contact_id": 12345,
180
+ "first_name": "John",
181
+ "last_name": "Doe",
182
+ "email": "john.doe@example.com",
183
+ "phone": "+1234567890",
184
+ "company_id": 456,
185
+ "company_name": "Acme Corp"
186
+ }
187
+ ```
188
+
189
+ **Deal Won Example:**
190
+ ```json
191
+ {
192
+ "event": "deal.won",
193
+ "timestamp": "2025-10-02T17:00:00Z",
194
+ "deal_id": 98765,
195
+ "title": "Enterprise License Sale",
196
+ "value": 50000,
197
+ "currency": "USD",
198
+ "contact_id": 12345,
199
+ "contact_name": "John Doe",
200
+ "company_id": 789,
201
+ "company_name": "New Corp"
202
+ }
203
+ ```
204
+
205
+ ## Usage Examples
206
+
207
+ ### Example 1: List All Contacts
208
+
209
+ Retrieve a paginated list of all contacts in your CRM.
210
+
211
+ **Configuration:**
212
+ - **Operation:** `List Contacts`
213
+ - **Parameters:** Leave empty for all contacts, or add filters
214
+
215
+ **Output:** Array of contact objects with names, emails, phone numbers, and IDs.
216
+
217
+ ```json
218
+ [
219
+ {
220
+ "id": 123,
221
+ "first_name": "John",
222
+ "last_name": "Doe",
223
+ "email": "john.doe@example.com",
224
+ "phone": "+1234567890",
225
+ "company_id": 456
226
+ }
227
+ ]
228
+ ```
229
+
230
+ ---
231
+
232
+ ### Example 2: Create a New Company
233
+
234
+ Add a new company to your Clientify CRM.
235
+
236
+ **Configuration:**
237
+ - **Operation:** `Create Company`
238
+ - **Parameters:**
239
+ - **name** (required): `Acme Corporation`
240
+ - **domain**: `acme.com`
241
+ - **industry**: `Technology`
242
+ - **description**: `Leading software provider`
243
+
244
+ **Output:** Created company object with assigned ID.
245
+
246
+ ```json
247
+ {
248
+ "id": 789,
249
+ "name": "Acme Corporation",
250
+ "domain": "acme.com",
251
+ "industry": "Technology",
252
+ "created_at": "2025-10-01T12:00:00Z"
253
+ }
254
+ ```
255
+
256
+ ---
257
+
258
+ ### Example 3: Update a Deal and Mark as Won
259
+
260
+ Update deal details and mark it as successfully closed.
261
+
262
+ **Workflow:**
263
+ 1. **First Node:** Get the deal you want to update
264
+ - **Operation:** `Get Deal`
265
+ - **deal_id:** `{{$json.deal_id}}`
266
+
267
+ 2. **Second Node:** Update the deal
268
+ - **Operation:** `Update Deal`
269
+ - **deal_id:** `{{$json.id}}`
270
+ - **value:** `50000`
271
+ - **notes:** `Final negotiations completed`
272
+
273
+ 3. **Third Node:** Mark as won
274
+ - **Operation:** `Mark Deal Won`
275
+ - **deal_id:** `{{$json.id}}`
276
+
277
+ ---
278
+
279
+ ### Example 4: Search Companies and Create Contacts
280
+
281
+ Find a company by name and create a new contact associated with it.
282
+
283
+ **Workflow:**
284
+ 1. **Search Companies:**
285
+ - **Operation:** `Search Companies`
286
+ - **query:** `Acme`
287
+
288
+ 2. **Create Contact:**
289
+ - **Operation:** `Create Contact`
290
+ - **first_name:** `Jane`
291
+ - **last_name:** `Smith`
292
+ - **email:** `jane.smith@acme.com`
293
+ - **company_id:** `{{$json.id}}` (from previous node)
294
+
295
+ ---
296
+
297
+ ### Example 5: List All Deals in a Specific Pipeline Stage
298
+
299
+ Retrieve deals that are in the "Negotiation" stage.
300
+
301
+ **Configuration:**
302
+ - **Operation:** `List Deals By Stage`
303
+ - **Parameters:**
304
+ - **stage:** `Negotiation`
305
+
306
+ **Use Case:** Create automated alerts when deals reach certain stages, or generate reports on pipeline health.
307
+
308
+ ---
309
+
310
+ ### Example 6: Auto-Send Welcome Email (Using Trigger)
311
+
312
+ **NEW in v0.2.0!** Automatically send a welcome email when a new contact is created.
313
+
314
+ **Workflow:**
315
+ 1. **Clientify Trigger**
316
+ - Event: `Contact Created`
317
+
318
+ 2. **Send Email**
319
+ - To: `{{$json.email}}`
320
+ - Subject: `Welcome {{$json.first_name}}!`
321
+ - Body: Welcome message
322
+
323
+ 3. **Create Task**
324
+ - Title: `Follow up with {{$json.first_name}} {{$json.last_name}}`
325
+ - Contact ID: `{{$json.contact_id}}`
326
+ - Due: 3 days from now
327
+
328
+ **Result:** When someone creates a contact "Jane Smith" in Clientify:
329
+ - Jane automatically receives welcome email
330
+ - Follow-up task is created for sales team
331
+ - All happens instantly without manual intervention
332
+
333
+ ---
334
+
335
+ ### Example 7: Deal Won Notification (Using Trigger)
336
+
337
+ **NEW in v0.2.0!** Notify your team when a deal is won.
338
+
339
+ **Workflow:**
340
+ 1. **Clientify Trigger**
341
+ - Event: `Deal Won`
342
+
343
+ 2. **Slack** (or Email)
344
+ - Message: `🎉 Deal Won! {{$json.title}} - ${{$json.value}} - {{$json.contact_name}}`
345
+ - Channel: `#sales-wins`
346
+
347
+ 3. **Clientify** (Action Node)
348
+ - Operation: `Create Task`
349
+ - Title: `Onboard {{$json.contact_name}}`
350
+ - Deal ID: `{{$json.deal_id}}`
351
+
352
+ **Result:** When a deal is marked as won:
353
+ - Team gets instant Slack notification
354
+ - Onboarding task is automatically created
355
+ - No manual steps required
356
+
357
+ ---
358
+
359
+ ## Troubleshooting
360
+
361
+ ### Node Doesn't Appear After Installation
362
+
363
+ **Problem:** The Clientify node doesn't show up in the node panel after installing.
364
+
365
+ **Solution:**
366
+ 1. **Restart n8n completely** (required for new nodes)
367
+ 2. Clear your browser cache (Ctrl+Shift+Delete or Cmd+Shift+Delete)
368
+ 3. Search for "Clientify" (not the package name) in the node search
369
+ 4. Verify installation in **Settings → Community Nodes**
370
+
371
+ ### Authentication Errors
372
+
373
+ **Problem:** "Authentication failed" or 401/403 errors.
374
+
375
+ **Solution:**
376
+ 1. Verify your JWT token is valid and not expired
377
+ 2. Check that the token has the correct permissions in Clientify
378
+ 3. Ensure you're using the Clientify MCP token (not a regular API key)
379
+ 4. Try creating a new credential with a fresh token
380
+
381
+ ### "Missing required parameter" Errors
382
+
383
+ **Problem:** Operation fails with missing parameter errors.
384
+
385
+ **Solution:**
386
+ 1. Check which fields are marked as **required** (indicated by red asterisk)
387
+ 2. Some operations require specific IDs (contact_id, company_id, etc.)
388
+ 3. Use `Get` operations first to retrieve IDs, then pass them to `Update` or `Delete` operations
389
+ 4. Review the parameter descriptions for expected format
390
+
391
+ ### Operations Return Empty Results
392
+
393
+ **Problem:** List operations return no results even though data exists.
394
+
395
+ **Solution:**
396
+ 1. Check pagination parameters (page, page_size)
397
+ 2. Verify your token has permission to access the requested resources
398
+ 3. Try without filters first to confirm data access
399
+ 4. Check the Clientify web UI to confirm data exists
400
+
401
+ ### Node Execution Fails in Docker
402
+
403
+ **Problem:** Node fails with "package not found" errors in Docker environments.
404
+
405
+ **Solution:**
406
+ 1. Ensure nodes directory is persisted in volumes:
407
+ ```yaml
408
+ volumes:
409
+ - n8n_data:/home/node/.n8n
410
+ ```
411
+ 2. Or enable auto-reinstall:
412
+ ```yaml
413
+ environment:
414
+ - N8N_REINSTALL_MISSING_PACKAGES=true
415
+ ```
416
+ 3. Restart the container after installing the node
417
+
418
+ ### Rate Limiting Errors
419
+
420
+ **Problem:** "Too many requests" or 429 errors.
421
+
422
+ **Solution:**
423
+ 1. Add delay between operations using n8n's **Wait** node
424
+ 2. Reduce the frequency of scheduled workflows
425
+ 3. Batch operations where possible
426
+ 4. Contact Clientify support to increase rate limits if needed
427
+
428
+ ## Parameter Reference
429
+
430
+ ### Common Parameters
431
+
432
+ Most operations support these common parameters:
433
+
434
+ - **page** (number): Page number for pagination (default: 1)
435
+ - **page_size** (number): Number of results per page (default: 20, max: 100)
436
+ - **sort_by** (string): Field to sort by (e.g., "created_at", "name")
437
+ - **sort_order** (string): Sort direction ("asc" or "desc")
438
+
439
+ ### ID Parameters
440
+
441
+ Operations that work with specific records require an ID parameter:
442
+
443
+ - **company_id** (number): Unique identifier for a company
444
+ - **contact_id** (number): Unique identifier for a contact
445
+ - **deal_id** (number): Unique identifier for a deal
446
+ - **task_id** (number): Unique identifier for a task
447
+
448
+ ## Advanced Usage
449
+
450
+ ### Combining Multiple Operations
451
+
452
+ Create powerful workflows by chaining operations:
453
+
454
+ ```
455
+ Trigger → Search Companies → Create Contact → Create Deal → Create Task
456
+ ```
457
+
458
+ ### Error Handling
459
+
460
+ Use n8n's built-in error handling:
461
+
462
+ 1. Enable **"Continue On Fail"** in node settings
463
+ 2. Add an **IF** node to check for errors
464
+ 3. Route errors to notification nodes (Email, Slack, etc.)
465
+
466
+ ### Data Transformation
467
+
468
+ Use n8n's **Code** or **Function** nodes to transform data between operations:
469
+
470
+ ```
471
+ List Contacts → Code Node (transform) → External API
472
+ ```
473
+
474
+ ## Development & Contribution
475
+
476
+ This is an official Clientify node. Contributions are welcome!
477
+
478
+ **Repository:** https://github.com/contacteitor/clientify_n8n
479
+
480
+ **Report Issues:** https://github.com/contacteitor/clientify_n8n/issues
481
+
482
+ **Documentation:** See the repository for full documentation
483
+
484
+ ## Support
485
+
486
+ - **Issues & Bugs:** https://github.com/contacteitor/clientify_n8n/issues
487
+ - **Email:** develop@clientify.com
488
+ - **Clientify Documentation:** https://mcp.clientify.com/docs
489
+
490
+ ## Version History
491
+
492
+ - **v0.2.0** (2025-10-02): Trigger support added
493
+ - **NEW:** Clientify Trigger node for webhook events
494
+ - 16 trigger events (contact, company, deal, task)
495
+ - Automatic workflow execution on Clientify events
496
+ - Flattened webhook payload for easy data access
497
+
498
+ - **v0.1.0** (2025-10-01): Initial release
499
+ - 26 MCP operations supported
500
+ - Dynamic field generation from MCP API
501
+ - Full CRUD operations for contacts, companies, deals, tasks
502
+ - Pipeline and user management
503
+
504
+ ## License
505
+
506
+ MIT License - see [LICENSE](LICENSE) file for details.
507
+
508
+ Copyright (c) 2025 Clientify
509
+
510
+ ---
511
+
512
+ **Made with ❤️ by Clientify**
513
+
514
+ *This is an official Clientify node. n8n is a trademark of its respective owner.*