Skip to main content

locus_mcp/tools/
store_context.rs

1use serde_json::json;
2
3use crate::{
4    SttpMcpServer, StoreContextRequest, infer_store_error_code, schema_first_guidance_payload,
5    strict_typed_ir_profile_name, to_json_string,
6};
7
8pub(crate) async fn execute(server: &SttpMcpServer, request: StoreContextRequest) -> String {
9    let result = server
10        .store_context
11        .store_async(&request.node, &request.session_id)
12        .await;
13
14    if !result.valid {
15        let message = result.validation_error.unwrap_or_else(|| {
16            "store_context rejected the payload under strict typed IR ingest policy".to_string()
17        });
18        let code = infer_store_error_code(&message);
19
20        return to_json_string(json!({
21            "node_id": result.node_id,
22            "psi": result.psi,
23            "valid": result.valid,
24            "validation_error": message,
25            "profile_policy": strict_typed_ir_profile_name(),
26            "error": {
27                "code": code,
28                "message": message,
29                "model_guidance": schema_first_guidance_payload(
30                    "Inspect schema and strict ingest policy before retrying store_context."
31                )
32            }
33        }));
34    }
35
36    to_json_string(json!({
37        "node_id": result.node_id,
38        "psi": result.psi,
39        "valid": result.valid,
40        "validation_error": result.validation_error,
41        "profile_policy": strict_typed_ir_profile_name(),
42    }))
43}