agentic_memory_mcp/tools/
session_start.rs1use 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)]
13#[allow(dead_code)]
14struct StartParams {
15 session_id: Option<u32>,
16 metadata: Option<Value>,
17}
18
19pub fn definition() -> ToolDefinition {
21 ToolDefinition {
22 name: "session_start".to_string(),
23 description: Some("Start a new interaction session".to_string()),
24 input_schema: json!({
25 "type": "object",
26 "properties": {
27 "session_id": { "type": "integer", "description": "Optional explicit session ID" },
28 "metadata": { "type": "object", "description": "Optional session metadata" }
29 }
30 }),
31 }
32}
33
34pub async fn execute(
36 args: Value,
37 session: &Arc<Mutex<SessionManager>>,
38) -> McpResult<ToolCallResult> {
39 let params: StartParams =
40 serde_json::from_value(args).map_err(|e| McpError::InvalidParams(e.to_string()))?;
41
42 let mut session = session.lock().await;
43 let session_id = session.start_session(params.session_id)?;
44
45 Ok(ToolCallResult::json(&json!({
46 "session_id": session_id,
47 "message": format!("Session {session_id} started"),
48 })))
49}