
Eclipse Legacy Recon MCP
io.github.CYAN-ECLIPSE-TECHNOLOGIES-LLC由 GitHub 账号 CYAN-ECLIPSE-TECHNOLOGIES-LLC 发布v0.1.0更新于 Oct 29, 2026
Point an agent at a codebase: narrowed-scope architecture map, dependency/EOL risk list.
概览
本地只读 MCP 服务器,扫描代码库并生成架构图、依赖与 EOL 风险清单以及现代化改造输入。
- 可以做什么
- 扫描目标目录并返回综合的限定范围侦察报告
- 绘制架构图并按被依赖次数标出耦合热点
- 列出依赖,分为已声明、已观测和推断三类,并附文件与行号证据
- 依据内置的小型规则表标记已停止维护的运行时与框架,以及未锁定版本
- 输出语言代码行数、测试存在情况和清单文件修改时间等现代化改造输入
- 适用场景
- 适合在现代化评估前,让助手快速、有据可查地了解一个陌生或遗留代码库,而无需运行或导入其中的代码。适用于其声明范围内的 Python、JS/TS 及基于清单文件的项目。
- 运行要求
- 以本地 stdio 进程运行,仅依赖 Python 3 标准库,用 python3 server.py 启动。每个工具需要目标目录路径,可选 max_files 上限(1 至 50000,默认 5000)。无需账号、密钥或网络访问。
安装
在 SourceWeft 中
- 打开 控制台中的 Eclipse Legacy Recon MCP,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Eclipse Legacy Recon MCP
Powered by Cyan Eclipse Technologies — https://cetech.ai
Point an agent at a codebase: narrowed-scope architecture map, dependency/EOL risk list, modernization estimate inputs.
Status — honest labels
v0.1.0, local, read-only. MCP over stdio, Python stdlib only. No certification claimed. The latest bench card (-10, 2026-10-26) is FAILED 22/25 at the former universal JS/TS claim; the owner disposition is to narrow the claims to the observed scope in CLAIM-SCOPE.md, not to stand the product as permanently FAILED and not to run a fourth fix round. A scoped re-bench is still required before any certification claim. Catalog entry: legacy-recon-mcp (spec sketch: mcp-product-slate-20261023.md §5). Free; services-led assessment funnel into CETech's legacy modernization line.
Claim scope — narrowed to what was observed
Within CLAIM-SCOPE.md, reported entries cite the file path plus the manifest line, structural fact, or inference basis they rest on. The standing UNKNOWN categories implemented by the engine carry reasons — never a guessed stack. OBSERVED is a scoped positive inventory, not an exhaustive inventory.
Withdrawn by name in the canonical scope note: JS/TS multiline block-comment continuation after a split no-closing-slash span (W1); chained no-closing-slash JS/TS spans (W2); B-LR-14 invalid-line identifier-follow shapes (W3); exhaustive OBSERVED recall (W4); dynamic-import observation or a dedicated dynamic-import UNKNOWN (W5); .mts/.cts OBSERVED extraction (W6); completeness over permission-denied subtrees (W7); report-and-skip treatment of self-referential symlink loops (W8); and hosted/authenticated/multi-tenant operation (W9).
Novel mechanism — evidence-bound recon at the narrowed scope
At the narrowed scope, the dependency inventory distinguishes, in separate lists that are never blended:
- DECLARED — parsed from a manifest, with the manifest line as evidence.
- OBSERVED — positive import reports in code within CLAIM-SCOPE.md, with file + line as evidence (internal imports flagged
internal); not an exhaustive inventory. - INFERRED — labeled inference with its basis stated (e.g. import root
PIL→ distributionPillowvia a built-in mapping table; an import with no matching declared entry → inferred undeclared dependency).
Tools
recon_scan (combined narrowed-scope report) · architecture_map · dependency_risk_list · modernization_inputs
All take path (required string) and optional max_files (integer, 1–50000, default 5000, via the house coerce_int_param guard pattern).
Modernization outputs are INPUTS, not an estimate: LOC by language, test file presence / test-LOC ratio, manifest filesystem-mtime signals (explicitly not commit age — git history is UNKNOWN in v0.1), and coupling hotspots by fan-in. No effort, cost, or duration figure is produced.
Manifests + EOL rules supported
Manifest parsers: requirements.txt, Pipfile, pyproject.toml, setup.py/setup.cfg (python_requires), package.json, composer.json, Gemfile, pom.xml, go.mod, Cargo.toml; runtime pins from .python-version, .nvmrc, .ruby-version, runtime.txt, engines.node, requires-python, pom java.version.
EOL risk comes only from a small, explicit, versioned-in-code rules table (EOL_RULES_VERSION = 2026-10-25.1 in recon_engine.py): 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. Every EOL claim cites its rule_id. No rule match = no claim (absence of a rule is never a claim of support). Unpinned declared versions surface as UNPINNED_VERSION.
Safety
- Target code is never executed, imported, or shelled out to; no network calls.
- Symlinks are never traversed — ordinary resolvable symlinks are reported; one resolving outside the target tree is flagged
escape: true. A self-referential symlink loop is the named exception in CLAIM-SCOPE.md W8: it can refuse the scan withTARGET_PATH_INVALIDinstead of being reported and skipped. - Binary files are skipped and counted, never parsed as text; files over 1 MB are not text-parsed.
- Caps fail visibly: hitting
max_filessetstruncated: true+MAX_FILES_REACHED— a truncated scan never presents as complete. - Named, fail-closed refusals:
TARGET_NOT_FOUND,TARGET_NOT_DIRECTORY,TARGET_EMPTY,TARGET_PATH_INVALID,MAX_FILES_INVALID,ARGUMENTS_INVALID. Malformed wire args are-32602naming the argument, never a raw-32603. - VCS/cache/vendor dirs (
.git,__pycache__,node_modules,vendor, …) are skipped and listed.
Run it
Fixtures: fixtures/legacy-tree/ — synthetic mixed Python+JS legacy tree: Django 3.2 + Python 3.8 + Node 16 + AngularJS EOL pins, unpinned requests, a binary blob, and a symlink escape attempt (escape_link → /etc, recreated by tests/smoke if absent).
Limitations (v0.1)
CLAIM-SCOPE.md is the controlling claim boundary. In particular:
- No lockfile parsing; no Gradle dependency extraction; no git history (manifest age = mtime only); DB/CI/deployment are standing UNKNOWN categories; the EOL table is deliberately small and covers only its listed rules.
- Import scanning is regex-based, not AST. OBSERVED extraction is a scoped positive report and takes at most one regex match per physical line. The bench-derived OBSERVED accuracy scope in CLAIM-SCOPE.md is stated for Python and JS/TS; no separate bench-observed accuracy claim is made for the Go/Ruby/Java/PHP import patterns.
- JS/TS recall can miss split
require(/importforms, a second import on a line, and imports after template over-masking shapes named in CLAIM-SCOPE.md W4. Python recall can miss semicolon/statement-followed imports on a line, comma-list second modules, backslash continuations, and relative from-imports. - Dynamic imports are not guessed into OBSERVED, and there is no dedicated dynamic-import UNKNOWN entry (W5).
.mtsand.ctsfiles do not receive OBSERVED extraction (W6).- A permission-denied subdirectory can be omitted without a truncation flag, so no completeness claim is made over such a tree (W7).
A Cyan Eclipse Technologies product. The "Powered by Cyan Eclipse Technologies" attribution travels with it.
来源:README.md,提交 91aec69
工具
0版本历史
1- v0.1.0最新Oct 29, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分