Skip to main content

agentic_memory_mcp/tools/
session_start.rs

1//! Tool: session_start — Begin a new interaction session.
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)]
13#[allow(dead_code)]
14struct StartParams {
15    session_id: Option<u32>,
16    metadata: Option<Value>,
17}
18
19/// Return the tool definition for session_start.
20pub 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
34/// Execute the session_start tool.
35pub 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}