OSV

Accede a la base de datos OSV (Open Source Vulnerabilities) para obtener información sobre vulnerabilidades. Consulta vulnerabilidades por versión de paquete o commit, realiza consultas por lotes de múltiples paquetes y obtén información detallada de vulnerabilidades por ID.

Documentación

Servidor MCP OSV

Trust Score

Un servidor MCP (Model Context Protocol) que proporciona acceso a la base de datos OSV (Open Source Vulnerabilities).

Descripción general

Este proyecto implementa un servidor MCP basado en SSE que permite a aplicaciones impulsadas por LLM consultar la base de datos OSV para obtener información sobre vulnerabilidades. El servidor proporciona herramientas para:

  1. Consultar vulnerabilidades para una versión específica de un paquete o commit
  2. Consultar vulnerabilidades en lote para múltiples paquetes o commits
  3. Obtener información detallada sobre una vulnerabilidad específica por ID

Instalación

Requisitos previos

  • Go 1.21 o posterior
  • Task (opcional, para ejecutar tareas)
  • ko (opcional, para construir imágenes de contenedores)

Compilar desde el código fuente

# Clone the repository
git clone https://github.com/StacklokLabs/osv-mcp.git
cd osv-mcp

# Build the server
task build

Uso

Ejecutar con ToolHive (Recomendado)

La forma más sencilla de ejecutar el servidor MCP OSV es usando ToolHive, que proporciona un despliegue seguro y contenerizado de servidores MCP:

# Install ToolHive (if not already installed)
# See: https://docs.stacklok.com/toolhive/guides-cli/install

# Register a supported client so ToolHive can auto-configure your environment
thv client setup

# Run the OSV MCP server (packaged as 'osv' in ToolHive)
thv run osv

# List running servers
thv list

# Get detailed information about the server
thv registry info osv

El servidor estará disponible para tus clientes compatibles con MCP y podrá consultar la base de datos OSV para obtener información sobre vulnerabilidades.

Ejecutar desde el código fuente

Configuración del servidor

El servidor se puede configurar usando variables de entorno:

  • MCP_PORT: El número de puerto en el que se ejecutará el servidor (predeterminado: 8080)

    • Debe ser un entero válido entre 0 y 65535
    • Si no es válido o no se establece, el servidor usará el puerto 8080
  • MCP_TRANSPORT: El modo de transporte para el servidor (predeterminado: sse)

    • Valores admitidos: sse, streamable-http
    • Si no es válido o no se establece, el servidor usará el modo de transporte SSE

Ejemplo:

# Run on port 3000
MCP_PORT=3000 ./build/osv-mcp-server

# Run on default port 8080
./build/osv-mcp-server

Herramientas MCP

El servidor proporciona las siguientes herramientas MCP:

query_vulnerability

Consulta vulnerabilidades que afectan a una versión específica de un paquete o commit.

Esquema de entrada:

{
  "type": "object",
  "properties": {
    "commit": {
      "type": "string",
      "description": "The commit hash to query for. If specified, version should not be set."
    },
    "version": {
      "type": "string",
      "description": "The version string to query for. If specified, commit should not be set."
    },
    "package_name": {
      "type": "string",
      "description": "The name of the package."
    },
    "ecosystem": {
      "type": "string",
      "description": "The ecosystem for this package (e.g., PyPI, npm, Go)."
    },
    "purl": {
      "type": "string",
      "description": "The package URL for this package. If purl is used, package_name and ecosystem should not be set."
    }
  }
}

query_vulnerabilities_batch

Consulta vulnerabilidades que afectan a múltiples paquetes o commits a la vez.

Esquema de entrada:

{
  "type": "object",
  "properties": {
    "queries": {
      "type": "array",
      "description": "Array of query objects",
      "items": {
        "type": "object",
        "properties": {
          "commit": {
            "type": "string",
            "description": "The commit hash to query for. If specified, version should not be set."
          },
          "version": {
            "type": "string",
            "description": "The version string to query for. If specified, commit should not be set."
          },
          "package_name": {
            "type": "string",
            "description": "The name of the package."
          },
          "ecosystem": {
            "type": "string",
            "description": "The ecosystem for this package (e.g., PyPI, npm, Go)."
          },
          "purl": {
            "type": "string",
            "description": "The package URL for this package. If purl is used, package_name and ecosystem should not be set."
          }
        }
      }
    }
  },
  "required": ["queries"]
}

get_vulnerability

Obtiene detalles de una vulnerabilidad específica por ID.

Esquema de entrada:

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The OSV vulnerability ID"
    }
  },
  "required": ["id"]
}

Ejemplos

Consultar vulnerabilidades para un paquete

{
  "package_name": "lodash",
  "ecosystem": "npm",
  "version": "4.17.15"
}

Consultar vulnerabilidades para un commit

{
  "commit": "6879efc2c1596d11a6a6ad296f80063b558d5e0f"
}

Consultar vulnerabilidades en lote

{
  "queries": [
    {
      "package_name": "lodash",
      "ecosystem": "npm",
      "version": "4.17.15"
    },
    {
      "package_name": "jinja2",
      "ecosystem": "PyPI",
      "version": "2.4.1"
    }
  ]
}

Obtener detalles de una vulnerabilidad

{
  "id": "GHSA-vqj2-4v8m-8vrq"
}

Desarrollo

Ejecutar pruebas

task test

Linting

task lint

Formatear código

task fmt

Contribuciones

¡Agradecemos las contribuciones a este servidor MCP! Si deseas contribuir, por favor revisa la guía de CONTRIBUCIONES para obtener detalles sobre cómo comenzar.

Si encuentras un error o tienes una solicitud de funcionalidad, por favor abre un issue en el repositorio o únete a nosotros en el canal #mcp-servers en nuestro servidor de Discord de la comunidad.

Licencia

Este proyecto está licenciado bajo la Licencia Apache v2 - consulta el archivo LICENSE para obtener más detalles.