Skip to content

Commit 9d2e7e4

Browse files
marcod85CodeWithKyrian
authored andcommitted
tidy up context names, replace session arguments from context
1 parent 1d3d55f commit 9d2e7e4

9 files changed

+72
-56
lines changed

src/Dispatcher.php

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ public function __construct(
6161
$this->schemaValidator ??= new SchemaValidator($this->logger);
6262
}
6363

64-
public function handleRequest(Request $request, SessionInterface $session, Context $requestContext): Result
64+
public function handleRequest(Request $request, Context $context): Result
6565
{
6666
switch ($request->method) {
6767
case 'initialize':
6868
$request = InitializeRequest::fromRequest($request);
69-
return $this->handleInitialize($request, $session);
69+
return $this->handleInitialize($request, $context->session);
7070
case 'ping':
7171
$request = PingRequest::fromRequest($request);
7272
return $this->handlePing($request);
@@ -75,7 +75,7 @@ public function handleRequest(Request $request, SessionInterface $session, Conte
7575
return $this->handleToolList($request);
7676
case 'tools/call':
7777
$request = CallToolRequest::fromRequest($request);
78-
return $this->handleToolCall($request, $requestContext);
78+
return $this->handleToolCall($request, $context);
7979
case 'resources/list':
8080
$request = ListResourcesRequest::fromRequest($request);
8181
return $this->handleResourcesList($request);
@@ -84,25 +84,25 @@ public function handleRequest(Request $request, SessionInterface $session, Conte
8484
return $this->handleResourceTemplateList($request);
8585
case 'resources/read':
8686
$request = ReadResourceRequest::fromRequest($request);
87-
return $this->handleResourceRead($request, $requestContext);
87+
return $this->handleResourceRead($request, $context);
8888
case 'resources/subscribe':
8989
$request = ResourceSubscribeRequest::fromRequest($request);
90-
return $this->handleResourceSubscribe($request, $session);
90+
return $this->handleResourceSubscribe($request, $context->session);
9191
case 'resources/unsubscribe':
9292
$request = ResourceUnsubscribeRequest::fromRequest($request);
93-
return $this->handleResourceUnsubscribe($request, $session);
93+
return $this->handleResourceUnsubscribe($request, $context->session);
9494
case 'prompts/list':
9595
$request = ListPromptsRequest::fromRequest($request);
9696
return $this->handlePromptsList($request);
9797
case 'prompts/get':
9898
$request = GetPromptRequest::fromRequest($request);
99-
return $this->handlePromptGet($request, $requestContext);
99+
return $this->handlePromptGet($request, $context);
100100
case 'logging/setLevel':
101101
$request = SetLogLevelRequest::fromRequest($request);
102-
return $this->handleLoggingSetLevel($request, $session);
102+
return $this->handleLoggingSetLevel($request, $context->session);
103103
case 'completion/complete':
104104
$request = CompletionCompleteRequest::fromRequest($request);
105-
return $this->handleCompletionComplete($request, $session);
105+
return $this->handleCompletionComplete($request, $context->session);
106106
default:
107107
throw McpServerException::methodNotFound("Method '{$request->method}' not found.");
108108
}
@@ -151,7 +151,7 @@ public function handleToolList(ListToolsRequest $request): ListToolsResult
151151
return new ListToolsResult(array_values($pagedItems), $nextCursor);
152152
}
153153

154-
public function handleToolCall(CallToolRequest $request, Context $requestContext): CallToolResult
154+
public function handleToolCall(CallToolRequest $request, Context $context): CallToolResult
155155
{
156156
$toolName = $request->name;
157157
$arguments = $request->arguments;
@@ -184,7 +184,7 @@ public function handleToolCall(CallToolRequest $request, Context $requestContext
184184
}
185185

186186
try {
187-
$result = $registeredTool->call($this->container, $arguments, $requestContext);
187+
$result = $registeredTool->call($this->container, $arguments, $context);
188188

189189
return new CallToolResult($result, false);
190190
} catch (JsonException $e) {
@@ -222,7 +222,7 @@ public function handleResourceTemplateList(ListResourceTemplatesRequest $request
222222
return new ListResourceTemplatesResult(array_values($pagedItems), $nextCursor);
223223
}
224224

225-
public function handleResourceRead(ReadResourceRequest $request, Context $requestContext): ReadResourceResult
225+
public function handleResourceRead(ReadResourceRequest $request, Context $context): ReadResourceResult
226226
{
227227
$uri = $request->uri;
228228

@@ -233,7 +233,7 @@ public function handleResourceRead(ReadResourceRequest $request, Context $reques
233233
}
234234

235235
try {
236-
$result = $registeredResource->read($this->container, $uri, $requestContext);
236+
$result = $registeredResource->read($this->container, $uri, $context);
237237

238238
return new ReadResourceResult($result);
239239
} catch (JsonException $e) {
@@ -270,7 +270,7 @@ public function handlePromptsList(ListPromptsRequest $request): ListPromptsResul
270270
return new ListPromptsResult(array_values($pagedItems), $nextCursor);
271271
}
272272

273-
public function handlePromptGet(GetPromptRequest $request, Context $requestContext): GetPromptResult
273+
public function handlePromptGet(GetPromptRequest $request, Context $context): GetPromptResult
274274
{
275275
$promptName = $request->name;
276276
$arguments = $request->arguments;
@@ -289,7 +289,7 @@ public function handlePromptGet(GetPromptRequest $request, Context $requestConte
289289
}
290290

291291
try {
292-
$result = $registeredPrompt->get($this->container, $arguments, $requestContext);
292+
$result = $registeredPrompt->get($this->container, $arguments, $context);
293293

294294
return new GetPromptResult($result, $registeredPrompt->schema->description);
295295
} catch (JsonException $e) {

src/Elements/RegisteredElement.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,33 +31,33 @@ public function __construct(
3131
$this->isManual = $isManual;
3232
}
3333

34-
public function handle(ContainerInterface $container, array $arguments, Context $requestContext): mixed
34+
public function handle(ContainerInterface $container, array $arguments, Context $context): mixed
3535
{
3636
if (is_string($this->handler)) {
3737
if (class_exists($this->handler) && method_exists($this->handler, '__invoke')) {
3838
$reflection = new \ReflectionMethod($this->handler, '__invoke');
39-
$arguments = $this->prepareArguments($reflection, $arguments, $requestContext);
39+
$arguments = $this->prepareArguments($reflection, $arguments, $context);
4040
$instance = $container->get($this->handler);
4141
return call_user_func($instance, ...$arguments);
4242
}
4343

4444
if (function_exists($this->handler)) {
4545
$reflection = new \ReflectionFunction($this->handler);
46-
$arguments = $this->prepareArguments($reflection, $arguments, $requestContext);
46+
$arguments = $this->prepareArguments($reflection, $arguments, $context);
4747
return call_user_func($this->handler, ...$arguments);
4848
}
4949
}
5050

5151
if (is_callable($this->handler)) {
5252
$reflection = $this->getReflectionForCallable($this->handler);
53-
$arguments = $this->prepareArguments($reflection, $arguments, $requestContext);
53+
$arguments = $this->prepareArguments($reflection, $arguments, $context);
5454
return call_user_func($this->handler, ...$arguments);
5555
}
5656

5757
if (is_array($this->handler)) {
5858
[$className, $methodName] = $this->handler;
5959
$reflection = new \ReflectionMethod($className, $methodName);
60-
$arguments = $this->prepareArguments($reflection, $arguments, $requestContext);
60+
$arguments = $this->prepareArguments($reflection, $arguments, $context);
6161

6262
$instance = $container->get($className);
6363
return call_user_func([$instance, $methodName], ...$arguments);
@@ -67,7 +67,7 @@ public function handle(ContainerInterface $container, array $arguments, Context
6767
}
6868

6969

70-
protected function prepareArguments(\ReflectionFunctionAbstract $reflection, array $arguments, Context $requestContext): array
70+
protected function prepareArguments(\ReflectionFunctionAbstract $reflection, array $arguments, Context $context): array
7171
{
7272
$finalArgs = [];
7373

@@ -78,7 +78,7 @@ protected function prepareArguments(\ReflectionFunctionAbstract $reflection, arr
7878
$paramPosition = $parameter->getPosition();
7979

8080
if ($paramType instanceof ReflectionNamedType && $paramType->getName() === Context::class) {
81-
$finalArgs[$paramPosition] = $requestContext;
81+
$finalArgs[$paramPosition] = $context;
8282

8383
continue;
8484
}

src/Elements/RegisteredPrompt.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ public static function make(Prompt $schema, callable|array|string $handler, bool
4444
* @param array $arguments
4545
* @return PromptMessage[]
4646
*/
47-
public function get(ContainerInterface $container, array $arguments, Context $requestContext): array
47+
public function get(ContainerInterface $container, array $arguments, Context $context): array
4848
{
49-
$result = $this->handle($container, $arguments, $requestContext);
49+
$result = $this->handle($container, $arguments, $context);
5050

5151
return $this->formatResult($result);
5252
}

src/Elements/RegisteredResource.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ public static function make(Resource $schema, callable|array|string $handler, bo
3333
*
3434
* @return array<TextResourceContents|BlobResourceContents> Array of ResourceContents objects.
3535
*/
36-
public function read(ContainerInterface $container, string $uri, Context $requestContext): array
36+
public function read(ContainerInterface $container, string $uri, Context $context): array
3737
{
38-
$result = $this->handle($container, ['uri' => $uri], $requestContext);
38+
$result = $this->handle($container, ['uri' => $uri], $context);
3939

4040
return $this->formatResult($result, $uri, $this->schema->mimeType);
4141
}

src/Elements/RegisteredResourceTemplate.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ public static function make(ResourceTemplate $schema, callable|array|string $han
4242
*
4343
* @return array<TextResourceContents|BlobResourceContents> Array of ResourceContents objects.
4444
*/
45-
public function read(ContainerInterface $container, string $uri, Context $requestContext): array
45+
public function read(ContainerInterface $container, string $uri, Context $context): array
4646
{
4747
$arguments = array_merge($this->uriVariables, ['uri' => $uri]);
4848

49-
$result = $this->handle($container, $arguments, $requestContext);
49+
$result = $this->handle($container, $arguments, $context);
5050

5151
return $this->formatResult($result, $uri, $this->schema->mimeType);
5252
}

src/Elements/RegisteredTool.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ public static function make(Tool $schema, callable|array|string $handler, bool $
3131
*
3232
* @return Content[] The content items for CallToolResult.
3333
*/
34-
public function call(ContainerInterface $container, array $arguments, Context $requestContext): array
34+
public function call(ContainerInterface $container, array $arguments, Context $context): array
3535
{
36-
$result = $this->handle($container, $arguments, $requestContext);
36+
$result = $this->handle($container, $arguments, $context);
3737

3838
return $this->formatResult($result);
3939
}

src/Protocol.php

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -113,44 +113,44 @@ public function unbindTransport(): void
113113
*
114114
* Processes via Processor, sends Response/Error.
115115
*/
116-
public function processMessage(Request|Notification|BatchRequest $message, string $sessionId, array $context = []): void
116+
public function processMessage(Request|Notification|BatchRequest $message, string $sessionId, array $messageContext = []): void
117117
{
118118
$this->logger->debug('Message received.', ['sessionId' => $sessionId, 'message' => $message]);
119119

120120
$session = $this->sessionManager->getSession($sessionId);
121121

122122
if ($session === null) {
123123
$error = Error::forInvalidRequest('Invalid or expired session. Please re-initialize the session.', $message->id);
124-
$context['status_code'] = 404;
124+
$messageContext['status_code'] = 404;
125125

126-
$this->transport->sendMessage($error, $sessionId, $context)
127-
->then(function () use ($sessionId, $error, $context) {
128-
$this->logger->debug('Response sent.', ['sessionId' => $sessionId, 'payload' => $error, 'context' => $context]);
126+
$this->transport->sendMessage($error, $sessionId, $messageContext)
127+
->then(function () use ($sessionId, $error, $messageContext) {
128+
$this->logger->debug('Response sent.', ['sessionId' => $sessionId, 'payload' => $error, 'context' => $messageContext]);
129129
})
130-
->catch(function (Throwable $e) use ($sessionId, $error, $context) {
130+
->catch(function (Throwable $e) use ($sessionId) {
131131
$this->logger->error('Failed to send response.', ['sessionId' => $sessionId, 'error' => $e->getMessage()]);
132132
});
133133

134134
return;
135135
}
136136

137-
if ($context['stateless'] ?? false) {
137+
if ($messageContext['stateless'] ?? false) {
138138
$session->set('initialized', true);
139139
$session->set('protocol_version', self::LATEST_PROTOCOL_VERSION);
140140
$session->set('client_info', ['name' => 'stateless-client', 'version' => '1.0.0']);
141141
}
142142

143-
$requestContext = new Context(
143+
$context = new Context(
144144
$session,
145-
$context['request'] ?? null,
145+
$messageContext['request'] ?? null,
146146
);
147147

148148
$response = null;
149149

150150
if ($message instanceof BatchRequest) {
151-
$response = $this->processBatchRequest($message, $session, $requestContext);
151+
$response = $this->processBatchRequest($message, $session, $context);
152152
} elseif ($message instanceof Request) {
153-
$response = $this->processRequest($message, $session, $requestContext);
153+
$response = $this->processRequest($message, $session, $context);
154154
} elseif ($message instanceof Notification) {
155155
$this->processNotification($message, $session);
156156
}
@@ -161,7 +161,7 @@ public function processMessage(Request|Notification|BatchRequest $message, strin
161161
return;
162162
}
163163

164-
$this->transport->sendMessage($response, $sessionId, $context)
164+
$this->transport->sendMessage($response, $sessionId, $messageContext)
165165
->then(function () use ($sessionId, $response) {
166166
$this->logger->debug('Response sent.', ['sessionId' => $sessionId, 'payload' => $response]);
167167
})
@@ -173,7 +173,7 @@ public function processMessage(Request|Notification|BatchRequest $message, strin
173173
/**
174174
* Process a batch message
175175
*/
176-
private function processBatchRequest(BatchRequest $batch, SessionInterface $session, Context $requestContext): ?BatchResponse
176+
private function processBatchRequest(BatchRequest $batch, SessionInterface $session, Context $context): ?BatchResponse
177177
{
178178
$items = [];
179179

@@ -182,7 +182,7 @@ private function processBatchRequest(BatchRequest $batch, SessionInterface $sess
182182
}
183183

184184
foreach ($batch->getRequests() as $request) {
185-
$items[] = $this->processRequest($request, $session, $requestContext);
185+
$items[] = $this->processRequest($request, $session, $context);
186186
}
187187

188188
return empty($items) ? null : new BatchResponse($items);
@@ -191,7 +191,7 @@ private function processBatchRequest(BatchRequest $batch, SessionInterface $sess
191191
/**
192192
* Process a request message
193193
*/
194-
private function processRequest(Request $request, SessionInterface $session, Context $requestContext): Response|Error
194+
private function processRequest(Request $request, SessionInterface $session, Context $context): Response|Error
195195
{
196196
try {
197197
if ($request->method !== 'initialize') {
@@ -200,7 +200,7 @@ private function processRequest(Request $request, SessionInterface $session, Con
200200

201201
$this->assertRequestCapability($request->method);
202202

203-
$result = $this->dispatcher->handleRequest($request, $session, $requestContext);
203+
$result = $this->dispatcher->handleRequest($request, $context);
204204

205205
return Response::make($request->id, $result);
206206
} catch (McpServerException $e) {

tests/Unit/DispatcherTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
$this->session = Mockery::mock(SessionInterface::class);
7373
/** @var MockInterface&ContainerInterface $container */
7474
$this->container = Mockery::mock(ContainerInterface::class);
75-
$this->context = new Context(Mockery::mock(SessionInterface::class));
75+
$this->context = new Context($this->session);
7676

7777
$configuration = new Configuration(
7878
serverInfo: Implementation::make('DispatcherTestServer', '1.0'),
@@ -106,21 +106,21 @@
106106
$this->session->shouldReceive('set')->with('client_info', Mockery::on(fn($value) => $value['name'] === 'client' && $value['version'] === '1.0'))->once();
107107
$this->session->shouldReceive('set')->with('protocol_version', Protocol::LATEST_PROTOCOL_VERSION)->once();
108108

109-
$result = $this->dispatcher->handleRequest($request, $this->session, $this->context);
109+
$result = $this->dispatcher->handleRequest($request, $this->context);
110110
expect($result)->toBeInstanceOf(InitializeResult::class);
111111
expect($result->protocolVersion)->toBe(Protocol::LATEST_PROTOCOL_VERSION);
112112
expect($result->serverInfo->name)->toBe('DispatcherTestServer');
113113
});
114114

115115
it('routes to handlePing for ping request', function () {
116116
$request = new JsonRpcRequest('2.0', 'id1', 'ping', []);
117-
$result = $this->dispatcher->handleRequest($request, $this->session, $this->context);
117+
$result = $this->dispatcher->handleRequest($request, $this->context);
118118
expect($result)->toBeInstanceOf(EmptyResult::class);
119119
});
120120

121121
it('throws MethodNotFound for unknown request method', function () {
122122
$rawRequest = new JsonRpcRequest('2.0', 'id1', 'unknown/method', []);
123-
$this->dispatcher->handleRequest($rawRequest, $this->session, $this->context);
123+
$this->dispatcher->handleRequest($rawRequest, $this->context);
124124
})->throws(McpServerException::class, "Method 'unknown/method' not found.");
125125

126126
it('routes to handleNotificationInitialized for initialized notification', function () {

0 commit comments

Comments
 (0)