padosoft/askmydocs-mcp-pack
A Laravel/PHP MCP pack for AskMyDocs that exposes your documentation as Model Context Protocol tools, letting AI assistants run context-aware search and Q&A over project docs—ideal for teams wanting accurate, doc-grounded AI answers with minimal setup.
Architecture fit. padosoft/askmydocs-mcp-pack is a Composer-distributed Laravel package that adds a Model Context Protocol server surface on top of the AskMyDocs documentation platform. For a TPM this is an additive integration, not an architectural change: it registers via Laravel package discovery, binds into the existing service container, and communicates outward over HTTP through Guzzle/PSR-7/PSR-18. That means it slots into the standard Laravel shape (service provider → config → container bindings → HTTP client) rather than demanding a new runtime, queue, or datastore. The target matrix is Laravel 11, 12 and 13 on PHP 8.3–8.5, which is a modern-but-not-bleeding-edge envelope.
Integration feasibility. High for greenfield Laravel 11+ applications. The headline of v2.0.1 is a resolution fix, not a feature: v2.0.0 pinned guzzlehttp/guzzle ^7.8.2, which forced any host already on Guzzle 8 to downgrade Guzzle (8.3 → 7.16), PSR-7 (3.2 → 2.13) and Promises (3.1 → 2.6) in order to install. That is a real, measurable integration tax — a downgrade cascade in a shared dependency is exactly the kind of change that breaks unrelated packages in a monolith. v2.0.1 widens the constraint to ^7.8.2|^8.0 with the Guzzle 7 floor unchanged, so the package now coexists with either major.
Technical risk. Three items worth tracking:
src/ change between 2.0.0 and 2.0.1 — the diff is composer.json, CI workflow and CHANGELOG.md. Guzzle 8 compatibility is therefore asserted by constraint and CI, not by a code change. That is usually fine (Guzzle 8 is largely behavioural rather than API-breaking for typical client usage), but it means the first real signal comes from our own test suite, not from the vendor.illuminate/http) carries its own Guzzle constraint. Allowing Guzzle 8 here does not guarantee the host application can actually resolve Guzzle 8; if the pinned Laravel minor still requires ^7, we stay on 7 and the patch is a no-op for us. Verify by resolution, not by changelog.Key questions for the maintainer.
^8.0), or only permitted by constraint?Stack fit. Laravel 11/12/13, PHP 8.3+, Composer 2. The package is an HTTP client + protocol adapter, so it inherits whatever Guzzle the framework already resolves. Our decision tree is short: if the application is on Laravel 11+ and PHP 8.3+, it fits; if not, it does not, and no amount of patch-release goodwill changes that.
Migration path.
src/ diff, no config diff, no migration. Safe to take on the next routine dependency bump; there is no functional reason to expedite unless we are currently blocked by the Guzzle pin.^2.0.1 removes the forced downgrade of Guzzle/PSR-7/Promises. That is the only scenario where this patch is worth prioritising, and in that scenario it is worth prioritising immediately — the downgrade cascade is a live risk to other packages.Compatibility. Runtime support for Laravel 11/12/13 is explicitly retained. The Testbench development floors were raised to compatible patch lines — this affects contributors and CI only, not consumers. The Guzzle 7 floor (^7.8.2) is unchanged, so existing Guzzle 7 hosts see no narrowing.
Sequencing.
composer why guzzlehttp/guzzle, composer update --dry-run) to learn which Guzzle major we actually land on. This determines whether the patch changes anything for us.^2.0.1 with the next maintenance window. Low urgency.^2.0.1, then run the full application test suite plus a smoke test of every other Guzzle consumer.^2.0.1 rather than a floating constraint, and add a Renovate/Dependabot watch on the package.Maintenance. Low marginal load. A dependency-only patch with a two-PR diff and a green matrix is close to the cheapest kind of upgrade we can absorb. The ongoing cost is vigilance, not labour: the package now spans two Guzzle majors, so its release cadence is partly coupled to Guzzle 8.x patch releases. Budget a periodic composer outdated review rather than a standing workstream. Dev-only changes (Testbench floors) do not reach production and should not appear in release risk assessments.
Support. The widened constraint is a support improvement: it means Guzzle 8 security patches are reachable without forking the pack, and it removes a class of "cannot install, dependency conflict" tickets. Counterweight: we are dependent on a small maintainer team (@bramato authored both PRs) for a package sitting in the request path between our application and a third-party documentation service. Record the maintainer as a single point of knowledge and keep the integration behind an interface we control.
Scaling. The pack is I/O-bound outbound HTTP to AskMyDocs; it adds no local compute, storage or schema. Scaling therefore tracks the upstream service and our egress: tune connection reuse, timeouts and retry/backoff on the Guzzle client, and confirm whether the MCP surface streams responses — streaming changes both timeout policy and load-balancer configuration. Watch outbound request volume and cost if documentation is fetched per user session rather than cached.
Failure modes.
composer.lock review in PRs and a CI resolution check.Ramp-up. Low. Installation is a standard composer require plus publish-config; a mid-level Laravel engineer is productive in well under a day. The genuine learning curve is MCP literacy — transport choice, tool schemas, client-side wiring — and that sits with whoever owns the AI surface, not with the Laravel team. Recommend one engineer own both the pack and the MCP contract so protocol changes have a clear owner.
Evidence caveat: this assessment is derived solely from the v2.0.1 release notes and changelog. No source review, dependency audit, or adopter feedback was available; the Guzzle 8 posture in particular should be confirmed empirically before production commitment.
How can I help you explore Laravel packages today?