Skip to main content

ProtocolVersion

Enum ProtocolVersion 

Source
pub enum ProtocolVersion {
    V2024_11_05,
    V2025_03_26,
    V2025_06_18,
    V2025_11_25,
    V2026_07_28,
    Unknown(ReleaseDate),
}
Expand description

A published MCP revision, or one published after this build was compiled.

Ordered oldest to newest, which is also publication order. See the module docs for why that is an invariant rather than a coincidence.

Variants§

§

V2024_11_05

The first published revision. Defines stdio and the legacy HTTP+SSE transport, and is the only revision where TransportKind::LegacySse is defined at all.

§

V2025_03_26

Replaced the legacy HTTP+SSE transport with Streamable HTTP.

§

V2025_06_18

Removed JSON-RPC batching and added structured tool output.

§

V2025_11_25

Added URL-mode elicitation, icons, and experimental tasks.

§

V2026_07_28

Made the protocol stateless: the initialize handshake is gone and every request carries its version in _meta.

§

Unknown(ReleaseDate)

A revision published after this build, identified by its release date.

Only ever holds a date at or after ReleaseDate::V2024_11_05, and in practice only one newer than ProtocolVersion::V2026_07_28 — see the module docs.

Implementations§

Source§

impl ProtocolVersion

Source

pub const KNOWN: [Self; 5]

Every revision this build has wire types for, oldest first.

draft is not a separate version: upstream’s floating draft schema declares LATEST_PROTOCOL_VERSION = "2026-07-28", the same as the final revision, so it negotiates as that revision. The two differ in schema shape, not in version string, and T08 keys the codec off the version.

Source

pub const fn latest_known() -> Self

The newest revision this build knows.

Source

pub const fn earliest_known() -> Self

The oldest revision this build supports.

Source

pub const fn date(self) -> ReleaseDate

The revision’s release date.

Source

pub fn as_wire(self) -> Cow<'static, str>

The string this revision is negotiated as, borrowed when it is a known one.

Cow rather than &'static str because Unknown has no static spelling; the six known revisions, which is what a codec asks about on the hot path, allocate nothing.

Source

pub const fn is_known(self) -> bool

Whether this build has wire types for the revision.

Source

pub fn is_newer_than_all_known(self) -> bool

Whether this revision was published after the newest one this build knows.

Not const: the comparison comes from a derived Ord, and a derived Ord is not a const-callable operator.

Source

pub fn unknown_after_known( date: ReleaseDate, ) -> Result<Self, UnknownVersionError>

Builds an Unknown from a date, refusing one that would break the ordering invariant.

The public enum variant means this cannot be the only way in, so the function is not private; making it the obvious one is what keeps the invariant from being broken by accident.

§Errors

Returns UnknownVersionError::NotAfterKnown when date is at or before Self::latest_known — a date this build should have a variant for, and FromStr would have matched it exactly.

§Examples
use protocol_droid::domain::{ProtocolVersion, ReleaseDate};

let future = ProtocolVersion::unknown_after_known("2027-01-01".parse().unwrap())?;
assert!(future.is_newer_than_all_known());

Trait Implementations§

Source§

impl Clone for ProtocolVersion

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for ProtocolVersion

Source§

impl Debug for ProtocolVersion

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ProtocolVersion

Source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for ProtocolVersion

Source§

impl FromStr for ProtocolVersion

Source§

fn from_str(text: &str) -> Result<Self, Self::Err>

Parses a negotiated version string.

Three outcomes, in order:

  1. A known revision’s string becomes that variant. Matched on the whole string first, because that is the only way to reject 2025-03-26x without first having to date-parse it.
  2. A well-formed date this build has not heard of becomes Unknown, provided it is at or after the first revision.
  3. Everything else is an error.
Source§

type Err = ParseProtocolVersionError

The associated error which can be returned from parsing.
Source§

impl Hash for ProtocolVersion

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for ProtocolVersion

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

fn clamp_to<R>(self, range: R) -> Self
where Self: Sized, R: ClampBounds<Self>,

🔬This is a nightly-only experimental API. (clamp_to)
Restrict a value to a certain range. Read more
Source§

impl PartialEq for ProtocolVersion

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for ProtocolVersion

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StructuralPartialEq for ProtocolVersion

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more