Skip to content

Releases: maurice2k/multicurl

2.3.1

Choose a tag to compare

@maurice2k maurice2k released this 24 Jun 09:50
1db6034

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 preInitRequestCallback argument to McpChannel::setAutomaticInitialize().
  • The callback receives the generated initialize RpcMessage and the cloned initialization McpChannel, so callers can add metadata or otherwise replace the outgoing initialize request before it is sent.
  • Returning a replacement RpcMessage from the callback updates the queued initialize request; returning null keeps the generated request unchanged.

Tooling

  • Tightened the nullable callback PHPDoc signature for PHPStan.
  • Added coverage for injecting MCP initialize _meta through the pre-initialize callback.

Compare

Full diff against the previous published release: 2.3.0...2.3.1

2.3.0

Choose a tag to compare

@maurice2k maurice2k released this 11 Jun 12:46

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 JsonObject wrapper that preserves these shapes while keeping the existing associative-array accessors working: parsed params/result/error support array access, iteration, count, and isset as well as object property access, and re-encode empty objects as {}.
  • Outbound request helpers still encode empty MCP object fields (such as params, arguments, and capabilities) as JSON objects.

Note: getParams(), getResult(), getError(), and toArray() 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 new JsonObject accessors 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/integration targets.

Compare

Full diff against the previous published release: 2.2.0...2.3.0

2.2.0

Choose a tag to compare

@maurice2k maurice2k released this 18 May 10:24

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, and make 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 before setConnectionTimeout() 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 for CurlHandle objects.
  • Removed deprecated Reflection::setAccessible() calls from tests.
  • Replaced expectation-less Channel mocks 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

Choose a tag to compare

@maurice2k maurice2k released this 18 May 10:24
a60704c

What's new

This release collects the changes since the previous published GitHub release, 2.0.3.

MCP and RPC updates

  • Simplified RpcMessage metadata handling by removing the previous _meta property 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

Choose a tag to compare

@maurice2k maurice2k released this 29 Jul 07:49

Add metadata support to RpcMessage and initialization callback to McpChannel

  • Add _meta property to RpcMessage with setMeta/getMeta methods
  • Add onInitializedCallback parameter to McpChannel setAutomaticInitialize

2.0.2

Choose a tag to compare

@maurice2k maurice2k released this 20 Jul 00:42
  • updated MCP version to 2025-06-18
  • fixed integration tests

2.0.0

Choose a tag to compare

@maurice2k maurice2k released this 02 Jun 15:10

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

Choose a tag to compare

@maurice2k maurice2k released this 24 Mar 15:11
6ef9bc6

Fixed missing nullable type hint

PHP 8.1 support

Choose a tag to compare

@maurice2k maurice2k released this 04 Mar 09:56
872545b
  • PHP 8.1 support with enforcement of PHP 7.4 as minimum requirement
  • strict typing for members

Added PHP 8.x compatibility

Choose a tag to compare

@maurice2k maurice2k released this 13 Dec 13:28
2aabcad
Merge pull request #5 from kiwijuicer/php8-support

Added compatibility with PHP 8.x (php changed the way it is handling curl resources)