chore: upgrade to rmcp 0.14.0 (#6674)
This commit is contained in:
@@ -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(),
|
||||
|
||||
@@ -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!({})),
|
||||
|
||||
@@ -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!({
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user