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.

已驗證STDIO僅桌面開發者工具資料與分析

概覽

AI 產生的概覽

本機唯讀 MCP 伺服器,掃描程式碼庫並產出架構圖、相依性與 EOL 風險清單以及現代化改造輸入。

可以做什麼
  • 掃描目標目錄並回傳綜合的限定範圍偵察報告
  • 繪製架構圖並依被依賴次數標出耦合熱點
  • 列出相依性,分為已宣告、已觀測與推斷三類,並附檔案與行號證據
  • 依內建的小型規則表標記已終止支援的執行環境與框架,以及未鎖定版本
  • 產出語言程式碼行數、測試存在情況與清單檔修改時間等現代化改造輸入
適用情境
適合在現代化評估前,讓助理快速且有憑據地了解陌生或遺留程式碼庫,而不需執行或匯入其中的程式碼。適用於其宣告範圍內的 Python、JS/TS 及以清單檔為主的專案。
執行需求
以本機 stdio 程序執行,僅依賴 Python 3 標準函式庫,以 python3 server.py 啟動。每個工具需要目標目錄路徑,可選 max_files 上限(1 至 50000,預設 5000)。不需帳號、金鑰或網路存取。
安裝前請注意
唯讀,不執行、不匯入也不呼叫目標程式碼,但會讀取指定路徑下的檔案。結果有範圍限制且並非窮盡:以正規表達式為基礎的匯入掃描會漏掉部分寫法,不解析鎖定檔與 git 歷史,無權限的子目錄可能被默默省略。自我參照的符號連結迴圈可能導致掃描被拒絕。README 說明某基準卡在原通用 JS/TS 宣告上僅通過 22/25,且仍需進行限定範圍的複測。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Eclipse Legacy Recon MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

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 → distribution Pillow via 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 with TARGET_PATH_INVALID instead 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_files sets truncated: 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 -32602 naming the argument, never a raw -32603.
  • VCS/cache/vendor dirs (.git, __pycache__, node_modules, vendor, …) are skipped and listed.

Run it

sh
python3 server.py                      # stdiopython3 -m unittest discover -s tests  # acceptance + schema fuzzpython3 smoke.py                       # subprocess stdio smoke

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(/import forms, 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).
  • .mts and .cts files 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
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.0最新Oct 29, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分