1
1
package cc.unitmesh.devti.mcp.editor
2
2
3
3
import cc.unitmesh.devti.mcp.client.CustomMcpServerManager
4
+ import cc.unitmesh.devti.mcp.client.MockDataGenerator
5
+ import cc.unitmesh.devti.provider.local.JsonLanguageField
4
6
import com.intellij.openapi.project.Project
5
7
import com.intellij.openapi.ui.DialogWrapper
6
8
import com.intellij.ui.JBColor
@@ -10,6 +12,8 @@ import com.intellij.ui.dsl.builder.panel
10
12
import com.intellij.util.ui.JBUI
11
13
import com.intellij.util.ui.UIUtil
12
14
import io.modelcontextprotocol.kotlin.sdk.Tool
15
+ import kotlinx.serialization.encodeToString
16
+ import kotlinx.serialization.json.Json
13
17
import kotlinx.serialization.json.JsonElement
14
18
import java.awt.BorderLayout
15
19
import java.awt.Dimension
@@ -28,6 +32,8 @@ class McpToolDetailPanel(
28
32
29
33
private val MAX_TOOL_CARD_HEIGHT = 180
30
34
private val TOOL_CARD_WIDTH = 300
35
+
36
+ private var jsonLanguageField: JsonLanguageField ? = null
31
37
32
38
init {
33
39
buildCardUI()
@@ -80,6 +86,8 @@ class McpToolDetailPanel(
80
86
add(footerPanel, BorderLayout .SOUTH )
81
87
}
82
88
89
+ private val json = Json { prettyPrint = true }
90
+
83
91
private fun showToolDetails () {
84
92
val dialog = object : DialogWrapper (project) {
85
93
init {
@@ -88,6 +96,16 @@ class McpToolDetailPanel(
88
96
}
89
97
90
98
override fun createCenterPanel (): JComponent {
99
+ val mockData = MockDataGenerator .generateMockData(tool.inputSchema)
100
+ val prettyJson = json.encodeToString(mockData)
101
+
102
+ jsonLanguageField = JsonLanguageField (
103
+ project,
104
+ prettyJson,
105
+ " Enter parameters as JSON" ,
106
+ " parameters.json"
107
+ )
108
+
91
109
return panel {
92
110
row {
93
111
label(tool.name).applyToComponent {
@@ -123,7 +141,19 @@ class McpToolDetailPanel(
123
141
}
124
142
}
125
143
}
126
- }.withPreferredSize(400 , 200 )
144
+ row {
145
+ label(" Edit Parameters" ).applyToComponent {
146
+ font = JBUI .Fonts .label(14.0f ).asBold()
147
+ }
148
+ }
149
+ row {
150
+ cell(jsonLanguageField!! )
151
+ .resizableColumn()
152
+ .applyToComponent {
153
+ preferredSize = Dimension (550 , 200 )
154
+ }
155
+ }
156
+ }.withPreferredSize(600 , 600 )
127
157
}
128
158
129
159
override fun createSouthPanel (): JComponent {
@@ -148,7 +178,9 @@ class McpToolDetailPanel(
148
178
}
149
179
150
180
fun onExecute (serverName : String , tool : Tool ) {
151
- val result = mcpServerManager.execute(project, tool, " {}" )
181
+ // Use the content from the jsonLanguageField
182
+ val jsonContent = jsonLanguageField?.text ? : " {}"
183
+ val result = mcpServerManager.execute(project, tool, jsonContent)
152
184
JOptionPane .showMessageDialog(
153
185
this ,
154
186
result,
0 commit comments