<?php
require_once __DIR__ . '/vendor/autoload.php';
use ChuckyCloud\Sdk\Client\ChuckyClient;
use ChuckyCloud\Sdk\Types\ClientOptions;
use ChuckyCloud\Sdk\Types\SessionOptions;
use ChuckyCloud\Sdk\Types\Model;
use ChuckyCloud\Sdk\Types\BudgetWindow;
use ChuckyCloud\Sdk\Types\AssistantMessage;
use ChuckyCloud\Sdk\Types\ResultMessage;
use ChuckyCloud\Sdk\Utils\CreateBudgetOptions;
use ChuckyCloud\Sdk\Utils\CreateTokenOptions;
use function ChuckyCloud\Sdk\Utils\createBudget;
use function ChuckyCloud\Sdk\Utils\createToken;
use function ChuckyCloud\Sdk\Tools\tool;
use function ChuckyCloud\Sdk\Tools\textResult;
use function ChuckyCloud\Sdk\Tools\schema;
use function ChuckyCloud\Sdk\Tools\mcpServer;
// Create token
$token = createToken(new CreateTokenOptions(
userId: 'user-123',
projectId: getenv('CHUCKY_PROJECT_ID'),
secret: getenv('CHUCKY_HMAC_SECRET'),
budget: createBudget(new CreateBudgetOptions(
aiDollars: 1.0,
window: BudgetWindow::HOUR,
)),
));
// Define calculator tool
$calculatorTool = tool(
name: 'calculator',
description: 'Perform arithmetic calculations',
schema: schema()
->enum('operation', 'Operation', 'add', 'subtract', 'multiply', 'divide')
->number('a', 'First operand')
->number('b', 'Second operand')
->required('operation', 'a', 'b')
->build(),
handler: function (array $input) {
$op = $input['operation'];
$a = $input['a'];
$b = $input['b'];
$result = match ($op) {
'add' => $a + $b,
'subtract' => $a - $b,
'multiply' => $a * $b,
'divide' => $b !== 0 ? $a / $b : 'Error: Division by zero',
};
echo "[Tool] calculator({$op}, {$a}, {$b}) = {$result}\n";
return textResult("Result: $result");
}
);
// Create MCP server
$mcpServer = mcpServer('calculator-server')
->addTool($calculatorTool)
->build();
// Create client
$client = new ChuckyClient(new ClientOptions(
token: $token,
debug: true,
));
// Create session with tools
$session = $client->createSession(new SessionOptions(
model: Model::CLAUDE_SONNET,
maxTurns: 5,
mcpServers: [$mcpServer],
));
// Connect and send message
$session->connect()->then(function () use ($session, $client) {
$session->send('What is 15 * 7? Use the calculator tool.')->then(function () use ($session, $client) {
$receiveNext = function () use (&$receiveNext, $session, $client) {
$session->receive()->then(function ($msg) use (&$receiveNext, $session, $client) {
if ($msg instanceof AssistantMessage) {
$text = $msg->getText();
if ($text) {
echo "[Assistant] {$text}\n";
}
}
if ($msg instanceof ResultMessage) {
echo "\nResult: {$msg->result}\n";
echo "Cost: \${$msg->totalCostUsd}\n";
$session->close();
$client->stop();
return;
}
$receiveNext();
});
};
$receiveNext();
});
});
$client->run();