Prospector Web
Interface web locale pour piloter la prospection LinkedIn via Claude AI + Airtable + Unipile.
Lancez npx prospector-web dans un dossier, ouvrez http://localhost:3001 — Claude guide le setup et gere votre pipeline de prospection en langage naturel.
Fonctionnement
Navigateur (chat-local.html)
| POST /chat (SSE)
v
server.js (Express, port 3001)
| genere .mcp.json depuis .prospector.json
| spawn: claude -p --mcp-config .mcp.json
v
Claude CLI (compte Pro de l'utilisateur)
| |
v v
Airtable API mcp-unipile-server (VPS)
(token client) |
v
Unipile API -> LinkedIn
- Claude CLI s'execute localement — c'est le compte Pro de l'utilisateur qui est facture
- Token Airtable : stocke sur la machine de l'utilisateur (
.prospector.json), jamais transmis
- Cle API Unipile : stockee sur le VPS de l'editeur, jamais visible du client
- Rien ne transite vers le navigateur
Prerequis
- Node.js >= 18 — seule installation manuelle requise
- Claude Code connecte a votre compte Claude Pro (
claude login)
- Un compte Airtable avec le template Prospector
- (Optionnel) Un compte Unipile (pour les envois LinkedIn)
Installation
Mac
brew install node
curl -fsSL https://claude.ai/install.sh | sh
claude login
mkdir ~/prospector && cd ~/prospector
npx prospector-web
Linux (Ubuntu / Debian)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
curl -fsSL https://claude.ai/install.sh | sh
claude login
mkdir ~/prospector && cd ~/prospector
npx prospector-web
Windows
curl -fsSL https://claude.ai/install.sh | sh
claude login
mkdir %USERPROFILE%\prospector
cd %USERPROFILE%\prospector
npx prospector-web
Relancer apres le premier demarrage
cd ~/prospector
npx prospector-web
Ouvrir http://localhost:3001
Premier lancement
Au premier message, Claude pose 3 questions et configure tout automatiquement.
Etape A — Token Airtable
Claude demande votre Personal Access Token Airtable.
1. Ouvrir : https://airtable.com/create/tokens
2. Cliquer "Create new token"
3. Remplir :
- Nom : Prospector Claude
- Scopes : data.records:read / write + schema.bases:read / write
- Access : "All current and future bases"
4. Cliquer "Create token"
5. Copier le token (commence par "pat...")
Il ne sera affiche qu'une seule fois.
Etape B — Base ID Airtable
Claude demande l'ID de votre base Airtable Prospector.
1. Ouvrir votre base Airtable dans le navigateur
2. L'URL ressemble a : https://airtable.com/appXXXXXXXXXXXXXX/...
3. Copier la partie "appXXXXXXXXXXXXXX"
Etape C — Compte Unipile (optionnel)
Claude demande, si vous souhaitez activer l'envoi LinkedIn :
- Unipile Account ID — identifiant de votre compte LinkedIn dans Unipile
- MCP Secret — fourni par l'administrateur Prospector
Ces 3 valeurs sont enregistrees dans .prospector.json (local, jamais committe).
Fichier de configuration .prospector.json
Cree automatiquement par Claude dans le dossier de lancement :
{
"AIRTABLE_API_KEY": "pat...",
"baseId": "appXXXXXXXXXXXXXX",
"UNIPILE_ACCOUNT_ID": "...",
"UNIPILE_MCP_SECRET": "..."
}
Securiser le fichier apres creation :
chmod 600 ~/prospector/.prospector.json
Commandes disponibles
pipeline | Vue kanban du pipeline par statut |
hot-leads | Prospects chauds a traiter en priorite |
relances | Relances a effectuer |
meeting | Gestion des rendez-vous |
quota | Quotas LinkedIn restants + etat des automatisations |
toggle | Activer / mettre en pause les automatisations |
search [nom] | Rechercher un prospect |
add-lead | Ajouter un prospect manuellement |
new-campaign | Creer une offre + campagne |
list-offers | Lister les offres |
list-campaigns | Lister les campagnes |
edit-offer | Modifier une offre existante |
edit-campaign | Modifier / piloter une campagne |
stats | Dashboard statistiques |
Toute demande hors commande est traitee via les outils Unipile (messages LinkedIn, conversations, profils...).
Depannage
| "Failed to fetch" | Serveur non demarre | npx prospector-web |
| "Claude CLI introuvable" | claude absent du PATH | curl -fsSL https://claude.ai/install.sh | sh |
| "claude login" necessaire | Pas authentifie | claude login puis relancer |
| Port 3001 deja utilise | Autre instance en cours | Fermer l'ancienne instance ou changer de port |
| Airtable ne repond pas | Token manquant ou invalide | Verifier .prospector.json |
| Unipile ne repond pas | Secret incorrect ou VPS inaccessible | Verifier UNIPILE_MCP_SECRET |
| Setup ne se declenche pas | CLAUDE.md deja present | Supprimer CLAUDE.md du dossier -> relancer |
| "Claude a quitte avec le code 1" | Erreur interne Claude | Voir logs dans le terminal |
Guide editeur
Structure des repertoires
| Contenu | Code du package npm | Config utilisateur |
| Fichiers | server.js, chat-local.html, CLAUDE.md | .prospector.json, .mcp.json |
| Dans git | oui | non (gitignored) |
Publication npm
npm login
npm publish
Mise a jour de version :
npm version patch
npm publish
Modifier le prompt systeme
Editer CLAUDE.md : il est copie dans USER_DIR au premier lancement si absent.
Pour forcer la mise a jour chez un client : supprimer CLAUDE.md de son dossier et relancer.
Deploiement du serveur MCP Unipile
Le serveur MCP Unipile est un composant separe a deployer sur votre VPS.
Voir le repository mcp_unipile_server.
Une fois deploye, l'URL du serveur est configuree dans server.js :
const unipileMcpUrl = cfg.UNIPILE_MCP_URL || 'https://mcp-unipile.deers.fr/mcp/unipile';
Modifier cette valeur avant de publier sur npm si vous changez de domaine.
Securite
AIRTABLE_API_KEY | .prospector.json (client) | Client uniquement |
UNIPILE_API_KEY | .env VPS | Serveur VPS uniquement |
UNIPILE_ACCOUNT_ID | .prospector.json (client) | Client + Unipile API |
MCP_SECRET | .env VPS + .prospector.json client | Les deux |
| Cles dans le navigateur | — | jamais |
Architecture des fichiers
prospector_web_airtable/
|-- server.js <- serveur Express + spawn claude CLI
|-- chat-local.html <- interface web (markdown, mode jour/nuit)
|-- CLAUDE.md <- prompt systeme Prospector (setup + commandes)
|-- package.json <- bin: prospector-web, files, dependances
|-- doc.md <- documentation technique complete
|-- README.md
`-- .gitignore
Generes dans USER_DIR (dossier ou le client lance la commande) :
|-- CLAUDE.md <- copie depuis le package si absent
|-- .mcp.json <- regenere a chaque requete /chat
`-- .prospector.json <- cree par Claude lors du setup initial