# 🚀 FluentCRM MCP Server

**MCP Server for FluentCRM** - manage your entire marketing automation directly from Cursor!

---

## 📋 Table of Contents

- [What is MCP Server?](#what-is-mcp-server)
- [Requirements](#requirements)
- [Installation](#installation)
- [Configuration](#configuration)
- [Usage](#usage)
- [Available Tools](#available-tools)
- [Examples](#examples)
- [Troubleshooting](#troubleshooting)

---

## What is MCP Server?

**MCP** (Model Context Protocol) is a new standard from Anthropic that allows AI models (including Claude in Cursor) to connect to external systems.

This MCP Server allows you to:

✅ **Manage tags** - create, delete, assign to contacts  
✅ **Edit lists** - create lists, add/remove contacts  
✅ **Create campaigns** - send emails to user segments  
✅ **Automations** - manage funnels (automations)  
✅ **Webhooks** - configure webhooks to FluentCRM  
✅ **Reports** - fetch statistics and metrics  
✅ **Smart Links** - manage smart links (when API becomes available)

Everything directly from Cursor, in conversation with Claude!

---

## Requirements

- ✅ Node.js 18+
- ✅ npm or yarn
- ✅ Access to FluentCRM API (your WordPress domain)
- ✅ Cursor with MCP support
- ✅ API Key from FluentCRM (generate in Settings → Rest API)

---

## Installation

### Step 1: Clone repository or copy files

```bash
cd /path/to/your/fluentcrm-mcp-server
```

### Step 2: Install dependencies

```bash
npm install
```

### Step 3: Build TypeScript

```bash
npm run build
```

You should see:
```
✅ dist/fluentcrm-mcp-server.js (compiled)
```

### Step 4: Test connection

```bash
export FLUENTCRM_API_USERNAME="your_username"
export FLUENTCRM_API_PASSWORD="your_password"
npm start
```

You should see:
```
🚀 FluentCRM MCP Server running on stdio
📡 API URL: https://your-domain.com/wp-json/fluent-crm/v2
👤 Username: your_username
```

Press `CTRL+C` to stop.

---

## Configuration

### 1. Get API Credentials from FluentCRM

Step by step:

1. Log in to WordPress: `https://your-domain.com/wp-admin`
2. Go to: **FluentCRM → Settings → Managers**
3. Click **Add New Manager**
4. Enter:
   - Name: `MCP Server` (or something else)
   - Role: `Subscriber` (sufficient)
   - Permissions: Check all FluentCRM permissions
5. Click **Save Manager**

6. Go to: **FluentCRM → Settings → Rest API**
7. Click **Create New Key**
8. Select the manager you just created
9. Click **Confirm**
10. Copy:
    - **Username** (API_USERNAME)
    - **Application Password** (API_PASSWORD)

### 2. Set environment variables

**Option A: Edit `.env` file**

```bash
# .env
FLUENTCRM_API_USERNAME=your_api_username
FLUENTCRM_API_PASSWORD=your_api_password
FLUENTCRM_API_URL=https://your-domain.com/wp-json/fluent-crm/v2
```

**Option B: Export from terminal**

```bash
export FLUENTCRM_API_USERNAME="your_api_username"
export FLUENTCRM_API_PASSWORD="your_api_password"
```

### 3. Cursor Configuration (MCP)

1. Open Cursor
2. Press `Cmd+Shift+P` (macOS) or `Ctrl+Shift+P` (Windows/Linux)
3. Search for: "MCP settings" or "Preferences: Open MCP Settings"
4. Edit configuration file:

```json
{
  "mcpServers": {
    "fluentcrm": {
      "command": "node",
      "args": [
        "/path/to/your/fluentcrm-mcp-server/dist/fluentcrm-mcp-server.js"
      ],
      "env": {
        "FLUENTCRM_API_USERNAME": "your_api_username",
        "FLUENTCRM_API_PASSWORD": "your_api_password",
        "FLUENTCRM_API_URL": "https://your-domain.com/wp-json/fluent-crm/v2"
      }
    }
  }
}
```

5. Save and restart Cursor

---

## Usage

After configuration, open chat in Cursor and start asking questions!

### Simple questions:

```
Show me all tags in FluentCRM
```

Claude will automatically use the MCP Server and return a list of tags.

---

## Available Tools

### 👤 CONTACTS (Subscribers)

- `fluentcrm_list_contacts` - Get list of contacts
- `fluentcrm_get_contact` - Get contact details
- `fluentcrm_find_contact_by_email` - Search by email
- `fluentcrm_create_contact` - Create new contact
- `fluentcrm_update_contact` - Update contact
- `fluentcrm_delete_contact` - Delete contact

### 🏷️ TAGS

- `fluentcrm_list_tags` - Get all tags
- `fluentcrm_create_tag` - Create new tag
- `fluentcrm_delete_tag` - Delete tag
- `fluentcrm_attach_tag_to_contact` - Assign tag to contact
- `fluentcrm_detach_tag_from_contact` - Remove tag from contact

### 📋 LISTS

- `fluentcrm_list_lists` - Get all lists
- `fluentcrm_create_list` - Create new list
- `fluentcrm_delete_list` - Delete list
- `fluentcrm_attach_contact_to_list` - Add contact to list
- `fluentcrm_detach_contact_from_list` - Remove contact from list

### 📧 CAMPAIGNS

- `fluentcrm_list_campaigns` - Get campaigns
- `fluentcrm_create_campaign` - Create campaign
- `fluentcrm_pause_campaign` - Pause campaign
- `fluentcrm_resume_campaign` - Resume campaign
- `fluentcrm_delete_campaign` - Delete campaign

### 📨 EMAIL TEMPLATES

- `fluentcrm_list_email_templates` - Get templates
- `fluentcrm_create_email_template` - Create template

### 🤖 AUTOMATIONS

- `fluentcrm_list_automations` - Get automations (funnels)
- `fluentcrm_create_automation` - Create automation

### 🔗 WEBHOOKS

- `fluentcrm_list_webhooks` - Get webhooks
- `fluentcrm_create_webhook` - Create webhook

### 📊 REPORTS

- `fluentcrm_dashboard_stats` - Dashboard statistics
- `fluentcrm_custom_fields` - Custom fields

---

## Examples

### Example 1: Show all tags

**In Cursor:**
```
Show me all tags in FluentCRM
```

**Claude will return:**
```
✅ Fetching tags from FluentCRM...

Found the following tags:
1. registered (ID: 1)
2. webinar-jit (ID: 2)
3. progress-75 (ID: 3)
4. participated (ID: 4)
... and 47 more
```

### Example 2: Create new tag

**In Cursor:**
```
Create tag "hot-lead" with description "People who watched 75%+ and are interested"
```

**Claude automatically:**
1. Uses `fluentcrm_create_tag` tool
2. Returns confirmation

### Example 3: Assign tag to contact

**In Cursor:**
```
Assign tag "progress-75" to contact with email "jan@example.com"
```

**Claude:**
1. Finds contact by email
2. Assigns tag
3. Returns confirmation

### Example 4: Create list

**In Cursor:**
```
Create new list "Hot-leads" with description "Participants who watched 75%+ of webinar"
```

**Claude creates the list**

### Example 5: Add contact to list

**In Cursor:**
```
Add all contacts with tag "progress-75" to list "Hot-leads"
```

---

## Troubleshooting

### ❌ Error: "Authorization failed"

**Cause**: Wrong API Username or Password

**Solution:**
1. Go to FluentCRM → Settings → Rest API
2. Check if API Key is active
3. Copy credentials again
4. Update `.env` file

### ❌ Error: "Connection refused"

**Cause**: FluentCRM API unavailable

**Solution:**
1. Check if your WordPress domain is accessible
2. Ping: `ping your-domain.com`
3. Check if WordPress is running

### ❌ MCP Server won't start

**Cause**: Missing dependencies

**Solution:**
```bash
npm install
npm run build
```

### ❌ Cursor can't see MCP Server

**Cause**: Wrong file path or missing API credentials

**Solution:**
1. Check path in MCP configuration (`~/.cursor/settings.json`)
2. Check if file `dist/fluentcrm-mcp-server.js` exists
3. Restart Cursor
4. Check logs: `cat ~/.cursor/logs.txt`

---

## API Reference

FluentCRM API Documentation: [https://rest-api.fluentcrm.com/#introduction](https://rest-api.fluentcrm.com/#introduction)

---

## Security

⚠️ **IMPORTANT:**

- ❌ **NEVER** commit `.env` with real credentials to git
- ❌ **NEVER** share API keys publicly
- ✅ Use environment variables instead of hardcoding
- ✅ Regularly rotate API keys

---

## Update

To update MCP Server:

```bash
cd fluentcrm-mcp-server
git pull  # or download latest version manually
npm install
npm run build
```

Restart Cursor.

---

## Support

If you encounter problems:

1. Check the [Troubleshooting](#troubleshooting) section
2. Check FluentCRM logs: FluentCRM → Logs
3. Check Cursor logs: `~/.cursor/logs.txt`
4. Contact support

---

## License

MIT

---

## Author

**Miłosz Zając**  
🌐 [www.netfly.pl](https://www.netfly.pl)
  
**Date**: 2025-01-20  
**Version**: 1.0.0

---

Made with ❤️ by Miłosz Zając
