klapaudius/symfony-mcp-server
Symfony MCP Server lets you expose your Symfony app's tools, resources, and prompts to AI clients via the Model Context Protocol. Register capabilities with attributes or config, add MCP endpoints, and connect Claude and other MCP-compatible assistants to your PHP backend.
oneOf/anyOf/allOf composition in tool input schemas changes product design options, not just code:
filter that is either a range, a set, or a text match) forced either a permissive "anything goes" schema or a fan-out into multiple near-duplicate tools. Composition lets one tool carry a precise contract.allOf + a discriminator is the standard way to model variant payloads; before this, those use cases had to be flattened or split.Adopt when:
Look elsewhere when:
Watch items: the 1.9.0 changelog is a single line — no migration notes, no compatibility statement. Composition support can change how existing schemas are serialized; smoke-test your current tools against an MCP client before rolling out, and pin the version if you ship to customers.
For executives: We can expose our backend to AI assistants and agent clients without building and maintaining a protocol server ourselves. This is the integration layer for the agent features on the roadmap — it's a dependency, not a platform bet, and it's reversible. The 1.9.0 release removes a real design ceiling: our tool definitions can now describe complex, variant-shaped inputs precisely, which measurably improves how reliably models call them. The trade-off to acknowledge is support: it's a community package with one primary maintainer, so we pin versions and keep an exit path.
For engineering: 1.9.0 adds oneOf/anyOf/allOf composition to tool schemas. Practical effect: stop splitting tools by argument shape and stop shipping permissive schemas that let the model guess. Use allOf + discriminator for variant payloads rather than flattening. Two asks before adoption: (1) regression-test existing tool schemas against a real MCP client on upgrade — the release note says nothing about serialization changes, and composed schemas can alter emitted JSON Schema; (2) pin the minor version in composer.json and review each release manually, since we're taking a direct dependency on a low-bus-factor package. If we're on Laravel rather than Symfony, spike the integration first and timebox it — if the glue exceeds roughly a sprint, revisit the official SDK in another language and wrap our services over HTTP instead.
How can I help you explore Laravel packages today?