Skip to content

Commit 88da183

Browse files
committed
change tool to only return summary information
1 parent 2fd36e6 commit 88da183

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

dsc/src/mcp/list_dsc_resources.rs

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,27 @@
33

44
use crate::mcp::McpServer;
55
use dsc_lib::{
6-
DscManager,
7-
discovery::{
8-
command_discovery::ImportedManifest,
6+
DscManager, discovery::{
7+
command_discovery::ImportedManifest::Resource,
98
discovery_trait::DiscoveryKind,
10-
},
11-
progress::ProgressFormat,
9+
}, dscresources::resource_manifest::Kind, progress::ProgressFormat
1210
};
1311
use rmcp::{ErrorData as McpError, Json, tool, tool_router};
1412
use schemars::JsonSchema;
15-
use serde::{Serialize, Deserialize};
13+
use serde::Serialize;
14+
use std::collections::BTreeMap;
1615
use tokio::task;
1716

18-
#[derive(Serialize, Deserialize, JsonSchema)]
17+
#[derive(Serialize, JsonSchema)]
1918
pub struct ResourceListResult {
20-
pub resources: Vec<ImportedManifest>,
19+
pub resources: Vec<ResourceSummary>,
20+
}
21+
22+
#[derive(Serialize, JsonSchema)]
23+
pub struct ResourceSummary {
24+
pub r#type: String,
25+
pub kind: Kind,
26+
pub description: Option<String>,
2127
}
2228

2329
#[tool_router]
@@ -30,9 +36,9 @@ impl McpServer {
3036
}
3137

3238
#[tool(
33-
description = "List all DSC resources available on the local machine",
39+
description = "List summary of all DSC resources available on the local machine",
3440
annotations(
35-
title = "Enumerate all available DSC resources on the local machine",
41+
title = "Enumerate all available DSC resources on the local machine returning name, kind, and description.",
3642
read_only_hint = true,
3743
destructive_hint = false,
3844
idempotent_hint = true,
@@ -42,11 +48,18 @@ impl McpServer {
4248
async fn list_dsc_resources(&self) -> Result<Json<ResourceListResult>, McpError> {
4349
let result = task::spawn_blocking(move || {
4450
let mut dsc = DscManager::new();
45-
let mut resources = Vec::new();
51+
let mut resources = BTreeMap::<String, ResourceSummary>::new();
4652
for resource in dsc.list_available(&DiscoveryKind::Resource, "*", "", ProgressFormat::None) {
47-
resources.push(resource);
53+
if let Resource(resource) = resource {
54+
let summary = ResourceSummary {
55+
r#type: resource.type_name.clone(),
56+
kind: resource.kind.clone(),
57+
description: resource.description.clone(),
58+
};
59+
resources.insert(resource.type_name.to_lowercase(), summary);
60+
}
4861
}
49-
ResourceListResult { resources }
62+
ResourceListResult { resources: resources.into_values().collect() }
5063
}).await.map_err(|e| McpError::internal_error(e.to_string(), None))?;
5164

5265
Ok(Json(result))

dsc/tests/dsc_mcp.tests.ps1

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,13 @@ Describe 'Tests for MCP server' {
8989

9090
$response = Send-McpRequest -request $mcpRequest
9191
$response.id | Should -Be 3
92-
$resources = dsc resource list | ConvertFrom-Json -Depth 20
92+
$resources = dsc resource list | ConvertFrom-Json -Depth 20 | Select-Object type, kind, description -Unique
9393
$response.result.structuredContent.resources.Count | Should -Be $resources.Count
9494
for ($i = 0; $i -lt $resources.Count; $i++) {
95-
$response.result.structuredContent.resources[$i].Resource.type | Should -BeExactly $resources[$i].type
96-
$response.result.structuredContent.resources[$i].Resource.version | Should -BeExactly $resources[$i].version
97-
$response.result.structuredContent.resources[$i].Resource.path | Should -BeExactly $resources[$i].path
95+
($response.result.structuredContent.resources[$i].psobject.properties | Measure-Object).Count | Should -Be 3
96+
$response.result.structuredContent.resources[$i].type | Should -BeExactly $resources[$i].type -Because ($response.result.structuredContent | ConvertTo-Json -Depth 20 | Out-String)
97+
$response.result.structuredContent.resources[$i].kind | Should -BeExactly $resources[$i].kind -Because ($response.result.structuredContent | ConvertTo-Json -Depth 20 | Out-String)
98+
$response.result.structuredContent.resources[$i].description | Should -BeExactly $resources[$i].description -Because ($response.result.structuredContent | ConvertTo-Json -Depth 20 | Out-String)
9899
}
99100
}
100101
}

0 commit comments

Comments
 (0)