@@ -69,12 +69,22 @@ Describe 'Tests for MCP server' {
69
69
params = @ {}
70
70
}
71
71
72
- $response = Send-McpRequest - request $mcpRequest
72
+ $tools = @ {
73
+ ' list_dsc_resources' = $false
74
+ ' show_dsc_resource' = $false
75
+ }
73
76
77
+ $response = Send-McpRequest - request $mcpRequest
74
78
$response.id | Should - Be 2
75
- $response.result.tools.Count | Should - Be 2
76
- $response.result.tools [0 ].name | Should - BeIn @ (' list_adapted_resources' , ' list_dsc_resources' )
77
- $response.result.tools [1 ].name | Should - BeIn @ (' list_adapted_resources' , ' list_dsc_resources' )
79
+ $response.result.tools.Count | Should - Be $tools.Count
80
+ foreach ($tool in $response.result.tools ) {
81
+ $tools.ContainsKey ($tool.name ) | Should - Be $true
82
+ $tools [$tool.name ] = $true
83
+ $tool.description | Should -Not - BeNullOrEmpty
84
+ }
85
+ foreach ($tool in $tools.GetEnumerator ()) {
86
+ $tool.Value | Should - Be $true - Because " Tool '$ ( $tool.Key ) ' was not found in the list of tools"
87
+ }
78
88
}
79
89
80
90
It ' Calling list_dsc_resources works' {
@@ -89,24 +99,24 @@ Describe 'Tests for MCP server' {
89
99
}
90
100
91
101
$response = Send-McpRequest - request $mcpRequest
92
- $response.id | Should - Be 3
102
+ $response.id | Should - BeGreaterOrEqual 3
93
103
$resources = dsc resource list | ConvertFrom-Json - Depth 20 | Select-Object type, kind, description - Unique
94
104
$response.result.structuredContent.resources.Count | Should - Be $resources.Count
95
105
for ($i = 0 ; $i -lt $resources.Count ; $i ++ ) {
96
- ($response.result.structuredContent.resources [$i ].psobject.properties | Measure-Object ).Count | Should - Be 3
106
+ ($response.result.structuredContent.resources [$i ].psobject.properties | Measure-Object ).Count | Should - BeGreaterOrEqual 3
97
107
$response.result.structuredContent.resources [$i ].type | Should - BeExactly $resources [$i ].type - Because ($response.result.structuredContent | ConvertTo-Json - Depth 20 | Out-String )
98
108
$response.result.structuredContent.resources [$i ].kind | Should - BeExactly $resources [$i ].kind - Because ($response.result.structuredContent | ConvertTo-Json - Depth 20 | Out-String )
99
109
$response.result.structuredContent.resources [$i ].description | Should - BeExactly $resources [$i ].description - Because ($response.result.structuredContent | ConvertTo-Json - Depth 20 | Out-String )
100
110
}
101
111
}
102
112
103
- It ' Calling list_adapted_resources works' {
113
+ It ' Calling list_dsc_resources with adapter works' {
104
114
$mcpRequest = @ {
105
115
jsonrpc = " 2.0"
106
116
id = 4
107
117
method = " tools/call"
108
118
params = @ {
109
- name = " list_adapted_resources "
119
+ name = " list_dsc_resources "
110
120
arguments = @ {
111
121
adapter = " Microsoft.DSC/PowerShell"
112
122
}
@@ -125,21 +135,76 @@ Describe 'Tests for MCP server' {
125
135
}
126
136
}
127
137
128
- It ' Calling list_adapted_resources with no matches works' {
138
+ It ' Calling list_dsc_resources with <adapter> returns error' - TestCases @ (
139
+ @ {" adapter" = " Non.Existent/Adapter" },
140
+ @ {" adapter" = " Microsoft.DSC.Debug/Echo" }
141
+ ) {
142
+ param ($adapter )
143
+
129
144
$mcpRequest = @ {
130
145
jsonrpc = " 2.0"
131
146
id = 5
132
147
method = " tools/call"
133
148
params = @ {
134
- name = " list_adapted_resources "
149
+ name = " list_dsc_resources "
135
150
arguments = @ {
136
- adapter = " Non.Existent/Adapter "
151
+ adapter = $adapter
137
152
}
138
153
}
139
154
}
140
155
141
156
$response = Send-McpRequest - request $mcpRequest
142
157
$response.id | Should - Be 5
143
- $response.result.structuredContent.resources.Count | Should - Be 0
158
+ $response.error.code | Should - Be -32602
159
+ $response.error.message | Should -Not - BeNullOrEmpty
160
+ }
161
+
162
+ It ' Calling show_dsc_resource works' {
163
+ $resource = (dsc resource list | Select-Object - First 1 | ConvertFrom-Json - Depth 20 )
164
+
165
+ $mcpRequest = @ {
166
+ jsonrpc = " 2.0"
167
+ id = 6
168
+ method = " tools/call"
169
+ params = @ {
170
+ name = " show_dsc_resource"
171
+ arguments = @ {
172
+ type = $resource.type
173
+ }
174
+ }
175
+ }
176
+
177
+ $response = Send-McpRequest - request $mcpRequest
178
+ $response.id | Should - Be 6
179
+ ($response.result.structuredContent.psobject.properties | Measure-Object ).Count | Should - BeGreaterOrEqual 4
180
+ $because = ($response.result.structuredContent | ConvertTo-Json - Depth 20 | Out-String )
181
+ $response.result.structuredContent.type | Should - BeExactly $resource.type - Because $because
182
+ $response.result.structuredContent.kind | Should - BeExactly $resource.kind - Because $because
183
+ $response.result.structuredContent.version | Should - Be $resource.version - Because $because
184
+ $response.result.structuredContent.capabilities | Should - Be $resource.capabilities - Because $because
185
+ $response.result.structuredContent.description | Should - Be $resource.description - Because $because
186
+ $schema = (dsc resource schema -- resource $resource.type | ConvertFrom-Json - Depth 20 )
187
+ $response.result.structuredContent.schema .' $id' | Should - Be $schema .' $id' - Because $because
188
+ $response.result.structuredContent.schema.type | Should - Be $schema.type - Because $because
189
+ $response.result.structuredContent.schema.properties.keys | Should - Be $schema.properties.keys - Because $because
190
+ }
191
+
192
+ It ' Calling show_dsc_resource with non-existent resource returns error' {
193
+ $mcpRequest = @ {
194
+ jsonrpc = " 2.0"
195
+ id = 7
196
+ method = " tools/call"
197
+ params = @ {
198
+ name = " show_dsc_resource"
199
+ arguments = @ {
200
+ type = " Non.Existent/Resource"
201
+ }
202
+ }
203
+ }
204
+
205
+ $response = Send-McpRequest - request $mcpRequest
206
+ $response.id | Should - Be 7
207
+ $response.error.code | Should - Be -32602
208
+ $response.error.message | Should -Not - BeNullOrEmpty
144
209
}
145
210
}
0 commit comments