summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2026-02-03 12:22:00 -0600
committerGitHub <[email protected]>2026-02-03 12:22:00 -0600
commitb7b734f51f8369ac34a5edb12d26d11309f1fc07 (patch)
treed40162403f27141e581642e2ffb98ff07b6b15ae /packages
parentdcff5b6596cfe94135a2bd59406e874194177fe2 (diff)
downloadopencode-b7b734f51f8369ac34a5edb12d26d11309f1fc07.tar.gz
opencode-b7b734f51f8369ac34a5edb12d26d11309f1fc07.zip
fix: ensure mcp tools are sanitized (#11984)
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/provider/transform.ts5
-rw-r--r--packages/opencode/src/session/prompt.ts4
2 files changed, 6 insertions, 3 deletions
diff --git a/packages/opencode/src/provider/transform.ts b/packages/opencode/src/provider/transform.ts
index 2879f7eda..6833cd0c0 100644
--- a/packages/opencode/src/provider/transform.ts
+++ b/packages/opencode/src/provider/transform.ts
@@ -1,5 +1,6 @@
import type { APICallError, ModelMessage } from "ai"
import { mergeDeep, unique } from "remeda"
+import type { JSONSchema7 } from "@ai-sdk/provider"
import type { JSONSchema } from "zod/v4/core"
import type { Provider } from "./provider"
import type { ModelsDev } from "./models"
@@ -719,7 +720,7 @@ export namespace ProviderTransform {
return standardLimit
}
- export function schema(model: Provider.Model, schema: JSONSchema.BaseSchema) {
+ export function schema(model: Provider.Model, schema: JSONSchema.BaseSchema | JSONSchema7): JSONSchema7 {
/*
if (["openai", "azure"].includes(providerID)) {
if (schema.type === "object" && schema.properties) {
@@ -793,7 +794,7 @@ export namespace ProviderTransform {
schema = sanitizeGemini(schema)
}
- return schema
+ return schema as JSONSchema7
}
export function error(providerID: string, error: APICallError) {
diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
index e0861c4df..b85a7c336 100644
--- a/packages/opencode/src/session/prompt.ts
+++ b/packages/opencode/src/session/prompt.ts
@@ -9,7 +9,7 @@ import { SessionRevert } from "./revert"
import { Session } from "."
import { Agent } from "../agent/agent"
import { Provider } from "../provider/provider"
-import { type Tool as AITool, tool, jsonSchema, type ToolCallOptions } from "ai"
+import { type Tool as AITool, tool, jsonSchema, type ToolCallOptions, asSchema } from "ai"
import { SessionCompaction } from "./compaction"
import { Instance } from "../project/instance"
import { Bus } from "../bus"
@@ -738,6 +738,8 @@ export namespace SessionPrompt {
const execute = item.execute
if (!execute) continue
+ const transformed = ProviderTransform.schema(input.model, asSchema(item.inputSchema).jsonSchema)
+ item.inputSchema = jsonSchema(transformed)
// Wrap execute to add plugin hooks and format output
item.execute = async (args, opts) => {
const ctx = context(args, opts)