locus_mcp/tools/
store_context.rs1use 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}