Skip to main content

ToolAnnotationsMap

Struct ToolAnnotationsMap 

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

A map of tool names to their annotations, for use by middleware.

This is automatically inserted into RouterRequest::extensions for tools/call requests, allowing middleware to inspect tool safety hints (e.g., read_only_hint, destructive_hint) without needing direct access to the router’s tool registry.

§Example

use tower_mcp::router::ToolAnnotationsMap;
use tower_mcp::protocol::McpRequest;

// In a middleware Service::call():
fn call(&mut self, req: RouterRequest) -> Self::Future {
    if let McpRequest::CallTool(params) = &req.inner {
        if let Some(map) = req.extensions.get::<ToolAnnotationsMap>() {
            let annotations = map.get(&params.name);
            // Check annotations.read_only_hint, destructive_hint, etc.
        }
    }
    self.inner.call(req)
}

Implementations§

Source§

impl ToolAnnotationsMap

Source

pub fn get(&self, tool_name: &str) -> Option<&ToolAnnotations>

Look up annotations for a tool by name.

Returns None if the tool has no annotations or doesn’t exist.

Source

pub fn is_read_only(&self, tool_name: &str) -> bool

Check if a tool is read-only (does not modify state).

Returns false if the tool has no annotations or doesn’t exist (the MCP spec default for readOnlyHint is false).

Source

pub fn is_destructive(&self, tool_name: &str) -> bool

Check if a tool may have destructive effects.

Returns true if the tool has no annotations or doesn’t exist (the MCP spec default for destructiveHint is true).

Source

pub fn is_idempotent(&self, tool_name: &str) -> bool

Check if a tool is idempotent.

Returns false if the tool has no annotations or doesn’t exist (the MCP spec default for idempotentHint is false).

Trait Implementations§

Source§

impl Clone for ToolAnnotationsMap

Source§

fn clone(&self) -> ToolAnnotationsMap

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for ToolAnnotationsMap

Source§

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

Formats the value using the given formatter. Read more

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<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> 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> 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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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