Skip to content

Commit fd91eaf

Browse files
committed
Add JetBrains Copilot plugin support
1 parent e7ee191 commit fd91eaf

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

cmd/thv/app/client.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ Valid clients:
4444
- amp-windsurf: Sourcegraph Amp extension for Windsurf
4545
- claude-code: Claude Code CLI
4646
- cline: Cline extension for VS Code
47+
- copilot-jetbrains: GitHub Copilot plugin for JetBrains IDEs
4748
- cursor: Cursor editor
4849
- roo-code: Roo Code extension for VS Code
4950
- vscode: Visual Studio Code
@@ -67,6 +68,7 @@ Valid clients:
6768
- amp-windsurf: Sourcegraph Amp extension for Windsurf
6869
- claude-code: Claude Code CLI
6970
- cline: Cline extension for VS Code
71+
- copilot-jetbrains: GitHub Copilot plugin for JetBrains IDEs
7072
- cursor: Cursor editor
7173
- roo-code: Roo Code extension for VS Code
7274
- vscode: Visual Studio Code
@@ -166,12 +168,13 @@ func clientRegisterCmdFunc(cmd *cobra.Command, args []string) error {
166168
// Validate the client type
167169
switch clientType {
168170
case "roo-code", "cline", "cursor", "claude-code", "vscode-insider", "vscode", "windsurf", "windsurf-jetbrains",
169-
"amp-cli", "amp-vscode", "amp-vscode-insider", "amp-cursor", "amp-windsurf":
171+
"amp-cli", "amp-vscode", "amp-vscode-insider", "amp-cursor", "amp-windsurf", "copilot-jetbrains":
170172
// Valid client type
171173
default:
172174
return fmt.Errorf(
173175
"invalid client type: %s (valid types: roo-code, cline, cursor, claude-code, vscode, vscode-insider, "+
174-
"windsurf, windsurf-jetbrains, amp-cli, amp-vscode, amp-vscode-insider, amp-cursor, amp-windsurf)",
176+
"windsurf, windsurf-jetbrains, amp-cli, amp-vscode, amp-vscode-insider, amp-cursor, amp-windsurf, "+
177+
"copilot-jetbrains)",
175178
clientType)
176179
}
177180

@@ -198,12 +201,13 @@ func clientRemoveCmdFunc(cmd *cobra.Command, args []string) error {
198201
// Validate the client type
199202
switch clientType {
200203
case "roo-code", "cline", "cursor", "claude-code", "vscode-insider", "vscode", "windsurf", "windsurf-jetbrains",
201-
"amp-cli", "amp-vscode", "amp-vscode-insider", "amp-cursor", "amp-windsurf":
204+
"amp-cli", "amp-vscode", "amp-vscode-insider", "amp-cursor", "amp-windsurf", "copilot-jetbrains":
202205
// Valid client type
203206
default:
204207
return fmt.Errorf(
205208
"invalid client type: %s (valid types: roo-code, cline, cursor, claude-code, vscode, vscode-insider, "+
206-
"windsurf, windsurf-jetbrains, amp-cli, amp-vscode, amp-vscode-insider, amp-cursor, amp-windsurf)",
209+
"windsurf, windsurf-jetbrains, amp-cli, amp-vscode, amp-vscode-insider, amp-cursor, amp-windsurf, "+
210+
"copilot-jetbrains)",
207211
clientType)
208212
}
209213

pkg/client/config.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ const (
5252
AmpVSCodeInsider MCPClient = "amp-vscode-insider"
5353
// AmpWindsurf represents the Sourcegraph Amp extension for Windsurf.
5454
AmpWindsurf MCPClient = "amp-windsurf"
55+
// CopilotJetBrains represents the Copilot plugin for JetBrains IDEs.
56+
CopilotJetBrains MCPClient = "copilot-jetbrains"
5557
)
5658

5759
// Extension is extension of the client config file.
@@ -326,6 +328,26 @@ var supportedClientIntegrations = []mcpClientConfig{
326328
},
327329
IsTransportTypeFieldSupported: true,
328330
},
331+
{
332+
ClientType: CopilotJetBrains,
333+
Description: "JetBrains Copilot plugin",
334+
SettingsFile: "mcp.json",
335+
RelPath: []string{
336+
"github-copilot", "intellij",
337+
},
338+
MCPServersPathPrefix: "/servers",
339+
PlatformPrefix: map[string][]string{
340+
"linux": {".config"},
341+
"darwin": {".config"},
342+
"windows": {"AppData", "Local"},
343+
},
344+
SupportedTransportTypesMap: map[types.TransportType]string{
345+
types.TransportTypeStdio: "sse",
346+
types.TransportTypeSSE: "sse",
347+
types.TransportTypeStreamableHTTP: "http",
348+
},
349+
Extension: JSON,
350+
},
329351
}
330352

331353
// ConfigFile represents a client configuration file

pkg/client/config_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ func createMockClientConfigs() []mcpClientConfig {
7575
RelPath: []string{"mock_amp_cursor"},
7676
SettingsFile: "settings.json",
7777
MCPServersPathPrefix: "/amp.mcpServers",
78+
},
79+
{
80+
ClientType: CopilotJetBrains,
81+
Description: "JetBrains Copilot plugin (Mock)",
82+
RelPath: []string{"mock_jetbrains_copilot"},
83+
SettingsFile: "mcp.json",
84+
MCPServersPathPrefix: "/servers",
7885
Extension: JSON,
7986
},
8087
}
@@ -362,6 +369,9 @@ func TestSuccessfulClientConfigOperations(t *testing.T) {
362369
case AmpWindsurf:
363370
assert.Contains(t, string(content), `"mcpServers":`,
364371
"AmpWindsurf config should contain mcpServers key")
372+
case CopilotJetBrains:
373+
assert.Contains(t, string(content), `"servers":`,
374+
"JetBrains Copilot config should contain servers key")
365375
}
366376
}
367377
})
@@ -388,7 +398,7 @@ func TestSuccessfulClientConfigOperations(t *testing.T) {
388398
assert.Contains(t, string(content), testURL,
389399
"VSCode config should contain the server URL")
390400
case Cursor, RooCode, ClaudeCode, Cline, Windsurf, WindsurfJetBrains, AmpCli,
391-
AmpVSCode, AmpCursor, AmpVSCodeInsider, AmpWindsurf:
401+
AmpVSCode, AmpCursor, AmpVSCodeInsider, AmpWindsurf, CopilotJetBrains:
392402
assert.Contains(t, string(content), testURL,
393403
"Config should contain the server URL")
394404
}

pkg/config/config_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ func TestSave(t *testing.T) {
108108
Clients: Clients{
109109
RegisteredClients: []string{
110110
"vscode", "cursor", "roo-code", "cline", "claude-code", "amp-cli", "amp-vscode", "amp-cursor",
111+
"copilot-jetbrains",
111112
},
112113
},
113114
}

0 commit comments

Comments
 (0)