关于 Eclipse Legacy Recon MCP
Eclipse Legacy Recon MCP 是供 Agent 和团队评估旧软件的本地只读代码库扫描器。它生成限定范围的架构图,并列出有依据的依赖与生命周期终止风险;现代化输出是评估输入,不是成本或工时估算。
主要功能
- 01生成限定范围的架构图
- 02分别列出已声明、观察到和推断的依赖
- 03标记规则覆盖的终止支持版本及未固定依赖
- 04报告现代化评估输入信号
- 05为发现项注明证据
适用场景
- 01现代化前梳理旧代码库
- 02检查依赖和运行时的终止支持风险
- 03为评估收集代码规模与耦合输入
MCP 相关
向 MCP 客户端提供四种工具:recon_scan、architecture_map、dependency_risk_list 和 modernization_inputs。服务以只读方式扫描本地路径,不执行目标代码,也不进行网络调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Eclipse Legacy Recon MCP
由 Cyan Eclipse Technologies 提供支持 — https://cetech.ai
让 Agent 分析代码库:生成范围收窄的架构图、依赖项/EOL 风险清单和现代化估算输入。
状态——如实标注
v0.1.0,本地、只读。通过 stdio 使用 MCP,仅依赖 Python 标准库。不声称获得任何认证。最新基准卡(-10,2026-10-26)在此前的通用 JS/TS 声明下未通过,得分为 22/25;所有者的决定是将声明收窄至 CLAIM-SCOPE.md 中观察到的范围,而非将产品定性为永久未通过,也不进行第四轮修复。作出任何认证声明前,仍须进行范围限定的重新基准测试。目录条目:legacy-recon-mcp(规范草案:mcp-product-slate-20261023.md §5)。免费;通过服务导向的评估渠道引入 CETech 的旧系统现代化业务。
声明范围——收窄至已观察到的内容
在 CLAIM-SCOPE.md 范围内,报告条目会引用文件路径,以及其依据的清单行、结构事实或推断依据。引擎实现的常设 UNKNOWN 类别均附有原因——绝不猜测技术栈。OBSERVED 是范围限定的正向清单,并非穷尽清单。
规范范围说明中按名称撤回的声明包括:拆分后未闭合斜杠的跨度之后,JS/TS 多行块注释的延续(W1);连续出现的未闭合斜杠 JS/TS 跨度(W2);B-LR-14 无效行标识符后续形式(W3);穷尽式 OBSERVED 召回(W4);动态导入观察或专门的动态导入 UNKNOWN(W5);.mts/.cts 的 OBSERVED 提取(W6);对权限拒绝子树的完整性(W7);对自引用符号链接循环进行报告并跳过处理(W8);以及托管式/需认证/多租户运行(W9)。
创新机制——在收窄范围内,受证据约束的侦察分析
在收窄后的范围内,依赖项清单会以互不混合的独立列表区分:
- DECLARED — 从清单解析,并以清单行作为证据。
- OBSERVED — 在 CLAIM-SCOPE.md 范围内,代码中出现的正向导入报告,并以文件和行号作为证据(内部导入标记为
internal);并非穷尽清单。 - INFERRED — 标记为推断,并注明依据(例如,通过内置映射表将导入根
PIL映射至发行包Pillow;未找到匹配声明条目的导入 → 推断为未声明依赖项)。
工具
recon_scan(合并的范围限定报告) · architecture_map · dependency_risk_list · modernization_inputs
所有工具均接受 path(必需字符串)和可选的 max_files(整数,1–50000,默认值为 5000,使用项目统一的 coerce_int_param 防护模式)。
现代化输出是输入,而非估算结果:按语言统计的 LOC、测试文件是否存在/测试 LOC 比率、清单文件系统修改时间信号(明确不是提交时间——v0.1 中 git 历史为 UNKNOWN),以及按扇入量计算的耦合热点。不生成工作量、成本或时长数值。
支持的清单和 EOL 规则
清单解析器:requirements.txt、Pipfile、pyproject.toml、setup.py/setup.cfg(python_requires)、package.json、composer.json、Gemfile、pom.xml、go.mod、Cargo.toml;运行时版本固定信息来自 .python-version、.nvmrc、.ruby-version、runtime.txt、engines.node、requires-python、pom java.version。
EOL 风险仅来自一份小型且明确、以代码版本化的规则表(recon_engine.py 中的 EOL_RULES_VERSION = 2026-10-25.1):Python 2.7/3.6/3.7/3.8、Node 12/14/16/18、PHP 7.4/8.0、Ruby 2.7/3.0、Django 2.2/3.2/4.0/4.1、AngularJS 1.x、Rails 5.2/6.0、Flask 1.0。每项 EOL 声明都会引用其 rule_id。未匹配规则 = 无声明(没有规则绝不代表声明支持)。未固定版本的已声明版本会标记为 UNPINNED_VERSION。
安全
- 目标代码绝不会被执行、导入或通过 shell 调用;不会发起网络请求。
- 绝不遍历符号链接——普通且可解析的符号链接会被报告;指向目标树外部的符号链接会标记为
escape: true。CLAIM-SCOPE.md W8 中列出的例外是自引用的符号链接循环:扫描可能会以TARGET_PATH_INVALID拒绝,而不是报告并跳过。 - 跳过二进制文件并计数,绝不将其解析为文本;超过 1 MB 的文件不会按文本解析。
- 达到上限时会明确失败:达到
max_files会设置truncated: true+MAX_FILES_REACHED——被截断的扫描绝不会显示为完整扫描。 - 明确列出并采取失败关闭策略的拒绝原因:
TARGET_NOT_FOUND、TARGET_NOT_DIRECTORY、TARGET_EMPTY、TARGET_PATH_INVALID、MAX_FILES_INVALID、ARGUMENTS_INVALID。格式错误的协议参数会返回-32602并指出参数名称,绝不会返回原始的-32603。 - 跳过并列出 VCS/缓存/供应商目录(
.git、__pycache__、node_modules、vendor等)。
运行
python3 server.py # stdio
python3 -m unittest discover -s tests # acceptance + schema fuzz
python3 smoke.py # subprocess stdio smoke
测试样例:fixtures/legacy-tree/——包含 Python 和 JS 的合成旧版项目树:Django 3.2 + Python 3.8 + Node 16 + 已终止支持的 AngularJS 版本锁定项、未锁定版本的 requests、一个二进制文件,以及一次符号链接逃逸尝试(escape_link → /etc;若不存在,测试/smoke 会重新创建)。
限制(v0.1)
CLAIM-SCOPE.md 是声明范围的权威依据。具体而言:
- 不解析锁文件;不提取 Gradle 依赖;不读取 git 历史(清单年龄仅依据 mtime);数据库/CI/部署属于长期 UNKNOWN 类别;EOL 表刻意保持精简,仅涵盖其中列出的规则。
- 导入扫描基于正则表达式,而非 AST。OBSERVED 提取是限定范围的正向报告,每个物理行最多匹配一个正则表达式。CLAIM-SCOPE.md 中基于基准测试得出的 OBSERVED 准确率范围针对 Python 和 JS/TS;未针对 Go/Ruby/Java/PHP 导入模式单独提出基于基准测试观察到的准确率声明。
- JS/TS 的召回率可能会漏掉拆分的
require(/import形式、一行中的第二个导入,以及 CLAIM-SCOPE.md W4 中列出的模板过度屏蔽模式后的导入。Python 的召回率可能会漏掉一行中以分号分隔或后接其他语句的导入、逗号列表中的第二个模块、反斜杠续行,以及相对 from-import。 - 不会推测动态导入并将其列为 OBSERVED,也没有专门针对动态导入的 UNKNOWN 条目(W5)。
.mts和.cts文件不会进行 OBSERVED 提取(W6)。- 权限被拒绝的子目录可能会被省略而不设置截断标记,因此不对这类目录树作完整性声明(W7)。
Cyan Eclipse Technologies 的产品。随附的“Powered by Cyan Eclipse Technologies”署名必须一并保留。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。