PackageTrack
Sign in Get early access

mcp/sdk

Model Context Protocol SDK for Client and Server applications in PHP

v0.7.1 2.8M downloads/mo #734 most downloaded on Packagist modelcontextprotocol/php-sdk

What this package is like to depend on

Last release 13 days ago

10 Aug 2026

Ships on a steady schedule

a new release about every 5 weeks

Nearly every release is documented

notes for 10 of 10 stable releases

Nothing withdrawn

no release was ever pulled

9 months old

10 releases · first in 2025

10 releases in the last 12 months

see the full history below

Release timeline

10 releases · Nov 2025 to Aug 2026
2026
Release Pre-release

Releases

latest 10
  1. v0.7.1 10 Aug 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: v0.7.0...v0.7.1

    Open source →
  2. v0.7.0 14 Jul 2026
    Release notes

    What's Changed

    • [Server] Fix completion/complete crash for plain ref/resource by @NarimanGardi in #388
    • [Server] Harden JSON-RPC input parsing against malformed input and resource exhaustion by @soyuka in #383
    • [Server] scope OAuth to resource server, not authorization server by @soyuka in #382
    • [Server] Allow pre-built instance handlers in element registration by @valeriudev in #375
    • [Schema] Fix Implementation::fromArray rejecting falsy-but-valid name/version by @DevkumarPatel in #393
    • [Client] Add client-side elicitation support by @wachterjohannes in #371
    • [Server] Defer element loading to first registry read by @soyuka in #389
    • [Server] Always emit items for array tool parameter schemas by @valeriudev in #378
    • [Server] Reject malformed MCP session ID headers by @jstar0 in #384
    • [Examples] Demo pre-built instance handlers + inspector coverage by @chr-hertel in #390
    • [Server] Expose OAuth protected resource metadata as a reusable request handler by @chr-hertel in #391
    • [Minor] Preserve custom domain on docs deploy by @chr-hertel in #374
    • [Minor] bump actions/checkout from 6 to 7 by @dependabot[bot] in #385
    • [Minor] bump actions/setup-node from 6 to 7 by @dependabot[bot] in #394
    • [Minor] Fix v0.7.0 CHANGELOG entries by @chr-hertel in #396

    New Contributors

    Full Changelog: v0.6.0...v0.7.0

    Open source →
    Release notes
    • Add client-side elicitation support: ElicitationCallbackInterface, ElicitationRequestHandler, and ElicitationException let clients respond to server elicitation requests.
    • Defer element loading to the first registry read: loaders now run at request time (first has*/get* call) instead of eagerly at Builder::build(), fixing empty registries under persistent runtimes (e.g. FrankenPHP worker mode) where a loader's data source is not ready at build time. Adds Builder::setLazyLoading() (default on), a public Registry::load(), and an optional LoaderInterface constructor argument on Registry.
    • [BC Break] Element loading is lazy by default: loader failures now surface on the first request rather than at Builder::build(), and initialize advertises capabilities from the configured sources rather than the loaded registry. Call Builder::setLazyLoading(false) to restore eager build-time loading.
    • Allow [$instance, 'methodName'] as an element handler in Builder::addTool(), addResource(), addResourceTemplate(), and addPrompt(). Unblocks handlers with constructor dependencies that the container-less new $className() fallback cannot build.
    • Always emit an items schema for array tool parameters: untyped arrays get items: {} and nullable typed arrays (e.g. string[]|null) keep their element type. Fixes strict clients rejecting tools with "array type must have items" (#151).
    • Harden JSON-RPC input parsing: single-message vs batch is now decided from the decoded JSON type (object → single, list array → batch) instead of the raw first byte. Scalars, empty payloads, and non-object batch elements are surfaced as InvalidInputMessageException entries instead of triggering warnings or a TypeError.
    • Add maxBatchSize (default 100) to MessageFactory — oversized JSON-RPC batches are rejected before any message is constructed, guarding against amplification.
    • Add maxBodyBytes (default 4 MiB) to StreamableHttpTransport — POST bodies exceeding the cap are rejected with 413. Unknown-size/chunked bodies are read incrementally and stopped at the cap so they cannot exhaust memory.
    • Reject malformed Mcp-Session-Id headers with a 400 response: a repeated header or a value that is not a valid UUID is now rejected up front instead of surfacing as an uncaught Uuid::fromString() error.
    • Extract RFC 9728 metadata serving into ProtectedResourceMetadataHandler, a transport-neutral PSR-15 RequestHandlerInterface that can be mounted directly as a Symfony/Laravel controller; ProtectedResourceMetadataMiddleware now delegates to it (no BC break).
    Open source →
  3. v0.6.0 02 Jun 2026
    Release notes

    What's Changed

    • [Server] Allow overriding the default file name pattern for Discovery by @johnhunt-lc in #292
    • [Server] force the proper Content-type for the 202 response in createJsonResponse() by @johnhunt-lc in #295
    • [Schema] fix: allow URIs without double slash in Resource and ResourceTemplate (RFC 3986) by @blackwell-systems in #297
    • fix: Cannot pass null to nullable enum parameters by @SBNTT in #299
    • [Server] Fix case sensitivity for http header by @chr-hertel in #283
    • Add PSR-3 compliant exception context when logging exceptions by @svenmuennich in #300
    • [Server] Add configurable session garbage collection by @chr-hertel in #258
    • [CI] Add weekly conformance run against latest upstream release by @soyuka in #304
    • [Client][Server][Schema] Bump protocol version to nov 25 by @chr-hertel in #308
    • [Server] Untangle origin tracking from Registry by @chr-hertel in #302
    • [Schema] Add title field to Resource and ResourceTemplate by @blackwell-systems in #301
    • Add title parameter to Builder::addResource() and addResourceTemplate() by @chr-hertel in #310
    • Streamline README and add conformance score badges by @chr-hertel in #312
    • [Conformance] Fix conformance score calculcation by @chr-hertel in #313
    • chore(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #331
    • chore(deps): bump actions/download-artifact from 4 to 8 by @dependabot[bot] in #330
    • [Server] Compose StreamableHttpTransport security middleware via defaultMiddleware() factory by @sveneld in #307
    • [Server] Allow runtime-resolved element handlers by @e0ipso in #294
    • [Schema][Server] Add MCP Apps extension (io.modelcontextprotocol/ui) support by @chr-hertel in #281
    • Document v0.6.0 changes in CHANGELOG and docs by @chr-hertel in #311

    Breaking Changes

    • Renamed Mcp\Schema\Resource to Mcp\Schema\ResourceDefinition. No alias.
    • Renamed Mcp\Capability\Registry\Loader\ArrayLoader to Mcp\Capability\Registry\Loader\ReflectedElementLoader.
    • Bump default protocol version to 2025-11-25
    • Removed ElementReference::$isManual public property and the bool $isManual parameter from all *Reference constructors. Origin tracking is no longer carried on the element; manual-over-discovered precedence is encoded by loader execution order.
    • RegistryInterface::registerTool(), registerResource(), registerResourceTemplate(), registerPrompt() lost their trailing bool $isManual = false parameter. Callers using positional arguments must drop the flag.
    • Removed RegistryInterface::clear(), getDiscoveryState(), setDiscoveryState(). Rediscovery now goes through DiscoveryLoader::load() directly.
    • Builder::addResource() signature changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.
    • Builder::addResourceTemplate() signature changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.
    • StreamableHttpTransport constructor: $corsHeaders parameter removed; CORS is now configured via CorsMiddleware. The $middleware parameter is nullable — null (or omitted) installs the default stack; [] disables all defaults. Default Access-Control-Allow-Origin is no longer set (was *).
    • ResourceDefinition::__construct() signature changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.
    • ResourceTemplate::__construct() signature changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.
    • McpResource and McpResourceTemplate attribute signatures changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.

    New Contributors

    Full Changelog: v0.5.0...v0.6.0

    Open source →
    Release notes
    • Add Builder::add(Tool|ResourceDefinition|ResourceTemplate|Prompt $definition, ElementHandlerInterface $handler) for explicit registration of elements whose schema is only known at runtime.
    • Add handler interfaces ToolHandlerInterface, ResourceHandlerInterface, ResourceTemplateHandlerInterface, PromptHandlerInterface, and the ElementHandlerInterface marker.
    • [BC Break] Renamed Mcp\Schema\Resource to Mcp\Schema\ResourceDefinition. No alias.
    • [BC Break] Renamed Mcp\Capability\Registry\Loader\ArrayLoader to Mcp\Capability\Registry\Loader\ReflectedElementLoader.
    • [BC Break] Bump default protocol version to 2025-11-25
    • Add support for MCP Apps extension in schema and server
    • Add extensions to ServerCapabilities and ClientCapabilities and Builder::enableExtension()
    • Allow overriding the default name pattern for Discovery
    • Add configurable session garbage collection (gcProbability/gcDivisor)
    • Add optional title field to ResourceDefinition and ResourceTemplate for MCP spec compliance
    • Add ChainLoader to compose multiple LoaderInterface implementations via explicit ordering.
    • Add RegistryInterface::unregisterTool(), unregisterResource(), unregisterResourceTemplate(), unregisterPrompt() — idempotent removals.
    • Add RegistryInterface::hasTool(), hasResource(), hasResourceTemplate(), hasPrompt() — by-name existence checks.
    • DiscoveryLoader now refreshes only its own previously written entries; manual registrations (via Builder::addTool() etc. or runtime $registry->registerTool() calls) survive rediscovery, and a same-name manual registration takes precedence over discovery on collision.
    • [BC Break] Removed ElementReference::$isManual public property and the bool $isManual parameter from all *Reference constructors. Origin tracking is no longer carried on the element; manual-over-discovered precedence is encoded by loader execution order.
    • [BC Break] RegistryInterface::registerTool(), registerResource(), registerResourceTemplate(), registerPrompt() lost their trailing bool $isManual = false parameter. Callers using positional arguments must drop the flag.
    • [BC Break] Removed RegistryInterface::clear(), getDiscoveryState(), setDiscoveryState(). Rediscovery now goes through DiscoveryLoader::load() directly.
    • Registry::register*() semantics changed to plain last-write-wins (overwrites silently) and the methods now return the stored *Reference. The previous "discovered registration is ignored when a manual one already exists" precedence rule still applies, but is now enforced by DiscoveryLoader via reference-identity tracking — and still emits a debug log when a discovery is skipped due to a conflicting registration.
    • Add optional title parameter to Builder::addResource() and Builder::addResourceTemplate() for MCP spec compliance
    • [BC Break] Builder::addResource() signature changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.
    • [BC Break] Builder::addResourceTemplate() signature changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.
    • Add CorsMiddleware, DnsRebindingProtectionMiddleware, and ProtocolVersionMiddleware for StreamableHttpTransport, composed automatically as the default stack via StreamableHttpTransport::defaultMiddleware()
    • [BC BREAK] StreamableHttpTransport constructor: $corsHeaders parameter removed; CORS is now configured via CorsMiddleware. The $middleware parameter is nullable — null (or omitted) installs the default stack; [] disables all defaults. Default Access-Control-Allow-Origin is no longer set (was *).
    • [BC Break] ResourceDefinition::__construct() signature changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.
    • [BC Break] ResourceTemplate::__construct() signature changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.
    • [BC Break] McpResource and McpResourceTemplate attribute signatures changed — $title parameter added between $name and $description. Callers using positional arguments must switch to named arguments.
    Open source →
  4. v0.5.0 26 Apr 2026
    Release notes

    What's Changed

    • [Server] chore: remove final keyword on attributes classes by @fox-john in #240
    • [Server] fix(session): initialize data lazily in save() to prevent uninitialized property access by @soyuka in #252
    • [Server] Oauth2 based on middleware by @sveneld in #221
    • Add basic roadmap with important goals for v1.0 by @chr-hertel in #249
    • Add dependabot configuration for composer and github actions by @chr-hertel in #248
    • [Client] Feat: Implement MCP client component by @CodeWithKyrian in #192
    • chore(deps): bump actions/setup-node from 5 to 6 by @dependabot[bot] in #254
    • chore(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in #255
    • [Server] Encapsulate session handling from Protocol to new SessionManager by @chr-hertel in #247
    • Add changelog entries for client and server auth by @chr-hertel in #257
    • chore(deps): update phpdocumentor/reflection-docblock requirement from ^5.6 to ^5.6 || ^6.0 by @dependabot[bot] in #256
    • [Server] Improve middleware pipeline consistency by @chr-hertel in #262
    • [Server] add a reference handler setter to server builder by @simonchrz in #265
    • chore(deps): bump ramsey/composer-install from 3 to 4 by @dependabot[bot] in #268
    • [Server] Extend elicitation enum schema compliance by @chr-hertel in #261
    • Add soyuka to codeowners to make approvals count by @chr-hertel in #272
    • [Client] docs: introduce client SDK documentation and improve README structure by @CodeWithKyrian in #259
    • [Server] Fix to make Symfony Finder component optional by @bigdevlarry in #267
    • [Server] Fix to let schema attribute enum type hint allow null values by @bigdevlarry in #271
    • [Server] feat: relax StrictOidcDiscoveryMetadataPolicy and add Dynamic Client Registration middleware (RFC 7591) by @simonchrz in #269
    • [Schema] Add title field to Prompt for MCP spec compliance by @chr-hertel in #278
    • style: apply php-cs-fixer and PHPStan fixes by @e0ipso in #289
    • [Schema] Fix PHPDoc type of GetPromptRequest::$arguments by @vjik in #285
    • [Client] add client conformance test suite by @chr-hertel in #279
    • CS update after release of v3.95 by @chr-hertel in #282
    • [Schema][Server] Add top-level title to Tool by @e0ipso in #288

    New Contributors

    Full Changelog: v0.4.0...v0.5.0

    Open source →
    Release notes
    • Add built-in authentication middleware for HTTP transport using OAuth
    • Add client component for building MCP clients
    • Add Builder::setReferenceHandler() to allow custom ReferenceHandlerInterface implementations (e.g. authorization decorators)
    • Add elicitation enum schema types per SEP-1330: TitledEnumSchemaDefinition, MultiSelectEnumSchemaDefinition, TitledMultiSelectEnumSchemaDefinition
    • [BC break] Make Symfony Finder component optional. Users would need to install symfony/finder now themselves
    • Add LenientOidcDiscoveryMetadataPolicy for identity providers that omit code_challenge_methods_supported (e.g. FusionAuth, Microsoft Entra ID)
    • Add OAuth 2.0 Dynamic Client Registration middleware (RFC 7591)
    • Add optional title field to Prompt and McpPrompt for MCP spec compliance
    • [BC Break] Builder::addPrompt() signature changed — $title parameter added between $name and $description. Callers using positional arguments for $description must switch to named arguments.
    • Add optional title field to Tool and McpTool for MCP spec compliance
    • [BC Break] Tool::__construct() signature changed — $title parameter added between $name and $inputSchema. Callers using positional arguments must switch to named arguments or pass null for $title.
    • [BC Break] McpTool attribute signature changed — $title parameter added between $name and $description. Callers using positional arguments for $description must switch to named arguments.
    • [BC Break] Builder::addTool() signature changed — $title parameter added between $name and $description. Callers using positional arguments for $description must switch to named arguments.
    Open source →
  5. v0.4.0 23 Feb 2026
    Release notes

    What's Changed

    • chore: update licensing to Apache 2.0 for new contributions by @domdomegg in #222
    • [Server] refactor: extract formatters into dedicated classes by @e0ipso in #224
    • [Schema] Refactor the schema tool array to use normalizeSchemaProperties method by @bigdevlarry in #223
    • Update codestyle based on updated Symfony rules by @chr-hertel in #229
    • Switch pipeline to conformance baseline by @chr-hertel in #230
    • Add API documentation generation with phpDocumentor by @jonathanhefner in #184
    • Extend gitattributes for latest additions on root level by @chr-hertel in #237
    • [Server] Rename Psr16StoreSession to Psr16SessionStore for consistency by @chr-hertel in #236
    • [Server] Throw package specific exceptions in CallbackStream by @chr-hertel in #233
    • [Server] Shift away session decode from constructor by @chr-hertel in #238
    • [Server] Fix: HTTP Transport Header Compliance by @dotmarn in #227
    • [Server] Add Middleware handlers to StreamableHttpTransport by @sveneld in #218
    • [Server] Fix Invalid data in Session by @sveneld in #241
    • [Server] feat: improve invalid resource messages by @alexisLefebvre in #242
    • feat: test Symfony 8 by @alexisLefebvre in #243
    • [Server] Feat: Improve resource template messages by @bigdevlarry in #245
    • [Server][Schema] Add elicitation support for server-to-client user input requests by @wachterjohannes in #228
    • [Server] Add missing handler for resource subscribe/unsubscribe handlers by @bigdevlarry in #220
    • Update SECURITY.md to use GitHub Security Advisories by @localden in #250
    • [Server] add server lifecycle events by @EdouardCourty in #175
    • [Server] chore(http): create constant for session id header by @EdouardCourty in #246

    New Contributors

    Full Changelog: v0.3.0...v0.4.0

    Open source →
    Release notes
    • Rename Mcp\Server\Session\Psr16StoreSession to Mcp\Server\Session\Psr16SessionStore
    • Add missing handlers for resource subscribe/unsubscribe and persist subscriptions via session
    • Introduce SessionManager to encapsulate session handling (replaces SessionFactory) and move garbage collection logic from Protocol.
    Open source →
  6. v0.3.0 11 Jan 2026
    Release notes

    What's Changed

    • [Server] Add support for binary resource in conformance server example by @luoyue712 in #216
    • [Server] Fix conformance sampling test stuck issue with Docker PHP-FPM by @CodeWithKyrian in #219
    • [Server] Add output schema support to MCP tools by @bigdevlarry in #153
    • [Server] Use SchemaValidator to validate tool input by @Nyholm in #203
    • [Schema] Rename schema to resource in Capability by @luoyue712 in #217
    • [Server] Add interface abstractions for SchemaGenerator and Discoverer with DI improvements by @soyuka in #215
    • [Server] Use getDescription to get all descriptions. by @luoyue712 in #188
    • [Server] Add $runnerControl parameter to StdioTransport constructor by @Nyholm in #205
    • [Schema] Make static methods in Error final by @Nyholm in #204

    Full Changelog: v0.2.2...v0.3.0

    Open source →
    Release notes
    • Add output schema support to MCP tools
    • Add validation of the input parameters given to a Tool.
    • Rename Mcp\Capability\Registry\ResourceReference::$schema to Mcp\Capability\Registry\ResourceReference::$resource.
    • Introduce SchemaGeneratorInterface and DiscovererInterface to allow custom schema generation and discovery implementations.
    • Remove DocBlockParser::getSummary() method, use DocBlockParser::getDescription() instead.
    Open source →
  7. v0.2.2 28 Dec 2025
    Release notes

    What's Changed

    • Normalize composer.json with ergebnis/composer-normalize by @Nyholm in #208
    • Be more generous with PSR versions by @Nyholm in #202
    • Remove ability to use parameter name _session and _request by @Nyholm in #206
    • Use the throwable object in $context['exception'] by @Nyholm in #207
    • [Server][Conformance] Kicking off adoption of conformance testing by @chr-hertel in #181

    Full Changelog: v0.2.1...v0.2.2

    Open source →
    Release notes
    • Throw exception when trying to inject parameter with the unsupported names $_session or $_request.
    • Throwable objects are passed to log context instead of the exception message.
    Open source →
  8. v0.2.1 27 Dec 2025
    Release notes

    What's Changed

    • House keeping in cs fixer config and makefile by @chr-hertel in #196
    • Add a way to stop the stdioTransport in a graceful way by @Nyholm in #195
    • Allow to install with sf 5.4 by @Nyholm in #197
    • Move examples to server directory by @Nyholm in #198
    • Add changelog entry for SF v5.4 support by @chr-hertel in #199
    • make sure StdioTransport does not break BC for 0.2.1 by @Nyholm in #201

    Full Changelog: v0.2.0...v0.2.1

    Open source →
    Release notes
    • Add RunnerControl for StdioTransport to allow break out from continuously listening for new input.
    • Open range of supported Symfony versions to include v5.4
    Open source →
  9. v0.2.0 20 Dec 2025
    Release notes

    What's Changed

    • fix minor typo in readme by @Nyholm in #162
    • remove redundant methods in Transport by @Nyholm in #163
    • Add CakePHP integration plugin to README by @dereuromark in #166
    • Tell clients that they are allowed to use Mcp-Session-Id header by @Nyholm in #165
    • Fix code style by @Nyholm in #171
    • [Server] Decouple Protocol from TransportInterface for reusability by @lvluoyue in #160
    • Allow users to not specify server info by @Nyholm in #164
    • Fix incorrect disconnect status code by @lvluoyue in #158
    • [Server] Extend changelog for covering 0.1 by @chr-hertel in #172
    • add changelog for 0.2.0 release by @Nyholm in #173
    • Adding PHP 8.5 to pipeline by @chr-hertel in #182
    • [Server] align addLoaders with addRequestHandlers by @soyuka in #183
    • [Server] Add RequestContext and logging by @Nyholm in #176
    • fix bug with Builder::addLoders() by @Nyholm in #186
    • [Schema] Fix: correct Resource type hints in ListResourcesResult by @CodeWithKyrian in #191
    • Fix: use RequestContext in client-communication server example by @CodeWithKyrian in #190
    • Add changelog for 0.2.0 by @Nyholm in #187

    New Contributors

    Full Changelog: v0.1.0...v0.2.0

    Open source →
    Release notes
    • Make Protocol stateless by decouple if from TransportInterface. Removed Protocol::getTransport().
    • Change signature of Builder::addLoaders(...$loaders) to Builder::addLoaders(iterable $loaders).
    • Removed ClientAwareInterface in favor of injecting a RequestContext with argument injection.
    • The ClientGateway cannot be injected with argument injection anymore. Use RequestContext instead.
    • Removed ClientAwareTrait
    • Removed Protocol::getTransport()
    • Added parameter for TransportInterface to Protocol::processInput()
    Open source →
  10. v0.1.0 20 Nov 2025
    Release notes

    What's Changed

    • [Server] Kicking off the SDK based on Symfony's MCP SDK by @chr-hertel in #1
    • [Server] Introducing Capability Registry & Discovery by @chr-hertel in #4
    • [Examples][Server] Adopt Server Examples by @chr-hertel in #5
    • Add WIP note to readme by @chr-hertel in #6
    • [Server] Fix manual registration of capabilities via ServerBuilder by @chr-hertel in #18
    • Update readme by @pronskiy in #20
    • Add note about minimum stability to README by @chr-hertel in #21
    • Fix JSON formatting by @OskarStark in #22
    • Remove unused development dependencies by @OskarStark in #33
    • [CI] Update actions/checkout from v4 to v5 by @OskarStark in #24
    • Fix typos in documentation and configuration files by @OskarStark in #25
    • Remove unused nyholm/nsa dev dependency by @OskarStark in #28
    • Require Symfony 7.3 instead of unmaintained versions by @OskarStark in #26
    • [CI] Validate composer.json file before install by @OskarStark in #29
    • Fix README namespace imports for Quick Start example by @CodeWithKyrian in #23
    • Remove outdated docs by @chr-hertel in #32
    • Add missing ConfigurationException by @OskarStark in #31
    • Remove suggest section in composer.json by @OskarStark in #34
    • [CI] Rename workflow file from .yml to .yaml by @OskarStark in #35
    • Update README for clarity and consistency by @sapayth in #38
    • Updated README.md to clarify grammar in "Important" section by @Adebayo120 in #41
    • [CI] Install dependencies only once by @OskarStark in #30
    • [Server] Fix return type in abstract methods from self to static by @markinigor in #53
    • Add Makefile to export-ignore in .gitattributes by @roxblnfk in #56
    • [Server] Registry Architecture Refactoring - Enhanced Separation of Concerns by @butschster in #46
    • [Server] Switch to set* and add* on ServerBuilder instead of with* by @chr-hertel in #71
    • [Server] Rework transport architecture and add StreamableHttpTransport by @CodeWithKyrian in #49
    • [Server] Remove dead code from old Chain architecture and obsolete examples by @CodeWithKyrian in #76
    • [Server] Implement discovery caching for improved performance by @xentixar in #39
    • [Server][Bug] Pagination of List requests by @bigdevlarry in #55
    • [Server] Fix: ensure JSON-RPC error responses include message IDs by @CodeWithKyrian in #77
    • [Server] Fix & clean up examples by @chr-hertel in #78
    • Support for Symfony 8.0 by @chr-hertel in #79
    • [Server] refactor: integrate cache parameter into setDiscovery() method by @xentixar in #80
    • Split testsuite for unit and inspector based tests by @chr-hertel in #82
    • [Server] Address issue with pagination limit on builder by @bigdevlarry in #83
    • [Server] Rename Server::make() to Server::builder() for better clarity by @CodeWithKyrian in #84
    • [Server] Rename ServerBuilder to Builder by @CodeWithKyrian in #85
    • [Server] Reorganize server handlers and transport structure for better organization by @CodeWithKyrian in #86
    • [Server] Add request handler for resource templates by @chr-hertel in #89
    • [Examples] Rename example folders by @chr-hertel in #87
    • [Server] Avoid broken inspector cli version by pinning by @chr-hertel in #98
    • [Server] Add completion/complete handler, centralize provider logic, and move completion capability by @CodeWithKyrian in #97
    • [Server] Address open PHPStan issues from baseline by @chr-hertel in #92
    • [Server] Fix missing instructions from builder to handler by @chr-hertel in #90
    • docs: add more about building servers and updating front readme by @chr-hertel in #81
    • [Server] Simplify server extensibility with pluggable method handlers by @CodeWithKyrian in #100
    • [Server] Fixed Discoverer file processing for PHAR by @ineersa in #94
    • [Server] Remove dead resource template handler code by @chr-hertel in #102
    • [Server] Simplify server entrypoint with run-based transport lifecycle by @CodeWithKyrian in #103
    • [Server] Added possibility to set custom ServerCapabilities. by @ineersa in #95
    • [Server] Removed redundant Builder.setServerCapabilities duplicate method by @Adebayo120 in #107
    • [Server] Add happy cases for functional tests of example 1 by @chr-hertel in #91
    • [Server] Refactor protocol pipeline to separate request and notification handling by @CodeWithKyrian in #106
    • [Server] Missing Mcp-Protocol-Version to access control by @soyuka in #110
    • [Server] Structured content return and tool error by @ineersa in #93
    • [Server] refactor: registry loader by @soyuka in #111
    • [Server] Actually use cache across example runs by @chr-hertel in #116
    • [Server] Add PSR-17 factory auto-discovery to StreamableHttpTransport by @CodeWithKyrian in #119
    • [Server] Add Bidirectional Client Communication Support by @CodeWithKyrian in #109
    • [Server] bugfix: Cache discovery is unavailable #113 by @okxaas in #120
    • [Server] Make CORS headers configurable in StreamableHttpTransport by @CodeWithKyrian in #118
    • [Server] Add more inspector tests for functionality tests of STDIO examples by @chr-hertel in #115
    • [Server] implement PSR-16 cache based session storage by @lvluoyue in #114
    • [Server] Fix: extract and pass URI template variables to resource handlers by @CodeWithKyrian in #123
    • [Server] add completion handler to builder by @chr-hertel in #126
    • [Server] Fix: standardize error handling across handlers with MCP specificatio… by @CodeWithKyrian in #124
    • [Server] Feat: Add comprehensive HTTP inspector tests with improved framework by @CodeWithKyrian in #125
    • [Server] Consistent arg name in session store implementations by @chr-hertel in #127
    • [Server] Introduce ClientAwareInterface and Trait by @chr-hertel in #101
    • [Examples][Server] Transport agnostic examples by @chr-hertel in #131
    • [Server] ability to append loaders to server builder by @soyuka in #132
    • [Server] Update session save to return success flag by @soyuka in #133
    • [Server] Ability to set custom protocol version by @ineersa in #117
    • [Server][Schema] Add _meta Field by @kaipiyann in #129
    • [Schema] Rename $_meta properties to $meta by @chr-hertel in #134
    • [Schema][Server] Add support for icons and website url by @chr-hertel in #141
    • [Server] Change visibility of StreamableHttpTransport methods to protected by @lvluoyue in #143
    • [Server] Discovery fix McpTool meta parameters in place of icons by @mpoiriert in #145
    • [Server] Add meta parameter to addTool and addResource methods by @bb-c24 in #144
    • [Server] Fix wrong parameter order when creating the tool from array by @bb-c24 in #147
    • [Server] Add tool name validation for SEP-986 by @chr-hertel in #140
    • [Server] Add support for icons on explicit builder registration and attributes by @chr-hertel in #142
    • [Schema] Add _meta to CallToolResult by @bb-c24 in #148
    • [Server] Add meta to addPrompt and addResourceTemplate methods by @bb-c24 in #149
    • [Server] Rework registry to combine provider and registry interface, move capabilities out and enable Registry injection in Builder by @chr-hertel in #150
    • [Server] Make logger nullable in Transport constructors by @camilleislasse in #152

    New Contributors

    Full Changelog: https://github.com/modelcontextprotocol/php-sdk/commits/0.1.0

    Open source →
    Release notes
    • First tagged release of package
    • Support for implementing MCP server
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive