Mirror of https://github.com/modelcontextprotocol/php-sdk — The official PHP SDK for Model Context Protocol servers and clients. Maintained in collaboration with The PHP Foundation.
  • PHP 99.8%
  • Makefile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Kyrian Obikwelu 719262b15d
feat(server): Rework transport architecture and add StreamableHttpTransport (#49)
* feat(server): Rework transport architecture and add StreamableHttpTransport

- `Server::connect()` no longer contains a processing loop.
- `TransportInterface` is updated with `setMessageHandler()` and `listen()`.
- `StdioTransport` is updated to implement the new interface.
- A new, minimal `StreamableHttpTransport` is added for stateless HTTP.

* refactor(server): use  event-driven message handling

* feat(server): Introduce a formal session management system

* fix: ensure session elements are preserved when building server (regression from #46)

* refactor: consolidate HTTP example to use shared dependencies

* feat(server): Enhance message handling with session support

- Updated `TransportInterface` to use `onMessage` for handling incoming messages with session IDs.
- Refactored `Server`, `Handler`, and transport classes to accommodate session management using `Uuid`.
- Introduced methods for creating sessions with auto-generated and specific UUIDs in `SessionFactory` and `SessionFactoryInterface`.

* feat(server): Integrate session management in message handling

- Added session support to the `Server` and `Handler` classes, allowing for session data to be managed during message processing.
- Updated `TransportInterface` to include session context in the `send` method.
- Refactored various request handlers to utilize session information, ensuring proper session handling for incoming requests.
- Introduced a file-based session store for persistent session data management

* feat: Update session builder method to use set* instead of with*

* feat: Fix test compatibility with new session management architecture

* chore: apply code style fixes

* fix: remove deprecated SSE transport and resolve PHPStan issues
2025-09-21 12:12:40 +02:00
.github Remove --no-scripts option from composer install (#30) 2025-09-07 01:47:53 +02:00
examples feat(server): Rework transport architecture and add StreamableHttpTransport (#49) 2025-09-21 12:12:40 +02:00
src feat(server): Rework transport architecture and add StreamableHttpTransport (#49) 2025-09-21 12:12:40 +02:00
tests feat(server): Rework transport architecture and add StreamableHttpTransport (#49) 2025-09-21 12:12:40 +02:00
.gitattributes Add Makefile to export-ignore in .gitattributes (#56) 2025-09-09 22:32:02 +02:00
.gitignore feat(server): Rework transport architecture and add StreamableHttpTransport (#49) 2025-09-21 12:12:40 +02:00
.php-cs-fixer.dist.php Kick off the SDK based on Symfony's MCP SDK 2025-08-29 11:09:16 +02:00
CHANGELOG.md Kick off the SDK based on Symfony's MCP SDK 2025-08-29 11:09:16 +02:00
composer.json feat(server): Rework transport architecture and add StreamableHttpTransport (#49) 2025-09-21 12:12:40 +02:00
LICENSE Kick off the SDK based on Symfony's MCP SDK 2025-08-29 11:09:16 +02:00
Makefile Kick off the SDK based on Symfony's MCP SDK 2025-08-29 11:09:16 +02:00
phpstan-baseline.neon feat(server): Rework transport architecture and add StreamableHttpTransport (#49) 2025-09-21 12:12:40 +02:00
phpstan.dist.neon Fix typos in documentation and configuration files (#25) 2025-09-04 23:25:49 +02:00
phpunit.xml.dist Kick off the SDK based on Symfony's MCP SDK 2025-08-29 11:09:16 +02:00
README.md Switch to set* and add* on ServerBuilder instead of with* (#71) 2025-09-15 08:30:41 +02:00

MCP PHP SDK

The official PHP SDK for Model Context Protocol (MCP). It provides a framework-agnostic API for implementing MCP servers in PHP.

Important

Currently, we are still in the process of merging Symfony's MCP SDK and PHP-MCP components. Not all code paths are fully tested or complete, and this package may still contain duplicate functionality or dead code.

If you want to help us stabilize the SDK, please see the issue tracker.

This project is a collaboration between the PHP Foundation and the Symfony project. It adopts development practices and standards from the Symfony project, including Coding Standards and the Backward Compatibility Promise.

Until the first major release, this SDK is considered experimental.

🚧 Roadmap

Features


Examples working

  • 01-discovery-stdio-calculator
  • 02-discovery-http-userprofile
  • 03-manual-registration-stdio
  • 04-combined-registration-http
  • 05-stdio-env-variables
  • 06-custom-dependencies-stdio
  • 07-complex-tool-schema-http
  • 08-schema-showcase-streamable
  • 09-standalone-cli

Installation

composer require mcp/sdk

Since this package has no tagged releases yet, it is required to extend your composer.json:

"minimum-stability": "dev",
"prefer-stable": true

⚡ Quick Start: Stdio Server with Discovery

This example demonstrates the most common usage pattern - a stdio server using attribute discovery.

1. Define Your MCP Elements

Create src/CalculatorElements.php:

<?php

namespace App;

use Mcp\Capability\Attribute\McpTool;

class CalculatorElements
{
    #[McpTool(name: 'add_numbers')]
    public function add(int $a, int $b): int
    {
        return $a + $b;
    }
}

2. Create the Server Script

Create mcp-server.php:

#!/usr/bin/env php
<?php

declare(strict_types=1);

require_once __DIR__ . '/vendor/autoload.php';

use Mcp\Server;
use Mcp\Server\Transport\StdioTransport;

Server::make()
    ->setServerInfo('Stdio Calculator', '1.1.0', 'Basic Calculator over STDIO transport.')
    ->setDiscovery(__DIR__, ['.'])
    ->build()
    ->connect(new StdioTransport());

3. Configure Your MCP Client

Add to your client configuration (e.g., mcp.json):

{
    "mcpServers": {
        "php-calculator": {
            "command": "php",
            "args": ["/absolute/path/to/your/mcp-server.php"]
        }
    }
}

4. Test the Server

Your AI assistant can now call:

  • add_numbers - Add two integers

Documentation

Examples of MCP Tools that use this SDK

Contributing

We are passionate about supporting contributors of all levels of experience and would love to see you get involved in the project. See the contributing guide to get started before you report issues and send pull requests.

Credits

The starting point for this SDK was the PHP-MCP project, initiated by Kyrian Obikwelu. We are grateful for the work done by Kyrian and other contributors to that repository, which created a solid foundation for this SDK.

License

This project is licensed under the MIT License - see the LICENSE file for details.