Tool reply meta (#6074)

Co-authored-by: Douwe Osinga <douwe@squareup.com>
This commit is contained in:
Douwe Osinga
2025-12-11 19:43:36 -05:00
committed by GitHub
parent 7dd244eff6
commit cdab2fc3a6
52 changed files with 1852 additions and 1083 deletions
+10 -9
View File
@@ -1,9 +1,9 @@
use crate::mcp_utils::ToolResult;
use chrono::Utc;
use rmcp::model::{
AnnotateAble, CallToolRequestParam, Content, ImageContent, JsonObject, PromptMessage,
PromptMessageContent, PromptMessageRole, RawContent, RawImageContent, RawTextContent,
ResourceContents, Role, TextContent,
AnnotateAble, CallToolRequestParam, CallToolResult, Content, ImageContent, JsonObject,
PromptMessage, PromptMessageContent, PromptMessageRole, RawContent, RawImageContent,
RawTextContent, ResourceContents, Role, TextContent,
};
use serde::{Deserialize, Deserializer, Serialize};
use std::collections::HashSet;
@@ -88,7 +88,7 @@ pub struct ToolResponse {
pub id: String,
#[serde(with = "tool_result_serde")]
#[schema(value_type = Object)]
pub tool_result: ToolResult<Vec<Content>>,
pub tool_result: ToolResult<CallToolResult>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
@@ -190,7 +190,7 @@ impl fmt::Display for MessageContent {
f,
"[ToolResponse: {}]",
match &r.tool_result {
Ok(contents) => format!("{} content item(s)", contents.len()),
Ok(result) => format!("{} content item(s)", result.content.len()),
Err(e) => format!("Error: {e}"),
}
),
@@ -266,7 +266,7 @@ impl MessageContent {
})
}
pub fn tool_response<S: Into<String>>(id: S, tool_result: ToolResult<Vec<Content>>) -> Self {
pub fn tool_response<S: Into<String>>(id: S, tool_result: ToolResult<CallToolResult>) -> Self {
MessageContent::ToolResponse(ToolResponse {
id: id.into(),
tool_result,
@@ -380,8 +380,9 @@ impl MessageContent {
pub fn as_tool_response_text(&self) -> Option<String> {
if let Some(tool_response) = self.as_tool_response() {
if let Ok(contents) = &tool_response.tool_result {
let texts: Vec<String> = contents
if let Ok(result) = &tool_response.tool_result {
let texts: Vec<String> = result
.content
.iter()
.filter_map(|content| content.as_text().map(|t| t.text.to_string()))
.collect();
@@ -644,7 +645,7 @@ impl Message {
pub fn with_tool_response<S: Into<String>>(
self,
id: S,
result: ToolResult<Vec<Content>>,
result: ToolResult<CallToolResult>,
) -> Self {
self.with_content(MessageContent::tool_response(id, result))
}