chore: upgrade to rmcp 0.14.0 (#6674)

This commit is contained in:
Alex Hancock
2026-01-23 14:52:43 -05:00
committed by GitHub
parent ca7577ae49
commit 8233f0afac
37 changed files with 305 additions and 209 deletions
+15 -13
View File
@@ -1,7 +1,7 @@
use crate::mcp_utils::ToolResult;
use chrono::Utc;
use rmcp::model::{
AnnotateAble, CallToolRequestParam, CallToolResult, Content, ImageContent, JsonObject,
AnnotateAble, CallToolRequestParams, CallToolResult, Content, ImageContent, JsonObject,
PromptMessage, PromptMessageContent, PromptMessageRole, RawContent, RawImageContent,
RawTextContent, ResourceContents, Role, TextContent,
};
@@ -64,7 +64,7 @@ pub struct ToolRequest {
pub id: String,
#[serde(with = "tool_result_serde")]
#[schema(value_type = Object)]
pub tool_call: ToolResult<CallToolRequestParam>,
pub tool_call: ToolResult<CallToolRequestParams>,
#[serde(skip_serializing_if = "Option::is_none")]
#[schema(value_type = Object)]
pub metadata: Option<ProviderMetadata>,
@@ -156,7 +156,7 @@ pub struct FrontendToolRequest {
pub id: String,
#[serde(with = "tool_result_serde")]
#[schema(value_type = Object)]
pub tool_call: ToolResult<CallToolRequestParam>,
pub tool_call: ToolResult<CallToolRequestParams>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ToSchema)]
@@ -316,7 +316,7 @@ impl MessageContent {
pub fn tool_request<S: Into<String>>(
id: S,
tool_call: ToolResult<CallToolRequestParam>,
tool_call: ToolResult<CallToolRequestParams>,
) -> Self {
MessageContent::ToolRequest(ToolRequest {
id: id.into(),
@@ -328,7 +328,7 @@ impl MessageContent {
pub fn tool_request_with_metadata<S: Into<String>>(
id: S,
tool_call: ToolResult<CallToolRequestParam>,
tool_call: ToolResult<CallToolRequestParams>,
metadata: Option<&ProviderMetadata>,
) -> Self {
MessageContent::ToolRequest(ToolRequest {
@@ -414,7 +414,7 @@ impl MessageContent {
pub fn frontend_tool_request<S: Into<String>>(
id: S,
tool_call: ToolResult<CallToolRequestParam>,
tool_call: ToolResult<CallToolRequestParams>,
) -> Self {
MessageContent::FrontendToolRequest(FrontendToolRequest {
id: id.into(),
@@ -748,7 +748,7 @@ impl Message {
pub fn with_tool_request<S: Into<String>>(
self,
id: S,
tool_call: ToolResult<CallToolRequestParam>,
tool_call: ToolResult<CallToolRequestParams>,
) -> Self {
self.with_content(MessageContent::tool_request(id, tool_call))
}
@@ -756,7 +756,7 @@ impl Message {
pub fn with_tool_request_with_metadata<S: Into<String>>(
self,
id: S,
tool_call: ToolResult<CallToolRequestParam>,
tool_call: ToolResult<CallToolRequestParams>,
metadata: Option<&ProviderMetadata>,
tool_meta: Option<serde_json::Value>,
) -> Self {
@@ -804,7 +804,7 @@ impl Message {
pub fn with_frontend_tool_request<S: Into<String>>(
self,
id: S,
tool_call: ToolResult<CallToolRequestParam>,
tool_call: ToolResult<CallToolRequestParams>,
) -> Self {
self.with_content(MessageContent::frontend_tool_request(id, tool_call))
}
@@ -964,8 +964,8 @@ mod tests {
use crate::conversation::message::{Message, MessageContent, MessageMetadata};
use crate::conversation::*;
use rmcp::model::{
AnnotateAble, CallToolRequestParam, PromptMessage, PromptMessageContent, PromptMessageRole,
RawEmbeddedResource, RawImageContent, ResourceContents,
AnnotateAble, CallToolRequestParams, PromptMessage, PromptMessageContent,
PromptMessageRole, RawEmbeddedResource, RawImageContent, ResourceContents,
};
use rmcp::model::{ErrorCode, ErrorData};
use rmcp::object;
@@ -991,7 +991,8 @@ mod tests {
.with_text("Hello, I'll help you with that.")
.with_tool_request(
"tool123",
Ok(CallToolRequestParam {
Ok(CallToolRequestParams {
meta: None,
task: None,
name: "test_tool".into(),
arguments: Some(object!({"param": "value"})),
@@ -1250,7 +1251,8 @@ mod tests {
#[test]
fn test_message_with_tool_request() {
let tool_call = Ok(CallToolRequestParam {
let tool_call = Ok(CallToolRequestParams {
meta: None,
task: None,
name: "test_tool".into(),
arguments: Some(object!({})),
+13 -8
View File
@@ -503,7 +503,7 @@ pub fn debug_conversation_fix(
mod tests {
use crate::conversation::message::Message;
use crate::conversation::{debug_conversation_fix, fix_conversation, Conversation};
use rmcp::model::{CallToolRequestParam, Role};
use rmcp::model::{CallToolRequestParams, Role};
use rmcp::object;
macro_rules! assert_has_issues_unordered {
@@ -550,7 +550,8 @@ mod tests {
.with_text("I'll help you search.")
.with_tool_request(
"search_1",
Ok(CallToolRequestParam {
Ok(CallToolRequestParams {
meta: None,
task: None,
name: "web_search".into(),
arguments: Some(object!({"query": "rust programming"})),
@@ -614,7 +615,8 @@ mod tests {
Message::user()
.with_tool_request(
"bad_req",
Ok(CallToolRequestParam {
Ok(CallToolRequestParams {
meta: None,
task: None,
name: "search".into(),
arguments: Some(object!({})),
@@ -654,7 +656,8 @@ mod tests {
.with_text("I'll search for you")
.with_tool_request(
"search_1",
Ok(CallToolRequestParam {
Ok(CallToolRequestParams {
meta: None,
task: None,
name: "search".into(),
arguments: Some(object!({})),
@@ -672,7 +675,8 @@ mod tests {
),
Message::assistant().with_tool_request(
"search_2",
Ok(CallToolRequestParam {
Ok(CallToolRequestParams {
meta: None,
task: None,
name: "search".into(),
arguments: Some(object!({})),
@@ -708,11 +712,11 @@ mod tests {
Message::assistant()
.with_text("I'll help you run `ls` in the current directory and then perform a word count on the smallest file. Let me start by listing the directory contents.")
.with_tool_request("toolu_bdrk_018adWbP4X26CfoJU5hkhu3i", Ok(CallToolRequestParam { task: None, name: "developer__shell".into(), arguments: Some(object!({"command": "ls -la"})) })),
.with_tool_request("toolu_bdrk_018adWbP4X26CfoJU5hkhu3i", Ok(CallToolRequestParams { meta: None, task: None, name: "developer__shell".into(), arguments: Some(object!({"command": "ls -la"})) })),
Message::assistant()
.with_text("Now I'll identify the smallest file by size. Looking at the output, I can see that both `slack.yaml` and `subrecipes.yaml` have a size of 0 bytes, making them the smallest files. I'll run a word count on one of them:")
.with_tool_request("toolu_bdrk_01KgDYHs4fAodi22NqxRzmwx", Ok(CallToolRequestParam { task: None, name: "developer__shell".into(), arguments: Some(object!({"command": "wc slack.yaml"})) })),
.with_tool_request("toolu_bdrk_01KgDYHs4fAodi22NqxRzmwx", Ok(CallToolRequestParams { meta: None, task: None, name: "developer__shell".into(), arguments: Some(object!({"command": "wc slack.yaml"})) })),
Message::user()
.with_tool_response("toolu_bdrk_01KgDYHs4fAodi22NqxRzmwx", Ok(rmcp::model::CallToolResult {
@@ -746,7 +750,8 @@ mod tests {
.with_text("I'll search for you")
.with_tool_request(
"search_1",
Ok(CallToolRequestParam {
Ok(CallToolRequestParams {
meta: None,
task: None,
name: "search".into(),
arguments: Some(object!({})),
@@ -1,5 +1,5 @@
use crate::mcp_utils::ToolResult;
use rmcp::model::{CallToolRequestParam, ErrorCode, ErrorData, JsonObject};
use rmcp::model::{CallToolRequestParams, ErrorCode, ErrorData, JsonObject};
use serde::ser::SerializeStruct;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use std::borrow::Cow;
@@ -32,7 +32,7 @@ struct ToolCallWithValueArguments {
}
impl ToolCallWithValueArguments {
fn into_call_tool_request_param(self) -> CallToolRequestParam {
fn into_call_tool_request_param(self) -> CallToolRequestParams {
let arguments = match self.arguments {
serde_json::Value::Object(map) => Some(map),
serde_json::Value::Null => None,
@@ -42,7 +42,8 @@ impl ToolCallWithValueArguments {
Some(map)
}
};
CallToolRequestParam {
CallToolRequestParams {
meta: None,
task: None,
name: Cow::Owned(self.name),
arguments,
@@ -50,16 +51,16 @@ impl ToolCallWithValueArguments {
}
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<ToolResult<CallToolRequestParam>, D::Error>
pub fn deserialize<'de, D>(deserializer: D) -> Result<ToolResult<CallToolRequestParams>, D::Error>
where
D: Deserializer<'de>,
{
#[derive(Deserialize)]
#[serde(untagged)]
enum ResultFormat {
SuccessWithCallToolRequestParam {
SuccessWithCallToolRequestParams {
status: String,
value: CallToolRequestParam,
value: CallToolRequestParams,
},
SuccessWithToolCallValueArguments {
status: String,
@@ -74,7 +75,7 @@ where
let format = ResultFormat::deserialize(deserializer)?;
match format {
ResultFormat::SuccessWithCallToolRequestParam { status, value } => {
ResultFormat::SuccessWithCallToolRequestParams { status, value } => {
if status == "success" {
Ok(Ok(value))
} else {