Code Sentinel

io.github.salrad22由 GitHub 帳號 salrad22 發布v0.2.6更新於 Oct 24, 2026

Code quality analysis MCP server - detects security issues, deceptive patterns, and placeholders

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

分析原始碼中的安全性缺陷、隱藏錯誤的欺騙性模式、佔位程式碼與程式碼異味,並回傳結構化 JSON 或 HTML 報告。

可以做什麼
CodeSentinel 會對你傳入的程式碼進行以模式為基礎的靜態分析,涵蓋安全性、欺騙性模式、佔位程式碼、錯誤與優點共 93 種模式。工具包括 analyze_code 回傳完整 JSON 結果、generate_report 產生視覺化 HTML 報告,以及 check_security、check_deceptive_patterns、check_placeholders、analyze_patterns 與 analyze_design_patterns。它能找出硬編碼密鑰、空的 catch 區塊、掩蓋錯誤的退路寫法、TODO 佔位與 linter 抑制等,也會標示良好實務。語言由檔名推斷,支援 TypeScript、JavaScript、Python、Go、Rust、Java 等。
適用情境
適合在審查 AI 產生或人工撰寫的程式碼時使用,作為品質關卡,在程式碼進入正式環境前找出隱藏的失敗、未完成的實作或硬編碼憑證。它補充而非取代 linter 與型別檢查工具,因為它針對的是語意意圖而非語法或風格。
執行需求
以 npm 套件 code-sentinel-mcp 透過 stdio 在本機執行,通常使用 npx 或全域安裝,因此需要 Node.js。未宣告任何環境變數、標頭或身分驗證。README 也記錄了可選的 Cloudflare Workers 遠端端點與自架方式,那將需要 Cloudflare 帳號與 Wrangler CLI。
安裝前請注意
分析以模式比對為基礎,結果可能包含誤報,應人工複核而非視為定論。此伺服器會讀取你傳送的程式碼;若改用遠端端點而非本機程序,程式碼將離開你的機器。本機伺服器不要求任何憑證。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Code Sentinel,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

CodeSentinel MCP Server

A comprehensive code quality analysis server for the Model Context Protocol (MCP). CodeSentinel integrates with Claude Code and other MCP-compatible clients to detect security vulnerabilities, deceptive patterns, incomplete code, and highlight good practices.

Why CodeSentinel?

AI coding assistants can inadvertently introduce subtle issues: hardcoded secrets, empty catch blocks, TODO placeholders left behind, or patterns that hide errors. CodeSentinel acts as a quality gate, analyzing code for 93 distinct patterns across 5 categories before issues reach production.

Key differentiators:

  • Verification-aware detection: Many patterns include verification steps to reduce false positives
  • LLM-optimized output: Structured JSON output designed for AI consumption and action
  • Balanced analysis: Detects both issues AND strengths for fair code assessment
  • Multi-language support: Works with TypeScript, JavaScript, Python, Go, Rust, Java, and more

Why Not Tree-sitter or AST-Based Tools?

CodeSentinel intentionally uses a pattern-based approach rather than AST parsing. Here's why:

The Problem We Solve Is Different

Traditional linters (ESLint, tree-sitter) detect syntax errors and style violations. CodeSentinel detects semantically deceptive patterns - code that is:

  • Syntactically valid (passes all linters)
  • Structurally correct (valid AST)
  • But hides serious issues that AI agents commonly produce

Examples AST Tools Miss

javascript
// AST sees: valid try-catch block// CodeSentinel sees: error swallowing that masks failurestry { riskyOperation(); } catch(e) { }
// AST sees: valid function returning boolean// CodeSentinel sees: fake implementation that always succeedsfunction validateUser() { return true; } // TODO: implement
// AST sees: valid fallback expression// CodeSentinel sees: failure masking - "no data" vs "fetch failed" indistinguishableconst users = response.data || [];
// AST sees: valid return statement// CodeSentinel sees: silent failure hidingif (error) { return null; } // error case

What Each Approach Detects

Issue TypeAST/Tree-sitterCodeSentinel
Syntax errorsYesNo (not our goal)
Missing semicolonsYesNo
Unused variablesYesNo
Empty catch blocksPartiallyYes
Silent error returnsNoYes
Fake success responsesNoYes
TODO/placeholder codeNoYes
Error-masking fallbacksNoYes
Hardcoded secretsLimitedYes
Deceptive commentsNoYes

The Real Issue: Agent Behavior

AI coding agents produce code that looks correct but contains subtle deceptions:

  1. "Making the error go away" - Empty catches, silent returns, swallowed exceptions
  2. Placeholder implementations - return true, return [], TODO comments
  3. False confidence patterns - || [] fallbacks that mask fetch failures
  4. Suppression abuse - @ts-ignore, eslint-disable to hide type errors

These patterns pass every linter and compile successfully. AST tools see valid structure. Only pattern-based detection catches the semantic intent behind the code.

When to Use What

ToolUse For
ESLint/TSLintStyle consistency, syntax rules, unused code
Tree-sitterSyntax highlighting, code navigation, refactoring
TypeScriptType safety, compile-time errors
CodeSentinelAgent-generated deceptions, error hiding, incomplete implementations

CodeSentinel complements these tools - it catches what they structurally cannot.

Features

  • Security Analysis (16 patterns): Hardcoded secrets, SQL injection, XSS, command injection, insecure crypto, disabled SSL, and more
  • Deceptive Pattern Detection (17 patterns): Empty catch blocks, silent failures, error-hiding fallbacks, linter suppression
  • Placeholder Detection (19 patterns): TODO/FIXME/HACK comments, lorem ipsum, test data, incomplete implementations
  • Error & Code Smell Detection (18 patterns): Type coercion issues, null references, async anti-patterns, floating point comparison
  • Strength Recognition (23 patterns): Highlights good practices like proper typing, error handling, testing patterns, documentation
  • HTML Reports: Visual reports with quality scores and actionable suggestions

Installation

From npm

bash
npm install -g code-sentinel-mcp

From source

bash
git clone https://github.com/salrad22/code-sentinel.gitcd code-sentinelnpm installnpm run build

Usage with Claude Code

Quick setup

bash
claude mcp add code-sentinel -- npx code-sentinel-mcp

Or if installed globally

bash
claude mcp add code-sentinel -- code-sentinel

Manual configuration

Add to your Claude Code MCP configuration file (~/.claude/claude_desktop_config.json):

json
{  "mcpServers": {    "code-sentinel": {      "command": "npx",      "args": ["code-sentinel-mcp"]    }  }}

Remote Server (Cloudflare Workers)

CodeSentinel is also available as a remote MCP server on Cloudflare Workers. No local installation required!

Quick connect (Claude Code)

bash
claude mcp add-remote code-sentinel https://code-sentinel-mcp.sharara.dev/sse

Or use the Streamable HTTP endpoint (recommended for newer clients):

bash
claude mcp add --transport http code-sentinel https://code-sentinel-mcp.sharara.dev/mcp

Endpoints

EndpointProtocolDescription
https://code-sentinel-mcp.sharara.dev/mcpStreamable HTTPRecommended
https://code-sentinel-mcp.sharara.dev/sseServer-Sent EventsLegacy support
https://code-sentinel-mcp.sharara.dev/HTTP GETHealth check / server info

Self-hosting on Cloudflare

Deploy your own instance:

bash
cd cloudflarenpm installnpm run dev      # Local development at localhost:8787npm run deploy   # Deploy to your Cloudflare account

Requirements:

  • Cloudflare account (free tier works)
  • Wrangler CLI (npm install -g wrangler)
  • wrangler login to authenticate

The server uses Durable Objects for persistent MCP connections. No database required.

Available Tools

analyze_code

Full analysis returning structured JSON with all issues and strengths. Best for programmatic processing.

Parameters:

  • code (string, required): The source code to analyze
  • filename (string, required): Filename for language detection (e.g., "app.ts")

Returns: JSON object with issues, strengths, and summary statistics.

generate_report

Full analysis with a visual HTML report. Best for human review.

Parameters:

  • code (string, required): The source code to analyze
  • filename (string, required): Filename for language detection

Returns: Markdown summary plus complete HTML report.

check_security

Security-focused analysis only. Use when you specifically want to audit for vulnerabilities.

Parameters:

  • code (string, required): The source code to check
  • filename (string, required): Filename

Returns: List of security issues or confirmation of none found.

check_deceptive_patterns

Check for code patterns that hide errors or create false confidence.

Parameters:

  • code (string, required): The source code to check
  • filename (string, required): Filename

Returns: List of deceptive patterns found.

check_placeholders

Find TODOs, dummy data, and incomplete implementations.

Parameters:

  • code (string, required): The source code to check
  • filename (string, required): Filename

Returns: List of placeholder code found.

analyze_patterns

Analyze code for architectural, design, and implementation patterns. Detects pattern usage, inconsistencies, and provides actionable suggestions.

Parameters:

  • code (string, required): The source code to analyze
  • filename (string, required): Filename for language detection
  • level (string, optional): Pattern level to analyze:
    • architectural: System structure patterns (layering, modules)
    • design: Gang of Four patterns (Singleton, Factory, Observer)
    • code: Implementation idioms (error handling, async patterns)
    • all: All levels (default)
  • query (string, optional): Natural language query to focus analysis (e.g., "how is error handling done?")

Returns: LLM-optimized JSON with detected patterns, inconsistencies, suggestions, and ready-to-execute action items.

analyze_design_patterns

Focused analysis of Gang of Four (GoF) design patterns. Best for understanding OOP structure.

Parameters:

  • code (string, required): The source code to analyze
  • filename (string, required): Filename for language detection

Returns: Detected design patterns with confidence levels, locations, and implementation details.

Example Usage

Ask Claude to analyze code:

Analyze this code for quality issues:
const API_KEY = "sk-abc123456789";
async function fetchData() {  try {    const response = await fetch(url);    return response.json();  } catch (e) {    // TODO: handle error  }}

CodeSentinel will detect:

  • Critical (CS-SEC003): OpenAI API key hardcoded in source
  • High (CS-DEC001): Empty catch block silently swallowing errors
  • Low (CS-PH001): TODO comment indicating incomplete implementation

Detection Categories

Security Issues (CS-SEC)

IDPattern
SEC001Hardcoded secrets (API keys, tokens, passwords)
SEC002GitHub tokens
SEC003OpenAI API keys
SEC004AWS access keys
SEC005-010SQL injection patterns
SEC011-015XSS vulnerabilities
SEC016Command injection (eval, exec)

Deceptive Patterns (CS-DEC)

IDPattern
DEC001-003Empty/comment-only catch blocks
DEC010-012Silent promise rejections
DEC020-025Error-hiding fallbacks (
DEC030+Linter suppression, fake success responses

Placeholders (CS-PH)

IDPattern
PH001-005TODO/FIXME/HACK/XXX/NOTE comments
PH010-015Lorem ipsum, placeholder text
PH020-025Test/dummy data ([email protected], password123)
PH030+console.log debugging, debugger statements

Errors & Code Smells (CS-ERR)

IDPattern
ERR001-005Loose equality (==), type coercion issues
ERR010-015Null reference risks
ERR020-025Async anti-patterns
ERR030+parseInt without radix, array mutation in loops

Strengths (CS-STR)

IDPattern
STR001-005TypeScript strict typing
STR010-015Proper error handling patterns
STR020-025Test coverage indicators
STR030+Documentation, input validation

Scoring Algorithm

Quality score (0-100) calculated as:

Score = 100 - (critical × 25) - (high × 15) - (medium × 5) - (low × 1) + (strengths × 2)
SeverityPoint Deduction
Critical-25 points
High-15 points
Medium-5 points
Low-1 point
Strength+2 points (bonus)

Supported Languages

CodeSentinel detects language from file extensions:

ExtensionLanguage
.ts, .tsxTypeScript
.js, .jsxJavaScript
.pyPython
.goGo
.rsRust
.javaJava
.ktKotlin
.swiftSwift
.csC#
.cpp, .cC/C++
.phpPHP
.vueVue
.svelteSvelte

Extending CodeSentinel

CodeSentinel uses a data-driven pattern system that separates pattern definitions from regex generation. This makes adding new patterns easier and more maintainable.

Project Structure

src/├── patterns/│   ├── types.ts           # Type definitions for pattern configs│   ├── builders.ts        # Functions that generate regex from configs│   ├── compiler.ts        # Compiles definitions to executable patterns│   └── definitions/│       ├── security.ts    # Security vulnerability patterns│       ├── deceptive.ts   # Error-hiding patterns│       ├── placeholders.ts # Incomplete code patterns│       ├── errors.ts      # Code smell patterns│       └── index.ts       # Exports all definitions├── analyzers/│   ├── core.ts            # Unified analyzer using compiled patterns│   ├── security.ts        # Security analyzer (delegates to core)│   ├── deceptive.ts       # Deceptive analyzer (delegates to core)│   ├── placeholders.ts    # Placeholder analyzer (delegates to core)│   ├── errors.ts          # Error analyzer (delegates to core)│   └── strengths.ts       # Strength analyzer└── index.ts               # MCP server entry point

Adding a New Pattern

Instead of writing regex manually, you define what to detect and the system generates the regex:

typescript
// Old approach (manual regex){  id: 'CS-DEC001',  pattern: /catch\s*\([^)]*\)\s*\{\s*\}/g,  // Error-prone  title: 'Empty Catch Block',  // ...}
// New approach (data-driven){  id: 'CS-DEC001',  title: 'Empty Catch Block',  description: 'Silently swallowing errors makes debugging impossible.',  severity: 'high',  category: 'deceptive',  suggestion: 'At minimum, log the error. Better: handle it appropriately.',  match: {    type: 'catch_handler',    behavior: 'empty'  }}

Available Match Types

Match TypeDescriptionExample Config
empty_blockEmpty catch/finally/promise blocks{ type: 'empty_block', constructs: ['catch', '.catch'] }
function_callFunction/method calls{ type: 'function_call', names: ['eval', 'exec'] }
returns_onlyReturn statements with specific values{ type: 'returns_only', values: ['null', '[]', '{}'] }
contains_textText in comments/strings{ type: 'contains_text', terms: ['TODO', 'FIXME'], context: 'comment' }
fallback_valueFallback patterns{ type: 'fallback_value', operators: ['||'], values: ['[]'] }
catch_handlerCatch block behaviors{ type: 'catch_handler', behavior: 'empty' }
promise_catchPromise .catch() behaviors{ type: 'promise_catch', behavior: 'returns_silent' }
comment_markerTODO/FIXME/HACK markers{ type: 'comment_marker', markers: ['TODO', 'FIXME'] }
string_literalPatterns inside strings{ type: 'string_literal', patterns: ['password', 'secret'] }
secret_patternAPI keys and tokens{ type: 'secret_pattern', kind: 'github' }
url_patternURL patterns{ type: 'url_pattern', protocol: 'http', excludeLocalhost: true }
suppression_commentLinter suppressions{ type: 'suppression_comment', tools: ['ts-ignore', 'eslint-disable'] }
type_castType casts{ type: 'type_cast', targets: ['any'] }
comparisonComparison operators{ type: 'comparison', operators: ['==', '!='] }
loop_patternLoop patterns{ type: 'loop_pattern', kind: 'while_true' }
raw_regexEscape hatch for complex patterns{ type: 'raw_regex', pattern: 'your-regex', flags: 'gi' }

Step-by-Step: Adding a Pattern

  1. Choose the category - security, deceptive, placeholder, or error
  2. Open the definition file - src/patterns/definitions/<category>.ts
  3. Add a new pattern definition using the appropriate match type
  4. Build - npm run build
  5. Test - Use the MCP inspector to verify detection

Pattern Definition Structure

typescript
{  id: string;              // Unique ID: CS-<CAT><NUM> (e.g., CS-SEC001)  title: string;           // Short description (displayed in results)  description: string;     // Detailed explanation of the issue  severity: Severity;      // 'critical' | 'high' | 'medium' | 'low' | 'info'  category: Category;      // 'security' | 'deceptive' | 'placeholder' | 'error'  suggestion?: string;     // How to fix the issue  match: MatchConfig;      // What to detect (see match types above)  verification?: {         // Optional: reduce false positives    status: 'needs_verification' | 'confirmed';    assumption?: string;    confirmIf?: string;    falsePositiveIf?: string;  }}

Development

bash
# Install dependenciesnpm install
# Buildnpm run build
# Watch modenpm run watch
# Test with MCP inspectornpm run inspector

Contributing

Contributions welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Add patterns following the existing format
  4. Submit a pull request

License

MIT

Links

來源:README.md,提交 6fac834

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.2.6最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。