npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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.

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.

npm version node


Sommaire


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 & MCPNouvelle 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-server

3. 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 pertinent

Le 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.js

Pour tester avec un backend local, lancer aussi :

cd ../nlccback && npm run start:dev

Voir 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-server

L'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-server

Endpoints :

  • POST /mcp — JSON-RPC requests
  • GET /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 : stdio uniquement (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.json

FAQ

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


Licence

MIT — voir LICENSE.