Skip to main content

agentic_evolve_mcp/tools/
evolve_pattern_get.rs

1//! Tool: evolve_pattern_get — Get a pattern by ID.
2
3use std::sync::Arc;
4use tokio::sync::Mutex;
5
6use serde::Deserialize;
7use serde_json::{json, Value};
8
9use crate::session::SessionManager;
10use crate::types::{McpError, McpResult, ToolCallResult, ToolDefinition};
11
12#[derive(Debug, Deserialize)]
13struct GetParams {
14    pattern_id: String,
15}
16
17/// Return the tool definition for evolve_pattern_get.
18pub fn definition() -> ToolDefinition {
19    ToolDefinition {
20        name: "evolve_pattern_get".to_string(),
21        description: Some("Get a pattern by ID".to_string()),
22        input_schema: json!({
23            "type": "object",
24            "properties": {
25                "pattern_id": {
26                    "type": "string",
27                    "description": "The unique pattern identifier"
28                },
29                "include_content": {
30                    "type": "boolean",
31                    "default": false,
32                    "description": "Include full template content in response"
33                },
34                "intent": {
35                    "type": "string",
36                    "enum": ["exists", "ids", "summary", "full"],
37                    "description": "Response detail level"
38                },
39                "since": {
40                    "type": "integer",
41                    "description": "Only return data changed after this Unix timestamp"
42                },
43                "token_budget": {
44                    "type": "integer",
45                    "description": "Maximum token budget for the response"
46                },
47                "max_results": {
48                    "type": "integer",
49                    "default": 10,
50                    "description": "Maximum number of results to return"
51                },
52                "cursor": {
53                    "type": "string",
54                    "description": "Pagination cursor from a previous response"
55                }
56            },
57            "required": ["pattern_id"]
58        }),
59    }
60}
61
62/// Execute the evolve_pattern_get tool.
63pub async fn execute(
64    args: Value,
65    session: &Arc<Mutex<SessionManager>>,
66) -> McpResult<ToolCallResult> {
67    let params: GetParams =
68        serde_json::from_value(args).map_err(|e| McpError::InvalidParams(e.to_string()))?;
69
70    let session = session.lock().await;
71    let pattern = session
72        .get_pattern(&params.pattern_id)
73        .map_err(|e| McpError::AgenticEvolve(e.to_string()))?;
74
75    Ok(ToolCallResult::json(&json!({
76        "pattern_id": pattern.id.as_str(),
77        "name": pattern.name,
78        "domain": pattern.domain,
79        "language": pattern.language.as_str(),
80        "template": pattern.template,
81        "variables": pattern.variables,
82        "confidence": pattern.confidence,
83        "usage_count": pattern.usage_count,
84        "success_count": pattern.success_count,
85        "success_rate": pattern.success_rate(),
86        "version": pattern.version,
87        "tags": pattern.tags,
88        "created_at": pattern.created_at,
89        "updated_at": pattern.updated_at,
90        "last_used": pattern.last_used,
91        "signature": {
92            "name": pattern.signature.name,
93            "params": pattern.signature.params,
94            "return_type": pattern.signature.return_type,
95            "language": pattern.signature.language.as_str(),
96            "is_async": pattern.signature.is_async
97        }
98    })))
99}