mcpField
L
Laraguard Mcp

Laraguard Mcp

Local
github.com/ecr17devSecurity2Updated 35w ago

About Laraguard Mcp

Laraguard MCP is a TypeScript MCP server for auditing Laravel projects without requiring the application to run. It provides structured security findings across source code, configuration, routes, Blade templates, and dependencies, with optional live probes for a running app.

Key features

  1. 01Static PHP security scanning
  2. 02Blade template XSS checks
  3. 03Route and middleware audits
  4. 04Configuration and dependency audits
  5. 05Live HTTP attack probes
  6. 06Consolidated audit reports

Use cases

  1. 01Review a Laravel project before release
  2. 02Check locked Composer packages for known CVEs
  3. 03Audit authentication and middleware coverage
  4. 04Probe a local or staging app for common weaknesses

MCP support

It exposes eight audit tools to MCP clients, including project metadata, specialized checks, attack simulation, and a combined audit. Communication uses stdio.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

No install method listed yet

We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.

Repository

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

Laraguard MCP

image

A security audit MCP server for Laravel projects — built with TypeScript and stdio transport.

License: MIT Node.js TypeScript MCP SDK Version


Overview

Laraguard MCP is a standalone Model Context Protocol (MCP) server that performs security audits on Laravel projects. It is implemented in pure TypeScript using the official @modelcontextprotocol/sdk and communicates over stdio, making it natively compatible with any MCP-capable IDE or client (Cursor, Claude Desktop, VS Code MCP extensions, etc.).

The server analyses a Laravel project as an external target — it does not require Laravel to be running. It returns structured JSON findings categorised by severity, covering configuration issues, risky code patterns, and dependency hygiene.


Features

  • 🔍 Static code scanning — 15+ rules covering SQL injection, RCE, hardcoded credentials, weak crypto, mass assignment, and LFI
  • 🎭 Blade XSS scanner — detects unescaped {!! !!} output and raw input rendering in templates
  • 🛣️ Route & middleware audit — flags admin routes without auth, API routes without auth:sanctum, login routes without throttle, and CSRF exceptions
  • 📦 Dependency CVE feed — queries the OSV.dev API for real CVEs across all composer.lock packages
  • ⚙️ Configuration audit — inspects .env (DEBUG, APP_KEY, APP_ENV, secure cookies) and config/cors.php
  • 🗂️ Project metadata — reads composer.json to identify Laravel and PHP version constraints
  • 💥 Active attack simulation — fires HTTP probes (SQL injection, XSS, CSRF, auth bypass, rate limiting) against a running app
  • 🔒 Path traversal prevention — strict allowlist enforcement for all file operations
  • ✂️ Secret redaction — sensitive values are masked in textual output before reaching the MCP client
  • 🚀 stdio transport — zero-config network; works inside any IDE that supports MCP

MCP Tools

The server exposes 8 tools. All static tools accept a single path parameter. attack_simulate additionally requires a baseUrl.

ToolInputDescription
project_infopathReturns metadata from composer.json: project name, Laravel/PHP version constraints, engine info.
dependency_auditpathParses composer.lock and queries OSV.dev for real CVEs with severity and fix versions.
config_auditpathInspects .env (DEBUG, APP_KEY, APP_ENV, session cookies) and config/cors.php (wildcard origins).
code_scanpath15+ static pattern rules across all PHP files — credentials, weak crypto, mass assignment, RCE, LFI, SQL injection.
blade_scanpathScans resources/views/ Blade templates for unescaped output ({!! !!}) and XSS-prone patterns.
route_auditpathAudits route files and middleware for missing auth, missing throttle, and CSRF exception wildcards.
attack_simulatepath + baseUrlFires 6 live HTTP probes against a running app: SQL injection, XSS, CSRF, auth bypass, rate limiting, error disclosure.
full_auditpathRuns dependency_audit + config_audit + code_scan + blade_scan + route_audit in parallel and returns a consolidated report.
Code Scan — Detected Patterns
PatternSeverityFinding Type
->whereRaw(HighSQL_INJECTION
DB::raw(MediumRAW_SQL_USAGE
unserialize(CriticalUNSAFE_UNSERIALIZE
shell_exec( / exec( / system( / passthru(CriticalRCE_RISK
eval(CriticalEVAL_USAGE
password = 'literal'CriticalHARDCODED_PASSWORD
api_key = 'literal'CriticalHARDCODED_API_KEY
Long hardcoded tokens/secretsHighHARDCODED_SECRET
md5(HighWEAK_HASH_MD5
sha1(MediumWEAK_HASH_SHA1
protected $guarded = []HighMASS_ASSIGNMENT_UNGUARDED
file_get_contents($request…)CriticalPATH_TRAVERSAL_RISK
include/require($request…)CriticalLFI_RISK
Audit Report Schema

Every tool returns a structured JSON report:

{
  "summary": {
    "critical": 0,
    "high": 1,
    "medium": 2,
    "low": 0,
    "info": 1
  },
  "findings": [
    {
      "severity": "high",
      "type": "SQL_INJECTION",
      "title": "Potential SQL injection via whereRaw",
      "file": "app/Http/Controllers/UserController.php",
      "line": 42,
      "evidence": "->whereRaw('email = ' . $email)",
      "recommendation": "Avoid raw SQL with user input. Use parameter binding/query builder."
    }
  ],
  "metadata": {
    "scannedPath": "/absolute/path/to/laravel-project",
    "engine": "Laraguard MCP",
    "version": "3.0.0",
    "timestamp": "2025-01-01T00:00:00.000Z",
    "durationMs": 312
  }
}

Architecture

src/
├── index.ts      — MCP server bootstrap and tool registration
├── config.ts     — Environment variable loading and validation
├── security.ts   — Path allowlist enforcement and secret redaction
├── files.ts      — Safe file enumeration and reading
├── tools.ts      — Audit tool implementations
├── reports.ts    — Report aggregation and severity summarization
└── types.ts      — Domain types (Finding, AuditReport, Severity, etc.)

Runtime stack:

ComponentTechnology
RuntimeNode.js 20+
LanguageTypeScript 5.x
ProtocolModel Context Protocol (MCP)
Transportstdio
Schema validationZod
MCP SDK@modelcontextprotocol/sdk

Requirements

  • Node.js 20 or higher
  • npm 10 or higher

Verify your environment:

node -v
npm -v

Installation

Clone the repository and install dependencies:

git clone https://github.com/ecr17dev/Laraguard-MCP.git
cd "Laraguard MCP"
npm install

Configuration

Copy the example environment file and customise it:

cp .env.example .env
Environment Variables
VariableDefaultDescription
MCP_BASE_PATH—Single allowed root path for project scanning.
MCP_BASE_PATHS—Comma-separated list of allowed root paths. Takes precedence over MCP_BASE_PATH.
MCP_MAX_FILES5000Maximum number of files to enumerate per scan.
MCP_MAX_FILE_SIZE_BYTES300000Maximum file size (in bytes) to read per file.
MCP_TIMEOUT_SECONDS30Logical timeout for audit operations.

Priority order: MCP_BASE_PATHS → MCP_BASE_PATH → current working directory.

Example .env
# Allow scanning two project roots
MCP_BASE_PATHS="/Users/yourname/projects/my-laravel-app,/srv/workspaces/api"

# Scan limits
MCP_MAX_FILES=5000
MCP_MAX_FILE_SIZE_BYTES=300000
MCP_TIMEOUT_SECONDS=30

Development

Available Scripts
CommandDescription
npm run devRuns the MCP server directly from TypeScript source using tsx (recommended for development)
npm run buildCompiles TypeScript to dist/
npm run startRuns the compiled server from dist/index.js
npm run checkType-checks the project without emitting output
Running in Development Mode
npm run dev
Building for Production
npm run check   # Validate types first
npm run build   # Emit to dist/
npm run start   # Run compiled output

Integration with MCP Clients

Generic MCP Configuration (JSON)

Add the following to your MCP client's configuration file, replacing the path with the absolute path to your installation:

{
  "mcpServers": {
    "laraguard": {
      "command": "node",
      "args": ["/absolute/path/to/Laraguard MCP/dist/index.js"],
      "env": {
        "MCP_BASE_PATHS": "/absolute/path/to/your-laravel-project"
      }
    }
  }
}
Using Development Mode (tsx)

If you prefer to run without building first:

{
  "mcpServers": {
    "laraguard": {
      "command": "npx",
      "args": ["tsx", "/absolute/path/to/Laraguard MCP/src/index.ts"],
      "env": {
        "MCP_BASE_PATHS": "/absolute/path/to/your-laravel-project"
      }
    }
  }
}
Cursor IDE

Open Settings → MCP and paste the JSON block above. Cursor will detect the server on the next reload.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) and add the laraguard entry under mcpServers.


Tool Usage Reference

project_info
{ "path": "/absolute/path/to/laravel-project" }

Returns basic project metadata without performing any security checks. Use it to confirm the target is a valid Laravel project and inspect framework and PHP version constraints before auditing.


dependency_audit
{ "path": "/absolute/path/to/laravel-project" }

Parses composer.lock, extracts all locked package names and versions, and queries the OSV.dev batch API for known CVEs. Each vulnerability is returned as a finding with:

  • CVE/GHSA identifier and summary
  • Severity (mapped from CVSS score)
  • Affected package version and recommended fix version
  • Direct link to the advisory page

config_audit
{ "path": "/absolute/path/to/laravel-project" }
CheckFileSeverity
APP_DEBUG=true.envHigh
APP_ENV=local.envMedium
APP_KEY= (empty).envCritical
SESSION_SECURE_COOKIE=false.envMedium
Wildcard CORS origin ('*')config/cors.phpMedium

code_scan
{ "path": "/absolute/path/to/laravel-project" }

Performs line-by-line static analysis across all PHP files. Returns every matching finding with file path, line number, and evidence snippet. See the Code Scan — Detected Patterns table above for the full rule set.


blade_scan
{ "path": "/absolute/path/to/laravel-project" }

Scans all .blade.php files under resources/views/ for XSS-prone output patterns:

CheckSeverity
{!! $variable !!} — unescaped variableHigh
{!! request( !!} / {!! old( !!} — raw user inputCritical
echo $_GET / echo $_POST in blade PHP blocksHigh

route_audit
{ "path": "/absolute/path/to/laravel-project" }

Reads routes/web.php, routes/api.php, and app/Http/Middleware/VerifyCsrfToken.php:

CheckFileSeverity
Admin/dashboard route without auth middlewareroutes/web.phpCritical
API route without auth:sanctum / auth:apiroutes/api.phpHigh
Login/register route without throttle middlewareRoute filesMedium
Wildcard pattern in VerifyCsrfToken::$exceptVerifyCsrfToken.phpHigh

attack_simulate
{
  "path": "/absolute/path/to/laravel-project",
  "baseUrl": "http://localhost:8000"
}

⚠️ Only use against local or staging environments. Never run against production.

Fires 6 live HTTP probes against the running application:

ProbeMethod & EndpointWhat it Tests
error_disclosureGET /__invalid_route__Framework/stack-trace info leakage
sql_injection_loginPOST /login with SQLi payloadSQL injection in login form
reflected_xssGET /search?q=<script>…Reflected XSS in search/query params
csrf_not_enforcedPOST /login without CSRF tokenCSRF token enforcement (expects HTTP 419)
auth_bypassGET /api/user without auth headerUnauthenticated access to protected API
rate_limit10× rapid POST /loginBrute-force rate limiting (expects HTTP 429)

The report includes a probes metadata array with the status code, duration, and triggered state for every probe.


full_audit
{ "path": "/absolute/path/to/laravel-project" }

Runs dependency_audit, config_audit, code_scan, blade_scan, and route_audit in parallel and merges all findings into a single consolidated report. The metadata includes per-section summaries.


Security Design

Laraguard MCP implements the following controls to ensure it operates safely even when handling untrusted project paths:

  • Strict path allowlisting — all file access is validated against MCP_BASE_PATHS / MCP_BASE_PATH; path traversal attempts are rejected immediately.
  • File count limit — configurable cap (MCP_MAX_FILES) prevents runaway enumeration on large monorepos.
  • File size limit — configurable cap (MCP_MAX_FILE_SIZE_BYTES) prevents memory exhaustion from binary or generated files.
  • Directory and extension exclusions — vendor/, node_modules/, .git/, and binary file types are excluded from scans.
  • Secret redaction — sensitive values (passwords, tokens, keys) are masked in textual output before being returned to the MCP client.
  • Attack simulation guard — attack_simulate always targets only the explicitly provided baseUrl; no automated discovery or production detection is performed.

Important Notes

  • Laraguard MCP analyses a Laravel project as an external auditor — the Laravel application itself does not need to be running for static tools.
  • attack_simulate requires the application to be running and should never target production.
  • The server is framework-agnostic at the transport level: any client that supports MCP stdio can use it.
  • All findings are informational. Always combine automated scanning with manual code review and dedicated DAST/SAST tooling (OWASP ZAP, Burp Suite) for production security assessments.

License

This project is licensed under the MIT License. See LICENSE for details.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.