Skip to content

Commit 8207d25

Browse files
Add MCP marketplace view and submission card components
1 parent a4f3ce9 commit 8207d25

File tree

6 files changed

+427
-214
lines changed

6 files changed

+427
-214
lines changed

src/core/webview/ClineProvider.ts

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import { getUri } from "./getUri"
6262
import { telemetryService } from "../../services/telemetry/TelemetryService"
6363
import { TelemetrySetting } from "../../shared/TelemetrySetting"
6464
import { McpMarketplaceCatalog, McpServer, McpDownloadResponse } from "../../shared/mcp"
65+
import { DIFF_VIEW_URI_SCHEME } from "../../integrations/editor/DiffViewProvider"
6566

6667
/**
6768
* https://github.com/microsoft/vscode-webview-ui-toolkit-samples/blob/main/default/weather-webview/src/providers/WeatherViewProvider.ts
@@ -1870,6 +1871,27 @@ export class ClineProvider implements vscode.WebviewViewProvider {
18701871
await this.postStateToWebview()
18711872
break
18721873
}
1874+
1875+
case "fetchMcpMarketplace": {
1876+
await this.fetchMcpMarketplace(message.bool)
1877+
break
1878+
}
1879+
case "downloadMcp": {
1880+
if (message.mcpId) {
1881+
await this.downloadMcp(message.mcpId)
1882+
}
1883+
break
1884+
}
1885+
case "silentlyRefreshMcpMarketplace": {
1886+
await this.silentlyRefreshMcpMarketplace()
1887+
break
1888+
}
1889+
case "openMcpMarketplaceServerDetails": {
1890+
if (message.mcpId) {
1891+
await this.openMcpMarketplaceServerDetails(message.mcpId)
1892+
}
1893+
break
1894+
}
18731895
}
18741896
},
18751897
null,
@@ -2786,8 +2808,6 @@ export class ClineProvider implements vscode.WebviewViewProvider {
27862808
throw new Error("Invalid response from MCP marketplace API")
27872809
}
27882810

2789-
console.log("[downloadMcp] Response from download API", { response })
2790-
27912811
const mcpDetails = response.data
27922812

27932813
// Validate required fields
@@ -2804,10 +2824,8 @@ export class ClineProvider implements vscode.WebviewViewProvider {
28042824
mcpDownloadDetails: mcpDetails,
28052825
})
28062826

2807-
// Create task with context from README
2827+
// Initialize task with setup instructions
28082828
const task = `Set up the MCP server from ${mcpDetails.githubUrl}. Use "${mcpDetails.mcpId}" as the server name in cline_mcp_settings.json. Here is the project's README to help you get started:\n\n${mcpDetails.readmeContent}\n${mcpDetails.llmsInstallationContent}`
2809-
2810-
// Initialize task and show chat view
28112829
await this.initClineWithTask(task)
28122830
await this.postMessageToWebview({
28132831
type: "action",
@@ -2839,4 +2857,34 @@ export class ClineProvider implements vscode.WebviewViewProvider {
28392857
})
28402858
}
28412859
}
2860+
2861+
private async openMcpMarketplaceServerDetails(mcpId: string) {
2862+
const response = await fetch(`https://api.cline.bot/v1/mcp/marketplace/item?mcpId=${mcpId}`)
2863+
const details: McpDownloadResponse = await response.json()
2864+
2865+
if (details.readmeContent) {
2866+
// Disable markdown preview markers
2867+
const config = vscode.workspace.getConfiguration("markdown")
2868+
await config.update("preview.markEditorSelection", false, true)
2869+
2870+
// Create URI with base64 encoded markdown content
2871+
const uri = vscode.Uri.parse(
2872+
`${DIFF_VIEW_URI_SCHEME}:${details.name} README?${Buffer.from(details.readmeContent).toString("base64")}`,
2873+
)
2874+
2875+
// close existing
2876+
const tabs = vscode.window.tabGroups.all
2877+
.flatMap((tg) => tg.tabs)
2878+
.filter((tab) => tab.label && tab.label.includes("README") && tab.label.includes("Preview"))
2879+
for (const tab of tabs) {
2880+
await vscode.window.tabGroups.close(tab)
2881+
}
2882+
2883+
// Show only the preview
2884+
await vscode.commands.executeCommand("markdown.showPreview", uri, {
2885+
sideBySide: true,
2886+
preserveFocus: true,
2887+
})
2888+
}
2889+
}
28422890
}

webview-ui/src/components/mcp/McpMarketplaceView.tsx

Lines changed: 0 additions & 208 deletions
This file was deleted.

webview-ui/src/components/mcp/McpView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { Tab, TabContent, TabHeader } from "../common/Tab"
2020
import McpToolRow from "./McpToolRow"
2121
import McpResourceRow from "./McpResourceRow"
2222
import McpEnabledToggle from "./McpEnabledToggle"
23-
import McpMarketplaceView from "./McpMarketplaceView"
23+
import McpMarketplaceView from "./marketplace/McpMarketplaceView"
2424

2525
type McpViewProps = {
2626
onDone: () => void

0 commit comments

Comments
 (0)