From fa666cbb936291988eb0775c79814489263e232b Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Wed, 23 Apr 2025 15:02:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E4=BB=A3=E7=A0=81=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .mcp.json | 3 - .../open_ai_service/MCPClient.kt | 33 +++++++--- .../spotify_sdk/SpotifySdkService.kt | 60 ------------------- 3 files changed, 24 insertions(+), 72 deletions(-) diff --git a/.mcp.json b/.mcp.json index 88bb35fa1..4651d9677 100644 --- a/.mcp.json +++ b/.mcp.json @@ -8,9 +8,6 @@ }, "web-search": { "url": "http://mcp.ideapsound.com:8000/sse" - }, - "amap-amap-sse": { - "url": "https://mcp.amap.com/sse?key=e5fdc9605eabdeb5626f18f5721f343d" } } } \ No newline at end of file diff --git a/local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/MCPClient.kt b/local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/MCPClient.kt index bcb8e1287..b43013e0a 100644 --- a/local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/MCPClient.kt +++ b/local_plugins/open_ai_service/android/src/main/kotlin/com/yunqiinnovation/open_ai_service/MCPClient.kt @@ -166,23 +166,38 @@ class MCPSubClient( * 处理工具列表 */ private fun processToolsList(toolsResult: ListToolsResult?) { - 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() - val inputRequired = tool.inputSchema?.required ?: emptyList() - + try { + // 将MCP工具列表转换为ToolUnion列表 + tools = toolsResult?.tools?.filter { tool -> config.tools == null || config.tools.contains(tool.name) == true + }?.map { tool -> + // 转换为ToolUnion格式 + ToolUnion.ofTool( + Tool.builder() + .name(tool.name) + .description(tool.description ?: "") + .inputSchema( + Tool.InputSchema.builder() + .type(JsonValue.from(tool.inputSchema?.type ?: "object")) + .properties(if (tool.inputSchema?.properties is JsonObject) + (tool.inputSchema.properties as JsonObject).toJsonValue() + else JsonValue.from(emptyMap())) + .putAdditionalProperty("required", JsonValue.from(tool.inputSchema?.required ?: emptyList())) + .build() + ) + .build() + ) + } ?: emptyList() + // 更新工具映射 toolMapping.clear() tools.forEach { toolUnion -> val tool = toolUnion.tool().get() toolMapping[tool.name()] = toolUnion } - + // 更新工具Map列表 updateToolMaps() - + Log.d(TAG, "成功处理 ${tools.size} 个工具") } catch (e: Exception) { Log.e(TAG, "处理工具列表失败: ${e.message}", e) diff --git a/local_plugins/spotify_sdk/android/src/main/kotlin/de/minimalme/spotify_sdk/SpotifySdkService.kt b/local_plugins/spotify_sdk/android/src/main/kotlin/de/minimalme/spotify_sdk/SpotifySdkService.kt index 7449a4b03..9c97e7545 100644 --- a/local_plugins/spotify_sdk/android/src/main/kotlin/de/minimalme/spotify_sdk/SpotifySdkService.kt +++ b/local_plugins/spotify_sdk/android/src/main/kotlin/de/minimalme/spotify_sdk/SpotifySdkService.kt @@ -44,66 +44,6 @@ class SpotifySdkService(private val context: Context? = null) { private val channelName = "spotify_sdk" private val loggingTag = "spotify_sdk" - // event channels - private var playerContextChannel : EventChannel? = null - private var playerStateChannel : EventChannel? = null - private var capabilitiesChannel : EventChannel? = null - private var userStatusChannel : EventChannel? = null - private var connectionStatusChannel : EventChannel? = null - - private val playerContextSubscription = "player_context_subscription" - private val playerStateSubscription = "player_state_subscription" - private val capabilitiesSubscription = "capabilities_subscription" - private val userStatusSubscription = "user_status_subscription" - private val connectionStatusSubscription = "connection_status_subscription" - - //connecting - private val methodConnectToSpotify = "connectToSpotify" - private val methodGetAccessToken = "getAccessToken" - private val methodDisconnectFromSpotify = "disconnectFromSpotify" - - // connectApi - private val methodSwitchToLocalDevice = "switchToLocalDevice" - - //playerApi - private val methodGetCrossfadeState = "getCrossfadeState" - private val methodGetPlayerState = "getPlayerState" - private val methodPlay = "play" - private val methodPause = "pause" - private val methodQueueTrack = "queueTrack" - private val methodResume = "resume" - private val methodSeekToRelativePosition = "seekToRelativePosition" - private val methodSetPodcastPlaybackSpeed = "setPodcastPlaybackSpeed" - private val methodSkipNext = "skipNext" - private val methodSkipPrevious = "skipPrevious" - private val methodSkipToIndex = "skipToIndex" - private val methodSeekTo = "seekTo" - private val methodToggleRepeat = "toggleRepeat" - private val methodToggleShuffle = "toggleShuffle" - private val methodSetShuffle = "setShuffle" - private val methodSetRepeatMode = "setRepeatMode" - - //userApi - private val methodAddToLibrary = "addToLibrary" - private val methodRemoveFromLibrary = "removeFromLibrary" - private val methodGetCapabilities = "getCapabilities" - private val methodGetLibraryState = "getLibraryState" - - //imagesApi - private val methodGetImage = "getImage" - - private val paramClientId = "clientId" - private val paramRedirectUrl = "redirectUrl" - private val paramScope = "scope" - private val paramSpotifyUri = "spotifyUri" - private val paramImageUri = "imageUri" - private val paramImageDimension = "imageDimension" - private val paramPositionedMilliseconds = "positionedMilliseconds" - private val paramRelativeMilliseconds = "relativeMilliseconds" - private val paramPodcastPlaybackSpeed = "podcastPlaybackSpeed" - private val paramTrackIndex = "trackIndex" - private val paramRepeatMode = "repeatMode" - private val paramShuffle = "shuffle" private val errorConnecting = "errorConnecting" private val errorDisconnecting = "errorDisconnecting"