Skip to main content
Glama
yunyminaya

perfex-crm-mcp

by yunyminaya
README.md
# perfex-crm-mcp

Servidor **MCP (Model Context Protocol)** que conecta **cualquier IA** con tu **Perfex CRM** — sin API keys, usando los endpoints públicos de Perfex (`/forms/wtl`, `/forms/ticket`, `/forms/quote`).

## 🧠 ¿Qué inteligencias conecta?

| IA | Cómo se conecta |
|---|---|
| **Claude** (Desktop / Claude Code) | `claude mcp add` |
| **Codex** (OpenAI CLI) | `codex mcp add` |
| **Hermes Agent** (Nous Research) | configuración MCP del agente |
| **Paperclip** | adapter MCP / claude_local con MCP config |

Todas usan el mismo protocolo estándar MCP → una sola integración, cuatro inteligencias.

## 🔧 Herramientas expuestas

### Sin API key (endpoints públicos)
| Herramienta | Qué hace | Endpoint Perfex |
|---|---|---|
| `create_lead` | Crea un lead (cliente potencial) | `POST /forms/wtl/{key}` |
| `create_ticket` | Crea un ticket de soporte | `POST /forms/ticket` |
| `request_quote` | Solicita un presupuesto | `POST /forms/quote/{key}` |
| `perfex_health` | Comprueba que el CRM responde | `GET /` |

### Con API REST completa (PERFEX_API_KEY o PERFEX_MCP_TOKEN)
| Herramienta | Qué hace |
|---|---|
| `list_leads` | Lista leads (filtro por nombre/email/empresa) |
| `create_lead_api` | Crea lead con todos los campos (estado, responsable, fuente...) |
| `list_clients` | Lista clientes |
| `create_client` | Crea cliente + contacto primario |
| `list_invoices` | Lista facturas (filtro por estado) |
| `list_payments` | Lista pagos |
| `list_projects` | Lista proyectos |
| `list_tasks` | Lista tareas |
| `create_task` | Crea tarea (en proyecto opcional) |
| `crm_stats` | Estadísticas: leads, clientes, facturas, pagos, proyectos, tareas |

## 📦 Instalación

```bash
git clone https://github.com/yunyminaya/perfex-crm-mcp.git
cd perfex-crm-mcp
npm install
npm run build
```

## ⚙️ Configuración (env vars)

| Variable | Obligatoria | Descripción |
|---|---|---|
| `PERFEX_URL` | ✅ | Base del CRM, ej: `https://crm.example.com` |
| `PERFEX_FORM_KEY` | para leads | Key del formulario web-to-lead (`forms/wtl/{key}`) |
| `PERFEX_QUOTE_KEY` | para quotes | Key del formulario de presupuestos |
| `PERFEX_API_KEY` | para API completa | API key del **módulo REST oficial** (CodeCanyon #25278359) |
| `PERFEX_MCP_TOKEN` | para API completa | Token del **Mcp_api.php casero** (perfex-module/, gratis) |
| `PERFEX_LEAD_SOURCE` | no | Fuente por defecto de leads (default `MCP`) |
| `PERFEX_TICKET_DEPARTMENT` | no | Departamento por defecto para tickets |
| `PERFEX_TICKET_PRIORITY` | no | Prioridad por defecto para tickets |
| `PERFEX_TIMEOUT_MS` | no | Timeout (default 15000) |

**Dos formas de activar la API REST completa** (elige una):
1. **Módulo oficial de CodeCanyon** (`REST API for Perfex CRM`, #25278359) → genera API key en Perfex admin → API → define `PERFEX_API_KEY`. Da las 181 operaciones del módulo.
2. **Mcp_api.php incluido** (gratis) → copia `perfex-module/Mcp_api.php` a `application/controllers/`, define `MCP_API_TOKEN` en `app-config.php`, y usa `PERFEX_MCP_TOKEN`. Cubre leads, clientes, facturas, pagos, proyectos, tareas y stats.

**Cómo conseguir PERFEX_FORM_KEY:** Perfex admin → **Leads → Web Forms** → crear formulario → copiar la key (último segmento de la URL `forms/wtl/{key}`).

## 🔌 Conectar cada IA

### Claude Desktop
```json
// claude_desktop_config.json
{
  "mcpServers": {
    "perfex-crm": {
      "command": "node",
      "args": ["/ruta/a/perfex-crm-mcp/dist/index.js"],
      "env": {
        "PERFEX_URL": "https://crm.example.com",
        "PERFEX_FORM_KEY": "tu-key"
      }
    }
  }
}
```

### Claude Code (CLI)
```bash
claude mcp add perfex-crm -- node /ruta/a/perfex-crm-mcp/dist/index.js
# o con env:
claude mcp add perfex-crm --env PERFEX_URL=https://crm.example.com --env PERFEX_FORM_KEY=tu-key -- node /ruta/a/perfex-crm-mcp/dist/index.js
```

### Codex (OpenAI CLI)
```bash
codex mcp add perfex-crm -- node /ruta/a/perfex-crm-mcp/dist/index.js
```

### Hermes Agent
Añade el servidor en la config MCP de Hermes (`~/.hermes/config.yaml` o el gestor de MCP del agente):
```yaml
mcp:
  servers:
    perfex-crm:
      command: node
      args: ["/ruta/a/perfex-crm-mcp/dist/index.js"]
      env:
        PERFEX_URL: "https://crm.example.com"
        PERFEX_FORM_KEY: "tu-key"
```

### Paperclip
Configura el servidor MCP en el adapter del agente (adapterConfig → mcpServers), igual que Claude Code — los agentes Paperclip que usan `claude_local` heredan los MCP configurados.

## 🚀 Uso

Tras conectar, cualquiera de las IAs puede hacer:

```
"Crear un lead en el CRM: Juan Pérez, juan@empresa.com, tel 555-1234, interesado en facturación"
→ create_lead { name: "Juan Pérez", email: "juan@empresa.com", ... }

"Crear un ticket: María no recibe los emails de factura"
→ create_ticket { name: "María", email: "...", subject: "...", message: "..." }

"¿El CRM está accesible?"
→ perfex_health
```

## ⚠️ Notas

- **Sin API keys**: usa los endpoints públicos de Perfex (Web-to-Lead / tickets). Si el formulario tiene **reCAPTCHA activado**, las IAs no podrán crearlo — desactívalo en el formulario.
- **Content-Type**: los endpoints exigen `application/x-www-form-urlencoded` (no JSON).
- **Tickets**: exigen header `X-Requested-With: XMLHttpRequest` (ya lo envía el servidor).
- **422 = campos requeridos faltantes**: revisa qué campos marca el formulario como obligatorios.

## 📁 Estructura

```
perfex-crm-mcp/
├── src/
│   ├── index.ts          # Servidor MCP (herramientas)
│   └── perfex-client.ts  # Cliente de endpoints públicos de Perfex
├── package.json
├── tsconfig.json
└── README.md
```

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct resource and action: lead creation, ticket creation, quote request, and health check. There is no overlap or ambiguity between them.

Naming Consistency3/5

Two tools follow a 'create_<entity>' pattern, but 'request_quote' uses a different verb and 'perfex_health' is not verb-first. The naming is readable but not fully consistent.

Tool Count5/5

Four tools is well within the ideal range for a focused CRM integration covering public form submissions and a health check. Each tool has a clear purpose and none are redundant.

Completeness4/5

The tool surface covers the main public-facing actions (lead, ticket, quote) and a health check. Minor gaps exist (e.g., no contact creation or read operations), but the scope of public forms is well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues