pub trait CompletionHandler: Send + Sync {
// Required methods
fn complete_legacy(
&self,
ctx: &McpContext,
params: LegacyCompletionParams,
) -> McpResult<CompletionValues>;
fn complete_final(
&self,
ctx: &McpContext,
params: FinalCompletionParams,
) -> McpResult<FinalCompletionValues>;
// Provided methods
fn timeout(&self) -> Option<Duration> { ... }
fn complete_legacy_async<'a>(
&'a self,
ctx: &'a McpContext,
params: LegacyCompletionParams,
) -> BoxFuture<'a, McpOutcome<CompletionValues>> { ... }
fn complete_legacy_async_in_request<'a>(
&'a self,
ctx: &'a McpContext,
_request_cx: &'a Cx,
params: LegacyCompletionParams,
) -> BoxFuture<'a, McpOutcome<CompletionValues>> { ... }
fn complete_final_async<'a>(
&'a self,
ctx: &'a McpContext,
params: FinalCompletionParams,
) -> BoxFuture<'a, McpOutcome<FinalCompletionValues>> { ... }
fn complete_final_async_in_request<'a>(
&'a self,
ctx: &'a McpContext,
_request_cx: &'a Cx,
params: FinalCompletionParams,
) -> BoxFuture<'a, McpOutcome<FinalCompletionValues>> { ... }
}Expand description
Handler for completion/complete in both supported protocol eras.
The two request parameter types deliberately remain distinct: the final
form carries required request metadata and optional completion context,
while the exact legacy form does not. Each callback returns its exact
era-specific completion payload; the router selects the matching result
envelope and final resultType contract.
Required Methods§
Sourcefn complete_legacy(
&self,
ctx: &McpContext,
params: LegacyCompletionParams,
) -> McpResult<CompletionValues>
fn complete_legacy( &self, ctx: &McpContext, params: LegacyCompletionParams, ) -> McpResult<CompletionValues>
Completes one exact MCP 2024-11-05 request.
Sourcefn complete_final(
&self,
ctx: &McpContext,
params: FinalCompletionParams,
) -> McpResult<FinalCompletionValues>
fn complete_final( &self, ctx: &McpContext, params: FinalCompletionParams, ) -> McpResult<FinalCompletionValues>
Completes one final MCP 2026-07-28 request.
Provided Methods§
Sourcefn timeout(&self) -> Option<Duration>
fn timeout(&self) -> Option<Duration>
Returns an optional handler-specific timeout.
A non-zero timeout tightens the request budget and cannot relax an existing deadline. Zero is treated as no handler-specific timeout.
Sourcefn complete_legacy_async<'a>(
&'a self,
ctx: &'a McpContext,
params: LegacyCompletionParams,
) -> BoxFuture<'a, McpOutcome<CompletionValues>>
fn complete_legacy_async<'a>( &'a self, ctx: &'a McpContext, params: LegacyCompletionParams, ) -> BoxFuture<'a, McpOutcome<CompletionValues>>
Asynchronously completes one exact legacy request.
The default delegates to Self::complete_legacy.
Sourcefn complete_legacy_async_in_request<'a>(
&'a self,
ctx: &'a McpContext,
_request_cx: &'a Cx,
params: LegacyCompletionParams,
) -> BoxFuture<'a, McpOutcome<CompletionValues>>
fn complete_legacy_async_in_request<'a>( &'a self, ctx: &'a McpContext, _request_cx: &'a Cx, params: LegacyCompletionParams, ) -> BoxFuture<'a, McpOutcome<CompletionValues>>
Completes one exact-legacy request from its request-owned child.
Existing handlers keep their behavior through the default delegation to
Self::complete_legacy_async.
Sourcefn complete_final_async<'a>(
&'a self,
ctx: &'a McpContext,
params: FinalCompletionParams,
) -> BoxFuture<'a, McpOutcome<FinalCompletionValues>>
fn complete_final_async<'a>( &'a self, ctx: &'a McpContext, params: FinalCompletionParams, ) -> BoxFuture<'a, McpOutcome<FinalCompletionValues>>
Asynchronously completes one final request.
The default delegates to Self::complete_final.
Sourcefn complete_final_async_in_request<'a>(
&'a self,
ctx: &'a McpContext,
_request_cx: &'a Cx,
params: FinalCompletionParams,
) -> BoxFuture<'a, McpOutcome<FinalCompletionValues>>
fn complete_final_async_in_request<'a>( &'a self, ctx: &'a McpContext, _request_cx: &'a Cx, params: FinalCompletionParams, ) -> BoxFuture<'a, McpOutcome<FinalCompletionValues>>
Completes one final request from its request-owned structured child.
Implementations with nested asynchronous work must use request_cx
so cancellation remains owned by the originating modern request.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".