PHP code example of monkeyscloud / monkeyslegion-mcp

1. Go to this page and download the library: Download monkeyscloud/monkeyslegion-mcp library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

monkeyscloud / monkeyslegion-mcp example snippets



use MonkeysLegion\Mcp\Server\McpServer;
use MonkeysLegion\Mcp\Protocol\ServerInfo;

$server = new McpServer(new ServerInfo('MyApp', '1.0.0'));

$server->addTool(
    name: 'calculate',
    description: 'Perform arithmetic calculations',
    inputSchema: [
        'type'       => 'object',
        'properties' => [
            'operation' => ['type' => 'string', 'enum' => ['add', 'sub', 'mul', 'div']],
            'a'         => ['type' => 'number'],
            'b'         => ['type' => 'number'],
        ],
        '


use MonkeysLegion\Mcp\Attributes\McpTool;
use MonkeysLegion\Mcp\Attributes\McpParam;
use MonkeysLegion\Mcp\Attributes\McpResource;
use MonkeysLegion\Mcp\Attributes\McpPrompt;
use MonkeysLegion\Mcp\Prompt\PromptDefinition;

class AppTools
{
    /**
     * Search the database for records matching a query.
     */
    #[McpTool(name: 'search', description: 'Search records')]
    public function search(
        #[McpParam(description: 'Search query string')]
        string $query,
        #[McpParam(description: 'Max results to return', finition(
            name: 'code_review',
            description: 'Review code for best practices',
            arguments: [
                'language' => ['description' => 'Programming language', '

use MonkeysLegion\Mcp\Discovery\AttributeScanner;

AttributeScanner::scan($server, [AppTools::class]);
// or scan an entire directory:
AttributeScanner::scanDirectory($server, __DIR__ . '/app/Mcp', 'App\\Mcp');

use MonkeysLegion\Mcp\Transport\StdioTransport;

$transport = new StdioTransport();
$transport->start($server);

use MonkeysLegion\Mcp\Transport\StreamableHttpTransport;

$transport = new StreamableHttpTransport();
// In a route handler or controller:
$transport->handleRequest($server);

// POST /mcp
$body    = file_get_contents('php://input');
$headers = ['MCP-Protocol-Version' => $_SERVER['HTTP_MCP_PROTOCOL_VERSION'] ?? ''];

$response = $server->handleJson($body, $headers);

foreach ($server->responseHeaders() as $name => $value) {
    header("{$name}: {$value}");
}
echo $response;

use MonkeysLegion\Mcp\Middleware\McpMiddleware;

// Mount on your middleware stack — handles POST, GET, DELETE on /mcp
$middleware = new McpMiddleware($server, '/mcp');

// Or use the Provider for zero-config setup:
use MonkeysLegion\Mcp\Provider\McpProvider;

$provider   = new McpProvider($config['mcp'] ?? []);
$middleware = $provider->middleware();  // Auto-wired with server + discovery
$server     = $provider->server();     // Singleton, pre-scanned
$transport  = $provider->transport();  // stdio or http based on config

use MonkeysLegion\Mcp\Resource\ResourceTemplate;

// Static resource
$server->addResource(
    name: 'readme',
    uri: 'file:///README.md',
    content: file_get_contents('README.md'),
    mimeType: 'text/markdown',
);

// Dynamic resource template
$server->addResourceTemplate(
    new ResourceTemplate('db://users/{id}', 'user', 'application/json', 'Fetch a user'),
    fn(array $params) => json_encode(User::find($params['id'])),
);

use MonkeysLegion\Mcp\Client\McpClient;
use MonkeysLegion\Mcp\Client\ClientConfig;

$client = new McpClient(new ClientConfig(
    serverUrl: 'https://example.com/mcp',
    timeout: 30,
));

// Initialize session
$client->initialize();

// List and call tools
$tools  = $client->listTools();
$result = $client->callTool('search', ['query' => 'PHP 8.4']);

// Resources and Prompts
$resources = $client->listResources();
$content   = $client->readResource('file:///README.md');
$prompts   = $client->listPrompts();
$prompt    = $client->getPrompt('code_review', ['language' => 'PHP']);

use MonkeysLegion\Mcp\Client\StdioClient;

$client = new StdioClient('php mcp-server.php');
$client->start();
$client->initialize();

$tools  = $client->listTools();
$result = $client->callTool('calculate', ['operation' => 'add', 'a' => 3, 'b' => 5]);

$client->stop();


MonkeysLegion\Mcp\Server\McpServer;
use MonkeysLegion\Mcp\Protocol\ServerInfo;
use MonkeysLegion\Mcp\Discovery\AttributeScanner;
use MonkeysLegion\Mcp\Transport\StdioTransport;

$server = new McpServer(new ServerInfo('MyApp', '1.0.0'));

// Register your tools
AttributeScanner::scanDirectory($server, __DIR__ . '/app/Mcp', 'App\\Mcp');

// Start stdio transport
(new StdioTransport())->start($server);