Skip to content

Commit 59061be

Browse files
authored
1 parent 0881121 commit 59061be

File tree

3 files changed

+37
-2
lines changed

3 files changed

+37
-2
lines changed

packages/core/src/mcpresource.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import type {
1616
SecretDetectionOptions,
1717
WorkspaceFile,
1818
} from "./types.js";
19+
import type { McpClientManager } from "./mcpclient.js";
1920

2021
export interface ResourceContent {
2122
uri: string; // The URI of the resource
@@ -37,8 +38,39 @@ export interface Resource {
3738

3839
export class ResourceManager extends EventTarget {
3940
private _resources: Record<string, Resource> = {};
41+
private _mcpClientManager?: McpClientManager; // Will be set after construction
42+
43+
setMcpClientManager(mcpClientManager: McpClientManager) {
44+
this._mcpClientManager = mcpClientManager;
45+
}
46+
4047
async resources(): Promise<ResourceReference[]> {
41-
return Object.values(this._resources).map((r) => r.reference);
48+
const localResources = Object.values(this._resources).map((r) => r.reference);
49+
50+
// Also get resources from all connected MCP servers
51+
const mcpResources: ResourceReference[] = [];
52+
if (this._mcpClientManager) {
53+
try {
54+
const clients = this._mcpClientManager.clients || [];
55+
for (const client of clients) {
56+
try {
57+
const serverResources = await client.listResources();
58+
mcpResources.push(...serverResources.map((r: any) => ({
59+
name: r.name,
60+
description: r.description,
61+
uri: r.uri,
62+
mimeType: r.mimeType,
63+
} satisfies ResourceReference)));
64+
} catch (error) {
65+
dbg(`error listing resources from MCP server ${client.config?.id}: ${error instanceof Error ? error.message : String(error)}`);
66+
}
67+
}
68+
} catch (error) {
69+
dbg(`error accessing MCP clients: ${error instanceof Error ? error.message : String(error)}`);
70+
}
71+
}
72+
73+
return [...localResources, ...mcpResources];
4274
}
4375
async readResource(uri: string): Promise<ResourceContents | undefined> {
4476
dbg(`reading resource: ${uri}`);

packages/core/src/testhost.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import type {
3232
import { defaultModelConfigurations } from "./llms.js";
3333
import type { CancellationToken } from "./cancellation.js";
3434
import { createNodePath } from "./path.js";
35-
import type { McpClientManager } from "./mcpclient.js";
35+
import { McpClientManager } from "./mcpclient.js";
3636
import { ResourceManager } from "./mcpresource.js";
3737
import { execSync, spawn } from "node:child_process";
3838
import { shellQuote } from "./shell.js";
@@ -74,7 +74,9 @@ export class TestHost implements RuntimeHost {
7474
}
7575

7676
constructor() {
77+
this.mcp = new McpClientManager();
7778
this.resources = new ResourceManager();
79+
this.resources.setMcpClientManager(this.mcp);
7880
}
7981

8082
async pullModel(

packages/runtime/src/nodehost.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ export class NodeHost extends EventTarget implements RuntimeHost {
151151
);
152152
this.mcp = new McpClientManager();
153153
this.resources = new ResourceManager();
154+
this.resources.setMcpClientManager(this.mcp);
154155
this.workspace = createWorkspaceFileSystem();
155156
}
156157

0 commit comments

Comments
 (0)