Semgrep MCP Server

officiel

Permettre aux agents IA de sécuriser le code avec Semgrep.

Documentation

⚠️ Le serveur MCP Semgrep a été déplacé d’un dépôt autonome vers le dépôt principal semgrep ! ⚠️

Ce dépôt est obsolète, et les futures mises à jour du serveur MCP Semgrep seront effectuées via le binaire officiel semgrep.

Semgrep logo

Documentation Join Semgrep community Slack Follow on LinkedIn Follow @semgrep on X

Serveur MCP Semgrep

Add MCP Server semgrep to LM Studio Install in Cursor Install in VS Code UV Install in VS Code Docker Install in VS Code semgrep.ai PyPI Docker Install in VS Code Insiders Install in VS Code Insiders

Un serveur Model Context Protocol (MCP) pour utiliser Semgrep afin d’analyser le code à la recherche de vulnérabilités de sécurité. Sécurisez votre vibe coding ! 😅

Model Context Protocol (MCP) est une API standardisée pour les LLM, les agents et les IDE comme Cursor, VS Code, Windsurf, ou tout ce qui prend en charge MCP, afin d’obtenir une aide spécialisée, du contexte et d’exploiter la puissance des outils. Semgrep est un outil d’analyse statique rapide et déterministe qui comprend sémantiquement de nombreux langages et propose plus de 5 000 règles. 🛠️

[!NOTE] Ce projet bêta est en développement actif. Nous serions ravis d’avoir vos retours, rapports de bugs, demandes de fonctionnalités et contributions. Rejoignez le canal Slack communautaire #mcp !

Contenu

Démarrage

Exécutez le paquet Python en tant que commande CLI avec uv :

uvx semgrep-mcp # see --help for more options

Ou exécutez-le en tant que conteneur Docker :

docker run -i --rm ghcr.io/semgrep/mcp -t stdio

Cursor

Exemple mcp.json

{
  "mcpServers": {
    "semgrep": {
      "command": "uvx",
      "args": ["semgrep-mcp"],
      "env": {
        "SEMGREP_APP_TOKEN": "<token>"
      }
    }
  }
}

Ajoutez une instruction à votre .cursor/rules pour l’utiliser automatiquement :

Always scan code generated using Semgrep for security vulnerabilities

ChatGPT

  1. Allez sur la page Paramètres du connecteur (lien direct)
  2. Nommez la connexion Semgrep
  3. Définissez l’URL du serveur MCP sur https://mcp.semgrep.ai/sse
  4. Définissez l’Authentification sur No authentication
  5. Cochez la case Je fais confiance à cette application
  6. Cliquez sur Créer

Voir plus de détails dans la documentation officielle.

Serveur hébergé

[!WARNING] mcp.semgrep.ai est un serveur expérimental qui peut cesser de fonctionner de manière inattendue. Il gagnera rapidement de nouvelles fonctionnalités.🚀

Cursor

  1. Cmd + Shift + J pour ouvrir les paramètres de Cursor
  2. Sélectionnez Outils MCP
  3. Cliquez sur Nouveau serveur MCP.
{
  "mcpServers": {
    "semgrep": {
      "type": "streamable-http",
      "url": "https://mcp.semgrep.ai/mcp"
    }
  }
}

Démo

API

Outils

Permet aux LLM d’effectuer des actions, de faire des calculs déterministes et d’interagir avec des services externes.

Analyser le code

  • security_check : Analyser le code à la recherche de vulnérabilités de sécurité
  • semgrep_scan : Analyser des fichiers de code à la recherche de vulnérabilités de sécurité avec une chaîne de configuration donnée
  • semgrep_scan_with_custom_rule : Analyser des fichiers de code en utilisant une règle Semgrep personnalisée

Comprendre le code

  • get_abstract_syntax_tree : Afficher l’arbre syntaxique abstrait (AST) du code

Plateforme Cloud (connexion et jeton Semgrep requis)

  • semgrep_findings : Récupérer les résultats Semgrep depuis l’API de la plateforme Semgrep AppSec

Méta

  • supported_languages : Renvoyer la liste des langages pris en charge par Semgrep
  • semgrep_rule_schema : Récupérer le dernier schéma JSON des règles Semgrep

Invites

Invites réutilisables pour standardiser les interactions courantes avec les LLM.

  • write_custom_semgrep_rule : Renvoyer une invite pour aider à écrire une règle Semgrep

Ressources

Exposer des données et du contenu aux LLM

  • semgrep://rule/schema : Spécification de la syntaxe YAML des règles Semgrep en utilisant le schéma JSON
  • semgrep://rule/{rule_id}/yaml : Règle Semgrep complète au format YAML provenant du registre Semgrep

Utilisation

Ce paquet Python est publié sur PyPI sous le nom semgrep-mcp et peut être installé et exécuté avec pip, pipx, uv, poetry, ou tout autre gestionnaire de paquets Python.

$ pipx install semgrep-mcp
$ semgrep-mcp --help

Usage: semgrep-mcp [OPTIONS]

  Entry point for the MCP server

  Supports both stdio and sse transports. For stdio, it will read from stdin
  and write to stdout. For sse, it will start an HTTP server on port 8000.

Options:
  -v, --version                Show version and exit.
  -t, --transport [stdio|sse]  Transport protocol to use (stdio or sse)
  -h, --help                   Show this message and exit.

Entrée/Sortie standard (stdio)

Le transport stdio permet la communication via les flux d’entrée et de sortie standard. C’est particulièrement utile pour les intégrations locales et les outils en ligne de commande. Voir la spécification pour plus de détails.

Python

semgrep-mcp

Par défaut, le paquet Python s’exécute en mode stdio. Comme il utilise les flux d’entrée et de sortie standard, il semblera que l’outil est bloqué sans aucune sortie, mais c’est normal.

Docker

Ce serveur est publié sur le registre de conteneurs de Github (ghcr.io/semgrep/mcp)

docker run -i --rm ghcr.io/semgrep/mcp -t stdio

Par défaut, le conteneur Docker est en mode SSE, vous devrez donc inclure -t stdio après le nom de l’image et l’exécuter avec -i pour fonctionner en mode interactif.

HTTP streamable

Le HTTP streamable permet des réponses en streaming via JSON RPC par des requêtes HTTP POST. Voir la spécification pour plus de détails.

Par défaut, le serveur écoute sur 127.0.0.1:8000/mcp les connexions des clients. Pour modifier cela, définissez les variables d’environnement FASTMCP_*. Le serveur doit être en cours d’exécution pour que les clients puissent s’y connecter.

Python

semgrep-mcp -t streamable-http

Par défaut, le paquet Python s’exécute en mode stdio, vous devrez donc inclure -t streamable-http.

Docker

docker run -p 8000:0000 ghcr.io/semgrep/mcp

Événements envoyés par le serveur (SSE)

[!WARNING] La communauté MCP considère cela comme un protocole de transport hérité, principalement destiné à la rétrocompatibilité. HTTP streamable est le remplacement recommandé.

Le transport SSE permet le streaming du serveur vers le client avec des événements envoyés par le serveur pour la communication client-serveur et serveur-client. Voir la spécification pour plus de détails.

Par défaut, le serveur écoute sur 127.0.0.1:8000/sse les connexions des clients. Pour modifier cela, définissez les variables d’environnement FASTMCP_*. Le serveur doit être en cours d’exécution pour que les clients puissent s’y connecter.

Python

semgrep-mcp -t sse

Par défaut, le paquet Python s’exécute en mode stdio, vous devrez donc inclure -t sse.

Docker

docker run -p 8000:0000 ghcr.io/semgrep/mcp -t sse

Plateforme Semgrep AppSec

Optionnellement, pour vous connecter à la plateforme Semgrep AppSec :

  1. Connectez-vous ou inscrivez-vous
  2. Générez un jeton depuis Paramètres
  3. Ajoutez le jeton à vos variables d’environnement :
    • CLI (export SEMGREP_APP_TOKEN=<token>)

    • Docker (docker run -e SEMGREP_APP_TOKEN=<token>)

    • JSON de configuration MCP

    "env": {
      "SEMGREP_APP_TOKEN": "<token>"
    }

[!TIP] N’hésitez pas à demander de l’aide si nécessaire. ☎️

Intégrations

Cursor IDE

Ajoutez le bloc JSON suivant à votre fichier de configuration global ~/.cursor/mcp.json ou spécifique au projet .cursor/mcp.json :

{
  "mcpServers": {
    "semgrep": {
      "command": "uvx",
      "args": ["semgrep-mcp"]
    }
  }
}

cursor MCP settings

Voir la documentation Cursor pour plus d’informations.

VS Code / Copilot

Cliquez sur les boutons d’installation en haut de ce README pour l’installation la plus rapide.

Configuration manuelle

Ajoutez le bloc JSON suivant à votre fichier de paramètres utilisateur (JSON) dans VS Code. Vous pouvez le faire en appuyant sur Ctrl + Shift + P et en tapant Preferences: Open User Settings (JSON).

{
  "mcp": {
    "servers": {
      "semgrep": {
        "command": "uvx",
        "args": ["semgrep-mcp"]
      }
    }
  }
}

Optionnellement, vous pouvez l’ajouter à un fichier nommé .vscode/mcp.json dans votre espace de travail :

{
  "servers": {
    "semgrep": {
      "command": "uvx",
        "args": ["semgrep-mcp"]
    }
  }
}

Utilisation de Docker

{
  "mcp": {
    "servers": {
      "semgrep": {
        "command": "docker",
        "args": [
          "run",
          "-i",
          "--rm",
          "ghcr.io/semgrep/mcp",
          "-t",
          "stdio"
        ]
      }
    }
  }
}

Voir la documentation VS Code pour plus d’informations.

Windsurf

Ajoutez le bloc JSON suivant à votre fichier ~/.codeium/windsurf/mcp_config.json :

{
  "mcpServers": {
    "semgrep": {
      "command": "uvx",
      "args": ["semgrep-mcp"]
    }
  }
}

Voir la documentation Windsurf pour plus d’informations.

Claude Desktop

Voici une courte vidéo montrant Claude Desktop utilisant ce serveur pour écrire une règle personnalisée.

Ajoutez le bloc JSON suivant à votre fichier claude_desktop_config.json :

{
  "mcpServers": {
    "semgrep": {
      "command": "uvx",
      "args": ["semgrep-mcp"]
    }
  }
}

Voir la documentation Anthropic pour plus d’informations.

Claude Code

claude mcp add semgrep uvx semgrep-mcp

Voir la documentation Claude Code pour plus d’informations.

OpenAI

Voir la documentation officielle :

Agents SDK

async with MCPServerStdio(
    params={
        "command": "uvx",
        "args": ["semgrep-mcp"],
    }
) as server:
    tools = await server.list_tools()

Voir la documentation OpenAI Agents SDK pour plus d’informations.

Clients personnalisés

Exemple de client SSE Python

Voir un exemple complet dans examples/sse_client.py

from mcp.client.session import ClientSession
from mcp.client.sse import sse_client


async def main():
    async with sse_client("http://localhost:8000/sse") as (read_stream, write_stream):
        async with ClientSession(read_stream, write_stream) as session:
            await session.initialize()
            results = await session.call_tool(
                "semgrep_scan",
                {
                    "code_files": [
                        {
                            "path": "hello_world.py",
                            "content": "def hello(): print('Hello, World!')",
                        }
                    ]
                },
            )
            print(results)

[!TIP] Certaines bibliothèques clientes veulent le URL : http://localhost:8000/sse et d’autres veulent seulement le HOST : localhost:8000. Essayez le URL dans un navigateur web pour confirmer que le serveur fonctionne et qu’il n’y a pas de problèmes réseau.

Voir la documentation officielle du SDK pour plus d’informations.

Contribuer, communauté et exécution depuis les sources

[!NOTE] Nous aimons vos retours, rapports de bugs, demandes de fonctionnalités et contributions. Rejoignez le canal Slack communautaire #mcp !

Voir CONTRIBUTING.md pour plus d’informations et de détails sur la façon d’exécuter le serveur MCP à partir du code source.

Outils similaires 🔍

Projets communautaires 🌟

Registres de serveurs MCP

Semgrep Server MCP server

Fait avec ❤️ par l’équipe Semgrep