Add roadmap to readme (#20)

* Update README.md

Add roadmap
Add a basic example
Fix default NullLogger() in ServerBuilder

* Update README.md

Update intro
Add roadmap
Add a basic example
Fix default NullLogger() in ServerBuilder
Add Credits

* Update src/Server/ServerBuilder.php

Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>

* Fix code review comments

---------

Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>
This commit is contained in:
Roman Pronskiy 2025-09-04 15:49:16 +02:00 • committed by GitHub
commit 8985be6af3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 115 additions and 10 deletions

113
README.md
View file

@ -1,15 +1,16 @@
# MCP PHP SDK # 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] > [!IMPORTANT]
> Currently we are still in the process of merging [Symfony's MCP SDK](https://github.com/symfony/mcp-sdk) and > Currently, we are still in the process of merging [Symfony's MCP SDK](https://github.com/symfony/mcp-sdk) and
> [PHP-MCP](https://github.com/php-mcp) components. Not all code paths are fully tested, complete or this package > [PHP-MCP](https://github.com/php-mcp) components. Not all code paths are fully tested, complete, or this package
> may contain duplicate functionality or dead code. > may contain duplicate functionality or dead code.
>
> If you want to help us stabilize the SDK, please see the > If you want to help us stabilize the SDK, please see the
> [issue tracker](https://github.com/modelcontextprotocol/php-sdk/issues). > [issue tracker](https://github.com/modelcontextprotocol/php-sdk/issues).
Low-level SDK implementation of the Model Context Protocol (MCP) in PHP. This project is a collaboration between [the PHP Foundation](https://thephp.foundation/) and the
This project is a collaboration between the [PHP Foundation](https://thephp.foundation/) and the
[Symfony project](https://symfony.com/). It adopts development practices and standards from the Symfony project, [Symfony project](https://symfony.com/). It adopts development practices and standards from the Symfony project,
including [Coding Standards](https://symfony.com/doc/current/contributing/code/standards.html) and the including [Coding Standards](https://symfony.com/doc/current/contributing/code/standards.html) and the
[Backward Compatibility Promise](https://symfony.com/doc/current/contributing/code/bc.html). [Backward Compatibility Promise](https://symfony.com/doc/current/contributing/code/bc.html).
@ -17,12 +18,107 @@ including [Coding Standards](https://symfony.com/doc/current/contributing/code/s
Until the first major release, this SDK is considered Until the first major release, this SDK is considered
[experimental](https://symfony.com/doc/current/contributing/code/experimental.html). [experimental](https://symfony.com/doc/current/contributing/code/experimental.html).
## 🚧 Roadmap
Features
- [x] bring back php-mcp examples
- [ ] Glue handler, registry and reference handlers
- [ ] Revive `ServerBuilder`
- [ ] Revive transports
- [ ] Streamable Transport https://github.com/modelcontextprotocol/php-sdk/issues/7
- [ ] Http/SSE-based Transport https://github.com/modelcontextprotocol/php-sdk/issues/8
- [ ] Support pagination
- [ ] Support Schema validation
- [ ] Support Multiple Versions of MCP Specification https://github.com/modelcontextprotocol/php-sdk/issues/14
- [ ] (Re-)Implement missing Notification & Request Handlers https://github.com/modelcontextprotocol/php-sdk/issues/9
---
Examples working
- [x] 01-discovery-stdio-calculator
- [ ] 02-discovery-http-userprofile
- [x] 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 ## Installation
```bash ```bash
composer require mcp/sdk composer require mcp/sdk
``` ```
## ⚡ 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
<?php
namespace App;
use PhpMcp\Server\Attributes\McpTool;
use PhpMcp\Server\Attributes\Schema;
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`:
```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()
->withServerInfo('Stdio Calculator', '1.1.0', 'Basic Calculator over STDIO transport.')
->withDiscovery(__DIR__, ['.'])
->build()
->connect(new StdioTransport());
```
**3. Configure Your MCP Client**
Add to your client configuration (e.g., `mcp.json`):
```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 ## Documentation
- [SDK documentation](doc/index.rst) - [SDK documentation](doc/index.rst)
@ -30,6 +126,10 @@ composer require mcp/sdk
- [Model Context Protocol specification](https://spec.modelcontextprotocol.io) - [Model Context Protocol specification](https://spec.modelcontextprotocol.io)
- [Officially supported servers](https://github.com/modelcontextprotocol/servers) - [Officially supported servers](https://github.com/modelcontextprotocol/servers)
## Examples of MCP Tools that use this SDK
- https://github.com/pronskiy/mcp
## Contributing ## Contributing
We are passionate about supporting contributors of all levels of experience and would love to see you get involved in We are passionate about supporting contributors of all levels of experience and would love to see you get involved in
@ -37,6 +137,9 @@ the project. See the [contributing guide](CONTRIBUTING.md) to get started before
[report issues](https://github.com/modelcontextprotocol/php-sdk/issues) and [report issues](https://github.com/modelcontextprotocol/php-sdk/issues) and
[send pull requests](https://github.com/modelcontextprotocol/php-sdk/pulls). [send pull requests](https://github.com/modelcontextprotocol/php-sdk/pulls).
## Credits
The starting point for this SDK was [PHP-MCP](https://github.com/php-mcp/server) project, initiated by [Kyrian Obikwelu](https://github.com/CodeWithKyrian). We are grateful for the work done by Kyrian and other contributors to that repository, which created a solid foundation for this SDK.
## License ## License
This project is licensed under the MIT License - see the LICENSE file for details. This project is licensed under the MIT License - see the LICENSE file for details.

View file

@ -216,19 +216,21 @@ final class ServerBuilder
*/ */
public function build(): Server public function build(): Server
{ {
$container = $this->container ?? new Container(); $logger = $this->logger ?? new NullLogger();
$registry = new Registry(new ReferenceHandler($container), $this->eventDispatcher, $this->logger);
$this->registerManualElements($registry, $this->logger); $container = $this->container ?? new Container();
$registry = new Registry(new ReferenceHandler($container), $this->eventDispatcher, $logger);
$this->registerManualElements($registry, $logger);
if (null !== $this->discoveryBasePath) { if (null !== $this->discoveryBasePath) {
$discovery = new Discoverer($registry, $this->logger); $discovery = new Discoverer($registry, $logger);
$discovery->discover($this->discoveryBasePath, $this->discoveryScanDirs, $this->discoveryExcludeDirs); $discovery->discover($this->discoveryBasePath, $this->discoveryScanDirs, $this->discoveryExcludeDirs);
} }
return new Server( return new Server(
Handler::make($registry, $this->serverInfo, $this->logger), Handler::make($registry, $this->serverInfo, $logger),
$this->logger, $logger,
); );
} }