rust-sdk/crates/rmcp/tests/test_list_tools_result.rs
Dale Seo 254f04a764
fix: strip and validate tool outputSchema and inputSchema (#860)
* fix: remove unnecessary fields from tools' outputSchema

* fix: validate input schema root type per MCP spec
2026-06-02 12:01:33 -04:00

48 lines
1.5 KiB
Rust

#![cfg(all(feature = "server", feature = "macros", not(feature = "local")))]
use rmcp::{
Json,
handler::server::wrapper::Parameters,
model::{ListToolsResult, NumberOrString, ServerJsonRpcMessage, ServerResult},
};
/// Parameters for adding two numbers.
#[derive(Debug, serde::Deserialize, schemars::JsonSchema)]
struct AddRequest {
/// The left-hand number.
a: f64,
/// The right-hand number.
b: f64,
}
/// Result of adding two numbers.
#[derive(Debug, serde::Serialize, schemars::JsonSchema)]
struct AddResult {
/// The sum of the two numbers.
sum: f64,
}
/// Add two numbers.
#[rmcp::tool]
fn add(Parameters(AddRequest { a, b }): Parameters<AddRequest>) -> Json<AddResult> {
Json(AddResult { sum: a + b })
}
#[test]
fn list_tools_result_matches_expected_json() {
let expected_json = std::fs::read("tests/test_list_tools_result/list_tools_result.json")
.expect("missing expected list tools result JSON fixture");
let expected: serde_json::Value =
serde_json::from_slice(&expected_json).expect("invalid expected JSON fixture");
assert_eq!(add(Parameters(AddRequest { a: 1.0, b: 2.0 })).0.sum, 3.0);
let result = ListToolsResult::with_all_items(vec![add_tool_attr()]);
let response = ServerJsonRpcMessage::response(
ServerResult::ListToolsResult(result),
NumberOrString::Number(2),
);
let actual = serde_json::to_value(response).expect("failed to serialize list tools response");
assert_eq!(actual, expected);
}