mcpField
C
CodeSentinel

CodeSentinel

已认证精选本地服务
github.com/icohangar-ops开发工具05 周前更新

关于 CodeSentinel

CodeSentinel(README 中称 CodeHealth MCP)是面向开发者的代码库健康分析 MCP 服务,可检查死代码、循环依赖、耦合和架构漂移。它还提供 MCP 协议健康检查,并可通过 Slack Agent Builder 使用分析结果。

主要功能

  1. 01检测未使用的函数、类和模块
  2. 02识别模块导入循环
  3. 03分析模块扇出与紧密耦合
  4. 04检查架构层边界违规
  5. 05汇总健康评分和优先行动项
  6. 06探测 MCP 握手、模式漂移和秘密

适用场景

  1. 01定位代码库中的死代码
  2. 02查找前端模块的循环依赖
  3. 03检查服务目录的耦合情况
  4. 04评估架构层边界是否被违反
  5. 05验证远程 MCP 端点的协议状态

MCP 相关

通过 stdio 或 Streamable HTTP 提供分析工具,也能探测远程 MCP 端点的握手、工具列表和模式漂移。Slack 集成使用同一组工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"icohangar-ops-codesentinel": {
"command": "npx",
"args": [
"-y",
"@cubiczan/codesentinel-mcp"
]
}
}
}
启动命令npx -y @cubiczan/codesentinel-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@cubiczan/codesentinel-mcp1.0.2

工具

6

收录的工具列表 · 更新于 2 周前

参数类型必填说明
repo_pathstring否要分析的仓库路径或 URL
include_suggestionsboolean否是否包含修复建议

详细介绍

CodeHealth MCP

随处可用的代码库健康分析。 死代码、循环依赖、耦合问题和架构偏移——通过 MCP 工具提供给 Claude Desktop、Cursor、Windsurf 和 Slack。

MCP Node.js License: MIT MCP Registry awesome-mcp-servers


问题

死代码、循环依赖、过度耦合和架构偏移,在日常工作中都难以察觉。静态分析工具会在无人查看的 CI 仪表板中产生大量噪声。CodeHealth MCP 通过模型上下文协议,将这些洞察带到开发者实际使用的工具中。


CodeHealth MCP 的功能

7 个分析工具,可在任何兼容 MCP 的客户端中使用:

工具检查内容
analyze_dead_code未使用的函数、类和模块,附带 file:line 及修复建议
detect_circular_deps通过 DFS 检测模块导入循环并评估影响
analyze_coupling各模块的扇出、紧密集群检测及重构建议
detect_architectural_drift层边界违规(UI→Data、Business→UI 等)
full_health_scan全部四项分析 + 0–100 健康评分 + 按优先级排列的行动项
explain_finding由 AI 提供支持,对任何发现进行详细说明
check_mcp_health远程 MCP 握手(initialize + tools/list)、架构漂移和密钥扫描——HTTP 200 不代表健康

支持的平台

客户端添加方式
Claude Desktop添加到 claude_desktop_config.json
Cursor / Windsurf添加到 MCP 设置
Slack内置 Agent Builder 集成,配有 Block Kit UI
任何 MCP 客户端标准 MCP 服务(stdio)或远程 Streamable HTTP
Claude Desktop 配置(stdio)
{
  "mcpServers": {
    "codehealth": {
      "command": "node",
      "args": ["/path/to/codehealth-mcp/mcp-server/index.js"]
    }
  }
}
远程 Streamable HTTP(Glama / 托管)

要将 CodeSentinel 列为 Glama 远程连接器,必须使用公共 HTTPS + streamable-http。请替换为部署环境中的主机名——不要提交虚假的主机名。

export MCP_BEARER_TOKEN="replace-with-a-long-random-secret"
npm run mcp:http

本地默认地址:http://127.0.0.1:8787/mcp(健康检查:GET /health)。生产环境必须使用 HTTPS。

{
  "mcpServers": {
    "codesentinel": {
      "type": "streamable-http",
      "url": "https://${MCP_HTTP_HOST}/mcp",
      "headers": {
        "Authorization": "Bearer ${MCP_BEARER_TOKEN}"
      }
    }
  }
}

Cursor / Claude 远程连接器使用相同的 url + Authorization 标头。未通过身份验证的 /mcp 会返回 HTTP 401。LLM_API_KEY 和其他提供商密钥仅保留在服务端,不会被回显。

在 Vercel 上部署(公共 HTTPS)

无状态 Streamable HTTP(JSON 请求/响应)可在 Vercel Fluid Compute 上运行。无需粘性会话。不要编造主机名——请使用 Vercel 分配的 URL。

npx vercel          # preview
npx vercel env add MCP_BEARER_TOKEN     # required for /mcp — fail-closed Bearer auth
npx vercel env add LLM_API_KEY          # optional, server-side only
npx vercel env add DAYTONA_API_KEY      # optional, isolated GitHub scans
npx vercel env add GITHUB_TOKEN         # optional, private repo fetch
npx vercel --prod
# GET /health must be 200 even if MCP_BEARER_TOKEN is not set yet.

部署后,MCP 端点为:

https://$VERCEL_PROJECT_PRODUCTION_URL/mcp

(特定部署使用 VERCEL_URL)。健康检查地址:https://$VERCEL_PROJECT_PRODUCTION_URL/health。

请在生产主机上关闭 Vercel Deployment Protection,否则 Glama / 客户端将无法完成 initialize。

Glama 连接器字段(Vercel URL 创建后填写)
字段值
类型连接器(远程 MCP)
服务 URLhttps://$VERCEL_PROJECT_PRODUCTION_URL/mcp
传输方式streamable-http
身份验证API Key / Bearer
请求头Authorization
请求头值Bearer $MCP_BEARER_TOKEN(与 Vercel 环境变量中的密钥相同)
所有权声明https://$VERCEL_PROJECT_PRODUCTION_URL/.well-known/glama.json(静态 public/ 文件)

请参阅 docs/mcp-http.md,了解 Vercel 环境变量、Fluid Compute 注意事项以及 Docker/Fly 回退方案。


快速开始

git clone https://github.com/icohangar-ops/codesentinel.git
cd codesentinel
npm install
cp .env.sample .env
# Edit .env with your LLM API key (and MCP_BEARER_TOKEN for HTTP mode)
npm start

HTTP MCP(相同工具,Bearer 身份验证):

export MCP_BEARER_TOKEN="replace-with-a-long-random-secret"
npm run mcp:http
npm run mcp:http:smoke
在 Claude Desktop 中使用
Run a full health scan on /path/to/my/repo
Find circular dependencies in the frontend
Check coupling metrics in src/services
Check MCP health on https://example.com/mcp
远程 MCP 协议健康状况(并非 HTTP 正常运行时间)

远程 MCP 端点可能返回 HTTP 200,但 initialize、tools/list 或 SSE 流仍会失败。CodeSentinel 会直接探测协议:

  • 合成 Streamable HTTP / 旧版 SSE 握手(initialize + tools/list)
  • 标准工具架构哈希和偏差告警
  • 发现延迟指标
  • 在工具描述/架构进入 Agent 上下文前进行密钥扫描
npm test
npm run mcp:health -- https://example.com/mcp

库:src/lib/mcp-health。分析器:lib/analyzers/mcp-health.js。 完整说明:docs/mcp-health.md。

Daytona 沙箱扫描(可选)

设置 DAYTONA_API_KEY(私有仓库还可选设置 GITHUB_TOKEN)。MCP 工具和 Slack 分析会在 Daytona VM 中浅克隆 GitHub URL,并返回实时导入图分析结果,而非演示数据。

**回退行为(诚实的演示):**当 Daytona 不可用或实时扫描超出截止时间(lib/repo-fetcher.js 中的 SCAN_DEADLINE_MS)时,lib/analysis-engine.js 会将请求标记为 fallback: true,分析器则会返回确定性的演示分析结果,而不是让请求得不到响应——这是有意设置并记录在案的回退方案(lib/analysis-engine.js、lib/repo-fetcher.js),而非静默错误。实时扫描会标记为 scanMode: "daytona"。

full_health_scan repo_path=https://github.com/org/repo
在 Slack 中使用

添加 Slack 应用清单,启用 Agent Builder,然后在任意频道中 @CodeHealth。


架构

┌──────────────────────────────────────────┐
│          MCP CLIENT (any)                │
│  Claude Desktop, Cursor, Slack, etc.     │
└──────────────────┬───────────────────────┘
                   │ MCP Protocol (stdio or Streamable HTTP)
┌──────────────────▼───────────────────────┐
│         CODEHEALTH MCP SERVER            │
│                                          │
│  🔧 analyze_dead_code                    │
│  🔧 detect_circular_deps                 │
│  🔧 analyze_coupling                     │
│  🔧 detect_architectural_drift           │
│  🔧 full_health_scan                     │
│  🔧 explain_finding                      │
│  🔧 check_mcp_health                     │
│                                          │
│  ┌──────────────────────────────────┐    │
│  │       Analysis Engine            │    │
│  │  dead-code | circular-deps       │    │
│  │  coupling | drift | mcp-health   │    │
│  └──────────────────────────────────┘    │
│                                          │
│  ┌──────────────────────────────────┐    │
│  │       LLM Provider               │    │
│  │  Deepseek / OpenAI / Anthropic   │    │
│  └──────────────────────────────────┘    │
└──────────────────────────────────────────┘

Slack 集成

CodeHealth MCP 附带功能完整的 Slack Agent Builder 应用,包含:

  • Block Kit UI — 按严重程度编码的分析结果、健康评分、可执行建议
  • 基于线程的对话 — 在对话线程中进行后续分析
  • 建议提示词 — 一键触发分析
  • MCP 服务 — 相同工具,可随处使用
演示沙箱(Devpost 评委)

实时演示工作区为 codehealthdemo.slack.com — CodeSentinel Agent(应用 ID A0BEHRDN5TQ)已在其中安装并获授权。在任意频道中提及它:

@CodeSentinel run a full health scan on https://github.com/icohangar-ops/codesentinel

沙箱配置:

沙箱中的实时 Agent 响应 — 在 #general 中真实提及 @CodeSentinel,触发由 Daytona 沙箱执行的仓库扫描:

CodeSentinel 在 #general 中响应

应用凭据和应用 ID已启用 Agent 功能已启用 Socket Mode
应用基本信息Agent 已启用Socket Mode 已启用

添加自定义分析器

每个分析器都遵循简单的接口:

function analyze(repoInfo) {
  return {
    type: "your_analysis_type",
    findings: [
      {
        type: "finding_type",
        severity: "critical" | "warning" | "info",
        file: "path/to/file.ts",
        line: 42,
        name: "symbol_name",
        reason: "Why this is a problem",
        suggestion: "How to fix it",
      },
    ],
    stats: { /* summary metrics */ },
  };
}

在 lib/analyzers/ 中添加新的分析器,在 analysis-engine.js 中注册后,即可自动在 Slack 和 MCP 中使用。


路线图

  • 实际 AST 分析 — TypeScript 使用 ts-morph,多语言使用 tree-sitter
  • GitHub App — 在 PR 上自动分析并添加行内评论
  • 历史趋势 — 按仓库追踪健康评分随时间的变化
  • 自定义架构规则 — 通过配置定义层级边界
  • 团队仪表板 — 在 Slack Canvas 中汇总健康状况

传播矩阵 — Wave C 行

第 18 项 — 始终回答降级阶梯:已采用(摘要步骤)

Slack 助手流程(listeners/assistant/message.js)会运行确定性扫描(runAnalysis),然后请求 AI 执行摘要(lib/llm-provider.js)。此前,如果摘要步骤出现 LLMUnavailableError,整个流程就会失败——已完成的确定性扫描被丢弃,用户收到错误。现在,摘要步骤通过 summarizeWithLadder(第 18 项的有界阶梯,FULL → DEGRADED)运行:LLM 不可用时会明确降级——发现内容会在没有叙述的情况下发送,并附上行内标记(“AI summary unavailable — LLM unreachable. Deterministic findings only”);其他情况下,LLMUnavailableError 仍是类型化错误。非不可用错误仍会直接导致失败。测试:test/assistant-degradation.test.js(阶梯行为 + lib/block-kit-builder.js 中带标签的降级标记)。

**重新审视触发条件:**分析路径本身变得依赖模型(发现内容由模型评分,而非仅由模型总结报告)——届时阶梯必须扩展到涵盖发现内容的生成,而不只是摘要。


项目结构

codehealth-mcp/
├── app.js                    # Bolt app entry (Slack)
├── manifest.json             # Slack app manifest
├── lib/
│   ├── analysis-engine.js    # Analysis orchestrator + health score
│   ├── intent-parser.js      # NLP intent classification
│   ├── block-kit-builder.js  # Rich Slack UI
│   ├── llm-provider.js       # Multi-provider LLM
│   └── analyzers/            # dead-code, circular-deps, coupling, drift, mcp-health
├── src/lib/
│   ├── resilience/           # safeFetch / retry
│   └── mcp-health/           # handshake, schema hash, secret scan, CLI
├── mcp-server/
│   ├── index.js              # MCP stdio entry (unchanged tools)
│   ├── http.js               # Streamable HTTP (stateless, Bearer auth)
│   ├── create-server.js      # Shared tool registration
│   └── package.json
├── docs/mcp-http.md          # Remote / Glama / Fly / Railway notes
├── test/                     # handshake / HTTP transport / secret-scan tests
└── functions/                # Slack function definitions

社区与注册目录

CodeHealth MCP 已列入以下目录:


许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。