datomatic/laravel-database-mcp
A Laravel package that exposes your database to AI assistants via the Model Context Protocol. Browse schemas, inspect tables, and run safe read queries from MCP clients like Claude Desktop or Cursor, making database exploration conversational.
Architecture fit. datomatic/laravel-database-mcp is a Laravel service-provider package that wraps laravel/mcp to expose database introspection/query capabilities to MCP clients (Claude Desktop, Cursor, IDE agents, internal copilots). It sits alongside the application rather than inside the request path, so it does not alter existing runtime behavior — it adds a new external surface against the same database. That is architecturally cheap to adopt but expensive to get wrong: the package's blast radius is entirely determined by what database credentials and connections we let it see. The v0.2.0 bump to allow laravel/mcp 1.0 is the most consequential line in the release, because it moves us off a pre-1.0 MCP foundation that would otherwise conflict with any other MCP-enabled package in the same application.
Integration feasibility. Standard Composer install, config publish, and connection allowlisting. The work is not the install; it is the surrounding decisions — which connections are exposed, whether the credential is read-only, whether the transport is local (stdio) or networked (HTTP), and where authentication terminates. Expect a half-day for a developer to get a working proof of concept against a scratch database and considerably longer to make it safe against a production replica. The refactoring bundled into v0.2.0 means the proof of concept should be re-validated against the new tag rather than carried over from v0.1.1.
Technical risk. Three risks dominate. First, semver: the package is still 0.x, so v0.2.0 is permitted to break v0.1.1 consumers, and the release note gives no detail on what the refactor changed — namespaces, config keys, published config shape, and tool names are all candidates. Second, data exposure: an MCP server over a database is a prompt-injection and exfiltration vector; an agent that can read a users table can be talked into reading it broadly, and any write capability is unacceptable outside a disposable environment. Third, dependency coupling: widening the constraint to laravel/mcp 1.0 reduces conflict risk but also means we inherit the 1.0 API surface, and any Laravel-version floors imposed by that dependency now apply to us. The upside is real — aligning to a 1.0 MCP dependency is a maturity signal and removes a likely blocker for teams already running MCP tooling.
Key questions.
laravel/mcp 1.0 impose, and do they match our supported matrix?SELECT?Stack fit. Targets Laravel applications on modern PHP with an existing laravel/mcp dependency or an appetite to add one. Best fit is an internal-tooling or developer-productivity context: engineering teams who already run Laravel and want schema-aware assistance without hand-feeding DDL into prompts. Poor fit is any customer-facing or multi-tenant surface where the database boundary is also a tenant boundary — the package has no obvious tenant-awareness story, and adding one is our work, not theirs.
Migration path. There is no prior assessment to upgrade from, so this is a first adoption rather than a migration. Internally, the decision is whether to pin ^0.1.1 (known, narrower MCP constraint) or take ^0.2.0 (MCP 1.0 alignment, unverified refactor). For a greenfield proof of concept, take v0.2.0 — starting on a dependency we already know we must move off is borrowed time. The migration cost we are deferring is the refactor surface, so budget for a re-read of the published config and a smoke test of every exposed tool on each 0.x bump until 1.0 lands.
Compatibility. Verify in order: PHP version, Laravel version, then laravel/mcp 1.0 resolution against whatever else in the app depends on MCP. Run composer why laravel/mcp before and after to confirm nothing else is pinned below 1.0, which would make v0.2.0 uninstallable. Confirm that the published config file from v0.1.x (if any teammate experimented) is regenerated rather than merged, since refactors commonly add or rename keys silently.
Sequencing.
Maintenance. Pre-1.0 with a single-maintainer profile and a terse changelog — the v0.2.0 note is one sentence plus a compare link. That is a thin signal for a refactor release. Assume we own the upgrade testing and that breakage will be discovered by us, not announced. Budget a recurring review at each 0.x release; do not let this drift into an unpinned transitive dependency.
Support. Upstream support is GitHub issues with no SLA. Internal support is whoever adopts it first, which argues for naming an owner before the pilot rather than after. Document the read-only user creation and the connection allowlist in our own runbook — that knowledge is ours, not the package's.
Scaling. The load profile is unusual: bursty, agent-driven, and frequently wasteful. Agents tend to request broad schema dumps and unbounded selects, so cost scales with prompt behavior rather than with user count. Point at a replica. Watch connection count first — an MCP client that opens a connection per tool call will exhaust a small pool quickly — and query duration second.
Failure modes.
laravel/mcp below 1.0, blocking install or forcing a downgrade.Ramp-up. Low for a Laravel developer: install, config, and connection allowlist are familiar patterns. The genuine ramp-up is conceptual — understanding MCP transports, how a client discovers tools, and where authentication actually terminates — plus the security judgment to keep the capability read-only and scoped. Roughly one engineer-week to a trustworthy internal pilot, most of it spent on guardrails rather than on the package itself.
How can I help you explore Laravel packages today?