Skip to main content

ClientMetadata

Struct ClientMetadata 

Source
pub struct ClientMetadata { /* private fields */ }
Expand description

The metadata a client presents to register.

This is RFC 7591 §2’s client metadata document, and MCP adds one requirement on top: 2026-07-28 §8 (SEP-837) makes application_type a MUST for dynamic registration “to avoid OpenID Connect redirect URI conflicts”.

§Unknown fields

extra holds anything not named here and is merged into the serialized document. The named fields are the ones this crate has to read or gate on; a client that publishes client_uri, icon_uri or title — all of which the newer revisions name — sets them through with_field rather than losing them at a struct boundary. Preserving them matters for the same reason it matters on the IR: the authorization server sees the document this client published, and silently dropping a field turns a working registration into a failing one.

Implementations§

Source§

impl ClientMetadata

Source

pub fn new(redirect_uris: Vec<String>) -> Result<Self, ClientIdError>

Metadata with the redirect URIs it will be authorized to use.

RFC 7591 §2 makes redirect_uris the one required member of a client metadata document, so this constructor refuses an empty list rather than letting a server reject it.

§Errors

ClientIdError::NotHttps if a redirect URI is not an absolute https URL, or ClientIdError::DocumentRegistration if the list is empty.

Source

pub fn redirect_uris(&self) -> &[String]

The redirect URIs, in the order they were given.

Source

pub fn client_name(&self) -> Option<&str>

The name this client presents at a consent screen.

Source

pub fn with_client_name(self, name: impl Into<String>) -> Self

Set the consent-screen name.

Source

pub fn token_endpoint_auth_method(&self) -> Option<&str>

How this client authenticates at the token endpoint.

"none" declares a public client, which is what a Client ID Metadata Document client is: the draft is explicit that no shared secret can be established for that form.

Source

pub fn with_token_endpoint_auth_method(self, method: impl Into<String>) -> Self

Set the token endpoint authentication method.

Source

pub fn application_type(&self) -> Option<&str>

The OIDC application_type this client is.

Source

pub fn with_application_type(self, application_type: impl Into<String>) -> Self

Set the OIDC application_type.

Source

pub fn with_field( self, name: impl Into<String>, value: impl Into<Value>, ) -> Result<Self, ClientMetadataError>

Set one field this crate does not name, preserving it on the wire.

Takes precedence over a named field of the same name, so a caller cannot set redirect_uris through here and have it win over the typed value — that would let a document claim redirects the client never checked.

ClientMetadataError::ReservedField names the fields that are typed.

Source

pub const fn extra(&self) -> &Map<String, Value>

The fields this crate does not name, as they will be serialized.

Trait Implementations§

Source§

impl Clone for ClientMetadata

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 Debug for ClientMetadata

Source§

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

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

impl Default for ClientMetadata

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for ClientMetadata

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for ClientMetadata

Source§

impl PartialEq for ClientMetadata

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 Serialize for ClientMetadata

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for ClientMetadata

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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, 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