PR Guardian MCP

PR Guardian MCP

Analyzes GitHub Pull Request diffs for security vulnerabilities and data leaks, using a deterministic filter to skip trivial changes and an AI-powered analysis for logic changes.

Category
Visit Server

README

PR Guardian MCP

Servidor Model Context Protocol (MCP) open-source que analisa diffs de Pull Requests do GitHub com foco em segurança e vazamento de dados.

A arquitetura prioriza economia de tokens: a maioria dos PRs (docs, CSS, formatação) é aprovada por lógica nativa TypeScript, sem chamar a LLM. Apenas mudanças em arquivos de lógica disparam análise via LangGraph + Claude 3.5 Haiku.

Arquitetura

flowchart TD
    A[MCP Tool: analyze_pr_diff] --> B[LangGraph: classify]
    B --> C{Filtro Determinístico}
    C -->|docs / css / formatação| D[auto_approve]
    C -->|.ts / .tsx / outros riscos| E[ai_analyze]
    E --> F[Claude 3.5 Haiku]
    F --> G[Zod Validation]
    D --> G
    G --> H[Resposta MCP estruturada]

    subgraph Observabilidade
        F -.->|trace| LS[LangSmith]
    end

1. Filtro Determinístico (custo zero)

Antes de qualquer chamada à API da Anthropic, o nó classify executa regras nativas em TypeScript:

Condição Ação
Apenas .md, .mdx, .css, .scss etc. Aprovação automática
Diff altera somente whitespace (formatação) Aprovação automática
Presença de .ts, .tsx, .js, .jsx Encaminha para IA
Outros arquivos fora do escopo seguro Encaminha para IA

Por que isso importa? Em repositórios reais, uma parcela significativa dos PRs altera apenas documentação, estilos ou formatação. Enviar esses diffs para uma LLM gera:

  • Custo desnecessário — tokens de entrada/saída cobrados sem valor de segurança
  • Latência — 1–3s adicionais por PR trivial
  • Ruído — falsos positivos em conteúdo que não executa código

O filtro determinístico responde em microssegundos, com custo $0.00.

2. Filtro de IA (LangGraph)

Quando arquivos de lógica são detectados, o grafo aciona o nó ai_analyze:

  • Modelo: Claude 3.5 Haiku (claude-3-5-haiku-20241022)
  • Escopo: apenas riscos de segurança e vazamento de dados
  • Saída: JSON estruturado via withStructuredOutput

Categorias analisadas: secret_leak, injection, auth_bypass, data_exposure, dependency_risk.

3. Validação (Zod)

Toda resposta — determinística ou da LLM — passa pelo nó validate_result e é parseada com PrAnalysisResultSchema antes de retornar ao cliente MCP. Respostas malformadas da LLM são rejeitadas com erro explícito.

4. Observabilidade (LangSmith)

Chamadas LLM são rastreadas automaticamente quando:

LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=lsv2_...
LANGCHAIN_PROJECT=pr-guardian-mcp

No dashboard do LangSmith você visualiza latência, tokens consumidos e custo estimado por execução do grafo.

Estrutura do Projeto

pr-guardian-mcp/
├── src/
│   ├── index.ts                 # Servidor MCP (stdio)
│   ├── graph.ts                 # LangGraph: classify → auto_approve | ai_analyze → validate
│   ├── schema.ts                # Schemas Zod (input, output, LLM)
│   ├── deterministic-filter.ts  # Lógica de filtro nativo (custo zero)
│   └── langsmith.ts             # Configuração de observabilidade
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── package.json
└── tsconfig.json

Pré-requisitos

  • Node.js ≥ 20
  • Chave da API Anthropic (apenas para PRs com arquivos de lógica)
  • Chave do LangSmith (opcional, recomendado)

Instalação

git clone https://github.com/seu-usuario/pr-guardian-mcp.git
cd pr-guardian-mcp
npm install
cp .env.example .env
# Edite .env com suas chaves

Uso Local

# Desenvolvimento
npm run dev

# Build + produção
npm run build
npm start

Configuração no Cursor / Claude Desktop

Adicione ao arquivo de configuração MCP:

{
  "mcpServers": {
    "pr-guardian-mcp": {
      "command": "node",
      "args": ["/caminho/absoluto/pr-guardian-mcp/dist/index.js"],
      "env": {
        "ANTHROPIC_API_KEY": "sk-ant-...",
        "LANGCHAIN_TRACING_V2": "true",
        "LANGCHAIN_API_KEY": "lsv2_...",
        "LANGCHAIN_PROJECT": "pr-guardian-mcp"
      }
    }
  }
}

Ferramenta MCP

analyze_pr_diff

Parâmetro Tipo Obrigatório Descrição
diff string Sim Diff unified do PR (formato git)
prTitle string Não Título do PR para contexto
prNumber number Não Número do PR

Exemplo de resposta:

{
  "approved": true,
  "path": "deterministic",
  "reason": "Alterações exclusivas em documentação (.md) ou estilos (.css) — aprovado sem chamada à LLM.",
  "findings": [],
  "metadata": {
    "analyzedAt": "2026-07-15T18:00:00.000Z",
    "filesChanged": ["README.md", "docs/guide.md"],
    "tokenCostSaved": true
  }
}

Docker

Build e execução

docker build -t pr-guardian-mcp .
docker run -i --rm \
  -e ANTHROPIC_API_KEY=sk-ant-... \
  -e LANGCHAIN_TRACING_V2=true \
  -e LANGCHAIN_API_KEY=lsv2_... \
  -e LANGCHAIN_PROJECT=pr-guardian-mcp \
  pr-guardian-mcp

Docker Compose

cp .env.example .env
docker compose up --build

O container expõe o servidor via stdio (-i), compatível com clientes MCP que lançam processos filhos.

Stack

Pacote Papel
@modelcontextprotocol/sdk Servidor MCP
@langchain/langgraph Orquestração do fluxo Determinístico vs IA
@langchain/anthropic Integração Claude 3.5 Haiku
zod Validação estrita de input/output
langsmith Tracing de custo e latência

Licença

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured