Mcp Magento Audit

io.github.michalper由 GitHub 帳號 michalper 發布v0.4.0更新於 Oct 28, 2026

MCP server for auditing Magento projects: update compatibility, module quality, dependency security

發布方自己的服務:audit.domains - Domain Valuation

已驗證STDIO僅桌面開發者工具安全與監控

概覽

AI 產生的概覽

稽核 Magento 2 / Adobe Commerce 專案:升級相容性、自訂模組品質與相依套件安全,並彙整成升級計畫。

可以做什麼
  • 檢視專案狀態:Magento 版本、PHP 需求、套件數量、已棄用的套件
  • 依目標 PHP/Magento 版本逐一判定套件相容性,並用 Rector 檢查程式碼是否需要調整
  • 以 phpcs、phpstan、rector 掃描自訂模組,並檢查核心覆寫與失效參照
  • 透過 Composer 稽核已安裝套件的已知安全公告,並列出可更新的套件
  • 從 GitHub Releases 取得 Magento 版本說明
  • 將各項結果合併為含阻擋項的升級計畫,並可一次對多個專案做初步篩選
適用情境
適合 Magento 代理商與開發者判斷某個商店能否升級到較新的 PHP 或 Magento 版本、卡在哪裡、應先修哪個模組或相依套件。也適合對多個商店專案做快速初篩。
執行需求
以 Python 套件 mcp-magento-audit 透過 stdio 在本機執行,README 採 Python 3.12 虛擬環境從原始碼安裝。被稽核的專案需具備 Composer 及其自帶的 vendor/bin 工具(phpcs、phpstan、rector);若專案在容器內執行,需設定 MCP_MAGENTO_AUDIT_EXEC_PREFIX。可選設定 GITHUB_TOKEN 或 GH_TOKEN 以提高 GitHub API 額度。
安裝前請注意
多個工具會呼叫被稽核專案自帶的 composer 與 vendor/bin 執行檔,等同執行該專案中的程式碼。結果來自 composer.json 宣告、程式碼掃描與版本說明,屬決策輔助而非保證,正式環境升級仍需測試。未設定權杖時 GitHub API 每 IP 每小時僅 60 次。專案仍在早期階段。

安裝

在 SourceWeft 中

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

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

mcp-magento-audit

[mcp-magento-audit — an MCP server that audits Magento 2 / Adobe Commerce projects for AI coding agents]

[CI] [PyPI] [michalper/mcp-magento-audit MCP server] [License: MIT] [Python 3.12+] [Ruff] [Last commit]

An MCP server giving an AI agent tools to assess a Magento 2 / Adobe Commerce project along three axes: compatibility with a target PHP and Magento version, quality of custom modules, and dependency security.

It answers the question that never stops coming up in Magento agencies: "can we bump this client to a newer version, what's blocking it, and where do we start?"

Status: early stage. Built on evenings/weekends. All eight planned tools (get_project_status, check_updates, scan_module_risk, audit_security, check_outdated_packages, fetch_release_notes, build_upgrade_plan, build_fleet_overview) are working. See ROADMAP.md for what's next.

How this differs from composer audit

composer audit and composer outdated are built into Composer and do their job well — audit_security and check_outdated_packages actually shell out to them rather than reimplementing a CVE database or version comparison. This server targets what plain Composer doesn't give you:

  1. It doesn't see app/code. Custom modules don't exist on Packagist, so they get zero coverage from vulnerability databases — and that's exactly the code agencies write. scan_module_risk covers that side with phpcs/phpstan/rector instead.
  2. It doesn't combine axes. Nobody gets one answer: this module blocks the upgrade, has an open CVE, is abandoned by its author, and has the worst complexity in the project — fix this one first. build_upgrade_plan does, folding audit_security's advisories in alongside composer-constraint and code-quality blockers.
  3. It doesn't aggregate across projects. "Which of our twenty stores can be upgraded today" requires stitching results together from many directories by hand. build_fleet_overview runs the composer-constraint check across every project path given to it in one call — a fast first pass, not a replacement for a full build_upgrade_plan per project.

What this server doesn't pretend to be: there's no clean dataset of "module X works with Magento 2.4.8". Results are derived from declarations in composer.json, a code scan, and the vendor's own release notes — this is a decision-support tool, not an oracle. Upgrading a production store still requires testing, not just a report.

Install

bash
git clone https://github.com/michalper/mcp-magento-audit.gitcd mcp-magento-auditpython3.12 -m venv .venv.venv/bin/pip install -e ".[dev]"

Connecting to Claude Code

json
{  "mcpServers": {    "magento-audit": {      "command": "/path/to/mcp-magento-audit/.venv/bin/mcp-magento-audit"    }  }}

Projects that develop inside Docker/DDEV/Warden/Lando

scan_module_risk (phpcs/phpstan/rector), check_updates's code_compatibility signal, and audit_security/check_outdated_packages all shell out to the project's own vendor/bin/* and composer. If that project only has PHP/Composer available inside a dev container — common for Magento — and this MCP server runs on the host, every one of those checks will correctly report scanned=false with a reason rather than silently being wrong, but that's easy to misread as "found nothing" instead of "couldn't check".

Set MCP_MAGENTO_AUDIT_EXEC_PREFIX to wrap every one of those calls in a command that runs it inside the container instead, e.g.:

bash
export MCP_MAGENTO_AUDIT_EXEC_PREFIX="ddev exec --"# or: export MCP_MAGENTO_AUDIT_EXEC_PREFIX="docker compose exec -T app"

This assumes the usual bind-mount setup (the project directory mirrors the same relative layout inside the container, just under a different root) — host-absolute paths like vendor/bin/phpcs are rewritten relative to the project root before being wrapped, and composer resolves against the container's own PATH rather than the host's. If that assumption doesn't hold for a given setup, running this server from inside the dev container directly (no prefix needed) is the more reliable fallback.

Rate limits on GitHub API calls

fetch_release_notes calls the GitHub REST API, capped at 60 requests/hour per IP when unauthenticated — easily hit from a shared office/CI IP running build_fleet_overview or build_upgrade_plan across many projects. Set GITHUB_TOKEN (or GH_TOKEN) in the environment to raise that to 5000/hour; a read-only, no-scope token is enough, since this only ever reads public release data.

Example

[Claude Code calling build_upgrade_plan against a store that has one abandoned, PHP-7-only package — ready: false, with the real blocker and a note that phpstan never ran]

An agent calling build_upgrade_plan against a store that has one abandoned, PHP-7-only package and no phpstan.neon of its own (trimmed — the real result also includes release_notes, and the full update_check/scan_module_risk results each blocker was derived from):

json
{  "ready": false,  "unverified": [    "phpstan: no phpstan.neon(.dist) in project — skipping static analysis"  ],  "blockers": [    {      "source": "composer",      "description": "legacy/module",      "detail": "^7.4 does not cover PHP 8.3"    }  ]}

ready is false because of a real blocker, not a guess; unverified says phpstan never ran at all, so a clean result elsewhere isn't mistaken for "everything was checked".

Tools

ToolStatusDescription
get_project_statusworkingMagento version, PHP requirement, package count, abandoned packages
check_updatesworkingper-package verdict against a target PHP/Magento version, plus a Rector-based check of whether the code itself would need changes
scan_module_riskworkingscans code via phpcs (Magento2 coding standard), the project's own phpstan, and the project's own rector.php (dead code/quality) — plus a separate phpcs pass over third-party vendor/ Magento modules (informational, not an upgrade blocker), a plain regex scan for ObjectManager::getInstance() misuse in app/code (not limited to .phtml, unlike the standard's own sniff), a core-override check (app/code classes that redeclare a vendor/magento/* class under the same FQCN — an upgrade blocker), and a dangling-reference check (di.xml/events.xml/crontab.xml/layout XML/indexer.xml/schema.graphqls naming a PHP class that no longer exists — informational)
audit_securityworkingevery installed package in composer.lock — core Magento, third-party vendor/ extensions, dev dependencies — checked for known advisories via composer audit
check_outdated_packagesworkingevery installed package checked against composer outdated for a newer available version — independent of known CVEs or target-version compatibility
fetch_release_notesworkingrelease notes from magento/magento2 GitHub Releases, without answering from the model's memory
build_upgrade_planworkingcombines the other tools into a list of concrete blockers, with ready=true only once it's empty
build_fleet_overviewworkingtriages many projects at once against a target PHP/Magento version ("which of these N stores can be upgraded today") via check_updates only — a fast first pass, not a replacement for build_upgrade_plan per project

Development

bash
.venv/bin/python -m pytest --cov        # tests + coverage.venv/bin/ruff check .                  # lint.venv/bin/mypy src                      # types.venv/bin/bandit -c pyproject.toml -r src   # security.venv/bin/pip-audit                     # dependency vulnerabilities

Run .venv/bin/pre-commit install once to run all of the above (except pip-audit, which needs network access and stays CI-only) on every commit.

Architectural decisions are recorded in docs/adr/. See CHANGELOG.md for what changed in each release.

License

MIT

來源:README.md,提交 da28aee

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

3
  1. v0.4.0最新Oct 18, 2026
  2. v0.3.0Oct 17, 2026
  3. v0.1.1Oct 17, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

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

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

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

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

其他 Audit 整合