Skip to content

Commit 7a73f8a

Browse files
committed
feat(mcp): add JSON editor for tool parameters
#371 - Implement JsonLanguageField for editing parameters in JSON format - Add mock data generation for tool input schema - Update UI to include JSON editor in tool details dialog - Modify execution to use content from JSON editor
1 parent ec8995c commit 7a73f8a

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

core/src/main/kotlin/cc/unitmesh/devti/mcp/editor/McpToolDetailPanel.kt

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package cc.unitmesh.devti.mcp.editor
22

33
import cc.unitmesh.devti.mcp.client.CustomMcpServerManager
4+
import cc.unitmesh.devti.mcp.client.MockDataGenerator
5+
import cc.unitmesh.devti.provider.local.JsonLanguageField
46
import com.intellij.openapi.project.Project
57
import com.intellij.openapi.ui.DialogWrapper
68
import com.intellij.ui.JBColor
@@ -10,6 +12,8 @@ import com.intellij.ui.dsl.builder.panel
1012
import com.intellij.util.ui.JBUI
1113
import com.intellij.util.ui.UIUtil
1214
import io.modelcontextprotocol.kotlin.sdk.Tool
15+
import kotlinx.serialization.encodeToString
16+
import kotlinx.serialization.json.Json
1317
import kotlinx.serialization.json.JsonElement
1418
import java.awt.BorderLayout
1519
import java.awt.Dimension
@@ -28,6 +32,8 @@ class McpToolDetailPanel(
2832

2933
private val MAX_TOOL_CARD_HEIGHT = 180
3034
private val TOOL_CARD_WIDTH = 300
35+
36+
private var jsonLanguageField: JsonLanguageField? = null
3137

3238
init {
3339
buildCardUI()
@@ -80,6 +86,8 @@ class McpToolDetailPanel(
8086
add(footerPanel, BorderLayout.SOUTH)
8187
}
8288

89+
private val json = Json { prettyPrint = true }
90+
8391
private fun showToolDetails() {
8492
val dialog = object : DialogWrapper(project) {
8593
init {
@@ -88,6 +96,16 @@ class McpToolDetailPanel(
8896
}
8997

9098
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+
91109
return panel {
92110
row {
93111
label(tool.name).applyToComponent {
@@ -123,7 +141,19 @@ class McpToolDetailPanel(
123141
}
124142
}
125143
}
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)
127157
}
128158

129159
override fun createSouthPanel(): JComponent {
@@ -148,7 +178,9 @@ class McpToolDetailPanel(
148178
}
149179

150180
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)
152184
JOptionPane.showMessageDialog(
153185
this,
154186
result,

0 commit comments

Comments
 (0)