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
+2 -2
View File
@@ -51,7 +51,7 @@ use crate::tool_monitor::RepetitionInspector;
use crate::utils::is_token_cancelled;
use regex::Regex;
use rmcp::model::{
CallToolRequestParam, CallToolResult, Content, ErrorCode, ErrorData, GetPromptResult, Prompt,
CallToolRequestParams, CallToolResult, Content, ErrorCode, ErrorData, GetPromptResult, Prompt,
ServerNotification, Tool,
};
use serde_json::Value;
@@ -455,7 +455,7 @@ impl Agent {
#[instrument(skip(self, tool_call, request_id), fields(input, output))]
pub async fn dispatch_tool_call(
&self,
tool_call: CallToolRequestParam,
tool_call: CallToolRequestParams,
request_id: String,
cancellation_token: Option<CancellationToken>,
session: &Session,
@@ -9,7 +9,7 @@ use boa_engine::{js_string, Context, JsNativeError, JsString, JsValue, NativeFun
use indoc::indoc;
use regex::Regex;
use rmcp::model::{
CallToolRequestParam, CallToolResult, Content, Implementation, InitializeResult, JsonObject,
CallToolRequestParams, CallToolResult, Content, Implementation, InitializeResult, JsonObject,
ListToolsResult, ProtocolVersion, RawContent, ServerCapabilities, Tool as McpTool,
ToolAnnotations, ToolsCapability,
};
@@ -672,7 +672,8 @@ impl CodeExecutionClient {
while let Some((tool_name, arguments, response_tx)) = call_rx.recv().await {
let result = match extension_manager.as_ref().and_then(|w| w.upgrade()) {
Some(manager) => {
let tool_call = CallToolRequestParam {
let tool_call = CallToolRequestParams {
meta: None,
task: None,
name: tool_name.into(),
arguments: serde_json::from_str(&arguments).ok(),
+20 -11
View File
@@ -40,7 +40,7 @@ use crate::oauth::oauth_flow;
use crate::prompt_template;
use crate::subprocess::configure_command_no_window;
use rmcp::model::{
CallToolRequestParam, Content, ErrorCode, ErrorData, GetPromptResult, Prompt, Resource,
CallToolRequestParams, Content, ErrorCode, ErrorData, GetPromptResult, Prompt, Resource,
ResourceContents, ServerInfo, Tool,
};
use rmcp::transport::auth::AuthClient;
@@ -1138,7 +1138,7 @@ impl ExtensionManager {
pub async fn dispatch_tool_call(
&self,
session_id: &str,
tool_call: CallToolRequestParam,
tool_call: CallToolRequestParams,
cancellation_token: CancellationToken,
) -> Result<ToolCallResult> {
// Some models strip the tool prefix, so auto-add it for known code_execution tools
@@ -1668,7 +1668,8 @@ mod tests {
.await;
// verify a normal tool call
let tool_call = CallToolRequestParam {
let tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "test_client__tool".to_string().into(),
arguments: Some(object!({})),
@@ -1679,7 +1680,8 @@ mod tests {
.await;
assert!(result.is_ok());
let tool_call = CallToolRequestParam {
let tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "test_client__test__tool".to_string().into(),
arguments: Some(object!({})),
@@ -1691,7 +1693,8 @@ mod tests {
assert!(result.is_ok());
// verify a multiple underscores dispatch
let tool_call = CallToolRequestParam {
let tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "__cli__ent____tool".to_string().into(),
arguments: Some(object!({})),
@@ -1703,7 +1706,8 @@ mod tests {
assert!(result.is_ok());
// Test unicode in tool name, "client 🚀" should become "client_"
let tool_call = CallToolRequestParam {
let tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "client___tool".to_string().into(),
arguments: Some(object!({})),
@@ -1714,7 +1718,8 @@ mod tests {
.await;
assert!(result.is_ok());
let tool_call = CallToolRequestParam {
let tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "client___test__tool".to_string().into(),
arguments: Some(object!({})),
@@ -1726,7 +1731,8 @@ mod tests {
assert!(result.is_ok());
// this should error out, specifically for an ToolError::ExecutionError
let invalid_tool_call = CallToolRequestParam {
let invalid_tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "client___tools".to_string().into(),
arguments: Some(object!({})),
@@ -1752,7 +1758,8 @@ mod tests {
// this should error out, specifically with an ToolError::NotFound
// this client doesn't exist
let invalid_tool_call = CallToolRequestParam {
let invalid_tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "_client__tools".to_string().into(),
arguments: Some(object!({})),
@@ -1853,7 +1860,8 @@ mod tests {
.await;
// Try to call an unavailable tool
let unavailable_tool_call = CallToolRequestParam {
let unavailable_tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "test_extension__tool".to_string().into(),
arguments: Some(object!({})),
@@ -1877,7 +1885,8 @@ mod tests {
}
// Try to call an available tool - should succeed
let available_tool_call = CallToolRequestParam {
let available_tool_call = CallToolRequestParams {
meta: None,
task: None,
name: "test_extension__available_tool".to_string().into(),
arguments: Some(object!({})),
+7 -5
View File
@@ -1,7 +1,7 @@
use crate::agents::tool_execution::ToolCallResult;
use crate::recipe::Response;
use indoc::formatdoc;
use rmcp::model::{CallToolRequestParam, Content, ErrorCode, ErrorData, Tool, ToolAnnotations};
use rmcp::model::{CallToolRequestParams, Content, ErrorCode, ErrorData, Tool, ToolAnnotations};
use serde_json::Value;
use std::borrow::Cow;
@@ -116,7 +116,7 @@ impl FinalOutputTool {
}
}
pub async fn execute_tool_call(&mut self, tool_call: CallToolRequestParam) -> ToolCallResult {
pub async fn execute_tool_call(&mut self, tool_call: CallToolRequestParams) -> ToolCallResult {
match tool_call.name.to_string().as_str() {
FINAL_OUTPUT_TOOL_NAME => {
let result = self.validate_json_output(&tool_call.arguments.into()).await;
@@ -157,7 +157,7 @@ impl FinalOutputTool {
mod tests {
use super::*;
use crate::recipe::Response;
use rmcp::model::CallToolRequestParam;
use rmcp::model::CallToolRequestParams;
use rmcp::object;
use serde_json::json;
@@ -232,7 +232,8 @@ mod tests {
};
let mut tool = FinalOutputTool::new(response);
let tool_call = CallToolRequestParam {
let tool_call = CallToolRequestParams {
meta: None,
task: None,
name: FINAL_OUTPUT_TOOL_NAME.into(),
arguments: Some(object!({
@@ -255,7 +256,8 @@ mod tests {
};
let mut tool = FinalOutputTool::new(response);
let tool_call = CallToolRequestParam {
let tool_call = CallToolRequestParams {
meta: None,
task: None,
name: FINAL_OUTPUT_TOOL_NAME.into(),
arguments: Some(object!({
+38 -21
View File
@@ -2,21 +2,22 @@ use crate::action_required_manager::ActionRequiredManager;
use crate::agents::types::SharedProvider;
use crate::session_context::SESSION_ID_HEADER;
use rmcp::model::{
Content, CreateElicitationRequestParam, CreateElicitationResult, ElicitationAction, ErrorCode,
Content, CreateElicitationRequestParams, CreateElicitationResult, ElicitationAction, ErrorCode,
Extensions, JsonObject, Meta,
};
/// MCP client implementation for Goose
use rmcp::{
model::{
CallToolRequest, CallToolRequestParam, CallToolResult, CancelledNotification,
CallToolRequest, CallToolRequestParams, CallToolResult, CancelledNotification,
CancelledNotificationMethod, CancelledNotificationParam, ClientCapabilities, ClientInfo,
ClientRequest, CreateMessageRequestParam, CreateMessageResult, GetPromptRequest,
GetPromptRequestParam, GetPromptResult, Implementation, InitializeResult,
ClientRequest, CreateMessageRequestParams, CreateMessageResult, GetPromptRequest,
GetPromptRequestParams, GetPromptResult, Implementation, InitializeResult,
ListPromptsRequest, ListPromptsResult, ListResourcesRequest, ListResourcesResult,
ListToolsRequest, ListToolsResult, LoggingMessageNotification,
LoggingMessageNotificationMethod, PaginatedRequestParam, ProgressNotification,
ProgressNotificationMethod, ProtocolVersion, ReadResourceRequest, ReadResourceRequestParam,
ReadResourceResult, RequestId, Role, SamplingMessage, ServerNotification, ServerResult,
LoggingMessageNotificationMethod, PaginatedRequestParams, ProgressNotification,
ProgressNotificationMethod, ProtocolVersion, ReadResourceRequest,
ReadResourceRequestParams, ReadResourceResult, RequestId, Role, SamplingMessage,
ServerNotification, ServerResult,
},
service::{
ClientInitializeError, PeerRequestOptions, RequestContext, RequestHandle, RunningService,
@@ -214,7 +215,7 @@ impl ClientHandler for GooseClient {
async fn create_message(
&self,
params: CreateMessageRequestParam,
params: CreateMessageRequestParams,
context: RequestContext<RoleClient>,
) -> Result<CreateMessageResult, ErrorData> {
let provider = self
@@ -295,7 +296,7 @@ impl ClientHandler for GooseClient {
async fn create_elicitation(
&self,
request: CreateElicitationRequestParam,
request: CreateElicitationRequestParams,
_context: RequestContext<RoleClient>,
) -> Result<CreateElicitationResult, ErrorData> {
let schema_value = serde_json::to_value(&request.requested_schema).map_err(|e| {
@@ -328,6 +329,7 @@ impl ClientHandler for GooseClient {
fn get_info(&self) -> ClientInfo {
ClientInfo {
meta: None,
protocol_version: ProtocolVersion::V_2025_03_26,
capabilities: ClientCapabilities::builder()
.enable_sampling()
@@ -469,7 +471,7 @@ impl McpClientTrait for McpClient {
.send_request_with_session(
session_id,
ClientRequest::ListResourcesRequest(ListResourcesRequest {
params: Some(PaginatedRequestParam { cursor }),
params: Some(PaginatedRequestParams { meta: None, cursor }),
method: Default::default(),
extensions: Default::default(),
}),
@@ -493,7 +495,8 @@ impl McpClientTrait for McpClient {
.send_request_with_session(
session_id,
ClientRequest::ReadResourceRequest(ReadResourceRequest {
params: ReadResourceRequestParam {
params: ReadResourceRequestParams {
meta: None,
uri: uri.to_string(),
},
method: Default::default(),
@@ -519,7 +522,7 @@ impl McpClientTrait for McpClient {
.send_request_with_session(
session_id,
ClientRequest::ListToolsRequest(ListToolsRequest {
params: Some(PaginatedRequestParam { cursor }),
params: Some(PaginatedRequestParams { meta: None, cursor }),
method: Default::default(),
extensions: Default::default(),
}),
@@ -541,7 +544,8 @@ impl McpClientTrait for McpClient {
cancel_token: CancellationToken,
) -> Result<CallToolResult, Error> {
let request = ClientRequest::CallToolRequest(CallToolRequest {
params: CallToolRequestParam {
params: CallToolRequestParams {
meta: None,
task: None,
name: name.to_string().into(),
arguments,
@@ -570,7 +574,7 @@ impl McpClientTrait for McpClient {
.send_request_with_session(
session_id,
ClientRequest::ListPromptsRequest(ListPromptsRequest {
params: Some(PaginatedRequestParam { cursor }),
params: Some(PaginatedRequestParams { meta: None, cursor }),
method: Default::default(),
extensions: Default::default(),
}),
@@ -599,7 +603,8 @@ impl McpClientTrait for McpClient {
.send_request_with_session(
session_id,
ClientRequest::GetPromptRequest(GetPromptRequest {
params: GetPromptRequestParam {
params: GetPromptRequestParams {
meta: None,
name: name.to_string(),
arguments,
},
@@ -695,7 +700,10 @@ mod tests {
fn list_resources_request(extensions: Extensions) -> ClientRequest {
ClientRequest::ListResourcesRequest(ListResourcesRequest {
params: Some(PaginatedRequestParam { cursor: None }),
params: Some(PaginatedRequestParams {
meta: None,
cursor: None,
}),
method: Default::default(),
extensions,
})
@@ -703,7 +711,8 @@ mod tests {
fn read_resource_request(extensions: Extensions) -> ClientRequest {
ClientRequest::ReadResourceRequest(ReadResourceRequest {
params: ReadResourceRequestParam {
params: ReadResourceRequestParams {
meta: None,
uri: "test://resource".to_string(),
},
method: Default::default(),
@@ -713,7 +722,10 @@ mod tests {
fn list_tools_request(extensions: Extensions) -> ClientRequest {
ClientRequest::ListToolsRequest(ListToolsRequest {
params: Some(PaginatedRequestParam { cursor: None }),
params: Some(PaginatedRequestParams {
meta: None,
cursor: None,
}),
method: Default::default(),
extensions,
})
@@ -721,7 +733,8 @@ mod tests {
fn call_tool_request(extensions: Extensions) -> ClientRequest {
ClientRequest::CallToolRequest(CallToolRequest {
params: CallToolRequestParam {
params: CallToolRequestParams {
meta: None,
task: None,
name: "tool".to_string().into(),
arguments: None,
@@ -733,7 +746,10 @@ mod tests {
fn list_prompts_request(extensions: Extensions) -> ClientRequest {
ClientRequest::ListPromptsRequest(ListPromptsRequest {
params: Some(PaginatedRequestParam { cursor: None }),
params: Some(PaginatedRequestParams {
meta: None,
cursor: None,
}),
method: Default::default(),
extensions,
})
@@ -741,7 +757,8 @@ mod tests {
fn get_prompt_request(extensions: Extensions) -> ClientRequest {
ClientRequest::GetPromptRequest(GetPromptRequest {
params: GetPromptRequestParam {
params: GetPromptRequestParams {
meta: None,
name: "prompt".to_string(),
arguments: None,
},
+5 -3
View File
@@ -50,7 +50,7 @@ pub async fn inject_moim(
#[cfg(test)]
mod tests {
use super::*;
use rmcp::model::CallToolRequestParam;
use rmcp::model::CallToolRequestParams;
use std::path::PathBuf;
#[tokio::test]
@@ -116,7 +116,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: None,
@@ -135,7 +136,8 @@ mod tests {
.with_text("I need to search more")
.with_tool_request(
"search_2",
Ok(CallToolRequestParam {
Ok(CallToolRequestParams {
meta: None,
task: None,
name: "search".into(),
arguments: None,