Blog / AI
AI

Web Scraping avec les serveurs MCP : Un guide pas à pas

Créez un serveur MCP pour extraire des données à la demande, vous connecter à des outils de développement et intégrer Bright Data pour obtenir des données web en temps réel prêtes pour l’IA.
16 min de lecture
Web Scraping With an MCP Server blog image

Dans ce guide, nous allons construire un serveur MCP local en Python pour récupérer les données des produits Amazon à la demande. Vous apprendrez les principes fondamentaux de MCP, comment écrire et exécuter votre propre serveur, et comment le connecter à des outils de développement tels que Claude Desktop et Cursor IDE. Nous terminerons par une intégration réelle de Bright Data MCP pour des données web en temps réel et prêtes pour l’IA.

Plongeons dans le vif du sujet.

Le goulot d’étranglement : Pourquoi les LLM ont du mal à interagir avec le monde réel (et comment le MCP y remédie)

Les grands modèles de langage (LLM) sont incroyablement puissants pour traiter et générer du texte à partir d’énormes ensembles de données d’apprentissage. Mais ils présentent une limitation majeure : ils ne peuvent pas interagir de manière native avec le monde réel. Cela signifie qu’ils n’ont pas accès aux fichiers locaux, qu’ils ne peuvent pas exécuter de scripts personnalisés et qu’ils ne peuvent pas récupérer de données en direct sur le web.

Prenons un exemple simple : demandez à Claude d’extraire les détails d’un produit à partir d’une page Amazon, et il n’y parviendra pas. Pourquoi ? Parce qu’il n’a pas la capacité intégrée de naviguer sur le web ou de déclencher des actions externes.

claude-sans-mcp

Sans outils externes, les LLM ne peuvent pas effectuer des tâches pratiques qui reposent sur des données en temps réel ou sur l’intégration avec des systèmes externes.

C’est là qu’intervient le protocole de contexte de modèle (MCP) d’Anthropic. Il permet aux LLM de communiquer avec des outils externes (scrapers, API ou scripts) de manière sécurisée et standardisée.

Voici la différence en action. Après avoir intégré un serveur MCP personnalisé, nous avons pu extraire des données structurées sur les produits Amazon directement via Claude :

claude-amazon-product-data-extraction-results

Ne vous préoccupez pas encore de la manière dont cela fonctionne : nous vous expliquerons tout pas à pas plus loin dans ce guide.

Pourquoi le programme MCP est-il important ?

  • Normalisation : MCP a fourni une interface normalisée pour les systèmes basés sur le LLM afin de se connecter à des outils et des données externes, de la même manière que les API ont normalisé les intégrations web. Cela réduit considérablement le besoin d’intégrations personnalisées et accélère le développement.
  • Flexibilité et évolutivité : Les développeurs peuvent changer de LLM ou de plateforme d’hébergement sans avoir à réécrire les intégrations d’outils. MCP prend en charge plusieurs transports de communication (tels que stdio), ce qui lui permet de s’adapter à différentes configurations.
  • Amélioration des capacités des gestionnaires de l’apprentissage tout au long de la vie : En connectant les LLM à des données en temps réel et à des outils externes, le MCP leur permet d’aller au-delà des réponses statiques. Ils peuvent désormais renvoyer des informations actuelles et pertinentes et déclencher des actions réelles basées sur le contexte.

Analogie: Considérez le MCP comme une interface USB pour les LLM. Tout comme l’USB permet à différents appareils (claviers, imprimantes, disques externes) de se brancher sur n’importe quelle machine compatible sans avoir besoin de pilotes spéciaux, le MCP permet aux LLM de se connecter à une large gamme d’outils à l’aide d’un protocole standardisé, sans qu’il soit nécessaire de procéder à une intégration personnalisée à chaque fois.

Qu’est-ce que le protocole de contexte de modèle (MCP) ?

Model Context Protocol (MCP) est une norme ouverte développée par Anthropic qui permet aux grands modèles de langage (LLM) d’interagir avec des outils externes, des API et des sources de données de manière cohérente et sécurisée. Il agit comme un connecteur universel, permettant aux LLM d’effectuer des tâches réelles telles que le scraping de sites web, l’interrogation de bases de données ou le déclenchement de scripts.

Si Anthropic l’a introduit, MCP est ouvert et extensible, ce qui signifie que tout le monde peut mettre en œuvre la norme ou y contribuer. Si vous avez travaillé avec Retrieval-Augmented Generation (RAG), vous comprendrez le concept. MCP s’appuie sur cette idée en normalisant les interactions au moyen d’une interface JSON-RPC légère afin que les modèles puissent accéder aux données en temps réel et prendre des mesures.

Architecture MCP : Comment ça marche

À la base, MCP normalise la communication entre un modèle d’IA et les capacités externes.

Idée maîtresse : Une interface normalisée (généralement JSON-RPC 2.0 sur des transports tels que stdio) permet à un LLM (via un client) de découvrir et d’invoquer des outils exposés par des serveurs externes.

MCP fonctionne selon une architecture client-serveur avec trois composants clés :

  1. MCP Host: L’environnement ou l’application qui initie et gère les interactions entre le LLM et les outils externes. Il s’agit par exemple d’assistants d’intelligence artificielle tels que Claude Desktop ou d’IDE tels que Cursor.
  2. Client MCP: Composant de l’hôte qui établit et maintient les connexions avec les serveurs MCP, en traitant les protocoles de communication et en gérant l’échange de données.
  3. Serveur MCP : Un programme (que nous créons en tant que développeurs) qui met en œuvre le protocole MCP et expose un ensemble spécifique de capacités. Un serveur MCP peut s’interfacer avec une base de données, un service web ou, dans notre cas, un site web (Amazon). Les serveurs exposent leurs fonctionnalités de manière standardisée
    :Polylang placeholder do not modify

Voici le schéma de l’architecture MCP :

mcp-architecture-diagramme-hôte-client-serveur-connexions

Source de l’image : Modèle de protocole contextuel

Dans cette configuration, l’hôte (Claude Desktop ou Cursor IDE) génère un client MCP, qui se connecte ensuite à un serveur MCP externe. Ce serveur expose des outils, des ressources et des invites, permettant à l’IA d’interagir avec eux selon ses besoins.

En bref, le flux de travail fonctionne comme suit :

  • L’utilisateur envoie un message du type “Récupérer les informations sur le produit à partir de ce lien Amazon”.
  • Le client MCP recherche un outil enregistré capable de prendre en charge cette tâche
  • Le client envoie une demande structurée au serveur MCP
  • Le serveur MCP exécute l’action appropriée (par exemple, lancement d’un navigateur sans tête).
  • Le serveur renvoie des résultats structurés au client MCP
  • Le client transmet les résultats au LLM, qui les présente à l’utilisateur.

Création d’un serveur MCP personnalisé

Construisons un serveur Python MCP pour récupérer les pages produits d’Amazon.

amazon-product-page-exemple

Ce serveur exposera deux outils : l’un pour télécharger du HTML et l’autre pour extraire des informations structurées. Vous interagirez avec le serveur via un client LLM dans Cursor ou Claude Desktop.

Étape 1 : Mise en place de l’environnement

Tout d’abord, assurez-vous que Python 3 est installé. Ensuite, créez et activez un environnement virtuel :

python -m venv mcp-amazon-scraper
# On macOS/Linux:
source mcp-amazon-scraper/bin/activate
# On Windows:
.\mcp-amazon-scraper\Scripts\activate

Installez les bibliothèques requises : MCP Python SDK, Playwright et LXML.

pip install mcp playwright lxml
# Install browser binaries for Playwright
python -m playwright install

Il s’agit d’une installation :

  • mcp: SDK Python pour les serveurs et clients Model Context Protocol qui gère tous les détails de la communication JSON-RPC
  • playwright: Bibliothèque d’automatisation de navigateur qui fournit des capacités de navigateur sans tête pour le rendu et le scraping de sites web à fort contenu JavaScript.
  • lxml: Bibliothèque d’analyse XML/HTML rapide qui facilite l’extraction d’éléments de données spécifiques à partir de pages web à l’aide de requêtes XPath.

En bref, le MCP Python SDK(mcp) gère tous les détails du protocole, vous permettant d’exposer des outils que Claude ou Cursor peuvent appeler via des invites en langage naturel. Playwright nous permet de rendre des pages web complètement (y compris le contenu JavaScript), et lxml nous donne de puissantes capacités d’analyse HTML.

Étape 2 : Initialisation du serveur MCP

Créez un fichier Python nommé amazon_scraper_mcp.py. Commencez par importer les modules nécessaires et initialiser le serveur FastMCP:

import os
import asyncio
from lxml import html as lxml_html
from mcp.server.fastmcp import FastMCP
from playwright.async_api import async_playwright

# Define a temporary file path for the HTML content
HTML_FILE = os.path.join(os.getenv("TMPDIR", "/tmp"), "amazon_product_page.html")

# Initialize the MCP server with a descriptive name
mcp = FastMCP("Amazon Product Scraper")

print("MCP Server Initialized: Amazon Product Scraper")

Cela crée une instance du serveur MCP. Nous allons maintenant y ajouter des outils.

Étape 3 : Mise en œuvre de l’outil fetch_page

Cet outil prend une URL en entrée, utilise Playwright pour naviguer jusqu’à la page, attend que le contenu se charge, télécharge le code HTML et l’enregistre dans notre fichier temporaire.

@mcp.tool()
async def fetch_page(url: str) -> str:
    """
    Fetches the HTML content of the given Amazon product URL using Playwright
    and saves it to a temporary file. Returns a status message.
    """
    print(f"Executing fetch_page for URL: {url}")
    try:
        async with async_playwright() as p:
            # Launch headless Chromium browser
            browser = await p.chromium.launch(headless=True)
            page = await browser.new_page()
            # Navigate to the URL with a generous timeout
            await page.goto(url, timeout=90000, wait_until="domcontentloaded")
            # Wait for a key element (e.g., body) to ensure basic loading
            await page.wait_for_selector("body", timeout=30000)
            # Add a small delay for any dynamic content rendering via JavaScript
            await asyncio.sleep(5)

            html_content = await page.content()
            with open(HTML_FILE, "w", encoding="utf-8") as f:
                f.write(html_content)

            await browser.close()
            print(f"Successfully fetched and saved HTML to {HTML_FILE}")
            return f"HTML content for {url} downloaded and saved successfully to {HTML_FILE}."
    except Exception as e:
        error_message = f"Error fetching page {url}: {str(e)}"
        print(error_message)
        return error_message

Cette fonction asynchrone utilise Playwright pour gérer le rendu JavaScript potentiel sur les pages Amazon. Le décorateur @mcp.tool() enregistre cette fonction en tant qu’outil appelable au sein de notre serveur.

Étape 4 : Mise en œuvre de l’outil extract_info

Cet outil lit le fichier HTML enregistré par fetch_page, l’analyse à l’aide des sélecteurs LXML et XPath et renvoie un dictionnaire contenant les informations extraites sur le produit.

def _extract_xpath(tree, xpath, default="N/A"):
    """Helper function to extract text using XPath, returning default if not found."""
    try:
        # Use text_content() to get text from node and children, strip whitespace
        result = tree.xpath(xpath)
        if result:
            return result[0].text_content().strip()
        return default
    except Exception:
        return default

def _extract_price(price_str):
    """Helper function to parse price string into a float."""
    if price_str == "N/A":
        return None
    try:
        # Remove currency symbols and commas, handle potential whitespace
        cleaned_price = "".join(filter(str.isdigit or str.__eq__("."), price_str))
        return float(cleaned_price)
    except (ValueError, TypeError):
        return None

@mcp.tool()
def extract_info() -> dict:
    """
    Parses the saved HTML file (downloaded by fetch_page) to extract
    Amazon product details like title, price, rating, features, etc.
    Returns a dictionary of the extracted data.
    """
    print(f"Executing extract_info from file: {HTML_FILE}")
    if not os.path.exists(HTML_FILE):
        return {
            "error": f"HTML file not found at {HTML_FILE}. Please run fetch_page first."
        }

    try:
        with open(HTML_FILE, "r", encoding="utf-8") as f:
            page_html = f.read()

        tree = lxml_html.fromstring(page_html)

        # --- XPath Selectors for Amazon Product Details ---
        title = _extract_xpath(tree, '//span[@id="productTitle"]')
        # Handle different price structures (main price, sale price)
        price_whole = _extract_xpath(tree, '//span[contains(@class, "a-price-whole")]')
        price_fraction = _extract_xpath(
            tree, '//span[contains(@class, "a-price-fraction")]'
        )
        price_str = (
            f"{price_whole}.{price_fraction}"
            if price_whole != "N/A"
            else _extract_xpath(tree, '//span[contains(@class,"a-offscreen")]')
        )  # Fallback to offscreen if needed

        price = _extract_price(price_str)

        # Original price (strike-through)
        original_price_str = _extract_xpath(
            tree, '//span[@class="a-price a-text-price"]//span[@class="a-offscreen"]'
        )
        original_price = _extract_price(original_price_str)

        # Rating
        rating_text = _extract_xpath(tree, '//span[@id="acrPopover"]/@title')
        rating = None
        if rating_text != "N/A":
            try:
                rating = float(rating_text.split()[0])
            except (ValueError, IndexError):
                rating = None

        # Review Count
        reviews_text = _extract_xpath(tree, '//span[@id="acrCustomerReviewText"]')
        review_count = None
        if reviews_text != "N/A":
            try:
                review_count = int(reviews_text.split()[0].replace(",", ""))
            except (ValueError, IndexError):
                review_count = None

        # Availability
        availability = _extract_xpath(
            tree,
            '//div[@id="availability"]//span/text()',
        )

        # Features (bullet points)
        feature_elements = tree.xpath(
            '//div[@id="feature-bullets"]//li//span[@class="a-list-item"]'
        )
        features = [
            elem.text_content().strip()
            for elem in feature_elements
            if elem.text_content().strip()
        ]

        # Calculate Discount
        discount = None
        if price and original_price and original_price > price:
            discount = round(((original_price - price) / original_price) * 100)

        extracted_data = {
            "title": title,
            "price": price,
            "original_price": original_price,
            "discount_percent": discount,
            "rating_stars": rating,
            "review_count": review_count,
            "features": features,
            "availability": availability.strip(),
        }
        print(f"Successfully extracted data: {extracted_data}")
        return extracted_data

    except Exception as e:
        error_message = f"Error parsing HTML: {str(e)}"
        print(error_message)  # Added for logging
        return {"error": error_message}

Cette fonction utilise la fonction fromstring de LXML pour analyser le code HTML et des sélecteurs XPath robustes pour trouver les éléments souhaités.

Étape 5 : Exécuter le serveur

Enfin, ajoutez les lignes suivantes à la fin de votre script amazon_scraper_mcp.py pour démarrer le serveur en utilisant le mécanisme de transport stdio, qui est standard pour les serveurs MCP locaux communiquant avec des clients tels que Claude Desktop ou Cursor.

if __name__ == "__main__":
    print("Starting MCP Server with stdio transport...")
    # Run the server, listening via standard input/output
    mcp.run(transport="stdio")

Code complet(amazon_scraper_mcp.py)

import os
import asyncio
from lxml import html as lxml_html
from mcp.server.fastmcp import FastMCP
from playwright.async_api import async_playwright

# Define a temporary file path for the HTML content
HTML_FILE = os.path.join(os.getenv("TMPDIR", "/tmp"), "amazon_product_page.html")

# Initialize the MCP server with a descriptive name
mcp = FastMCP("Amazon Product Scraper")

print("MCP Server Initialized: Amazon Product Scraper")

@mcp.tool()
async def fetch_page(url: str) -> str:
    """
    Fetches the HTML content of the given Amazon product URL using Playwright
    and saves it to a temporary file. Returns a status message.
    """
    print(f"Executing fetch_page for URL: {url}")
    try:
        async with async_playwright() as p:
            # Launch headless Chromium browser
            browser = await p.chromium.launch(headless=True)
            page = await browser.new_page()
            # Navigate to the URL with a generous timeout
            await page.goto(url, timeout=90000, wait_until="domcontentloaded")
            # Wait for a key element (e.g., body) to ensure basic loading
            await page.wait_for_selector("body", timeout=30000)
            # Add a small delay for any dynamic content rendering via JavaScript
            await asyncio.sleep(5)

            html_content = await page.content()
            with open(HTML_FILE, "w", encoding="utf-8") as f:
                f.write(html_content)

            await browser.close()
            print(f"Successfully fetched and saved HTML to {HTML_FILE}")
            return f"HTML content for {url} downloaded and saved successfully to {HTML_FILE}."
    except Exception as e:
        error_message = f"Error fetching page {url}: {str(e)}"
        print(error_message)
        return error_message

def _extract_xpath(tree, xpath, default="N/A"):
    """Helper function to extract text using XPath, returning default if not found."""
    try:
        # Use text_content() to get text from node and children, strip whitespace
        result = tree.xpath(xpath)
        if result:
            return result[0].text_content().strip()
        return default
    except Exception:
        return default

def _extract_price(price_str):
    """Helper function to parse price string into a float."""
    if price_str == "N/A":
        return None
    try:
        # Remove currency symbols and commas, handle potential whitespace
        cleaned_price = "".join(filter(str.isdigit or str.__eq__("."), price_str))
        return float(cleaned_price)
    except (ValueError, TypeError):
        return None

@mcp.tool()
def extract_info() -> dict:
    """
    Parses the saved HTML file (downloaded by fetch_page) to extract
    Amazon product details like title, price, rating, features, etc.
    Returns a dictionary of the extracted data.
    """
    print(f"Executing extract_info from file: {HTML_FILE}")
    if not os.path.exists(HTML_FILE):
        return {
            "error": f"HTML file not found at {HTML_FILE}. Please run fetch_page first."
        }

    try:
        with open(HTML_FILE, "r", encoding="utf-8") as f:
            page_html = f.read()

        tree = lxml_html.fromstring(page_html)

        # --- XPath Selectors for Amazon Product Details ---
        title = _extract_xpath(tree, '//span[@id="productTitle"]')
        # Handle different price structures (main price, sale price)
        price_whole = _extract_xpath(tree, '//span[contains(@class, "a-price-whole")]')
        price_fraction = _extract_xpath(
            tree, '//span[contains(@class, "a-price-fraction")]'
        )
        price_str = (
            f"{price_whole}.{price_fraction}"
            if price_whole != "N/A"
            else _extract_xpath(tree, '//span[contains(@class,"a-offscreen")]')
        )  # Fallback to offscreen if needed

        price = _extract_price(price_str)

        # Original price (strike-through)
        original_price_str = _extract_xpath(
            tree, '//span[@class="a-price a-text-price"]//span[@class="a-offscreen"]'
        )
        original_price = _extract_price(original_price_str)

        # Rating
        rating_text = _extract_xpath(tree, '//span[@id="acrPopover"]/@title')
        rating = None
        if rating_text != "N/A":
            try:
                rating = float(rating_text.split()[0])
            except (ValueError, IndexError):
                rating = None

        # Review Count
        reviews_text = _extract_xpath(tree, '//span[@id="acrCustomerReviewText"]')
        review_count = None
        if reviews_text != "N/A":
            try:
                review_count = int(reviews_text.split()[0].replace(",", ""))
            except (ValueError, IndexError):
                review_count = None

        # Availability
        availability = _extract_xpath(
            tree,
            '//div[@id="availability"]//span/text()',
        )

        # Features (bullet points)
        feature_elements = tree.xpath(
            '//div[@id="feature-bullets"]//li//span[@class="a-list-item"]'
        )
        features = [
            elem.text_content().strip()
            for elem in feature_elements
            if elem.text_content().strip()
        ]

        # Calculate Discount
        discount = None
        if price and original_price and original_price > price:
            discount = round(((original_price - price) / original_price) * 100)

        extracted_data = {
            "title": title,
            "price": price,
            "original_price": original_price,
            "discount_percent": discount,
            "rating_stars": rating,
            "review_count": review_count,
            "features": features,
            "availability": availability.strip(),
        }
        print(f"Successfully extracted data: {extracted_data}")
        return extracted_data

    except Exception as e:
        error_message = f"Error parsing HTML: {str(e)}"
        print(error_message)  # Added for logging
        return {"error": error_message}

if __name__ == "__main__":
    print("Starting MCP Server with stdio transport...")
    # Run the server, listening via standard input/output
    mcp.run(transport="stdio")

Intégration de votre serveur MCP personnalisé

Maintenant que le script du serveur est prêt, connectons-le aux clients MCP tels que Claude Desktop et Cursor.

Connexion à Claude Desktop

Étape 1 : Ouvrez le bureau de Claude.

Étape 2 : Naviguez vers Paramètres -> Développeur -> Modifier la configuration. Cela ouvrira le fichier claude_desktop_config.json dans votre éditeur de texte par défaut.

claude-desktop-settings-menu-navigation

Étape 3 : Ajoutez une entrée pour votre serveur sous la clé mcpServers. Assurez-vous de remplacer le chemin dans args par le chemin absolu de votre fichier amazon_scraper_mcp.py.

{
  "mcpServers": {
    "amazon_product_scraper": {
      "command": "python",  // Or python3 if needed
      "args": ["/full/path/to/your/amazon_scraper_mcp.py"], // <-- IMPORTANT: Use the correct absolute path
    }
  }
}

Étape 4 : Enregistrez le fichier claude_desktop_config.json, puis fermez et rouvrez Claude Desktop pour que les modifications soient prises en compte.

Étape 5 : Dans Claude Desktop, vous devriez maintenant voir une petite icône d’outils (comme un marteau 🔨) dans la zone de saisie du chat.

claude-desktop-mcp-tools-icon-interface

Étape 6 : En cliquant dessus, vous devriez voir apparaître votre “Amazon Product Scraper” avec ses outils fetch_page et extract_info.

claude-available-mcp-tools-dialog-amazon-scraper

Étape 7 : Envoyez une invite, par exemple : “Obtenir le prix actuel, le prix original et l’évaluation de ce produit Amazon : https://www.amazon.com/dp/B09C13PZX7″.

Étape 8 : Claude détectera que cela nécessite des outils externes et vous demandera la permission d’exécuter d’abord fetch_page et ensuite extract_info. Cliquez sur “Allow for this chat” pour chaque outil.

mcp-permission-dialog-fetch-page-amazon-tool

Étape 9 : Après avoir accordé les permissions, le serveur MCP exécutera les outils. Claude recevra alors les données structurées et les présentera dans le chat.

claude-amazon-product-data-extraction-results

🔥 Génial, vous avez réussi à construire et à intégrer votre premier serveur MCP !

Connexion au curseur

Le processus pour Cursor (un IDE axé sur l’IA) est similaire.

Étape 1 : Ouvrir le curseur.

Étape 2 : Allez sur Settings ⚙️ et naviguez dans la section MCP.

cursor-ide-add-new-global-mcp-server-settings

Étape 3 : Cliquez sur “+Ajouter un nouveau serveur MCP global”. Cela ouvrira le fichier de configuration mcp.json. Ajoutez une entrée pour votre serveur, en utilisant à nouveau le chemin absolu vers votre script.

cursor-mcp-json-configuration-file-amazon-scraper

Étape 4 : Sauvegardez le fichier mcp.json et vous devriez voir votre “amazon_product_scraper” listé, avec un point vert indiquant qu’il est en cours d’exécution et connecté.

cursor-ide-configured-amazon-scraper-mcp-settings

Étape 5 : Utilisez la fonction de chat de Cursor(Cmd+l ou Ctrl+l).

Étape 6 : Envoyer une invite, par exemple : “Extraire toutes les données disponibles sur les produits à partir de cette URL Amazon : https://www.amazon.com/dp/B09C13PZX7. Formatez la sortie sous la forme d’un objet JSON structuré”.

Étape 7 : Comme pour Claude Desktop, le curseur demandera la permission d’exécuter les outils fetch_page et extract_info. Approuvez ces demandes (“Exécuter l’outil”).

Étape 8 : Le curseur affichera le flux d’interaction, montrant les appels à vos outils MCP et présentant finalement les données JSON structurées renvoyées par votre outil extract_info.

cursor-ide-amazon-product-data-extraction-json-results

Voici un exemple de sortie JSON du curseur :

{
  "title": "Razer Basilisk V3 Customizable Ergonomic Gaming Mouse: Fastest Gaming Mouse Switch - Chroma RGB Lighting - 26K DPI Optical Sensor - 11 Programmable Buttons - HyperScroll Tilt Wheel - Classic Black",
  "price": 39.99,
  "original_price": 69.99,
  "discount_percent": 43,
  "rating_stars": 4.6,
  "review_count": 7782,
  "features": [
    "ICONIC ERGONOMIC DESIGN WITH THUMB REST — PC gaming mouse favored by millions worldwide with a form factor that perfectly supports the hand while its buttons are optimally positioned for quick and easy access",
    "11 PROGRAMMABLE BUTTONS — Assign macros and secondary functions across 11 programmable buttons to execute essential actions like push-to-talk, ping, and more",
    "HYPERSCROLL TILT WHEEL — Speed through content with a scroll wheel that free-spins until its stopped or switch to tactile mode for more precision and satisfying feedback that's ideal for cycling through weapons or skills",
    "11 RAZER CHROMA RGB LIGHTING ZONES — Customize each zone from over 16.8 million colors and countless lighting effects, all while it reacts dynamically with over 150 Chroma integrated games",
    "OPTICAL MOUSE SWITCHES GEN 2 — With zero unintended misclicks these switches provide crisp, responsive execution at a blistering 0.2ms actuation speed for up to 70 million clicks",
    "FOCUS+ 26K DPI OPTICAL SENSOR — Best-in-class mouse sensor with intelligent functions flawlessly tracks movement with zero smoothing, allowing for crisp response and pixel-precise accuracy",
    // ... (other features)
  ],
  "availability": "In Stock"
}

Cela montre la flexibilité de MCP – le même serveur fonctionne de manière transparente avec différentes applications clientes.

Intégration de MCP de Bright Data pour l’extraction de données Web pilotée par l’IA

Les serveurs MCP personnalisés offrent un contrôle total, mais présentent des difficultés, telles que la gestion de l’infrastructure proxy, la gestion de mécanismes anti-bots sophistiqués et la garantie de l’évolutivité. Bright Data résout ces problèmes grâce à sa solution MCP préconstruite de niveau production, conçue pour une intégration transparente avec les agents d’IA et les LLM.

L’intégration du protocole Model Context Protocol (MCP) à Bright Data offre aux LLM et aux agents d’intelligence artificielle un accès transparent et en temps réel aux données Web publiques, adaptées aux flux de travail d’intelligence artificielle. En se connectant au MCP de Bright Data, vos applications et modèles peuvent récupérer les résultats des SERP de tous les principaux moteurs de recherche et débloquer de manière transparente l’accès aux sites Web difficiles à atteindre.

La solution Model Context Protocol (MCP) de Bright Data connecte votre application à une suite d’outils puissants d’extraction de données Web, notamment Web Unlocker, SERP API, Web Scraper API et Scraping Browser, fournissantune infrastructure complète qui.. :

  • Fournit des données prêtes pour l’IA: Récupère et formate automatiquement le contenu web, réduisant ainsi les étapes de prétraitement supplémentaires.
  • Garantit l’évolutivité et la fiabilité : S’appuie sur une infrastructure robuste pour gérer des volumes importants de demandes sans compromettre les performances.
  • Contourne les blocages et les CAPTCHA : Utilise des stratégies anti-bots avancées pour naviguer et récupérer le contenu des sites Web les plus protégés.
  • Offre une couverture IP mondiale : Utilise un vaste réseau de proxy couvrant 195 pays pour accéder aux contenus soumis à des restrictions géographiques.
  • Simplifie l’intégration : Minimise les efforts de configuration en fonctionnant de manière transparente avec tous les clients MCP.

Conditions préalables à l’obtention du MCP de Bright Data

Avant de commencer à intégrer Bright Data MCP, assurez-vous que vous disposez des éléments suivants :

  1. Compte Bright Data : Inscrivez-vous sur brightdata.com. Les nouveaux utilisateurs reçoivent des crédits gratuits pour les tests.
  2. Jeton API : Obtenez votre clé API à partir des paramètres de votre compte Bright Data(page Paramètres de l’utilisateur).
  3. Zone Web Unlocker : Créez une zone proxy Web Unlocker dans votre panneau de contrôle Bright Data. Donnez-lui un nom mémorable, comme mcp_unlocker (vous pourrez le remplacer plus tard par des variables d’environnement si nécessaire).
  4. (Facultatif) Scraping Browser Zone : Si vous avez besoin de capacités avancées d’automatisation du navigateur (par exemple, pour des interactions JavaScript complexes ou des captures d’écran), créez une zone Scraping Browser. Notez les détails d’authentification (nom d’utilisateur et mot de passe) fournis pour cette zone (dans l’onglet Vue d’ensemble ), généralement sous le format brd-customer-ACCOUNT_ID-zone-ZONE_NAME:PASSWORD.

Démarrage rapide : Configuration de Bright Data MCP pour Claude Desktop

Étape 1 : le serveur MCP de Bright Data est généralement exécuté à l’aide de npx, qui est fourni avec Node.js. Installez Node.js si vous ne l’avez pas encore fait à partir du site officiel.

Étape 2 : Ouvrez Claude Desktop -> Paramètres -> Développeur -> Modifier la configuration(claude_desktop_config.json).

Étape 3 : ajoutez la configuration du serveur Bright Data sous mcpServers. Remplacez les espaces réservés par vos identifiants réels.

{
  "mcpServers": {
    "Bright Data": { // Choose a name for the server
      "command": "npx",
      "args": ["@brightdata/mcp"],
      "env": {
        "API_TOKEN": "YOUR_BRIGHTDATA_API_TOKEN", // Paste your API token here
        "WEB_UNLOCKER_ZONE": "mcp_unlocker",     // Your Web Unlocker zone name
        // Optional: Add if using Scraping Browser tools
        "BROWSER_AUTH": "brd-customer-ACCOUNTID-zone-YOURZONE:PASSWORD"
      }
    }
  }
}

Étape 4 : Enregistrez le fichier de configuration et redémarrez Claude Desktop.

Étape 5 : Survolez l’icône du marteau (🔨) sur le bureau de Claude. Vous devriez maintenant voir plusieurs outils MCP.

claude-desktop-interface-with-mcp-tools-available

Essayons d’extraire des données de Zillow, un site connu pour bloquer potentiellement les scrapers. Invitez claude à “Extraire les données des propriétés clés au format JSON à partir de cette URL Zillow : https://www.zillow.com/apartments/arverne-ny/the-tides-at-arverne-by-the-sea/ChWHPZ/”

bright-data-mcp-zillow-property-extraction-process

Permettre à Claude d’utiliser les outils MCP de Bright Data nécessaires. Le serveur MCP de Bright Data s’occupera des complexités sous-jacentes (rotation de proxy, rendu JavaScript via Scraping Browser si nécessaire).

Le serveur de Bright Data effectue l’extraction et renvoie des données structurées, que Claude présente.

zillow-property-data-json-structure-bright-data-mcp

Voici un extrait du résultat potentiel :

{
  "propertyInfo": {
    "name": "The Tides At Arverne By The Sea",
    "address": "190 Beach 69th St, Arverne, NY 11692",
    "propertyType": "Apartment building",
    // ... more info
  },
  "rentPrices": {
    "studio": { "startingPrice": "$2,750", /* ... */ },
    "oneBed": { "startingPrice": "$2,900", /* ... */ },
    "twoBed": { "startingPrice": "$3,350", /* ... */ }
  },
  // ... amenities, policies, etc.
}

🔥 C’est génial !

Un autre exemple : Les titres de Hacker News

Une requête plus simple :“Donnez-moi les titres des 5 derniers articles de Hacker News“.

hacker-news-latest-articles-mcp-extraction-results

Cet exemple montre comment le serveur MCP de Bright Data simplifie l’accès aux contenus web dynamiques ou fortement protégés directement dans votre flux de travail d’IA.

Conclusion

Comme nous l’avons exploré tout au long de ce guide, le Protocole Modèle Contexte d’Anthropic représente un changement fondamental dans la façon dont les systèmes d’intelligence artificielle interagissent avec le monde extérieur. Comme nous l’avons vu, il est possible de créer des serveurs MCP personnalisés pour des tâches spécifiques, comme notre scraper Amazon. L’intégration MCP de Bright Data va encore plus loin en offrant des capacités de scraping web de niveau entreprise qui contournent les protections anti-bots et fournissent des données structurées prêtes pour l’IA.

Nous avons également sélectionné quelques-unes des meilleures ressources sur l’IA et les grands modèles de langage (LLM). Ne manquez pas de les consulter pour en savoir plus :

Aucune carte de crédit requise