OSV

Acesse o banco de dados OSV (Open Source Vulnerabilities) para obter informações sobre vulnerabilidades. Consulte vulnerabilidades por versão de pacote ou commit, faça consultas em lote de vários pacotes e obtenha informações detalhadas de vulnerabilidades por ID.

Documentação

Servidor MCP OSV

Trust Score

Um servidor MCP (Model Context Protocol) que fornece acesso ao banco de dados OSV (Open Source Vulnerabilities).

Visão Geral

Este projeto implementa um servidor MCP baseado em SSE que permite que aplicações com tecnologia LLM consultem o banco de dados OSV para obter informações sobre vulnerabilidades. O servidor fornece ferramentas para:

  1. Consultar vulnerabilidades para uma versão específica de pacote ou commit
  2. Consultar vulnerabilidades em lote para múltiplos pacotes ou commits
  3. Obter informações detalhadas sobre uma vulnerabilidade específica por ID

Instalação

Pré-requisitos

  • Go 1.21 ou posterior
  • Task (opcional, para executar tarefas)
  • ko (opcional, para construir imagens de contêiner)

Compilando a partir do código-fonte

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

# Build the server
task build

Uso

Executando com ToolHive (Recomendado)

A maneira mais fácil de executar o servidor MCP OSV é usando o ToolHive, que fornece implantação segura e conteinerizada 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

O servidor estará disponível para seus clientes compatíveis com MCP e poderá consultar o banco de dados OSV para obter informações sobre vulnerabilidades.

Executando a partir do código-fonte

Configuração do Servidor

O servidor pode ser configurado usando variáveis de ambiente:

  • MCP_PORT: O número da porta para executar o servidor (padrão: 8080)

    • Deve ser um inteiro válido entre 0 e 65535
    • Se inválido ou não definido, o servidor usará a porta 8080
  • MCP_TRANSPORT: O modo de transporte do servidor (padrão: sse)

    • Valores suportados: sse, streamable-http
    • Se inválido ou não definido, o servidor usará o modo de transporte SSE

Exemplo:

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

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

Ferramentas MCP

O servidor fornece as seguintes ferramentas MCP:

query_vulnerability

Consulta vulnerabilidades que afetam uma versão específica de pacote ou 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 afetam múltiplos pacotes ou commits de uma só 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

Obtém detalhes de uma vulnerabilidade específica por ID.

Esquema de Entrada:

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

Exemplos

Consultando vulnerabilidades de um pacote

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

Consultando vulnerabilidades de um commit

{
  "commit": "6879efc2c1596d11a6a6ad296f80063b558d5e0f"
}

Consultando vulnerabilidades em lote

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

Obtendo detalhes de vulnerabilidade

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

Desenvolvimento

Executando testes

task test

Linting

task lint

Formatando código

task fmt

Contribuindo

Aceitamos contribuições para este servidor MCP! Se você quiser contribuir, revise o guia de CONTRIBUTING para obter detalhes sobre como começar.

Se você encontrar um bug ou tiver uma solicitação de recurso, abra uma issue no repositório ou junte-se a nós no canal #mcp-servers em nosso servidor comunitário do Discord.

Licença

Este projeto é licenciado sob a Licença Apache v2 - consulte o arquivo LICENSE para obter detalhes.