fix(schema): strip contentEncoding from MCP tool schemas for Gemini compatibility

The existing normalizeToolArgSchemas only applies to omo plugin tools
(via tool-registry.ts), but MCP server tool schemas bypass this
sanitization entirely. MCP schemas with contentEncoding/contentMediaType
cause Gemini 400 errors.

Add sanitizeJsonSchema() to strip unsupported keywords from MCP tool
inputSchema before serialization in formatMcpCapabilities.

Fixes #2200
Supersedes #2666
This commit is contained in:
YeonGyu-Kim
2026-03-24 16:24:44 +09:00
parent 03dc903e8e
commit 5e856b4fde
2 changed files with 36 additions and 1 deletions
+2 -1
View File
@@ -7,6 +7,7 @@ import { getAllSkills, extractSkillTemplate, clearSkillCache } from "../../featu
import { injectGitMasterConfig } from "../../features/opencode-skill-loader/skill-content"
import type { SkillMcpManager, SkillMcpClientInfo, SkillMcpServerContext } from "../../features/skill-mcp-manager"
import type { Tool, Resource, Prompt } from "@modelcontextprotocol/sdk/types.js"
import { sanitizeJsonSchema } from "../../plugin/normalize-tool-arg-schemas"
import { discoverCommandsSync } from "../slashcommand/command-discovery"
import type { CommandInfo } from "../slashcommand/types"
import { formatLoadedCommand } from "../slashcommand/command-output-formatter"
@@ -155,7 +156,7 @@ async function formatMcpCapabilities(
sections.push("")
sections.push("**inputSchema:**")
sections.push("```json")
sections.push(JSON.stringify(t.inputSchema, null, 2))
sections.push(JSON.stringify(sanitizeJsonSchema(t.inputSchema), null, 2))
sections.push("```")
sections.push("")
}