Browse Source

补充 mcp服务工具过滤逻辑代码

newdev_shunjiawei
liwei1dao 1 year ago
parent
commit
630fc96717
  1. 18
      local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/MCPClient.kt

18
local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/MCPClient.kt

@ -71,13 +71,13 @@ interface FunctionHandler {
*/
class MCPSubClient(
private val serverId: String,
serverUrl: String,
private val config: ServerConfig,
private val customClient: HttpClient? = null
) : AutoCloseable {
private val TAG = "MCPSubClient[$serverId]"
// 保存服务器URL
private val serverUrl: String = serverUrl
private val serverUrl: String = config.url
init {
Log.d(TAG, "MCPSubClient初始化,URL: $serverUrl")
@ -90,7 +90,6 @@ class MCPSubClient(
version = "1.0.0"
)
)
// 服务器提供的工具列表
private var tools: List<ToolUnion> = emptyList()
@ -166,7 +165,8 @@ class MCPSubClient(
* 处理工具列表
*/
private fun processToolsList(toolsResult: ListToolsResult?) {
tools = toolsResult?.tools?.map { tool ->
tools = toolsResult?.tools?.filter { tool -> config.tools == null || config.tools.contains(tool.name) == true
}?.map { tool ->
// 确保输入模式有效
val inputType = tool.inputSchema?.type ?: "object"
val inputProperties = tool.inputSchema?.properties ?: emptyMap()
@ -486,7 +486,7 @@ class MCPClient(private val context: Context? = null) : AutoCloseable {
// 清除现有连接
closeAllConnections()
val serverMap = mutableMapOf<String, String>()
val serverMap = mutableMapOf<String, ServerConfig>()
var configLoaded = false
// 尝试解析传入的JSON配置
@ -506,7 +506,7 @@ class MCPClient(private val context: Context? = null) : AutoCloseable {
configMap.forEach { (serverId, serverConfig) ->
val url = serverConfig.url
if (!url.isNullOrEmpty()) {
serverMap[serverId] = url
serverMap[serverId] = serverConfig
Log.d(TAG, "从配置中添加服务器 [$serverId]: $url")
}
}
@ -525,10 +525,10 @@ class MCPClient(private val context: Context? = null) : AutoCloseable {
// 创建并连接所有子客户端
val connectionResults = mutableMapOf<String, Boolean>()
for ((serverId, serverUrl) in serverMap) {
for ((serverId, serverConfig) in serverMap) {
try {
Log.d(TAG, "为服务器 [$serverId],[$serverUrl] 创建子客户端")
val subClient = MCPSubClient(serverId, serverUrl, sharedHttpClient)
Log.d(TAG, "为服务器 [$serverId],[${serverConfig.url}] 创建子客户端")
val subClient = MCPSubClient(serverId, serverConfig, sharedHttpClient)
val connected = subClient.connect()
if (connected) {

Loading…
Cancel
Save