lean_ctx/tools/registered/
ctx_response.rs1use rmcp::model::Tool;
2use rmcp::ErrorData;
3use serde_json::{json, Map, Value};
4
5use crate::server::tool_trait::{get_str, McpTool, ToolContext, ToolOutput};
6use crate::tool_defs::tool_def;
7
8pub struct CtxResponseTool;
9
10impl McpTool for CtxResponseTool {
11 fn name(&self) -> &'static str {
12 "ctx_response"
13 }
14
15 fn tool_def(&self) -> Tool {
16 tool_def(
17 "ctx_response",
18 "Compress LLM response text (structural de-duplication).",
19 json!({
20 "type": "object",
21 "properties": {
22 "text": { "type": "string" }
23 },
24 "required": ["text"]
25 }),
26 )
27 }
28
29 fn handle(
30 &self,
31 args: &Map<String, Value>,
32 _ctx: &ToolContext,
33 ) -> Result<ToolOutput, ErrorData> {
34 let text = get_str(args, "text")
35 .ok_or_else(|| ErrorData::invalid_params("text is required", None))?;
36 let output = crate::tools::ctx_response::handle(&text, crate::tools::CrpMode::effective());
37 Ok(ToolOutput::simple(output))
38 }
39}