fix: stamp server info on graceful subscription results (#1078)

* fix: stamp server info on graceful subscription results

* fix: expose subscription server info metadata

---------

Co-authored-by: mrcs64 <9069178+mrcs64@users.noreply.github.com>
This commit is contained in:
mrcs64 2026-07-29 19:34:33 +02:00 • committed by GitHub
commit cb50ae7890
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -154,7 +154,8 @@ impl<H: ServerHandler> Service<RoleServer> for H {
McpError::method_not_found::<SubscriptionsListenRequestMethod>(),
);
};
let advertised = requested.supported_by(&self.get_info().capabilities);
let server_info = self.get_info();
let advertised = requested.supported_by(&server_info.capabilities);
let handler_accepted = requested.intersection(&candidate);
let accepted = handler_accepted.intersection(&advertised);
if accepted != handler_accepted {
@ -168,15 +169,16 @@ impl<H: ServerHandler> Service<RoleServer> for H {
"subscription filter reduced to advertised server capabilities"
);
}
let server_implementation = server_info.server_info;
let subscription_id = context.id.clone();
let subscription =
SubscriptionContext::establish(context, requested, accepted).await?;
// The 2026-07-28 schema defines a final result for graceful
// server teardown; explicit stdio cancellation remains a notification.
self.listen(subscription).await.map(|()| {
ServerResult::SubscriptionsListenResult(
SubscriptionsListenResult::complete(subscription_id),
)
let mut result = SubscriptionsListenResult::complete(subscription_id);
result.meta.set_server_info(server_implementation);
ServerResult::SubscriptionsListenResult(result)
})
}
}