Skip to content

Commit 5294e78

Browse files
Remove showMcpView message (RooCodeInc#3171)
* refactor to not pass message for showMcpView * changeset
1 parent d97424f commit 5294e78

File tree

7 files changed

+105
-58
lines changed

7 files changed

+105
-58
lines changed

.changeset/sweet-toes-bake.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"claude-dev": minor
3+
---
4+
5+
Refactor to not pass a message for showing the MCP View from the servers modal

src/core/controller/index.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -457,10 +457,6 @@ export class Controller {
457457
await this.fetchUserCreditsData()
458458
break
459459
}
460-
case "showMcpView": {
461-
await this.postMessageToWebview({ type: "action", action: "mcpButtonClicked", tab: message.tab || undefined })
462-
break
463-
}
464460
case "openMcpSettings": {
465461
const mcpSettingsFilePath = await this.mcpHub?.getMcpSettingsFilePath()
466462
if (mcpSettingsFilePath) {

src/shared/WebviewMessage.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ export interface WebviewMessage {
5151
| "downloadMcp"
5252
| "silentlyRefreshMcpMarketplace"
5353
| "searchCommits"
54-
| "showMcpView"
5554
| "fetchLatestMcpServersFromHub"
5655
| "telemetrySetting"
5756
| "openSettings"

webview-ui/src/App.tsx

Lines changed: 55 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -10,60 +10,67 @@ import { ExtensionStateContextProvider, useExtensionState } from "./context/Exte
1010
import { FirebaseAuthProvider } from "./context/FirebaseAuthContext"
1111
import { vscode } from "./utils/vscode"
1212
import McpView from "./components/mcp/configuration/McpConfigurationView"
13-
import { McpViewTab } from "@shared/mcp"
1413

1514
const AppContent = () => {
16-
const { didHydrateState, showWelcome, shouldShowAnnouncement, telemetrySetting, vscMachineId } = useExtensionState()
15+
const { didHydrateState, showWelcome, shouldShowAnnouncement, showMcp, mcpTab } = useExtensionState()
1716
const [showSettings, setShowSettings] = useState(false)
1817
const hideSettings = useCallback(() => setShowSettings(false), [])
1918
const [showHistory, setShowHistory] = useState(false)
20-
const [showMcp, setShowMcp] = useState(false)
2119
const [showAccount, setShowAccount] = useState(false)
2220
const [showAnnouncement, setShowAnnouncement] = useState(false)
23-
const [mcpTab, setMcpTab] = useState<McpViewTab | undefined>(undefined)
2421

25-
const handleMessage = useCallback((e: MessageEvent) => {
26-
const message: ExtensionMessage = e.data
27-
switch (message.type) {
28-
case "action":
29-
switch (message.action!) {
30-
case "settingsButtonClicked":
31-
setShowSettings(true)
32-
setShowHistory(false)
33-
setShowMcp(false)
34-
setShowAccount(false)
35-
break
36-
case "historyButtonClicked":
37-
setShowSettings(false)
38-
setShowHistory(true)
39-
setShowMcp(false)
40-
setShowAccount(false)
41-
break
42-
case "mcpButtonClicked":
43-
setShowSettings(false)
44-
setShowHistory(false)
45-
if (message.tab) {
46-
setMcpTab(message.tab)
47-
}
48-
setShowMcp(true)
49-
setShowAccount(false)
50-
break
51-
case "accountButtonClicked":
52-
setShowSettings(false)
53-
setShowHistory(false)
54-
setShowMcp(false)
55-
setShowAccount(true)
56-
break
57-
case "chatButtonClicked":
58-
setShowSettings(false)
59-
setShowHistory(false)
60-
setShowMcp(false)
61-
setShowAccount(false)
62-
break
63-
}
64-
break
65-
}
66-
}, [])
22+
const { setShowMcp, setMcpTab } = useExtensionState()
23+
24+
const closeMcpView = useCallback(() => {
25+
setShowMcp(false)
26+
setMcpTab(undefined)
27+
}, [setShowMcp, setMcpTab])
28+
29+
const handleMessage = useCallback(
30+
(e: MessageEvent) => {
31+
const message: ExtensionMessage = e.data
32+
switch (message.type) {
33+
case "action":
34+
switch (message.action!) {
35+
case "settingsButtonClicked":
36+
setShowSettings(true)
37+
setShowHistory(false)
38+
closeMcpView()
39+
setShowAccount(false)
40+
break
41+
case "historyButtonClicked":
42+
setShowSettings(false)
43+
setShowHistory(true)
44+
closeMcpView()
45+
setShowAccount(false)
46+
break
47+
case "mcpButtonClicked":
48+
setShowSettings(false)
49+
setShowHistory(false)
50+
if (message.tab) {
51+
setMcpTab(message.tab)
52+
}
53+
setShowMcp(true)
54+
setShowAccount(false)
55+
break
56+
case "accountButtonClicked":
57+
setShowSettings(false)
58+
setShowHistory(false)
59+
closeMcpView()
60+
setShowAccount(true)
61+
break
62+
case "chatButtonClicked":
63+
setShowSettings(false)
64+
setShowHistory(false)
65+
closeMcpView()
66+
setShowAccount(false)
67+
break
68+
}
69+
break
70+
}
71+
},
72+
[setShowMcp, setMcpTab, closeMcpView],
73+
)
6774

6875
useEvent("message", handleMessage)
6976

@@ -95,13 +102,13 @@ const AppContent = () => {
95102
<>
96103
{showSettings && <SettingsView onDone={hideSettings} />}
97104
{showHistory && <HistoryView onDone={() => setShowHistory(false)} />}
98-
{showMcp && <McpView initialTab={mcpTab} onDone={() => setShowMcp(false)} />}
105+
{showMcp && <McpView initialTab={mcpTab} onDone={closeMcpView} />}
99106
{showAccount && <AccountView onDone={() => setShowAccount(false)} />}
100107
{/* Do not conditionally load ChatView, it's expensive and there's state we don't want to lose (user input, disableInput, askResponse promise, etc.) */}
101108
<ChatView
102109
showHistoryView={() => {
103110
setShowSettings(false)
104-
setShowMcp(false)
111+
closeMcpView()
105112
setShowAccount(false)
106113
setShowHistory(true)
107114
}}

webview-ui/src/components/chat/ServersToggleModal.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React, { useRef, useState, useEffect } from "react"
22
import { useClickAway, useWindowSize } from "react-use"
33
import { useExtensionState } from "@/context/ExtensionStateContext"
4+
import { useNavigator } from "@/hooks/useNavigator"
45
import { CODE_BLOCK_BG_COLOR } from "@/components/common/CodeBlock"
56
import ServersToggleList from "@/components/mcp/configuration/tabs/installed/ServersToggleList"
67
import { vscode } from "@/utils/vscode"
@@ -9,6 +10,7 @@ import Tooltip from "@/components/common/Tooltip"
910

1011
const ServersToggleModal: React.FC = () => {
1112
const { mcpServers } = useExtensionState()
13+
const { navigateToMcp } = useNavigator()
1214
const [isVisible, setIsVisible] = useState(false)
1315
const buttonRef = useRef<HTMLDivElement>(null)
1416
const modalRef = useRef<HTMLDivElement>(null)
@@ -81,11 +83,8 @@ const ServersToggleModal: React.FC = () => {
8183
<VSCodeButton
8284
appearance="icon"
8385
onClick={() => {
84-
vscode.postMessage({
85-
type: "showMcpView",
86-
tab: "installed",
87-
})
8886
setIsVisible(false)
87+
navigateToMcp("installed")
8988
}}>
9089
<span className="codicon codicon-gear text-[10px]"></span>
9190
</VSCodeButton>

webview-ui/src/context/ExtensionStateContext.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
requestyDefaultModelInfo,
1212
} from "../../../src/shared/api"
1313
import { findLastIndex } from "@shared/array"
14-
import { McpMarketplaceCatalog, McpServer } from "../../../src/shared/mcp"
14+
import { McpMarketplaceCatalog, McpServer, McpViewTab } from "../../../src/shared/mcp"
1515
import { convertTextMateToHljs } from "../utils/textMateToHljs"
1616
import { vscode } from "../utils/vscode"
1717
import { DEFAULT_BROWSER_SETTINGS } from "@shared/BrowserSettings"
@@ -29,19 +29,32 @@ interface ExtensionStateContextType extends ExtensionState {
2929
mcpMarketplaceCatalog: McpMarketplaceCatalog
3030
filePaths: string[]
3131
totalTasksSize: number | null
32+
// View state
33+
showMcp: boolean
34+
mcpTab?: McpViewTab
35+
36+
// Setters
3237
setApiConfiguration: (config: ApiConfiguration) => void
3338
setCustomInstructions: (value?: string) => void
3439
setTelemetrySetting: (value: TelemetrySetting) => void
3540
setShowAnnouncement: (value: boolean) => void
3641
setPlanActSeparateModelsSetting: (value: boolean) => void
3742
setMcpServers: (value: McpServer[]) => void
43+
44+
// Navigation
45+
setShowMcp: (value: boolean) => void
46+
setMcpTab: (tab?: McpViewTab) => void
3847
}
3948

4049
const ExtensionStateContext = createContext<ExtensionStateContextType | undefined>(undefined)
4150

4251
export const ExtensionStateContextProvider: React.FC<{
4352
children: React.ReactNode
4453
}> = ({ children }) => {
54+
// UI view state
55+
const [showMcp, setShowMcp] = useState(false)
56+
const [mcpTab, setMcpTab] = useState<McpViewTab | undefined>(undefined)
57+
4558
const [state, setState] = useState<ExtensionState>({
4659
version: "",
4760
clineMessages: [],
@@ -200,6 +213,8 @@ export const ExtensionStateContextProvider: React.FC<{
200213
mcpMarketplaceCatalog,
201214
filePaths,
202215
totalTasksSize,
216+
showMcp,
217+
mcpTab,
203218
globalClineRulesToggles: state.globalClineRulesToggles || {},
204219
localClineRulesToggles: state.localClineRulesToggles || {},
205220
setApiConfiguration: (value) =>
@@ -228,6 +243,8 @@ export const ExtensionStateContextProvider: React.FC<{
228243
shouldShowAnnouncement: value,
229244
})),
230245
setMcpServers: (mcpServers: McpServer[]) => setMcpServers(mcpServers),
246+
setShowMcp,
247+
setMcpTab,
231248
}
232249

233250
return <ExtensionStateContext.Provider value={contextValue}>{children}</ExtensionStateContext.Provider>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { useExtensionState } from "../context/ExtensionStateContext"
2+
import { McpViewTab } from "@shared/mcp"
3+
4+
/**
5+
* Hook for navigating between different views in the application.
6+
*/
7+
export const useNavigator = () => {
8+
const { setShowMcp, setMcpTab } = useExtensionState()
9+
10+
/**
11+
* Navigate to the MCP view
12+
* @param tab Optional tab to show in the MCP view
13+
*/
14+
const navigateToMcp = (tab?: McpViewTab) => {
15+
if (tab) {
16+
setMcpTab(tab)
17+
}
18+
setShowMcp(true)
19+
}
20+
21+
return {
22+
navigateToMcp,
23+
}
24+
}

0 commit comments

Comments
 (0)