Skip to content

Commit e87742b

Browse files
leigaollaileni-awsaws-toolkit-automationmanodnyab
authored
feat(amazonq): mcp support (#5770)
* add mcp msgs * add mcp * add summary * use any for optvalue * format code * fix: Add mcp: true in the aws Client capabilities when init LSP. (#3) * fix: Add mcp: true in the aws Client capabilities when init LSP. * fix: moving mcp config under q * pr comment * delete not reqd changes --------- Co-authored-by: Laxman Reddy <[email protected]> Co-authored-by: aws-toolkit-automation <[email protected]> Co-authored-by: Manodnya Bhoite <[email protected]> Co-authored-by: manodnyab <[email protected]>
1 parent d12b75a commit e87742b

File tree

8 files changed

+71
-6
lines changed

8 files changed

+71
-6
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/BrowserConnector.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.Encry
7272
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.EncryptedQuickActionChatParams
7373
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GET_SERIALIZED_CHAT_REQUEST_METHOD
7474
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResponse
75+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LIST_MCP_SERVERS_REQUEST_METHOD
76+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.MCP_SERVER_CLICK_REQUEST_METHOD
7577
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OPEN_SETTINGS
7678
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OPEN_WORKSPACE_SETTINGS_KEY
7779
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.OpenSettingsNotification
@@ -461,6 +463,28 @@ class BrowserConnector(
461463
TELEMETRY_EVENT -> {
462464
handleChat(AmazonQChatServer.telemetryEvent, node)
463465
}
466+
LIST_MCP_SERVERS_REQUEST_METHOD -> {
467+
handleChat(AmazonQChatServer.listMcpServers, node)
468+
.whenComplete { response, _ ->
469+
browser.postChat(
470+
FlareUiMessage(
471+
command = LIST_MCP_SERVERS_REQUEST_METHOD,
472+
params = response
473+
)
474+
)
475+
}
476+
}
477+
MCP_SERVER_CLICK_REQUEST_METHOD -> {
478+
handleChat(AmazonQChatServer.mcpServerClick, node)
479+
.whenComplete { response, _ ->
480+
browser.postChat(
481+
FlareUiMessage(
482+
command = MCP_SERVER_CLICK_REQUEST_METHOD,
483+
params = response
484+
)
485+
)
486+
}
487+
}
464488
}
465489
}
466490

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQChatServer.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package software.aws.toolkits.jetbrains.services.amazonq.lsp
55

66
import org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethodProvider
7+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.LSPAny
78
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ButtonClickParams
89
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ButtonClickResult
910
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.CHAT_BUTTON_CLICK
@@ -37,8 +38,10 @@ import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSe
3738
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GetSerializedChatResult
3839
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InfoLinkClickParams
3940
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.InsertToCursorPositionParams
41+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LIST_MCP_SERVERS_REQUEST_METHOD
4042
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.LinkClickParams
4143
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ListConversationsParams
44+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.MCP_SERVER_CLICK_REQUEST_METHOD
4245
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PROMPT_INPUT_OPTIONS_CHANGE
4346
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.PromptInputOptionChangeParams
4447
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_CHAT_COMMAND_PROMPT
@@ -174,6 +177,18 @@ object AmazonQChatServer : JsonRpcMethodProvider {
174177
Any::class.java
175178
)
176179

180+
val listMcpServers = JsonRpcRequest(
181+
LIST_MCP_SERVERS_REQUEST_METHOD,
182+
LSPAny::class.java,
183+
LSPAny::class.java
184+
)
185+
186+
val mcpServerClick = JsonRpcRequest(
187+
MCP_SERVER_CLICK_REQUEST_METHOD,
188+
LSPAny::class.java,
189+
LSPAny::class.java
190+
)
191+
177192
val conversationClick = JsonRpcRequest(
178193
CHAT_CONVERSATION_CLICK,
179194
ConversationClickParams::class.java,

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/artifacts/ArtifactHelper.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ import java.util.concurrent.atomic.AtomicInteger
2929
class ArtifactHelper(private val lspArtifactsPath: Path = DEFAULT_ARTIFACT_PATH, private val maxDownloadAttempts: Int = MAX_DOWNLOAD_ATTEMPTS) {
3030

3131
companion object {
32-
private val DEFAULT_ARTIFACT_PATH = getToolkitsCommonCacheRoot().resolve(Paths.get("aws", "toolkits", "language-servers", "AmazonQ-JetBrains-temp"))
32+
private val DEFAULT_ARTIFACT_PATH = getToolkitsCommonCacheRoot().resolve(
33+
Paths.get("aws", "toolkits", "language-servers", "AmazonQ-JetBrains-temp")
34+
)
3335
private val logger = getLogger<ArtifactHelper>()
3436
private const val MAX_DOWNLOAD_ATTEMPTS = 3
3537
}

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/flareChat/AwsServerCapabilitiesProvider.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class AwsServerCapabilitiesProvider {
3333
)
3434
),
3535
history = true,
36-
export = true
36+
export = true,
37+
mcpServers = true
3738
)
3839
}
3940
}
@@ -46,6 +47,7 @@ data class ChatOptions(
4647
val quickActions: QuickActions,
4748
val history: Boolean,
4849
val export: Boolean,
50+
val mcpServers: Boolean,
4951
)
5052

5153
data class QuickActions(

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/ExtendedClientMetadata.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ data class AwsClientCapabilities(
2323

2424
data class DeveloperProfiles(
2525
val developerProfiles: Boolean,
26+
val mcp: Boolean,
2627
)
2728

2829
data class WindowSettings(
@@ -60,7 +61,8 @@ fun createExtendedClientMetadata(project: Project): ExtendedClientMetadata {
6061
),
6162
awsClientCapabilities = AwsClientCapabilities(
6263
q = DeveloperProfiles(
63-
developerProfiles = true
64+
developerProfiles = true,
65+
mcp = true
6466
),
6567
window = WindowSettings(
6668
showSaveFileDialog = true

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/ChatMessage.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@ data class ChatMessage(
1919
val codeReference: List<ReferenceTrackerInformation>? = null,
2020
val fileList: FileList? = null,
2121
val contextList: FileList? = null,
22+
val summary: Summary? = null,
23+
)
24+
25+
data class Summary(
26+
val content: ChatMessage? = null,
27+
val collapsedContent: List<ChatMessage>? = null,
2228
)
2329

2430
data class MessageHeader(

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/Conversations.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,24 @@ data class TextBasedFilterOption(
1313
val type: String,
1414
val placeholder: String?,
1515
val icon: IconType?,
16+
val title: String?,
17+
val description: String?,
1618
)
1719

1820
data class FilterOption(
1921
val id: String,
22+
val placeholder: String? = null,
23+
val title: String? = null,
24+
val description: String? = null,
25+
val icon: IconType? = null,
2026
val type: String,
21-
val placeholder: String?,
22-
val icon: IconType?,
23-
)
27+
val options: List<Option>? = null,
28+
) {
29+
data class Option(
30+
val value: String,
31+
val label: String,
32+
)
33+
}
2434

2535
data class Action(
2636
val id: String,

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/model/aws/chat/FlareChatCommands.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,7 @@ const val SHOW_SAVE_FILE_DIALOG_REQUEST_METHOD = "aws/showSaveFileDialog"
5151
const val STOP_CHAT_RESPONSE = "stopChatResponse"
5252
const val SEND_TO_PROMPT = "sendToPrompt"
5353
const val TELEMETRY_EVENT = "telemetry/event"
54+
55+
// https://github.com/aws/language-server-runtimes/blob/112feba70219a98a12f13727d67c540205fa9c9f/types/chat.ts#L32
56+
const val LIST_MCP_SERVERS_REQUEST_METHOD = "aws/chat/listMcpServers"
57+
const val MCP_SERVER_CLICK_REQUEST_METHOD = "aws/chat/mcpServerClick"

0 commit comments

Comments
 (0)