mcpField
A
ai-code-scanner

ai-code-scanner

Local
github.com/GuardBeeSecurity1Updated 1d ago

About ai-code-scanner

ai-code-scanner is an MCP server for developers reviewing security risks in LLM and AI code integrations. It uses heuristic pattern scans across five risk categories and includes remediation guidance with findings.

Key features

  1. 01Scans 10 patterns across five categories
  2. 02Explains risks and recommends remediation
  3. 03Exports findings as SARIF 2.1.0
  4. 04Supports configuration and custom rule packs
  5. 05Scans text, files, and directories

Use cases

  1. 01Review AI integration code for exposed client-side keys
  2. 02Find unsafe handling of model output
  3. 03Check prompts for direct PII or raw input
  4. 04Add AI security scans to CI/CD

MCP support

Exposes tools to scan text, individual files, and directories, and to list supported patterns. Findings include risk explanations and recommendations.

Configuration

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

mcp.json · Universal config
{
"mcpServers": {
"guardbee-ai-code-scanner": {
"command": "npx",
"args": [
"-y",
"@guardbee/mcp-ai-code-scanner"
]
}
}
}
Run commandnpx -y @guardbee/mcp-ai-code-scanner

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@guardbee/mcp-ai-code-scanner0.4.2

Tools

4

Saved tool list · updated 1w ago

ParameterTypeRequiredDescription
labelstringNoOptional label shown in findings (e.g. filename)
contentstringYesThe code content to scan

Details

From the project README

@guardbee/mcp-ai-code-scanner

🇬🇧 English | 🇹🇷 Türkçe | 🇨🇳 中文 | 🇯🇵 日本語 | 🇰🇷 한국어 | 🇧🇷 Português | 🇪🇸 Español | 🇩🇪 Deutsch

npm version npm downloads License: MIT

An MCP (Model Context Protocol) server that scans your codebase for security patterns commonly found in LLM/AI integrations.

While secret-scanner looks for leaked secrets/API keys, this package looks for patterns: how much a model's output is trusted, how privileged the tools it can call are, what data is sent to a third-party LLM — risks that a static credential scan can't catch.

Telemetry is off by default. With GUARDBEE_TELEMETRY=1 it sends the server, tool, success, duration and short parameter values such as a file path; longer strings and fields like content, token or password are replaced with a placeholder. See @guardbee/mcp-telemetry.

Claude ──► ai-code-scanner ──► Your codebase
              │
              ├─ Client-exposure    (dangerouslyAllowBrowser: true)
              ├─ Output handling    (eval(llmOutput), unvalidated JSON.parse)
              ├─ Excessive agency   (an agent tool named execute_command)
              ├─ Data privacy       (email/national ID interpolated directly into a prompt)
              └─ Prompt injection   (raw request data mixed into a system prompt)

Features

  • 10 patterns, 5 categories — client-exposure, output-handling, excessive-agency, data-privacy, prompt-injection
  • Every finding includes why it's risky and what to do about it (recommendation) — not just "found it"
  • SARIF 2.1.0 output — CI/CD integration (GitHub Code Scanning, etc.)
  • Config file support via guardbee.yml
  • Custom rule packs — extend detection with org-specific patterns (KVKK/GDPR field names, internal tool names) via JSON files, no fork required
  • 36 unit tests — a positive and a negative (false-positive) scenario for every built-in pattern, plus custom-rule loading/validation

Quick Start

Claude Desktop / MCP Client
{
  "mcpServers": {
    "guardbee-ai-code-scanner": {
      "command": "npx",
      "args": ["-y", "@guardbee/mcp-ai-code-scanner"]
    }
  }
}
CLI (CI/CD)
npx @guardbee/mcp-ai-code-scanner scan ./src --fail-on=high --format=sarif > results.sarif

MCP Tools

ToolDescription
scan_textScans a given text/code snippet
scan_fileScans a single file
scan_directoryRecursively scans a directory (node_modules, .git, dist skipped automatically)
list_patternsLists all supported patterns by category

Detected Patterns

CategoryPatternSeverityWhat it means
client-exposureopenai_dangerously_allow_browsercriticalOpenAI key leaked to the browser
client-exposureclient_bundled_ai_api_keycriticalAn AI key enters the client bundle via NEXT_PUBLIC_/VITE_/REACT_APP_
output-handlingeval_llm_outputcriticalModel output executed as code via eval()/Function()
output-handlingexec_llm_outputcriticalModel output passed to a shell command (command injection)
output-handlingllm_output_dangerously_set_inner_htmlhighModel output rendered as raw HTML (XSS)
output-handlingllm_json_no_validationmediumModel output JSON.parse'd without schema validation
excessive-agencyexcessive_agency_tool_namehighA tool that grants an agent shell/code execution
excessive-agencyunbounded_agent_loopmediumAn agent loop with no iteration bound (cost/DoS)
data-privacypii_field_in_llm_prompthighData like email/national ID/card number goes directly into a prompt
prompt-injectionunsanitized_input_in_system_promptmediumRaw request/user data mixed into a system prompt

These are heuristic findings — a static text-pattern scan, not a full AST analysis. Designed for a low false-positive rate, but every finding should still be reviewed manually.


Configuration (guardbee.yml)

ai-code-scanner:
  fail-on: high       # any | critical | high | medium | low | none
  max-files: 5000
  rules-dir: .guardbee/rules   # custom rule packs, see below
  exclude:
    - ".test.ts"
    - "fixtures/"

Custom rules

Built-in patterns cover common AI/LLM integration mistakes, but field names and internal conventions (e.g. which prop names carry KVKK-regulated data) are project-specific. Drop one or more JSON files into .guardbee/rules/ (configurable via rules-dir) and they're merged with the built-ins at scan time — for both the CLI and the MCP server (list_patterns marks them (custom)).

A file holds a single rule object or an array of them:

{
  "id": "kvkk_musteri_tc_no",
  "name": "musteriTcNo interpolated into a prompt",
  "category": "data-privacy",
  "pattern": "musteriTcNo",
  "flags": "gi",
  "severity": "high",
  "recommendation": "Mask the national ID before it enters the prompt."
}

category is one of client-exposure | output-handling | excessive-agency | data-privacy | prompt-injection | cost-control; severity is one of critical | high | medium | low. pattern is a JS regex source string (flags defaults to "g"). A rule id that collides with a built-in or another custom rule is rejected — the scanner keeps running but reports the problem on stderr and skips that entry.


Development

npm run build
npm test             # 36 unit tests

License

MIT — GuardBee

Feedback

Questions, ideas, or a false positive? Start a thread in GitHub Discussions or open an issue. If GuardBee is useful to you, a ⭐ on the repository helps others find it.

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.