Semgrep MCP Server

oficial

Permite a los agentes de IA asegurar código con Semgrep.

Documentación

⚠️ El servidor MCP de Semgrep se ha trasladado de un repositorio independiente al repositorio principal semgrep ⚠️

Este repositorio ha quedado obsoleto y las futuras actualizaciones del servidor MCP de Semgrep se realizarán a través del binario oficial semgrep.

Semgrep logo

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

Servidor MCP de 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 servidor del Protocolo de Contexto de Modelo (MCP) para usar Semgrep y analizar código en busca de vulnerabilidades de seguridad. ¡Protege tu vibe coding! 😅

El Protocolo de Contexto de Modelo (MCP) es una API estandarizada para que LLMs, agentes e IDEs como Cursor, VS Code, Windsurf, o cualquier cosa que soporte MCP, obtengan ayuda especializada, contexto y aprovechen el poder de las herramientas. Semgrep es una herramienta de análisis estático rápida y determinista que entiende semánticamente muchos lenguajes y viene con más de 5,000 reglas. 🛠️

[!NOTE] Este proyecto beta está en desarrollo activo. Nos encantaría recibir tus comentarios, informes de errores, solicitudes de funciones y código. ¡Únete al canal de Slack comunitario de #mcp!

Contenido

Primeros pasos

Ejecuta el paquete de Python como un comando CLI usando uv:

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

O ejecútalo como un contenedor Docker:

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

Cursor

Ejemplo de mcp.json

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

Añade una instrucción a tu .cursor/rules para usarlo automáticamente:

Always scan code generated using Semgrep for security vulnerabilities

ChatGPT

  1. Ve a la página de Configuración del conector (enlace directo)
  2. Nombra la conexión Semgrep
  3. Establece la URL del servidor MCP como https://mcp.semgrep.ai/sse
  4. Establece la Autenticación como No authentication
  5. Marca la casilla Confío en esta aplicación
  6. Haz clic en Crear

Consulta más detalles en la documentación oficial.

Servidor alojado

[!WARNING] mcp.semgrep.ai es un servidor experimental que puede fallar inesperadamente. Obtendrá nuevas funcionalidades rápidamente. 🚀

Cursor

  1. Cmd + Shift + J para abrir la configuración de Cursor
  2. Selecciona Herramientas MCP
  3. Haz clic en Nuevo servidor MCP.
{
  "mcpServers": {
    "semgrep": {
      "type": "streamable-http",
      "url": "https://mcp.semgrep.ai/mcp"
    }
  }
}

Demostración

API

Herramientas

Permite a los LLMs realizar acciones, hacer cálculos deterministas e interactuar con servicios externos.

Escanear código

  • security_check: Escanea código en busca de vulnerabilidades de seguridad
  • semgrep_scan: Escanea archivos de código en busca de vulnerabilidades de seguridad con una cadena de configuración dada
  • semgrep_scan_with_custom_rule: Escanea archivos de código usando una regla personalizada de Semgrep

Entender código

  • get_abstract_syntax_tree: Muestra el Árbol de Sintaxis Abstracta (AST) del código

Plataforma en la nube (requiere inicio de sesión y token de Semgrep)

  • semgrep_findings: Obtiene hallazgos de Semgrep desde la API de la Plataforma AppSec de Semgrep

Meta

  • supported_languages: Devuelve la lista de lenguajes que soporta Semgrep
  • semgrep_rule_schema: Obtiene el último esquema JSON de reglas de Semgrep

Indicaciones

Indicaciones reutilizables para estandarizar interacciones comunes con LLMs.

  • write_custom_semgrep_rule: Devuelve una indicación para ayudar a escribir una regla de Semgrep

Recursos

Expone datos y contenido a los LLMs

  • semgrep://rule/schema: Especificación de la sintaxis YAML de reglas de Semgrep usando esquema JSON
  • semgrep://rule/{rule_id}/yaml: Regla completa de Semgrep en formato YAML del registro de Semgrep

Uso

Este paquete de Python se publica en PyPI como semgrep-mcp y se puede instalar y ejecutar con pip, pipx, uv, poetry o cualquier gestor de paquetes de 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.

Entrada/Salida estándar (stdio)

El transporte stdio permite la comunicación a través de flujos de entrada y salida estándar. Esto es particularmente útil para integraciones locales y herramientas de línea de comandos. Consulta la especificación para más detalles.

Python

semgrep-mcp

Por defecto, el paquete de Python se ejecutará en modo stdio. Debido a que usa los flujos de entrada y salida estándar, parecerá que la herramienta se cuelga sin ninguna salida, pero esto es esperado.

Docker

Este servidor se publica en el Registro de Contenedores de Github (ghcr.io/semgrep/mcp)

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

Por defecto, el contenedor Docker está en modo SSE, por lo que tendrás que incluir -t stdio después del nombre de la imagen y ejecutar con -i para correr en modo interactivo.

HTTP transmitible

HTTP transmitible permite respuestas en streaming sobre JSON RPC a través de solicitudes HTTP POST. Consulta la especificación para más detalles.

Por defecto, el servidor escucha en 127.0.0.1:8000/mcp las conexiones de los clientes. Para cambiar esto, establece las variables de entorno FASTMCP_*. El servidor debe estar en ejecución para que los clientes se conecten a él.

Python

semgrep-mcp -t streamable-http

Por defecto, el paquete de Python se ejecutará en modo stdio, por lo que tendrás que incluir -t streamable-http.

Docker

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

Eventos enviados por el servidor (SSE)

[!WARNING] La comunidad MCP considera este un protocolo de transporte heredado y está realmente pensado para compatibilidad con versiones anteriores. HTTP transmitible es el reemplazo recomendado.

El transporte SSE permite el streaming del servidor al cliente con Eventos Enviados por el Servidor para la comunicación cliente-servidor y servidor-cliente. Consulta la especificación para más detalles.

Por defecto, el servidor escucha en 127.0.0.1:8000/sse las conexiones de los clientes. Para cambiar esto, establece las variables de entorno FASTMCP_*. El servidor debe estar en ejecución para que los clientes se conecten a él.

Python

semgrep-mcp -t sse

Por defecto, el paquete de Python se ejecutará en modo stdio, por lo que tendrás que incluir -t sse.

Docker

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

Plataforma AppSec de Semgrep

Opcionalmente, para conectarte a la Plataforma AppSec de Semgrep:

  1. Inicia sesión o regístrate
  2. Genera un token desde Configuración
  3. Añade el token a tus variables de entorno:
    • CLI (export SEMGREP_APP_TOKEN=<token>)

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

    • JSON de configuración MCP

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

[!TIP] Por favor, contacta para soporte si es necesario. ☎️

Integraciones

Cursor IDE

Añade el siguiente bloque JSON a tu archivo de configuración global ~/.cursor/mcp.json o específico del proyecto .cursor/mcp.json:

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

cursor MCP settings

Consulta la documentación de Cursor para más información.

VS Code / Copilot

Haz clic en los botones de instalación en la parte superior de este README para la instalación más rápida.

Configuración manual

Añade el siguiente bloque JSON a tu archivo de Configuración de Usuario (JSON) en VS Code. Puedes hacerlo presionando Ctrl + Shift + P y escribiendo Preferences: Open User Settings (JSON).

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

Opcionalmente, puedes añadirlo a un archivo llamado .vscode/mcp.json en tu espacio de trabajo:

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

Usando Docker

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

Consulta la documentación de VS Code para más información.

Windsurf

Añade el siguiente bloque JSON a tu archivo ~/.codeium/windsurf/mcp_config.json:

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

Consulta la documentación de Windsurf para más información.

Claude Desktop

Aquí hay un video corto que muestra a Claude Desktop usando este servidor para escribir una regla personalizada.

Añade el siguiente bloque JSON a tu archivo claude_desktop_config.json:

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

Consulta la documentación de Anthropic para más información.

Claude Code

claude mcp add semgrep uvx semgrep-mcp

Consulta la documentación de Claude Code para más información.

OpenAI

Consulta la documentación oficial:

SDK de Agentes

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

Consulta la documentación del SDK de Agentes de OpenAI para más información.

Clientes personalizados

Ejemplo de cliente SSE en Python

Mira un ejemplo completo en 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] Algunas librerías cliente quieren la URL: http://localhost:8000/sse y otras solo quieren la HOST: localhost:8000. Prueba la URL en un navegador web para confirmar que el servidor está funcionando y no hay problemas de red.

Consulta la documentación oficial del SDK para más información.

Contribuir, comunidad y ejecución desde el código fuente

[!NOTE] ¡Nos encantan tus comentarios, informes de errores, solicitudes de funciones y código. Únete al canal de Slack comunitario de #mcp!

Consulta CONTRIBUTING.md para más información y detalles sobre cómo ejecutar el servidor MCP desde el código fuente.

Herramientas similares 🔍

Proyectos comunitarios 🌟

Registros de servidores MCP

Semgrep Server MCP server

Hecho con ❤️ por el Equipo de Semgrep