Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
composer.lock
vendor
examples/**/dev.log
examples/**/sessions
11 changes: 9 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@
"ext-fileinfo": "*",
"opis/json-schema": "^2.4",
"phpdocumentor/reflection-docblock": "^5.6",
"psr/clock": "^1.0",
"psr/container": "^2.0",
"psr/event-dispatcher": "^1.0",
"psr/http-factory": "^1.1",
"psr/http-message": "^2.0",
"psr/log": "^1.0 || ^2.0 || ^3.0",
"symfony/finder": "^6.4 || ^7.3",
"symfony/uid": "^6.4 || ^7.3"
Expand All @@ -34,7 +37,10 @@
"phpunit/phpunit": "^10.5",
"psr/cache": "^3.0",
"symfony/console": "^6.4 || ^7.3",
"symfony/process": "^6.4 || ^7.3"
"symfony/process": "^6.4 || ^7.3",
"nyholm/psr7": "^1.8",
"nyholm/psr7-server": "^1.1",
"laminas/laminas-httphandlerrunner": "^2.12"
},
"autoload": {
"psr-4": {
Expand All @@ -51,10 +57,11 @@
"Mcp\\Example\\DependenciesStdioExample\\": "examples/06-custom-dependencies-stdio/",
"Mcp\\Example\\ComplexSchemaHttpExample\\": "examples/07-complex-tool-schema-http/",
"Mcp\\Example\\SchemaShowcaseExample\\": "examples/08-schema-showcase-streamable/",
"Mcp\\Example\\HttpTransportExample\\": "examples/10-simple-http-transport/",
"Mcp\\Tests\\": "tests/"
}
},
"config": {
"sort-packages": true
}
}
}
11 changes: 8 additions & 3 deletions examples/01-discovery-stdio-calculator/server.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,17 @@

logger()->info('Starting MCP Stdio Calculator Server...');

Server::make()
$server = Server::make()
->setServerInfo('Stdio Calculator', '1.1.0', 'Basic Calculator over STDIO transport.')
->setContainer(container())
->setLogger(logger())
->setDiscovery(__DIR__, ['.'])
->build()
->connect(new StdioTransport(logger: logger()));
->build();

$transport = new StdioTransport(logger: logger());

$server->connect($transport);

$transport->listen();

logger()->info('Server listener stopped gracefully.');
30 changes: 19 additions & 11 deletions examples/02-discovery-http-userprofile/server.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,23 @@
require_once dirname(__DIR__).'/bootstrap.php';
chdir(__DIR__);

use Mcp\Capability\Registry\Container;
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
use Mcp\Server;
use Psr\Log\LoggerInterface;
use Mcp\Server\Session\FileSessionStore;
use Mcp\Server\Transport\StreamableHttpTransport;
use Nyholm\Psr7\Factory\Psr17Factory;
use Nyholm\Psr7Server\ServerRequestCreator;

logger()->info('Starting MCP HTTP User Profile Server...');
$psr17Factory = new Psr17Factory();
$creator = new ServerRequestCreator($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);

// --- Setup DI Container for DI in McpElements class ---
$container = new Container();
$container->set(LoggerInterface::class, logger());
$request = $creator->fromGlobals();

Server::make()
$server = Server::make()
->setServerInfo('HTTP User Profiles', '1.0.0')
->setLogger(logger())
->setContainer($container)
->setContainer(container())
->setSession(new FileSessionStore(__DIR__.'/sessions'))
->setDiscovery(__DIR__, ['.'])
->addTool(
function (float $a, float $b, string $operation = 'add'): array {
Expand Down Expand Up @@ -70,7 +73,12 @@ function (): array {
description: 'Current system status and runtime information',
mimeType: 'application/json'
)
->build()
->connect(new StreamableHttpServerTransport('127.0.0.1', 8080, 'mcp'));
->build();

logger()->info('Server listener stopped gracefully.');
$transport = new StreamableHttpTransport($request, $psr17Factory, $psr17Factory);

$server->connect($transport);

$response = $transport->listen();

(new SapiEmitter())->emit($response);
11 changes: 8 additions & 3 deletions examples/03-manual-registration-stdio/server.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,20 @@

logger()->info('Starting MCP Manual Registration (Stdio) Server...');

Server::make()
$server = Server::make()
->setServerInfo('Manual Reg Server', '1.0.0')
->setLogger(logger())
->setContainer(container())
->addTool([SimpleHandlers::class, 'echoText'], 'echo_text')
->addResource([SimpleHandlers::class, 'getAppVersion'], 'app://version', 'application_version', mimeType: 'text/plain')
->addPrompt([SimpleHandlers::class, 'greetingPrompt'], 'personalized_greeting')
->addResourceTemplate([SimpleHandlers::class, 'getItemDetails'], 'item://{itemId}/details', 'get_item_details', mimeType: 'application/json')
->build()
->connect(new StdioTransport(logger: logger()));
->build();

$transport = new StdioTransport(logger: logger());

$server->connect($transport);

$transport->listen();

logger()->info('Server listener stopped gracefully.');
25 changes: 19 additions & 6 deletions examples/04-combined-registration-http/server.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,24 +13,37 @@
require_once dirname(__DIR__).'/bootstrap.php';
chdir(__DIR__);

use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
use Mcp\CombinedHttpExample\Manual\ManualHandlers;
use Mcp\Server;
use Mcp\Server\Transports\HttpServerTransport;
use Mcp\Server\Session\FileSessionStore;
use Mcp\Server\Transport\StreamableHttpTransport;
use Nyholm\Psr7\Factory\Psr17Factory;
use Nyholm\Psr7Server\ServerRequestCreator;

logger()->info('Starting MCP Combined Registration (HTTP) Server...');
$psr17Factory = new Psr17Factory();
$creator = new ServerRequestCreator($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);

Server::make()
$request = $creator->fromGlobals();

$server = Server::make()
->setServerInfo('Combined HTTP Server', '1.0.0')
->setLogger(logger())
->setContainer(container())
->setSession(new FileSessionStore(__DIR__.'/sessions'))
->setDiscovery(__DIR__, ['.'])
->addTool([ManualHandlers::class, 'manualGreeter'])
->addResource(
[ManualHandlers::class, 'getPriorityConfigManual'],
'config://priority',
'priority_config_manual',
)
->build()
->connect(new HttpServerTransport('127.0.0.1', 8081, 'mcp_combined'));
->build();

$transport = new StreamableHttpTransport($request, $psr17Factory, $psr17Factory);

$server->connect($transport);

$response = $transport->listen();

logger()->info('Server listener stopped gracefully.');
(new SapiEmitter())->emit($response);
11 changes: 8 additions & 3 deletions examples/05-stdio-env-variables/server.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,16 @@

logger()->info('Starting MCP Stdio Environment Variable Example Server...');

Server::make()
$server = Server::make()
->setServerInfo('Env Var Server', '1.0.0')
->setLogger(logger())
->setDiscovery(__DIR__, ['.'])
->build()
->connect(new StdioTransport(logger: logger()));
->build();

$transport = new StdioTransport(logger: logger());

$server->connect($transport);

$transport->listen();

logger()->info('Server listener stopped gracefully.');
11 changes: 8 additions & 3 deletions examples/06-custom-dependencies-stdio/server.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,17 @@
$statsService = new Services\SystemStatsService($taskRepo);
$container->set(Services\StatsServiceInterface::class, $statsService);

Server::make()
$server = Server::make()
->setServerInfo('Task Manager Server', '1.0.0')
->setLogger(logger())
->setContainer($container)
->setDiscovery(__DIR__, ['.'])
->build()
->connect(new StdioTransport(logger: logger()));
->build();

$transport = new StdioTransport(logger: logger());

$server->connect($transport);

$transport->listen();

logger()->info('Server listener stopped gracefully.');
25 changes: 19 additions & 6 deletions examples/07-complex-tool-schema-http/server.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,30 @@
require_once dirname(__DIR__).'/bootstrap.php';
chdir(__DIR__);

use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
use Mcp\Server;
use Mcp\Server\Transports\HttpServerTransport;
use Mcp\Server\Session\FileSessionStore;
use Mcp\Server\Transport\StreamableHttpTransport;
use Nyholm\Psr7\Factory\Psr17Factory;
use Nyholm\Psr7Server\ServerRequestCreator;

logger()->info('Starting MCP Complex Schema HTTP Server...');
$psr17Factory = new Psr17Factory();
$creator = new ServerRequestCreator($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);

Server::make()
$request = $creator->fromGlobals();

$server = Server::make()
->setServerInfo('Event Scheduler Server', '1.0.0')
->setLogger(logger())
->setContainer(container())
->setSession(new FileSessionStore(__DIR__.'/sessions'))
->setDiscovery(__DIR__, ['.'])
->build()
->connect(new HttpServerTransport('127.0.0.1', 8082, 'mcp_scheduler'));
->build();

$transport = new StreamableHttpTransport($request, $psr17Factory, $psr17Factory);

$server->connect($transport);

$response = $transport->listen();

logger()->info('Server listener stopped gracefully.');
(new SapiEmitter())->emit($response);
25 changes: 19 additions & 6 deletions examples/08-schema-showcase-streamable/server.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,29 @@
require_once dirname(__DIR__).'/bootstrap.php';
chdir(__DIR__);

use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
use Mcp\Server;
use Mcp\Server\Transports\StreamableHttpServerTransport;
use Mcp\Server\Session\FileSessionStore;
use Mcp\Server\Transport\StreamableHttpTransport;
use Nyholm\Psr7\Factory\Psr17Factory;
use Nyholm\Psr7Server\ServerRequestCreator;

logger()->info('Starting MCP Schema Showcase Server...');
$psr17Factory = new Psr17Factory();
$creator = new ServerRequestCreator($psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory);

Server::make()
$request = $creator->fromGlobals();

$server = Server::make()
->setServerInfo('Schema Showcase', '1.0.0')
->setLogger(logger())
->setSession(new FileSessionStore(__DIR__.'/sessions'))
->setDiscovery(__DIR__, ['.'])
->build()
->connect(new StreamableHttpServerTransport('127.0.0.1', 8080, 'mcp'));
->build();

$transport = new StreamableHttpTransport($request, $psr17Factory, $psr17Factory);

$server->connect($transport);

$response = $transport->listen();

logger()->info('Server listener stopped gracefully.');
(new SapiEmitter())->emit($response);
22 changes: 10 additions & 12 deletions examples/09-standalone-cli/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@

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

use Mcp\Server;
use Mcp\Server\Transport\StdioTransport;
use Symfony\Component\Console as SymfonyConsole;
use Symfony\Component\Console\Output\OutputInterface;

Expand All @@ -20,18 +22,14 @@
$output = new SymfonyConsole\Output\ConsoleOutput($debug ? OutputInterface::VERBOSITY_VERY_VERBOSE : OutputInterface::VERBOSITY_NORMAL);
$logger = new SymfonyConsole\Logger\ConsoleLogger($output);

// Configure the JsonRpcHandler and build the functionality
$jsonRpcHandler = new Mcp\JsonRpc\Handler(
Mcp\JsonRpc\MessageFactory::make(),
App\Builder::buildMethodHandlers(),
$logger
);
$server = Server::make()
->setServerInfo('Standalone CLI', '1.0.0')
->setLogger($logger)
->setDiscovery(__DIR__, ['.'])
->build();

// Set up the server
$sever = new Mcp\Server($jsonRpcHandler, $logger);
$transport = new StdioTransport(logger: $logger);

// Create the transport layer using Stdio
$transport = new Mcp\Server\Transport\StdioTransport(logger: $logger);
$server->connect($transport);

// Start our application
$sever->connect($transport);
$transport->listen();
Loading