Repository navigation
Releases: maurice2k/multicurl
Release list
2.3.1
What's new
This release adds a small MCP initialization hook that lets callers adjust the automatic initialize request before it is queued, with PHPStan-friendly typing and focused test coverage.
MCP initialization customization
- Added an optional
preInitRequestCallbackargument toMcpChannel::setAutomaticInitialize(). - The callback receives the generated initialize
RpcMessageand the cloned initializationMcpChannel, so callers can add metadata or otherwise replace the outgoing initialize request before it is sent. - Returning a replacement
RpcMessagefrom the callback updates the queued initialize request; returningnullkeeps the generated request unchanged.
Tooling
- Tightened the nullable callback PHPDoc signature for PHPStan.
- Added coverage for injecting MCP initialize
_metathrough the pre-initialize callback.
Compare
Full diff against the previous published release: 2.3.0...2.3.1
2.3.0
What's new
This release focuses on preserving MCP JSON object/array shapes through parsing and re-encoding, with a backwards-compatible accessor layer, batch-processing fixes, and PHP 8.5 as the default test version.
MCP JSON shape preservation
- Inbound MCP JSON-RPC messages are now decoded as object trees instead of associative arrays, so JSON object/array shape survives parsing, access, and re-encoding. Empty objects stay
stdClass, empty arrays stay arrays, and numeric object keys stay objects instead of being coerced into arrays. - Added a
JsonObjectwrapper that preserves these shapes while keeping the existing associative-array accessors working: parsedparams/result/errorsupport array access, iteration,count, andissetas well as object property access, and re-encode empty objects as{}. - Outbound request helpers still encode empty MCP object fields (such as
params,arguments, andcapabilities) as JSON objects.
Note:
getParams(),getResult(),getError(), andtoArray()now expose preserved decoded JSON shapes for inbound messages. This is a (minor) backwards-incompatible change for code relying on the previous always-array behavior; the newJsonObjectaccessors keep existing array-style access working.
Reliability fixes
- Fixed MCP batch callback stop handling.
- Fixed MCP batch processing after invalid items, with tighter JSON-RPC envelope validation and rejection of invalid or empty batch payloads.
- Removed the lossy array parsing fallback.
Tooling
- Made PHP 8.5 the default test version across the Dockerfile build arg, example runner, and docs, matching the Makefile's default
test/unit/integrationtargets.
Compare
Full diff against the previous published release: 2.2.0...2.3.0
2.2.0
What's new
This release focuses on safer streaming behavior, callback cleanup reliability, PHP 8.5 compatibility, and refreshed test coverage.
Security and dependency maintenance
- Updated the PHPUnit development constraint to patched versions.
- Made PHP 8.5 the default Docker container for
make test,make unit,make integration, andmake phpstan.
Streaming safety
- Added configurable stream buffer limits for streaming channels.
- Added configurable SSE event-size limits, with safe defaults for SSE channels.
- Preserved the existing user-requested stream abort behavior while routing safety-limit aborts through
onError. - Added unit tests plus file-backed and HTTP-backed integration tests for the new stream and SSE limits.
Reliability fixes
- Ensured cURL state is cleaned up even when completion callbacks throw.
- Fixed
getConnectionTimeout()so it is safe beforesetConnectionTimeout()has been called. - Covered valid empty SSE data fields such as
data:under warning-to-exception error handling.
PHP 8.5 and test cleanup
- Removed deprecated
curl_close()calls forCurlHandleobjects. - Removed deprecated
Reflection::setAccessible()calls from tests. - Replaced expectation-less
Channelmocks with real channels where the tests only needed queue placeholders. - Updated README testing docs for the PHP 8.5 default.
Compare
Full diff against the previous published release: 2.1.0...2.2.0
2.1.0
What's new
This release collects the changes since the previous published GitHub release, 2.0.3.
MCP and RPC updates
- Simplified
RpcMessagemetadata handling by removing the previous_metaproperty behavior and the related compatibility tests. - Updated MCP request helpers and tests around tools/prompts list request parameters.
- Improved MCP channel initialization/session handling and expanded integration coverage for MCP error, timeout, and session-refresh behavior.
HTTP and tooling improvements
- Added proxy support to generated cURL commands.
- Added PHP 8.5 to the Docker test matrix.
- Cleaned up Makefile/PHPStan test tooling and type declarations.
Compare
Full diff against the previous published release: 2.0.3...2.1.0
Source timestamp
This release points to commit a60704c, committed on 2026-04-14 13:15:27 +0200.
2.0.3
2.0.2
2.0.0
Please note that the minimum PHP version is now 8.1 and that there are (minor) breaking changes to version 1.x.
Changes:
- complete overhaul for PHP 8 (min. required version is PHP 8.1)
- support for SSE (server sent events)
- support for MCP "streamable HTTP"
- handling of dependent channels (before/next channels)
- unit tests (running in containers for PHP 8.1 up to 8.4) and phpstan level 7
- examples (also running in containers)
1.3.1: Merge pull request #7 from MethorZ/master
Fixed missing nullable type hint
PHP 8.1 support
- PHP 8.1 support with enforcement of PHP 7.4 as minimum requirement
- strict typing for members
Added PHP 8.x compatibility
Merge pull request #5 from kiwijuicer/php8-support Added compatibility with PHP 8.x (php changed the way it is handling curl resources)