mcpField
E
Evergreen

Evergreen

本地服务
arminazimi.github.io开发工具0今天更新

关于 Evergreen

Evergreen 检查代码库中的弃用及生命周期结束依赖、运行时和 CI 组件,并标出文件与行号,附上权威依据和迁移指引。它面向开发者和编码 Agent,提供确定性的离线扫描,以及本地命令行、MCP 服务、CI 和 Agent Skill 入口。

主要功能

  1. 01覆盖多生态的生命周期扫描
  2. 02精确定位文件与行号
  3. 03提供权威依据和替代方案
  4. 04生成迁移背景与步骤
  5. 05确定性离线扫描

适用场景

  1. 01在构建失败前发现生命周期风险
  2. 02添加依赖前检查其状态
  3. 03通过基线仅追踪新增问题

MCP 相关

Evergreen 提供本地 MCP 服务,供兼容客户端发现并调用生命周期检查能力。MCP 入口沿用项目本地、离线的扫描方式。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"arminazimi-evergreen": {
"command": "npx",
"args": [
"-y",
"evergreen-deprecation"
]
}
}
}
启动命令npx -y evergreen-deprecation

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

安装包
npmevergreen-deprecation0.7.1

工具

6

收录的工具列表 · 更新于 4 天前

参数类型必填说明
baselinestring否可选的 Evergreen 基线文件路径,相对于代码仓库。已抑制的发现项不会列出;结果的 suppressions 字段会说明抑制数量,以及哪些抑制即将到期或已过期。
repository_pathstring否代码仓库的本地路径。默认使用服务器工作目录。

详细介绍

Evergreen

Evergreen — 知道接下来会出现什么问题。

CI Coverage npm Evergreen skills.sh

Evergreen 可在代码库中发现生命周期结束和已弃用的运行时、软件包及 GitHub Actions,指出确切的文件和行,并为每项发现提供权威来源、替代方案和迁移步骤。它可在本机以命令行工具、本地 MCP 服务、GitHub Action(支持用于代码扫描的 SARIF)和 Agent Skill 的形式运行,让开发者和编码 Agent 能在生命周期风险导致构建失败之前发现问题,也能在添加依赖项之前检查其状态。扫描结果确定且无需联网,也不需要账户。

阅读公开文档,运行90 秒演示,或查看验证报告。面向 AI 工具的文档也以 llms.txt 和 llms-full.txt 的形式发布。

覆盖范围

生态系统Evergreen 读取的内容报告的内容
容器基础映像 (实验性)Dockerfile、*.Dockerfile、Containerfile、compose.yaml、docker-compose.yml:官方 node、python、postgres、mysql 和 ruby 的基础映像已终止生命周期的映像发布版本系列。变量、latest 和浮动标签会列为未分类,不会猜测。参见容器基础映像
.NET (测试版)global.json、*.csproj/*.fsproj/*.vbproj、Directory.Build.props、Directory.Packages.props、packages.lock.json:固定的 SDK、目标框架和直接 NuGet 包已结束支持期的 .NET 发布版本系列,以及其发布者已弃用的直接依赖包,并列出使用这些包的 C# 文件。.NET Framework、netstandard、MSBuild 属性、浮动版本和版本范围不作判定。参见.NET
Go (实验性)go.mod 和 go.work:go 和 toolchain 指令,以及直接 require 条目不再接收修复的 Go 发布版本系列,以及具有生命周期规则的直接模块。Evergreen 无法读取的版本会列为未分类。参见Go
GitHub Actions.github/workflows/*.yml:对操作的 uses: 引用,包括通过尾随版本注释或内置发布映射解析的完整 SHA 固定版本使用已停用运行时(例如 Node.js 20)的操作,以及已停用或弃用的主版本,并标明准确行号
C 和 C++ (实验性)CMakeLists.txt、conanfile.txt、conanfile.py 和 vcpkg.jsonCMake 策略兼容性移除项和弃用项,并标明准确声明。其他声明需要有匹配的已审核规则。参见C 和 C++
CI 运行器映像 (实验性).gitlab-ci.yml 的 image 和 services、.circleci/config.yml 的 docker.image、machine.image 和 orbs,以及 azure-pipelines.yml 的 pool.vmImage已审核规则涵盖的 Azure 托管映像标签,并标明准确行号。GitLab 映像和 CircleCI orbs、变量及浮动别名会列为未分类。不会判定字面量 CircleCI 映像。参见CI 运行器映像
Java 和 Kotlin(JVM) (测试版)pom.xml、build.gradle、build.gradle.kts、.java-version、.sdkmanrc、.tool-versions:项目固定或指定目标的 JDK,以及直接 Maven 依赖。参见Java 和 Kotlin已结束支持期的 JDK 特性版本,以及 POM 声明已迁移的依赖。属性引用和表达式会列为未分类
Kubernetes API (测试版)*.yaml、*.yml 清单、Helm chart 的 templates/ 和 kustomization.yaml:字面量 apiVersion 和 kind,以及 kustomize 补丁。参见Kubernetes APIKubernetes 项目声明已不再提供服务的 API 版本。Helm 值、受集群条件限制的模板,以及无法按字面读取的内容会跳过
Node.jsengines.node、volta、.nvmrc、.node-version已结束生命周期或支持期的运行时版本
npmpackage.json 依赖项、package-lock.json、npm-shrinkwrap.json、yarn.lock、pnpm-lock.yaml,以及使用各个包的导入和调用已弃用或不再维护的包,并列出替代方案和包的使用位置
Pythonpyproject.toml、requirements*.txt、.python-version、runtime.txt、.tool-versions、poetry.lock、uv.lock、Pipfile.lock已结束生命周期的 Python 版本,以及已弃用或过时的包
Dart 和 Flutter (实验性)pubspec.yaml、pubspec.lock、.fvmrc、.fvm/fvm_config.json:SDK 约束、直接依赖项、解析后的包和固定的 Flutter 版本固定到确切版本且不再接收安全更新的 Dart SDK 发布版本,以及已停止维护的 pub 包,并列出使用这些包的文件。不会判定 >=3.8.0 <4.0.0 这样的约束范围。参见Dart 和 Flutter
数据库运行时 (实验性)compose.yaml / docker-compose.yml 映像标签(postgres、mysql、mariadb、redis、mongo),以及 *.tf 中 AWS 托管数据库资源的 engine_version已结束生命周期的 PostgreSQL 11–13 和 MySQL 5.7、8.0。浮动标签、变量、模块块以及带有 YAML 别名的 Compose 文件不作判定。参见数据库运行时
Shell 和 PowerShell (实验性)*.ps1 / *.psm1 中的 #Requires -Version、*.psd1 中的 PowerShellVersion,以及 .github/workflows 中固定的 mcr.microsoft.com/powershell 映像标签已结束支持期的 PowerShell 6.x 和 7.0–7.3。Windows PowerShell 5.1、Shell 名称、Bash 映像、动态值以及带有额外选项的指令不作判定。参见Shell 和 PowerShell
Terraform (实验性)*.tf(required_version、required_providers)、.terraform.lock.hcl、.terraform-version、.tool-versions:版本约束、锁定的提供程序和固定的 Terraform CLI固定到确切版本或使用 ~> X.Y.Z 约束,且不再接收支持的 Terraform CLI 发布版本系列。不会判定 >= 1.5 这样的范围。参见Terraform
Rust (实验性)Cargo.toml、Cargo.lock、rust-toolchain(.toml):固定的工具链和直接 crate 依赖项早于最新稳定版的工具链,以及依赖于不再维护的 crate 的直接依赖项,并列出使用这些依赖项的文件。edition、rust-version、stable 以及无法按字面读取的内容不作判定。参见Rust
Swift (测试版).swift-version、.xcode-version、Package.swift、Package.resolved,以及 project.pbxproj 中应用目标的 IPHONEOS_DEPLOYMENT_TARGETApp Store Connect 不再接受的 Xcode 和 iOS 发布版本、具有生命周期规则的 Swift 工具链版本系列,以及具有规则的包。不判定库和 platforms: 最低版本。参见Swift
无服务器运行时 (测试版)AWS SAM 和 CloudFormation 模板中的 Runtime、serverless.yml 中的 provider.runtime 和 runtime,以及 Terraform aws_lambda_function、Google Cloud Functions 和 Azure Function Apps 中的 runtime供应商列为已结束生命周期的 Lambda 和 Cloud Functions 运行时。参见无服务器运行时
Ruby (实验性).ruby-version、.tool-versions、Gemfile、Gemfile.lock已结束支持期的 Ruby 发布版本系列和已撤回的 gem,并列出使用这些 gem 的 Ruby 文件。参见兼容性
PHP (实验性).php-version、.tool-versions、composer.json、composer.lock已结束支持期的 PHP 发布版本系列和已弃用的 Composer 包。参见兼容性
Android (实验性)build.gradle(.kts)、settings.gradle(.kts)、libs.versions.toml:SDK 级别、Android Gradle Plugin、Kotlin 插件和 Maven 依赖项已审核规则明确列出的声明,例如 Google Play Billing Library 5 到 9 的主版本。参见兼容性
括号中的级别表示检测器的成熟度;包含各级别的完整列表见生态系统覆盖矩阵,各检测器的精确率和召回率见准确率仪表板。每条发现都附有相应规则的来源、审核日期和迁移步骤;请参阅生命周期规则。对于其他生态系统,Evergreen 不会猜测:如果某个软件包没有对应规则,Evergreen 会将其报告为 no-data,绝不会判定为安全;新增生态系统时,则从生成的检测器骨架开始。兼容性矩阵列出了受支持的环境和主机。

产品原则

  • 本地优先:源代码保留在用户的计算机或 CI 运行器上。
  • 核心逻辑具备确定性:生成发现结果不需要大模型。
  • 有证据支撑:每项弃用声明都链接到权威来源。
  • 为 Agent 做好准备:每份人类可读的报告都有对应的机器可读版本。
  • 易于扩展:通过检测器新增生态系统,无需重写核心逻辑。

快速入门

要求:Node.js 22 或更高版本。

npx evergreen-deprecation scan .

为 Agent 提供简短答复,而非完整报告:每项发现占一行,包含其 ID、位置、严重程度和替代方案,按严重程度从高到低排列,最多列出 25 项发现(其余项计入总数),且内容少于 8 KiB:

npx evergreen-deprecation scan . --format compact

验证 CLI、本地 MCP 服务、Agent 技能、插件基础组件和 CI 工作区是否已就绪,且不更改配置或上传仓库数据:

npx evergreen-deprecation doctor .
npx evergreen-deprecation doctor . --json

有关受支持、实验性和不受支持的组合,请参阅公开的兼容性矩阵。

以编程方式发现 Evergreen 的版本化功能和入口点:

npx evergreen-deprecation capabilities --json

自动发现约定定义了 CLI、MCP 服务、Agent 技能、插件和 CI 集成使用的共享标识符。

为现有且已接受的发现创建基线,然后仅报告新的生命周期回归:

npx evergreen-deprecation baseline .
npx evergreen-deprecation scan . --baseline .evergreen-baseline.json

在添加单个依赖项之前检查它,无需扫描仓库:

npx evergreen-deprecation check pkg:npm/[email protected]
npx evergreen-deprecation check pkg:github/actions/checkout@v4 --json

该命令会打印生命周期问题、替代方案和证据;当适用的规则达到或高于 --fail-on(默认为 high)时,退出码为 1;否则为 0;命令行错误时为 2;无法解析 Package URL 时为 4(参见退出码)。如果 Evergreen 没有该软件包的规则,则会报告 no-data,这并不表示该软件包是安全的。如果某个软件包的规则仅涵盖部分版本,但未提供版本,则会报告 version-dependent;添加版本即可获得明确结论。

生命周期规则可以在版本发布之间通过签名包刷新;除非你主动请求,否则扫描始终离线进行:

npx evergreen-deprecation data status
npx evergreen-deprecation data update

有关签名和信任模型、固定版本,以及下载无法验证时的处理方式,请参阅生命周期数据。

查看单项结果的证据和迁移方向:

npx evergreen-deprecation explain '<finding-id>' .

为人类或编码 Agent 生成可移植的迁移上下文:

npx evergreen-deprecation context '<finding-id>' . --json

迁移包包含特定规则的约束和步骤、确切的受影响文件和用法、权威来源以及建议的验证命令。Evergreen 不会自动执行这些命令。请参阅迁移包指南。

告知在仓库中工作的编码 Agent,在添加依赖项之前先进行检查。此操作会在 AGENTS.md 中添加(或刷新)一个带有明确标记的部分;如果你使用的是 CLAUDE.md,则会修改该文件。再次运行不会造成任何更改,标记范围之外的内容也不会被触及:

npx evergreen-deprecation init --agents --dry-run   # show the change
npx evergreen-deprecation init --agents

若要为仓库已配置的每个编码 Agent 执行此操作,请运行 setup。它会检测 Claude Code、Codex、Cursor、Gemini CLI、GitHub Copilot 和 Kilo Code 的配置,显示对各宿主指令文件的更改,并且仅在你确认后(或传入 --yes)才写入。它使用与 init --agents 相同的带标记部分,因此绝不会覆盖现有规则:

npx evergreen-deprecation setup --dry-run   # print the plan
npx evergreen-deprecation setup             # ask, then write
npx evergreen-deprecation setup --yes       # no prompt (CI, scripts)

通过本地 MCP 服务连接编码 Agent:

npx --yes --package evergreen-deprecation evergreen-mcp

stdio 服务端提供 scan_repository、list_deprecations、explain_deprecation、create_migration_context、verify_migration 和 check_dependency(在添加前检查单个软件包)。有关宿主配置、建议工作流和隐私保障,请参阅本地 MCP 指南。

Agent Skill

从 monorepo 安装与供应商无关的 Agent Skill:

npx skills add arminazimi/evergreen

使用以下命令拉取未来的修订版本:

npx skills update evergreen-deprecation

evergreen-deprecation Skill 可指导你发现、解释、迁移和验证,同时将检测与迁移逻辑保留在 Evergreen 中。它可在 skills.sh 上发现,并已通过 Codex、Claude Code、Cursor、GitHub Copilot 和 Gemini CLI 的安装验证。有关评估、兼容性、限制和安全假设,请参阅 Agent Skill 指南。

Codex 和 Claude 插件包由同一 Skill 和 MCP 工作流生成。它们的打包架构使宿主清单保持精简,并在任一软件包偏离规范源时令 CI 失败。 跨宿主评估公布共享语料库结果、上下文预算、权限行为和安全限制;同样的检查也会通过 npm run check 阻止发布回归。

Evergreen 在本地运行,不会上传仓库内容。

开发

npm install
npm run check

初始检测器会报告五个一方 Action 的不受支持主版本,并提供确切的文件和行位置:

  • actions/checkout
  • actions/setup-node
  • actions/cache
  • actions/upload-artifact
  • actions/download-artifact

在 Evergreen 无需猜测即可解析之前,固定的提交 SHA 和动态表达式会被有意标记为未分类。

npm 检测器还会读取 package.json、npm/pnpm/Yarn 锁文件、Node.js 运行时声明,以及一个有少量证据支持的废弃直接依赖注册表。使用 evergreen explain <finding-id> 检查发现项及其来源。如果发现项有误,evergreen report-issue <finding-id> 会打印一份 Markdown 报告,其中包含规则、相关证据以及声明该依赖的文件中几行经过脱敏的内容;它不会创建议题,也不会使用网络。

Python 检测器会读取 pyproject.toml 中的 PEP 621 和 Poetry 元数据、requirements*.txt、常见的运行时版本文件,以及 uv/Poetry/PDM/Pipenv 锁文件。它会报告不受支持的 Python 声明和直接依赖的生命周期风险,同时忽略锁文件中仅作为传递依赖的条目。

源代码用法分析

现在,软件包生命周期发现项会包含导致迁移成为必要的具体导入、调用和配置键。匹配功能支持 JavaScript、TypeScript 和 Python,并能识别语言特性和别名;配置键匹配则支持 JSON、YAML、TOML、INI 和 Python 设置。每个匹配项都包含确切的文件、行、列和源代码摘录,以及根据受影响的用法和文件估算的迁移影响。

分析器会针对一批检测器契约扫描一次仓库,并忽略生成目录、依赖目录、构建目录和环境目录。使用以下命令运行可重复的准确性和扫描耗时基准测试:

npm run benchmark:usage

有关语料库和结果解读,请参阅基准测试说明。

GitHub Action

Evergreen 可以为拉取请求添加注释,使用基线抑制已接受的发现项,按指定严重级别使检查失败,并上传完整的 JSON 报告:

permissions:
  contents: read

steps:
  - uses: actions/checkout@v7
  - uses: arminazimi/[email protected]
    with:
      baseline: .evergreen-baseline.json
      fail-on-severity: high

如果你的威胁模型要求第三方 Action 引用不可变,请固定完整的提交 SHA,而不要使用版本标签。有关设置、输入、权限、制品和隐私边界,请参阅 GitHub Action 指南。

检测器 SDK

外部检测器可以使用 evergreen-deprecation/sdk 导出的版本化接口。扫描引擎可以组合兼容的检测器,而无需导入任何内置实现。

请参阅检测器编写指南和最小检测器示例。

初始产品形态

CLI 就是产品。检测器可扩展 CLI,GitHub Actions 可将其自动化,本地 MCP 服务则将其提供给 Agent 使用。托管后端有意不纳入路线图;生命周期数据改为通过经过签名、可离线验证的数据通道更新。

参见路线图、架构、品牌指南和贡献指南。

社区

有关 Evergreen 的问题、想法以及你用它构建的内容,都可以发布到 GitHub Discussions:使用 Q&A 提问,使用 Ideas 提出建议,使用 Show and tell 分享成果。漏洞、生命周期规则请求和生态系统请求请通过 issues 提交。

许可证与品牌

Evergreen 源代码根据 Apache License 2.0 授权。 Evergreen 名称、徽标以及 brand/ 中的文件均为专有品牌资产, 并受单独的品牌资产条款约束。

评论

支持 Markdown

第一次接触 MCP?

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

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