🚀 CodeSentinel MCP 服務器
CodeSentinel MCP 服務器是一個全面的代碼質量分析服務器,專為 模型上下文協議 (MCP) 設計。它能與 Claude Code 及其他支持 MCP 的客戶端集成,檢測代碼中的安全漏洞、欺騙性模式、不完整代碼,並突出良好實踐。
🚀 快速開始
CodeSentinel 作為代碼質量的把關者,在問題進入生產環境之前,對代碼進行分析,檢測其中可能存在的問題。它能檢測 5 個類別下的 93 種不同模式,確保代碼的安全性和質量。
✨ 主要特性
- 安全分析(16 種模式):檢測硬編碼密鑰、SQL 注入、XSS、命令注入、不安全的加密、禁用的 SSL 等。
- 欺騙性模式檢測(17 種模式):檢測空的 catch 塊、靜默失敗、隱藏錯誤的回退機制、禁用代碼檢查等。
- 佔位符檢測(19 種模式):檢測 TODO/FIXME/HACK 註釋、佔位文本、測試數據、不完整的實現等。
- 錯誤與代碼異味檢測(18 種模式):檢測類型強制轉換問題、空引用、異步反模式、浮點比較等。
- 優點識別(23 種模式):突出良好實踐,如正確的類型定義、錯誤處理、測試模式、文檔編寫等。
- HTML 報告:生成帶有質量評分和可操作建議的可視化報告。
📦 安裝指南
從 npm 安裝
npm install -g code-sentinel-mcp
從源代碼安裝
git clone https://github.com/salrad22/code-sentinel.git
cd code-sentinel
npm install
npm run build
💻 使用示例
與 Claude Code 配合使用
快速設置
claude mcp add code-sentinel -- npx code-sentinel-mcp
若已全局安裝
claude mcp add code-sentinel -- code-sentinel
手動配置
將以下內容添加到你的 Claude Code MCP 配置文件(~/.claude/claude_desktop_config.json)中:
{
"mcpServers": {
"code-sentinel": {
"command": "npx",
"args": ["code-sentinel-mcp"]
}
}
}
遠程服務器(Cloudflare Workers)
CodeSentinel 也可作為 Cloudflare Workers 上的遠程 MCP 服務器使用,無需本地安裝!
快速連接(Claude Code)
claude mcp add-remote code-sentinel https://code-sentinel-mcp.sharara.dev/sse
或者使用可流式傳輸的 HTTP 端點(推薦用於較新的客戶端):
claude mcp add --transport http code-sentinel https://code-sentinel-mcp.sharara.dev/mcp
端點信息
| 端點 |
協議 |
描述 |
https://code-sentinel-mcp.sharara.dev/mcp |
可流式傳輸的 HTTP |
推薦使用 |
https://code-sentinel-mcp.sharara.dev/sse |
服務器發送事件 |
舊版支持 |
https://code-sentinel-mcp.sharara.dev/ |
HTTP GET |
健康檢查 / 服務器信息 |
在 Cloudflare 上自行託管
部署你自己的實例:
cd cloudflare
npm install
npm run dev
npm run deploy
要求:
- Cloudflare 賬戶(免費套餐即可)
- Wrangler CLI(
npm install -g wrangler)
- 執行
wrangler login 進行身份驗證
該服務器使用 Durable Objects 進行持久的 MCP 連接,無需數據庫。
📚 詳細文檔
可用工具
analyze_code
進行全面分析,返回包含所有問題和優點的結構化 JSON。最適合編程式處理。
參數:
code(字符串,必需):要分析的源代碼
filename(字符串,必需):用於語言檢測的文件名(例如,"app.ts")
返回:包含問題、優點和彙總統計信息的 JSON 對象。
generate_report
進行全面分析並生成可視化的 HTML 報告。最適合人工審查。
參數:
code(字符串,必需):要分析的源代碼
filename(字符串,必需):用於語言檢測的文件名
返回:Markdown 摘要和完整的 HTML 報告。
check_security
僅進行安全相關的分析。當你需要專門審核漏洞時使用。
參數:
code(字符串,必需):要檢查的源代碼
filename(字符串,必需):文件名
返回:安全問題列表或確認未發現問題。
check_deceptive_patterns
檢查隱藏錯誤或產生虛假信心的代碼模式。
參數:
code(字符串,必需):要檢查的源代碼
filename(字符串,必需):文件名
返回:發現的欺騙性模式列表。
check_placeholders
查找 TODO、虛擬數據和不完整的實現。
參數:
code(字符串,必需):要檢查的源代碼
filename(字符串,必需):文件名
返回:發現的佔位符代碼列表。
analyze_patterns
分析代碼中的架構、設計和實現模式。檢測模式使用情況、不一致性,並提供可操作的建議。
參數:
code(字符串,必需):要分析的源代碼
filename(字符串,必需):用於語言檢測的文件名
level(字符串,可選):要分析的模式級別:
architectural:系統結構模式(分層、模塊)
design:四人組設計模式(單例、工廠、觀察者)
code:實現習慣用法(錯誤處理、異步模式)
all:所有級別(默認)
query(字符串,可選):自然語言查詢,用於聚焦分析(例如,"錯誤處理是如何實現的?")
返回:針對大語言模型優化的 JSON,包含檢測到的模式、不一致性、建議和可立即執行的操作項。
analyze_design_patterns
專注於四人組(GoF)設計模式的分析。最適合理解面向對象編程結構。
參數:
code(字符串,必需):要分析的源代碼
filename(字符串,必需):用於語言檢測的文件名
返回:檢測到的設計模式,包含置信度級別、位置和實現細節。
示例用法
讓 Claude 分析代碼:
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 將檢測到:
- 嚴重(CS-SEC003):OpenAI API 密鑰硬編碼在源代碼中
- 高(CS-DEC001):空的 catch 塊靜默吞掉錯誤
- 低(CS-PH001):TODO 註釋表明實現不完整
檢測類別
安全問題(CS-SEC)
| ID |
模式 |
| SEC001 |
硬編碼密鑰(API 密鑰、令牌、密碼) |
| SEC002 |
GitHub 令牌 |
| SEC003 |
OpenAI API 密鑰 |
| SEC004 |
AWS 訪問密鑰 |
| SEC005 - 010 |
SQL 注入模式 |
| SEC011 - 015 |
XSS 漏洞 |
| SEC016 |
命令注入(eval、exec) |
欺騙性模式(CS-DEC)
| ID |
模式 |
| DEC001 - 003 |
空的/僅含註釋的 catch 塊 |
| DEC010 - 012 |
靜默的 Promise 拒絕 |
| DEC020 - 025 |
隱藏錯誤的回退機制( |
| DEC030+ |
禁用代碼檢查、虛假成功響應 |
佔位符(CS-PH)
| ID |
模式 |
| PH001 - 005 |
TODO/FIXME/HACK/XXX/NOTE 註釋 |
| PH010 - 015 |
佔位文本 |
| PH020 - 025 |
測試/虛擬數據(test@example.com、password123) |
| PH030+ |
console.log 調試、調試器語句 |
錯誤與代碼異味(CS-ERR)
| ID |
模式 |
| ERR001 - 005 |
寬鬆相等(==)、類型強制轉換問題 |
| ERR010 - 015 |
空引用風險 |
| ERR020 - 025 |
異步反模式 |
| ERR030+ |
不帶基數的 parseInt、循環中的數組突變 |
優點(CS-STR)
| ID |
模式 |
| STR001 - 005 |
TypeScript 嚴格類型定義 |
| STR010 - 015 |
正確的錯誤處理模式 |
| STR020 - 025 |
測試覆蓋率指標 |
| STR030+ |
文檔編寫、輸入驗證 |
評分算法
質量得分(0 - 100)的計算方式如下:
Score = 100 - (critical × 25) - (high × 15) - (medium × 5) - (low × 1) + (strengths × 2)
| 嚴重程度 |
扣分 |
| 嚴重 |
-25 分 |
| 高 |
-15 分 |
| 中 |
-5 分 |
| 低 |
-1 分 |
| 優點 |
+2 分(獎勵) |
支持的語言
CodeSentinel 根據文件擴展名檢測語言:
| 擴展名 |
語言 |
.ts, .tsx |
TypeScript |
.js, .jsx |
JavaScript |
.py |
Python |
.go |
Go |
.rs |
Rust |
.java |
Java |
.kt |
Kotlin |
.swift |
Swift |
.cs |
C# |
.cpp, .c |
C/C++ |
.php |
PHP |
.vue |
Vue |
.svelte |
Svelte |
🔧 技術細節
擴展 CodeSentinel
CodeSentinel 使用數據驅動的模式系統,將模式定義與正則表達式生成分離。這使得添加新的模式更加容易和可維護。
項目結構
src/
├── patterns/
│ ├── types.ts # 模式配置的類型定義
│ ├── builders.ts # 從配置生成正則表達式的函數
│ ├── compiler.ts # 將定義編譯為可執行模式
│ └── definitions/
│ ├── security.ts # 安全漏洞模式
│ ├── deceptive.ts # 隱藏錯誤的模式
│ ├── placeholders.ts # 不完整代碼模式
│ ├── errors.ts # 代碼異味模式
│ └── index.ts # 導出所有定義
├── analyzers/
│ ├── core.ts # 使用編譯後的模式進行統一分析
│ ├── security.ts # 安全分析器(委託給核心)
│ ├── deceptive.ts # 欺騙性分析器(委託給核心)
│ ├── placeholders.ts # 佔位符分析器(委託給核心)
│ ├── errors.ts # 錯誤分析器(委託給核心)
│ └── strengths.ts # 優點分析器
└── index.ts # MCP 服務器入口點
添加新的模式
無需手動編寫正則表達式,只需定義要檢測的內容,系統會自動生成正則表達式:
{
id: 'CS-DEC001',
pattern: /catch\s*\([^)]*\)\s*\{\s*\}/g,
title: 'Empty Catch Block',
}
{
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'
}
}
可用的匹配類型
| 匹配類型 |
描述 |
示例配置 |
empty_block |
空的 catch/finally/promise 塊 |
{ type: 'empty_block', constructs: ['catch', '.catch'] } |
function_call |
函數/方法調用 |
{ type: 'function_call', names: ['eval', 'exec'] } |
returns_only |
返回特定值的返回語句 |
{ type: 'returns_only', values: ['null', '[]', '{}'] } |
contains_text |
註釋/字符串中的文本 |
{ type: 'contains_text', terms: ['TODO', 'FIXME'], context: 'comment' } |
fallback_value |
回退模式 |
{ type: 'fallback_value', operators: ['||'], values: ['[]'] } |
catch_handler |
Catch 塊行為 |
{ type: 'catch_handler', behavior: 'empty' } |
promise_catch |
Promise .catch() 行為 |
{ type: 'promise_catch', behavior: 'returns_silent' } |
comment_marker |
TODO/FIXME/HACK 標記 |
{ type: 'comment_marker', markers: ['TODO', 'FIXME'] } |
string_literal |
字符串內的模式 |
{ type: 'string_literal', patterns: ['password', 'secret'] } |
secret_pattern |
API 密鑰和令牌 |
{ type: 'secret_pattern', kind: 'github' } |
url_pattern |
URL 模式 |
{ type: 'url_pattern', protocol: 'http', excludeLocalhost: true } |
suppression_comment |
禁用代碼檢查註釋 |
{ type: 'suppression_comment', tools: ['ts-ignore', 'eslint-disable'] } |
type_cast |
類型轉換 |
{ type: 'type_cast', targets: ['any'] } |
comparison |
比較運算符 |
{ type: 'comparison', operators: ['==', '!='] } |
loop_pattern |
循環模式 |
{ type: 'loop_pattern', kind: 'while_true' } |
raw_regex |
複雜模式的應急方案 |
{ type: 'raw_regex', pattern: 'your-regex', flags: 'gi' } |
逐步添加模式
- 選擇類別 - 安全、欺騙性、佔位符或錯誤
- 打開定義文件 -
src/patterns/definitions/<category>.ts
- 使用適當的匹配類型添加新的模式定義
- 構建 -
npm run build
- 測試 - 使用 MCP 檢查器驗證檢測結果
模式定義結構
{
id: string;
title: string;
description: string;
severity: Severity;
category: Category;
suggestion?: string;
match: MatchConfig;
verification?: {
status: 'needs_verification' | 'confirmed';
assumption?: string;
confirmIf?: string;
falsePositiveIf?: string;
}
}
開發
npm install
npm run build
npm run watch
npm run inspector
貢獻
歡迎貢獻代碼!請按照以下步驟進行:
- 分叉倉庫
- 創建功能分支
- 按照現有格式添加模式
- 提交拉取請求
📄 許可證
本項目採用 MIT 許可證。
🔗 鏈接