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:
parent
4812b563a1
commit
8985be6af3
2 changed files with 115 additions and 10 deletions
113
README.md
113
README.md
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue