php-sdk/examples
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Pavel Buchnev 99bf56eef8
Registry Architecture Refactoring - Enhanced Separation of Concerns (#46)
* refactor: Separate Registry concerns following SOLID principles [WIP]

- Extract ReferenceProvider and ReferenceRegistryInterface interfaces
- Create DefaultToolExecutor with ReferenceHandlerInterface
- Remove execution responsibility from Registry class
- Enable custom handler and executor implementations

* refactor: implement SOLID principles with separated execution concerns

* Create DefaultResourceReader, DefaultPromptGetter
* Refactor JsonRpc Handler and RequestHandlers to use dedicated executors
* Update ServerBuilder to support custom executors via dependency injection

* chore: remove extra comments

* feat: introduce DispatchableRegistry for enhanced tool and resource management

* refactor: use proper interfaces

* refactor: implement HandlerInterface for improved abstraction and flexibility

* test: add unit tests for DispatchableRegistry and Registry classes

* refactor: cover with unit tests Resource reader, Prompt getter and Tool executor

* cs fix

* phpstan fix

* test: add unit tests for CallToolHandler, GetPromptHandler, PingHandler, and ReadResourceHandler

* refactor: revert Handler

* chore: remove style guide for tests

* refactor: remove "Default" prefix from classes

* refactor: remove DispatchableRegistry

* refactor: use package specific exception classes

* refactor: remove DispatchableRegistry

* refactor: add logger support to PromptGetter and ResourceReader classes

* Update src/Capability/Prompt/PromptGetter.php

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

* refactor: Use FQN for Resource class to avoid cs-fixer misinterpreting it as `resource`

* refactor: rename ToolExecutor to ToolCaller and related classes for clarity and consistency

* refactor: add missed docblock

* refactor: rename ToolExecutor references to ToolCaller

* refactor: rename ToolCallerTest property and variable references

* cs fix

* ignore some phpstan errors

---------

Co-authored-by: Christopher Hertel <mail@christopher-hertel.de>
2025-09-14 20:44:18 +02:00
..
01-discovery-stdio-calculator Adopt server examples 2025-08-29 11:19:51 +02:00
02-discovery-http-userprofile Adopt server examples 2025-08-29 11:19:51 +02:00
03-manual-registration-stdio Adopt server examples 2025-08-29 11:19:51 +02:00
04-combined-registration-http Adopt server examples 2025-08-29 11:19:51 +02:00
05-stdio-env-variables Adopt server examples 2025-08-29 11:19:51 +02:00
06-custom-dependencies-stdio Adopt server examples 2025-08-29 11:19:51 +02:00
07-complex-tool-schema-http Adopt server examples 2025-08-29 11:19:51 +02:00
08-schema-showcase-streamable Adopt server examples 2025-08-29 11:19:51 +02:00
09-standalone-cli Registry Architecture Refactoring - Enhanced Separation of Concerns (#46) 2025-09-14 20:44:18 +02:00
bootstrap.php Adopt server examples 2025-08-29 11:19:51 +02:00
README.md Fix typos in documentation and configuration files (#25) 2025-09-04 23:25:49 +02:00

MCP SDK Examples

This directory contains various examples of how to use the PHP MCP SDK.

You can run examples 01-08 with the dependencies already installed in the root directory of the SDK. For example 09, see the README in the examples/09-standalone-cli directory.

For running an example, you execute the server.php like this:

php examples/01-discovery-stdio-calculator/server.php

You will see debug outputs to help you understand what is happening.

Run with Inspector:

npx @modelcontextprotocol/inspector php examples/01-discovery-stdio-calculator/server.php

Debugging

You can enable debug output by setting the DEBUG environment variable to 1, and additionally log to a file by setting the FILE_LOG environment variable to 1 as well. A dev.log file gets written within the example's directory.

With the Inspector you can set the environment variables like this:

npx @modelcontextprotocol/inspector -e DEBUG=1 -e FILE_LOG=1 php examples/01-discovery-stdio-calculator/server.php