Skip to main content
Glama
goni-b

GHL Multi-Account MCP Proxy

by goni-b
README.md
# GHL Multi-Account MCP Proxy
### חיבור כל חשבונות ה-JONSON לקלוד דרך MCP אחד

---

## מה זה עושה

במקום חיבור MCP נפרד לכל לקוח — שרת אחד שמנתב לפי שם הלקוח:

```
קלוד → [שרת זה] → JONSON של חופית וגוני
                 → JONSON של Futures Finance
                 → JONSON של לקוח 3
                 → ...
```

קלוד קורא לכלי: `ghl_create_post(client="hofit_goni", ...)` — השרת יודע לאיזה JONSON לשלוח.

---

## 🎛️ עמוד ניהול הטוקנים (מקומי)

הדרך הקלה להזין ולנהל את הטוקנים — עמוד מעוצב שרץ על המחשב שלך:

```bash
npm install
npm start
```

פתחי בדפדפן: **http://localhost:3000**

בעמוד אפשר:
- ➕ **להוסיף לקוח** — שם, מפתח (key), Private Integration Token, ו-User ID
- ✏️ **לערוך** / 🗑️ **למחוק** לקוח קיים
- ✅ **"בדיקה"** — בודק מול JONSON שהטוקן תקין ומחזיר כמה חשבונות מחוברים
- 📋 **להעתיק** את כתובת ה-MCP לחיבור בקלוד

הטוקנים נשמרים בקובץ `clients.json` (מקומי בלבד — לא נכנס ל-Git). כל לקוח שמתווסף בעמוד נראה לקלוד **אוטומטית** (אין צורך לערוך קוד).

> 🔒 **סיסמת ניהול:** אם תגדירי `ADMIN_PASSWORD` ב-`.env`, העמוד וה-API ידרשו סיסמה.
> **מומלץ מאוד להגדיר לפני פריסה חיה** כדי שהעמוד לא יהיה פתוח לכולם.

> ☁️ **בפריסה חיה (Railway):** מערכת הקבצים של Railway זמנית — לכן לפריסה יציבה הזיני את
> הטוקנים כ-**Environment Variables** (`TOKEN_HOFIT_GONI` וכו'), והם ייטענו אוטומטית לצד `clients.json`.

---

## הגדרה ראשונית — 3 שלבים

### שלב 1: קבל Token + Location ID לכל לקוח

**Token (Private Integration):**
```
JONSON → Settings → Integrations → Private Integrations
→ Create New Integration
→ שם: "Claude MCP" → סמן את כל ההרשאות
→ העתק את ה-Token (pit-xxxx...)
```

**Location ID:**
```
פתח את הסאב-אקאונט של הלקוח ב-JONSON
→ ה-URL יראה: .../location/ABC123.../...  ← ABC123 זה ה-Location ID
```
> ה-Token כבר משויך ל-Location, אז יחד הם מזהים את החשבון.
> (User ID נדרש רק לתזמון פוסטים — נטען אוטומטית, או נוסף ידנית בהגדרות מתקדמות.)

### שלב 2: פרוס ל-Railway (חינמי)

הפריסה דרך GitHub — Railway מושך את הקוד מהריפו ומריץ אוטומטית:

```
1. railway.com → Login with GitHub
2. New Project → Deploy from GitHub repo → goni-b/jonson-mcp-connector
3. Railway מזהה Node.js, מריץ npm install + npm start אוטומטית
```

**הגדר Environment Variables (לשונית Variables):**
```
ADMIN_PASSWORD = סיסמה-חזקה-לעמוד-הניהול      ← מגן על עמוד הניהול
MCP_KEY        = מחרוזת-אקראית-ארוכה-32-תווים  ← מגן על חיבור ה-MCP (חובה!)
DATA_DIR       = /data                          ← שומר clients.json על ה-Volume
```
> ⚠️ אל תגדיר `PORT` — Railway מזריק אותו לבד.

**הוסף Volume (כדי שהלקוחות יישמרו לצמיתות):**
```
Service → Settings → Volumes → New Volume
Mount path: /data
```

**צור כתובת ציבורית:**
```
Service → Settings → Networking → Generate Domain
לדוגמה: https://jonson-mcp-connector-production.up.railway.app
```

### שלב 3: הוסף לקוחות דרך עמוד הניהול

פתח בדפדפן את הכתובת מה-Railway (עמוד הניהול), הזן את `ADMIN_PASSWORD`,
והוסף כל לקוח עם המפתח, השם, ה-Token וה-Location ID. הכל נשמר ב-Volume ושורד פריסות.

### שלב 4: חבר עובדים ל-MCP

כל עובד מוסיף את ה-connector מה-Claude שלו. **חובה לכלול את מפתח הגישה:**

**ב-Claude Code (טרמינל):**
```bash
claude mcp add jonson --transport http https://[railway-url]/mcp \
  --header "Authorization: Bearer <MCP_KEY>"
```

**ב-Claude Desktop** (`claude_desktop_config.json`):
```json
{
  "mcpServers": {
    "jonson": {
      "type": "http",
      "url": "https://[railway-url]/mcp",
      "headers": { "Authorization": "Bearer <MCP_KEY>" }
    }
  }
}
```

> 🔑 תן את ה-`MCP_KEY` רק לעובדים שאתה רוצה שיהיו להם גישה. אם עובד עוזב —
> החלף את `MCP_KEY` ב-Railway ועדכן את הנותרים.

**זהו. חיבור אחד מאובטח לכל הלקוחות, לכל העובדים.**

---

## הוספת לקוח חדש

אין צורך לגעת בקוד! פשוט פתח את עמוד הניהול (הכתובת מה-Railway), הזן את הסיסמה,
ולחץ ➕ להוספת לקוח. הכלים בקלוד יתעדכנו **אוטומטית** עבור כל העובדים.

---

## כלים שקלוד מקבל

| כלי | תיאור |
|-----|-------|
| `ghl_list_clients` | רשימת כל הלקוחות המחוברים |
| `ghl_get_accounts` | חשבונות סושיאל של לקוח |
| `ghl_create_post` | תזמון Reel/Post/Story ללקוח |
| `ghl_get_posts` | פוסטים מתוזמנים של לקוח |

---

## דוגמת שימוש בקלוד

```
"תתזמן את הרילס של חופית וגוני ל-1 ביולי 19:00"

קלוד קורא:
1. ghl_get_accounts(client="hofit_goni") → מוצא accountId
2. ghl_create_post(
     client="hofit_goni",
     account_id="...",
     type="reel",
     summary="Caption...",
     media_url="https://drive.google.com/...",
     schedule_date="2026-07-01T19:00:00+03:00",
     status="scheduled"
   )
```

---

## בדיקה שהשרת עובד

```bash
# Health check
curl https://[railway-url]/

# MCP initialize (עם מפתח הגישה)
curl -X POST https://[railway-url]/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <MCP_KEY>" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'

# רשימת כלים
curl -X POST https://[railway-url]/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <MCP_KEY>" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
```

---

## אבטחה

- **`MCP_KEY`** — מפתח גישה ל-`/mcp`. בלעדיו כל אחד באינטרנט עם הכתובת יקבל גישה
  לכל לקוחות ה-GHL. **חובה להגדיר בפריסה חיה.** העובדים שולחים אותו ככותרת `Authorization: Bearer`.
- **`ADMIN_PASSWORD`** — מגן על עמוד הניהול וה-API שלו.
- הטוקנים של הלקוחות נשמרים ב-`clients.json` על ה-**Volume** (לא בקוד, לא ב-Git).
- אל תשמור `.env` או `clients.json` ב-Git — רק `.env.example`.
- אל תשתף את `MCP_KEY` או טוקנים בצ'אט. אם מפתח דלף — החלף אותו ב-Railway.

---

## מבנה הפרויקט

```
ghl-multi-proxy/
├── server.js       ← השרת הראשי + API לעמוד הניהול
├── public/
│   └── index.html  ← עמוד ניהול הטוקנים (מעוצב)
├── clients.json    ← הטוקנים שנשמרו (מקומי / Volume — לא ל-Git!)
├── package.json
├── .env            ← הגדרות מקומיות (PORT, ADMIN_PASSWORD, MCP_KEY) — לא ל-Git!
├── .env.example    ← תבנית
├── .gitignore      ← מוודא ש-.env ו-clients.json לא נשמרים ב-Git
└── README.md
```