use rmcp::model::{CallToolResult, ContentBlock}; pub fn tool_ok(value: &T) -> CallToolResult { match serde_json::to_string_pretty(value) { Ok(text) => CallToolResult::success(vec![ContentBlock::text(text)]), Err(error) => tool_message(format!("序列化结果失败: {error}")), } } pub fn tool_done() -> CallToolResult { tool_ok(&serde_json::json!({ "ok": true })) } pub fn tool_message(message: impl Into) -> CallToolResult { CallToolResult::error(vec![ContentBlock::text(message.into())]) } pub fn tool_error(error: impl std::fmt::Display) -> CallToolResult { tool_message(error.to_string()) } pub fn write_denied() -> CallToolResult { tool_message("当前访问密钥只有只读权限,无法执行写操作") }