Skip to content

Commit 7ce703c

Browse files
committed
feat(agent): add MCP support and improve toolchain representation
- Add isMcp flag to AgentTool for distinguishing MCP tools - Update toolchain completion to use AgentTool instead of String - Add MCP icon and update AutoDevIcons for MCP support - Modify completion provider to show appropriate icon based on isMcp flag
1 parent 161e2ae commit 7ce703c

File tree

6 files changed

+39
-10
lines changed

6 files changed

+39
-10
lines changed

core/src/main/kotlin/cc/unitmesh/devti/AutoDevIcons.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,7 @@ object AutoDevIcons {
7676

7777
@JvmField
7878
val RULE: Icon = IconLoader.getIcon("/icons/rule.svg", AutoDevIcons::class.java)
79+
80+
@JvmField
81+
val MCP: Icon = IconLoader.getIcon("/icons/mcp.svg", AutoDevIcons::class.java)
7982
}

core/src/main/kotlin/cc/unitmesh/devti/agent/tool/AgentTool.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ import cc.unitmesh.devti.agent.Tool
44
import kotlinx.serialization.Serializable
55

66
@Serializable
7-
data class AgentTool(override val name: String, override val description: String, val example: String): Tool {
7+
data class AgentTool(
8+
override val name: String, override val description: String,
9+
val example: String,
10+
val isMcp: Boolean = false
11+
) : Tool {
812
override fun toString(): String {
913
val string = if (description.isEmpty()) "" else """desc: $description"""
1014
val example = if (example.isEmpty()) "" else """example:

core/src/main/kotlin/cc/unitmesh/devti/devin/dataprovider/BuiltinCommand.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,16 @@ enum class BuiltinCommand(
177177
return providerName
178178
}
179179

180-
suspend fun allToolchains(): List<String> {
180+
suspend fun allToolchains(): List<AgentTool> {
181181
return ToolchainFunctionProvider.all().map {
182182
val toolInfo: List<AgentTool> = it.toolInfos()
183183
if (toolInfo.isNotEmpty()) {
184-
return@map toolInfo.map { it.name }
184+
return@map toolInfo
185185
}
186186

187-
it.funcNames()
187+
it.funcNames().map { funcName ->
188+
AgentTool(funcName, "", "")
189+
}
188190
}.flatten()
189191
}
190192
}

core/src/main/kotlin/cc/unitmesh/devti/mcp/client/McpFunctionProvider.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ class McpFunctionProvider : ToolchainFunctionProvider {
2323
AgentTool(
2424
it.name,
2525
it.description ?: "",
26-
"Here is command and JSON schema\n/${it.name}\n```json\n$encodeToString\n```"
26+
"Here is command and JSON schema\n/${it.name}\n```json\n$encodeToString\n```",
27+
isMcp = true
2728
)
2829
}
2930
}

core/src/main/resources/icons/mcp.svg

Lines changed: 13 additions & 0 deletions
Loading

exts/devins-lang/src/main/kotlin/cc/unitmesh/devti/language/completion/provider/ToolchainCommandCompletion.kt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package cc.unitmesh.devti.language.completion.provider
22

33
import cc.unitmesh.devti.AutoDevIcons
4+
import cc.unitmesh.devti.agent.tool.AgentTool
45
import cc.unitmesh.devti.devin.dataprovider.BuiltinCommand
56
import com.intellij.codeInsight.completion.*
7+
import com.intellij.codeInsight.lookup.LookupElement
68
import com.intellij.codeInsight.lookup.LookupElementBuilder
79
import com.intellij.util.ProcessingContext
810
import kotlinx.coroutines.runBlocking
@@ -21,9 +23,13 @@ class ToolchainCommandCompletion : CompletionProvider<CompletionParameters>() {
2123
}
2224
}
2325

24-
private fun createCommandCompletionCandidate(it: String) =
25-
PrioritizedLookupElement.withPriority(
26-
LookupElementBuilder.create(it).withIcon(AutoDevIcons.TOOLCHAIN),
27-
98.0
28-
)
26+
private fun createCommandCompletionCandidate(tool: AgentTool): LookupElement {
27+
val icon = if (tool.isMcp) {
28+
AutoDevIcons.MCP
29+
} else {
30+
AutoDevIcons.TOOLCHAIN
31+
}
32+
33+
return PrioritizedLookupElement.withPriority(LookupElementBuilder.create(tool.name).withIcon(icon), 98.0)
34+
}
2935
}

0 commit comments

Comments
 (0)