Skip to main content

CompletionHandler

Trait CompletionHandler 

Source
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§

Source

fn complete_legacy( &self, ctx: &McpContext, params: LegacyCompletionParams, ) -> McpResult<CompletionValues>

Completes one exact MCP 2024-11-05 request.

Source

fn complete_final( &self, ctx: &McpContext, params: FinalCompletionParams, ) -> McpResult<FinalCompletionValues>

Completes one final MCP 2026-07-28 request.

Provided Methods§

Source

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.

Source

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.

Source

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.

Source

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.

Source

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".

Implementors§