@@ -22,6 +22,7 @@ use serde::{Deserialize, Serialize};
22
22
use tokio:: task;
23
23
24
24
#[ derive( Deserialize , JsonSchema ) ]
25
+ #[ serde( rename_all = "lowercase" , untagged) ]
25
26
pub enum DscOperation {
26
27
Get ,
27
28
Set ,
@@ -30,13 +31,19 @@ pub enum DscOperation {
30
31
}
31
32
32
33
#[ derive( Serialize , JsonSchema ) ]
34
+ #[ serde( untagged) ]
33
35
pub enum ResourceOperationResult {
34
36
GetResult ( GetResult ) ,
35
37
SetResult ( SetResult ) ,
36
38
TestResult ( TestResult ) ,
37
39
ExportResult ( ExportResult ) ,
38
40
}
39
41
42
+ #[ derive( Serialize , JsonSchema ) ]
43
+ pub struct InvokeDscResourceResponse {
44
+ pub result : ResourceOperationResult ,
45
+ }
46
+
40
47
#[ derive( Deserialize , JsonSchema ) ]
41
48
pub struct InvokeDscResourceRequest {
42
49
#[ schemars( description = "The operation to perform on the DSC resource" ) ]
@@ -59,7 +66,7 @@ impl McpServer {
59
66
open_world_hint = true ,
60
67
)
61
68
) ]
62
- pub async fn invoke_dsc_resource ( & self , Parameters ( InvokeDscResourceRequest { operation, resource_type, properties_json } ) : Parameters < InvokeDscResourceRequest > ) -> Result < Json < ResourceOperationResult > , McpError > {
69
+ pub async fn invoke_dsc_resource ( & self , Parameters ( InvokeDscResourceRequest { operation, resource_type, properties_json } ) : Parameters < InvokeDscResourceRequest > ) -> Result < Json < InvokeDscResourceResponse > , McpError > {
63
70
let result = task:: spawn_blocking ( move || {
64
71
let mut dsc = DscManager :: new ( ) ;
65
72
let Some ( resource) = dsc. find_resource ( & resource_type, None ) else {
@@ -97,6 +104,6 @@ impl McpServer {
97
104
}
98
105
} ) . await . map_err ( |e| McpError :: internal_error ( e. to_string ( ) , None ) ) ??;
99
106
100
- Ok ( Json ( result) )
107
+ Ok ( Json ( InvokeDscResourceResponse { result } ) )
101
108
}
102
109
}
0 commit comments