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 集成