CodeSentinel(CodeHealth MCP)是一个基于 Model Context Protocol(MCP)的代码库健康分析智能体,旨在将死代码、循环依赖、过度耦合和架构漂移等“日常工作中不可见”的问题,直接呈现在开发者实际使用的工具里,而非仅停留在无人查看的 CI 仪表盘中。
【主要能力】 项目提供 7 个分析工具,可在任何兼容 MCP 的客户端中调用。分析覆盖死代码、循环依赖、过度耦合与架构漂移。它同时附带一个完整的 Slack Agent Builder 应用,具备 Block Kit UI(按严重程度编码的发现、健康分数、可操作建议)、基于线程的后续分析对话、一键触发分析的建议提示词,以及可全局复用的 MCP 服务器。此外还包含远程 MCP 协议健康探测功能:合成 Streamable HTTP / 旧版 SSE 握手(initialize + tools/list)、规范工具模式哈希与漂移告警、发现延迟指标,以及在工具描述和模式进入智能体上下文前进行秘密扫描。
【使用方式】 接入方式分为本地与远程:
- Claude Desktop 配置(stdio)
- 远程 Streamable HTTP(Glama / 托管):要求公共 HTTPS + streamable-http,本地默认地址为 http://127.0.0.1:8787/mcp(健康检查:GET /health),生产环境必须使用 HTTPS。Cursor / Claude 远程连接器使用相同的 url + Authorization 头;未认证访问 /mcp 返回 HTTP 401,LLM_API_KEY 等提供方密钥保留在服务器端且不会被回显。
- 部署到 Vercel(公共 HTTPS):无状态 Streamable HTTP(JSON 请求/响应)运行在 Vercel Fluid Compute 上,无粘性会话。部署后 MCP 端点为 https://$VERCEL_PROJECT_PRODUCTION_URL/mcp(特定部署用 VERCEL_URL),健康检查为 https://$VERCEL_PROJECT_PRODUCTION_URL/health。需关闭生产主机上的 Vercel Deployment Protection,否则 Glama/客户端无法完成 initialize。
- Slack 集成:添加 Slack 应用清单,启用 Agent Builder,并在任意频道中 @CodeHealth 即可触发分析。演示工作区为 codehealthdemo.slack.com,CodeSentinel 智能体(App ID A0BEHRDN5TQ)已安装并授权。
【数据扫描方式】 可选启用 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,分析器返回确定性的演示发现,这是一种有文档记录的、有意的回退行为,而非静默错误;实时扫描标记为 scanMode: "daytona"。
【扩展与项目结构】 自定义分析器遵循简单接口:在 lib/analyzers/ 添加新分析器,并在 analysis-engine.js 中注册,即可自动在 Slack 和 MCP 中可用。项目结构包含真实 AST 分析(TypeScript 使用 ts-morph,多语言使用 tree-sitter)、GitHub App(PR 自动分析并内联评论)、历史趋势(按仓库跟踪健康分数)、自定义架构规则(通过配置定义层边界)、团队仪表盘(在 Slack Canvas 中聚合健康度)等。
【可用性说明】 项目采用 MIT 许可证(见 LICENSE)。已知会出现在 awesome-mcp-servers、MCP Registry 和 Glama 等目录中。Slack 助手流程(listeners/assistant/message.js)执行确定性扫描(runAnalysis)后请求 AI 执行摘要(lib/llm-provider.js);摘要步骤现通过 summarizeWithLadder 运行有界降级阶梯(FULL → DEGRADED),LLM 不可用时明确降级——发现仍随附交付,但内联标注“AI summary unavailable — LLM unreachable. Deterministic findings only”,LLMUnavailableError 仍作为其他情况的类型化失败保留,非不可用错误仍会显式失败。测试覆盖在 test/assistant-degradation.test.js。当分析路径本身变为模型依赖(模型评分发现而非模型摘要报告)时,需要重新审视并扩展该降级阶梯。