Fix MCP error: Structured content does not match the tool's output schema: data must have required property

This commit is contained in:
Prokopov Egor
2026-01-15 11:35:44 +04:00
parent 44685efc26
commit c297b3ee38
7 changed files with 28 additions and 27 deletions

View File

@@ -259,7 +259,7 @@ class AnalysisToolset : McpToolset {
val filePath: String,
val errors: List<FileProblem>,
@property:McpDescription(Constants.TIMED_OUT_DESCRIPTION)
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val timedOut: Boolean? = false,
)
@@ -271,17 +271,17 @@ class AnalysisToolset : McpToolset {
@Serializable
data class ProjectProblem(
val message: String,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val kind: String? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val group: String? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val description: String? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val file: String? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val line: Int? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val column: Int? = null,
)
@@ -292,14 +292,14 @@ class AnalysisToolset : McpToolset {
@property:McpDescription("A list of problems encountered during the build. May be empty if the build was successful.")
val problems: List<ProjectProblem>,
@property:McpDescription(Constants.TIMED_OUT_DESCRIPTION)
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val timedOut: Boolean? = false,
)
@Serializable
data class ModuleInfo(
val name: String,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val type: String? = null,
)

View File

@@ -79,7 +79,7 @@ class CodeInsightToolset : McpToolset {
@OptIn(ExperimentalSerializationApi::class)
@Serializable
data class SymbolInfoResult(
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val symbolInfo: SymbolInfo? = null,
val documentation: String
)

View File

@@ -153,22 +153,22 @@ class ExecutionToolset : McpToolset {
@Serializable
data class RunConfigurationInfo(
val name: String,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val description: String? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val commandLine: String? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val workingDirectory: String? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val environment: Map<String, String>? = null
)
@Serializable
data class RunConfigurationResult(
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val exitCode: Int? = null,
@property:McpDescription(Constants.TIMED_OUT_DESCRIPTION)
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val timedOut: Boolean? = false,
val output: String
)

View File

@@ -71,7 +71,7 @@ class FileToolset : McpToolset {
val tree: String,
val errors: List<String>,
@property:McpDescription(Constants.TIMED_OUT_DESCRIPTION)
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val listingTimedOut: Boolean? = false,
)
@@ -185,10 +185,10 @@ class FileToolset : McpToolset {
@Serializable
data class FilesListResult(
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val probablyHasMoreMatchingFiles: Boolean = false,
@property:McpDescription(Constants.TIMED_OUT_DESCRIPTION)
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val timedOut: Boolean? = false,
val files: List<String>
)

View File

@@ -275,10 +275,10 @@ class TextToolset : McpToolset {
@Serializable
data class UsageInfoResult(
val entries: List<UsageInfoEntry>,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val probablyHasMoreMatchingEntries: Boolean = false,
@property:McpDescription(Constants.TIMED_OUT_DESCRIPTION)
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val timedOut: Boolean? = false
)
}

View File

@@ -72,9 +72,10 @@ class TerminalToolset : McpToolset {
@Serializable
class CommandExecutionResult(
@property:McpDescription(Constants.TIMED_OUT_DESCRIPTION)
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val is_timed_out: Boolean? = false,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val command_exit_code: Int? = null,
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val command_output: String)
}

View File

@@ -13,14 +13,14 @@ import kotlin.math.min
@OptIn(ExperimentalSerializationApi::class)
@Serializable
data class SymbolInfo(
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val name: String? = null,
val declarationText: String,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val declarationFile: String? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val declarationLine: Int? = null,
@EncodeDefault(mode = EncodeDefault.Mode.NEVER)
@EncodeDefault(mode = EncodeDefault.Mode.ALWAYS)
val language: String? = null,
)