@lemmilink/mcp-server
v1.3.6
Published
MCP server for LemmiLink — let Claude AI search the LemmiLink catalog of 140k+ sites, build a netlinking plan, and fill the user's cart.
Maintainers
Readme
@lemmilink/mcp-server
Connectez Claude AI à votre catalogue de +140 000 sites LemmiLink. Décrivez votre site, votre budget et vos objectifs — Claude construit votre plan de netlinking et remplit votre panier.
Sommaire
- Présentation
- Installation rapide (30s)
- Variables d'environnement
- Les 31 tools
- Les 4 prompts
- Les 4 resources
- Workflow recommandé
- Sécurité & quotas
- Développement local
- Architecture
- FAQ
- Support
Présentation
LemmiLink MCP est un serveur Model Context Protocol qui expose le catalogue, le panier et les outils SEO LemmiLink à Claude AI (Desktop, Code, ou tout client MCP compatible).
Ce que Claude peut faire avec ce MCP :
- Chercher des sites pour articles invités selon thématique, métriques (TF/DA/RD/CF), trafic, budget
- Trouver des pages déjà positionnées sur des mots-clés cibles (option premium)
- Vérifier les backlinks existants vers une URL (LemmiLink + DataForSEO) pour éviter les doublons
- Suggérer un profil d'ancres optimal (variations, sémantique, synonymes, génériques) via Haloscan
- Comparer plusieurs sites côte à côte
- Calculer des packs Achat Express et NinjaLinking adaptés au budget
- Ajouter directement au panier — le client valide et paie sur lemmilink.com
Aucune donnée sensible (prix interne, emails éditeurs, owners) n'est exposée.
Installation rapide (30s)
1. Générer une clé API
Dans LemmiLink → Mon Compte → onglet API & MCP → Nouvelle clé → copier la clé lemmilink_sk_… (visible une seule fois).
2a. Claude Desktop
Éditer claude_desktop_config.json :
- macOS :
~/Library/Application Support/Claude/claude_desktop_config.json - Windows :
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"lemmilink": {
"command": "npx",
"args": ["-y", "@lemmilink/mcp-server"],
"env": {
"LEMMILINK_API_KEY": "lemmilink_sk_votre_cle"
}
}
}
}Redémarrer Claude Desktop. Le serveur lemmilink doit apparaître dans la liste des MCP connectés.
2b. Claude Code (CLI)
claude mcp add lemmilink \
-e LEMMILINK_API_KEY=lemmilink_sk_votre_cle \
-- npx -y @lemmilink/mcp-server3. Premier prompt
J'ai monsite.fr, budget 500€, je veux ranker sur "plombier paris".
Propose-moi un plan de netlinking.Claude appellera automatiquement les bons tools (vérification doublons → catalogue → ancres → panier).
Variables d'environnement
| Variable | Requis | Défaut | Description |
|---|:---:|---|---|
| LEMMILINK_API_KEY | ✅ | — | Clé API personnelle (lemmilink_sk_…). Sans elle, le serveur s'arrête au démarrage. |
| LEMMILINK_API_URL | ❌ | https://api.lemmilink.fr | URL du backend. À surcharger uniquement pour du dev local (http://localhost:3000). |
| LEMMILINK_HTTP_PORT | ❌ | — | Si défini, démarre en mode HTTP/SSE au lieu de stdio. Voir Transport HTTP. |
| LEMMILINK_LOCALE | ❌ | fr | Langue des descriptions tools (fr, en). Catalogue EN partiel. |
Voir .env.example.
Les 31 tools
Recherche & découverte
| Tool | Description | Endpoint backend |
|---|---|---|
| search_catalog | Recherche multi-critères dans 140k+ sites (catégorie, prix, TF/CF/DA/RD, trafic, mots-clés, dofollow…) avec pagination et tri. Retourne un id à conserver pour create_order. | GET /mcp/catalog/search |
| get_positioned_pages | Pages qui rankent déjà sur un mot-clé donné. Option premium à forte valeur SEO. | GET /mcp/catalog/positioned-pages |
| get_categories | Liste des catégories/sous-catégories avec compteur de sites (cache 1h). | GET /mcp/catalog/categories |
| get_site_details | Fiche complète d'un site : métriques, config éditoriale, pages positionnées, lien homepage. | GET /mcp/catalog/site/:id |
| get_promos | Sites en promotion (-5% à -80%). | GET /mcp/catalog/promos |
| compare_sites | Compare 2 à 5 sites côte à côte (best TF/DA/trafic, le moins cher). | GET /mcp/catalog/compare?ids=… |
Analyse & stratégie
| Tool | Description | Endpoint backend |
|---|---|---|
| check_existing_backlinks | À appeler en premier. Combine commandes LemmiLink + referring domains externes (DataForSEO). Retourne allDomainsToExclude. | GET /mcp/catalog/check-backlinks |
| suggest_anchors | Profil d'ancres : variations, sémantique, synonymes, génériques + recommandation de répartition. Source : Haloscan. | GET /mcp/catalog/suggest-anchors |
Commandes & panier
| Tool | Description | Endpoint backend |
|---|---|---|
| create_order | Ajoute un article invité (ou lien positionné) au panier. Prix auto-calculé. La rédaction est attribuée selon la config du site (LemmiLink ou éditeur). | POST /mcp/orders/create |
| create_orderpack_order | Ajoute un pack Achat Express au panier (Starter / Standard / Prenium). | POST /mcp/orders/create-pack |
| create_ninjalinking_order | Ajoute un pack NinjaLinking forums au panier (Unit, 10, 20, 30, 50, 150). | POST /mcp/orders/create-pack |
| get_mcp_cart | Récupère le panier MCP complet (annonceur + parc) avec total et breakdown par type. À appeler avant de proposer de nouvelles commandes. | GET /mcp/orders/cart |
| remove_from_mcp_cart | Supprime une commande en attente du panier. | POST /mcp/orders/cart/remove |
| get_orderpacks | Packs Achat Express : Starter (4€/lien), Standard (12.50€), Premium (25€) + abonnement 20 liens/mois. Simulation prix selon budget. | GET /mcp/catalog/orderpacks |
| get_ninjalinking_options | NinjaLinking forums : 6 formules (1 → 150 liens), prix dégressif (10€ à 20€/lien). | GET /mcp/catalog/ninjalinking |
Suivi & compte
| Tool | Description | Endpoint backend |
|---|---|---|
| track_orders | 20 dernières commandes (tous types) avec statut, livrés, résumé global. | GET /mcp/orders/track |
| get_order_history | Historique complet paginé. | GET /mcp/orders/history |
| get_wallet_balance | Solde wallet (utilisable, en attente, crédit cadeau). | GET /mcp/account/wallet |
Stratégie SEO avancée
| Tool | Description | Endpoint backend |
|---|---|---|
| estimate_backlinks_needed | Estimation chiffrée du nombre de backlinks pour ranker. ⚠️ Consomme 1 crédit estimation client. | POST /mcp/seo/estimate-backlinks |
| find_competitors | Domaines qui rankent dans le top SERP pour un mot-clé (Haloscan). | GET /mcp/seo/competitors |
| get_anchor_distribution | Répartition des ancres existantes vers une URL (détection sur-optimisation). | GET /mcp/seo/anchor-distribution |
| suggest_money_pages | Pages du domaine à booster en priorité (position 5-15 + trafic existant). | GET /mcp/seo/money-pages |
| generate_brief | Brief éditorial structuré, à passer dans create_order. | POST /mcp/seo/generate-brief |
Suivi avancé & santé
| Tool | Description | Endpoint backend |
|---|---|---|
| get_recent_deliveries | Backlinks livrés sur les 7/14/30/90 derniers jours avec statut indexation. | GET /mcp/orders/recent-deliveries |
| check_link_health | Vérifie qu'un backlink est vivant et indexé (statuts : indexed / live_not_indexed / broken). | GET /mcp/orders/link-health |
| get_pending_orders_eta | ETA estimée des commandes payées en attente de livraison. | GET /mcp/orders/pending-eta |
Compte & paiement
| Tool | Description | Endpoint backend |
|---|---|---|
| top_up_wallet | Génère un lien Stripe pour recharger le wallet (5€-5000€). | POST /mcp/account/top-up |
| get_subscription_status | État de l'abonnement Premium (20 liens/mois). | GET /mcp/account/subscription |
| apply_promo_code | Valide un code promo + retourne la réduction. | POST /mcp/orders/apply-promo |
Campagnes (game-changers)
| Tool | Description | Endpoint backend |
|---|---|---|
| schedule_campaign | Planifie N commandes étalées dans le temps avec rotation automatique des ancres. Le killer feature pour les stratégies long terme. | POST /mcp/campaigns/schedule |
| clone_strategy | Clone une stratégie passée (sites, ancres, mots-clés) vers un nouveau target. | POST /mcp/campaigns/clone |
Les 4 prompts
Templates accessibles via /lemmilink:plan-netlinking ou /lemmilink:audit-catalogue (ou via le menu de Claude Desktop).
| Prompt | Arguments | Ce qu'il fait |
|---|---|---|
| plan-netlinking | siteUrl, budget, objectives? | Génère un plan complet : check doublons → catégorie → catalogue → pages positionnées → NinjaLinking → Achat Express, le tout sous budget. |
| audit-catalogue | thematic | Explore le catalogue pour une thématique donnée et produit un rapport (volumes, fourchettes prix, top sites, promos). |
| local-seo-plan | siteUrl, ville, metier, budget | Plan spécialisé SEO local (NinjaLinking forums + ancres ville + sites régionaux). |
| monthly-recurring-strategy | siteUrl, monthlyBudget, durationMonths, mainKeywords | Roadmap N mois avec budget mensuel récurrent et phases (foundational → autorité). |
Les 4 resources
Accessibles via lemmilink://… :
| URI | Type | Contenu |
|---|---|---|
| lemmilink://pricing/guide | text/plain | Guide tarifaire complet (articles invités, pages positionnées, OrderPacks, NinjaLinking). |
| lemmilink://account/info | application/json | Infos compte courantes (wallet, prénom, nb sites actifs). |
| lemmilink://templates/briefs | text/plain | 5 templates de briefs éditoriaux (générique, guide, comparatif, local, actualité). |
| lemmilink://glossary/seo | text/plain | Glossaire SEO complet (TF/CF/RD/DA, types d'ancres, types de produits LemmiLink). |
Workflow recommandé
Quand un client demande des backlinks, Claude doit suivre cet ordre :
1. get_mcp_cart() → voir ce qui est déjà dans le panier (éviter doublons)
2. check_existing_backlinks(url) → exclure les domaines déjà couverts
3. get_categories() → identifier la bonne catégorie
4. search_catalog(...) → trouver des sites (CONSERVER les IDs)
5. suggest_anchors(keyword) → générer le profil d'ancres
6. compare_sites([id1, id2, ...]) → si hésitation
7. create_order(...) × N → un article invité par site sélectionné
8. create_orderpack_order(...) → ajouter un pack Achat Express si pertinent
9. create_ninjalinking_order(...) → ajouter un pack NinjaLinking si pertinentLe client va ensuite sur https://app.lemmilink.com pour valider et payer son panier.
Sécurité & quotas
| Mesure | Détail |
|---|---|
| Auth | Clé API personnelle bcrypt-hashée. Header X-LemmiLink-Api-Key. Préfixe indexé pour validation rapide. |
| Burst limit | 20 requêtes / 10 secondes par clé (≈ 120 req/min — largement suffisant pour Claude). |
| Quota journalier | 500 requêtes / jour / clé. |
| Max clés actives | 3 par utilisateur. Révoquer pour en créer une nouvelle. |
| Données protégées | Prix internes, emails, owners, configs sensibles jamais exposés. |
| Ownership | Chaque clé ne voit que ses propres données (commandes, wallet, backlinks). |
En cas d'abus, la clé peut être révoquée à tout moment depuis Mon Compte → API & MCP.
Développement local
# Cloner & installer
cd mcp-server
npm install
# Mode dev (tsx, recharge à chaque modif)
LEMMILINK_API_KEY=lemmilink_sk_xxx \
LEMMILINK_API_URL=http://localhost:3000 \
npm run dev
# Build
npm run build # tsc → dist/
npm start # node dist/index.jsPour tester avec un backend local, lancer aussi :
cd ../nlccback && npm run start:devVoir test-mcp-local.sh à la racine du repo pour un script qui valide les 16 endpoints /mcp/*.
Inspecter le serveur MCP
npx @modelcontextprotocol/inspector npx -y @lemmilink/mcp-serverL'inspector ouvre une interface web pour explorer tools, prompts et resources.
Transport HTTP (opt-in)
Par défaut le serveur tourne en stdio (compatible Claude Desktop / Claude Code / MCP Inspector).
Pour exposer le MCP via HTTP/SSE (intégration Cursor, Continue, apps web) :
LEMMILINK_API_KEY=lemmilink_sk_xxx \
LEMMILINK_HTTP_PORT=3000 \
npx -y @lemmilink/mcp-serverEndpoints :
POST /mcp— JSON-RPC requestsGET /mcp— SSE stream (notifications serveur)GET /health— healthcheck
⚠️ Le serveur HTTP partage un seul transport entre tous les clients (mode stateful single-session). Pour du multi-utilisateurs, déployer une instance par utilisateur ou patcher pour gérer les sessions.
Architecture
┌────────────────┐ stdio (JSON-RPC 2.0) ┌────────────────────┐
│ Claude │ ◄──────────────────────► │ MCP Server │
│ (Desktop/CLI) │ │ @lemmilink/ │
│ │ │ mcp-server │
└────────────────┘ └─────────┬──────────┘
│ HTTPS
│ X-LemmiLink-Api-Key
┌─────────▼──────────┐
│ api.lemmilink.fr │
│ (NestJS) │
│ Module MCP API │
│ /mcp/* │
└─────────┬──────────┘
│
┌─────────▼──────────┐
│ MongoDB │
└────────────────────┘- Transport :
stdiouniquement (compatible Claude Desktop, Claude Code, MCP Inspector). - Pas de connexion DB directe — toute la logique métier reste côté backend.
- Sources externes côté backend : Haloscan (suggest_anchors), DataForSEO (referring domains).
Arborescence du package
mcp-server/
├── src/
│ ├── index.ts — Bootstrap (vérification de la clé puis stdio)
│ ├── api-client.ts — Wrapper axios → /mcp/*
│ ├── tools/index.ts — Définition des 14 tools (Zod schemas)
│ ├── prompts/index.ts — 2 prompts MCP
│ └── resources/index.ts— 2 resources MCP
├── package.json
└── tsconfig.jsonFAQ
Le serveur démarre puis quitte avec "Clé API invalide ou révoquée" → Vérifier que la clé n'a pas été révoquée depuis Mon Compte. Re-générer une clé si besoin.
"Trop de requêtes. Max 20 par 10s" → Pause de quelques secondes avant la prochaine requête. La limite est par fenêtre glissante.
"Quota journalier atteint (500 requêtes/jour)" → Reset à minuit (heure serveur). Pour augmenter, contacter le support.
Les ancres suggérées sont vides (variations: [])
→ Le service Haloscan peut être temporairement indisponible. Le tool retourne un fallback avec ancres génériques + recommandation textuelle.
Comment Claude voit-il l'API key ?
→ Elle est passée à npx via la section env de la config MCP. Elle n'est jamais envoyée à Claude — elle reste dans le process Node du MCP server et n'est utilisée que pour les requêtes HTTPS vers le backend.
Compatibilité OS / Node ? → Linux, macOS, Windows. Node ≥ 18 requis.
Support
- Catalogue : https://app.lemmilink.com
- Générer une clé API : Mon Compte → API & MCP
- Achat Express : https://app.lemmilink.com/LinkOrderParc
- NinjaLinking : https://app.lemmilink.com/NinjaLinking
- Email :
[email protected]
Licence
MIT — voir LICENSE.
