CallToolResult

Struct CallToolResult 

Source
pub struct CallToolResult {
    pub content: Vec<ContentBlock>,
    pub is_error: Option<bool>,
    pub structured_content: Option<Value>,
    pub _meta: Option<Value>,
}
Expand description

The result of a CallToolRequest.

Fields§

§content: Vec<ContentBlock>

The output of the tool, typically as a series of text or other content blocks. This is required.

§is_error: Option<bool>

An optional boolean indicating whether the tool execution resulted in an error.

When is_error is true, all content blocks should be treated as error information. The error message may span multiple text blocks for structured error reporting.

§structured_content: Option<Value>

Optional structured output from the tool, conforming to its output_schema.

When present, this contains schema-validated JSON output that clients can parse and use programmatically. Tools that return structured content SHOULD also include the serialized JSON in a TextContent block for backward compatibility with clients that don’t support structured output.

See Tool::output_schema for defining the expected structure.

§_meta: Option<Value>

Optional metadata for the result.

This field is for client applications and tools to pass additional context that should NOT be exposed to LLMs. Examples include tracking IDs, performance metrics, cache status, or internal state information.

Implementations§

Source§

impl CallToolResult

Source

pub fn all_text(&self) -> String

Extracts and concatenates all text content from the result.

This is useful for simple text-only tools or when you want to present all textual output as a single string.

§Returns

A single string containing all text blocks concatenated with newlines. Returns an empty string if there are no text blocks.

§Example
use turbomcp_protocol::types::{CallToolResult, ContentBlock, TextContent};

let result = CallToolResult {
    content: vec![
        ContentBlock::Text(TextContent {
            text: "Line 1".to_string(),
            annotations: None,
            meta: None,
        }),
        ContentBlock::Text(TextContent {
            text: "Line 2".to_string(),
            annotations: None,
            meta: None,
        }),
    ],
    is_error: None,
    structured_content: None,
    _meta: None,
};

assert_eq!(result.all_text(), "Line 1\nLine 2");
Source

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

Returns the text content of the first text block, if any.

This is a common pattern for simple tools that return a single text response.

§Returns

Some(&str) if the first content block is text, None otherwise.

§Example
use turbomcp_protocol::types::{CallToolResult, ContentBlock, TextContent};

let result = CallToolResult {
    content: vec![
        ContentBlock::Text(TextContent {
            text: "Hello, world!".to_string(),
            annotations: None,
            meta: None,
        }),
    ],
    is_error: None,
    structured_content: None,
    _meta: None,
};

assert_eq!(result.first_text(), Some("Hello, world!"));
Source

pub fn has_error(&self) -> bool

Checks if the tool execution resulted in an error.

§Returns

true if is_error is explicitly set to true, false otherwise (including when is_error is None).

§Example
use turbomcp_protocol::types::CallToolResult;

let success_result = CallToolResult {
    content: vec![],
    is_error: Some(false),
    structured_content: None,
    _meta: None,
};
assert!(!success_result.has_error());

let error_result = CallToolResult {
    content: vec![],
    is_error: Some(true),
    structured_content: None,
    _meta: None,
};
assert!(error_result.has_error());

let unspecified_result = CallToolResult {
    content: vec![],
    is_error: None,
    structured_content: None,
    _meta: None,
};
assert!(!unspecified_result.has_error());
Source

pub fn to_display_string(&self) -> String

Creates a user-friendly display string for the tool result.

This method provides a formatted representation suitable for logging, debugging, or displaying to end users. It handles multiple content types and includes structured content and error information when present.

§Returns

A formatted string representing the tool result.

§Example
use turbomcp_protocol::types::{CallToolResult, ContentBlock, TextContent};

let result = CallToolResult {
    content: vec![
        ContentBlock::Text(TextContent {
            text: "Operation completed".to_string(),
            annotations: None,
            meta: None,
        }),
    ],
    is_error: Some(false),
    structured_content: None,
    _meta: None,
};

let display = result.to_display_string();
assert!(display.contains("Operation completed"));

Trait Implementations§

Source§

impl Clone for CallToolResult

Source§

fn clone(&self) -> CallToolResult

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 CallToolResult

Source§

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

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

impl<'de> Deserialize<'de> for CallToolResult

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

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

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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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<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
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,