diff --git a/dist/index.d.mts b/dist/index.d.mts
index ce83b1b71..f71d85637 100644
--- a/dist/index.d.mts
+++ b/dist/index.d.mts
@@ -355,6 +355,7 @@ type OpenRouterProviderOptions = {
      * help OpenRouter to monitor and detect abuse.
      */
     user?: string;
+    strictJsonSchema?: boolean;
 };
 type OpenRouterSharedSettings = OpenRouterProviderOptions & {
     /**
diff --git a/dist/index.d.ts b/dist/index.d.ts
index ce83b1b71..f71d85637 100644
--- a/dist/index.d.ts
+++ b/dist/index.d.ts
@@ -355,6 +355,7 @@ type OpenRouterProviderOptions = {
      * help OpenRouter to monitor and detect abuse.
      */
     user?: string;
+    strictJsonSchema?: boolean;
 };
 type OpenRouterSharedSettings = OpenRouterProviderOptions & {
     /**
diff --git a/dist/index.js b/dist/index.js
index 22a7359ac..860eabb80 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -2380,7 +2380,8 @@ var OpenRouterProviderOptionsSchema = import_v43.z.object({
     // (e.g., a future format not yet in the enum) is individually dropped
     // rather than causing the entire array to fail parsing.
     reasoning_details: ReasoningDetailArraySchema.optional(),
-    annotations: import_v43.z.array(FileAnnotationSchema).optional()
+    annotations: import_v43.z.array(FileAnnotationSchema).optional(),
+    strictJsonSchema: import_v43.z.boolean().optional()
   }).optional()
 }).optional();
 
@@ -3273,7 +3274,8 @@ var OpenRouterChatLanguageModel = class {
     responseFormat,
     topK,
     tools,
-    toolChoice
+    toolChoice,
+    providerOptions
   }) {
     var _a16;
     const baseArgs = __spreadValues(__spreadValues({
@@ -3329,7 +3331,8 @@ var OpenRouterChatLanguageModel = class {
         function: {
           name: tool.name,
           description: tool.description,
-          parameters: tool.inputSchema
+          parameters: tool.inputSchema,
+          strict: providerOptions?.openrouter?.strictJsonSchema
         }
       }));
       return __spreadProps(__spreadValues({}, baseArgs), {
@@ -3343,7 +3346,7 @@ var OpenRouterChatLanguageModel = class {
     var _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w;
     const providerOptions = options.providerOptions || {};
     const openrouterOptions = providerOptions.openrouter || {};
-    const _a16 = openrouterOptions, { cacheControl } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl"]);
+    const _a16 = openrouterOptions, { cacheControl, strictJsonSchema: _strictJsonSchema } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl", "strictJsonSchema"]);
     const args = __spreadValues(__spreadValues(__spreadValues({}, this.getArgs(options)), restOpenrouterOptions), cacheControl != null && !("cache_control" in restOpenrouterOptions) ? { cache_control: cacheControl } : {});
     const { value: responseValue, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -3541,7 +3544,7 @@ var OpenRouterChatLanguageModel = class {
     var _b16;
     const providerOptions = options.providerOptions || {};
     const openrouterOptions = providerOptions.openrouter || {};
-    const _a16 = openrouterOptions, { cacheControl } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl"]);
+    const _a16 = openrouterOptions, { cacheControl, strictJsonSchema: _strictJsonSchema } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl", "strictJsonSchema"]);
     const args = __spreadValues(__spreadValues(__spreadValues({}, this.getArgs(options)), restOpenrouterOptions), cacheControl != null && !("cache_control" in restOpenrouterOptions) ? { cache_control: cacheControl } : {});
     const { value: response, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -4209,7 +4212,7 @@ var OpenRouterCompletionLanguageModel = class {
   async doGenerate(options) {
     var _a16, _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
     const providerOptions = options.providerOptions || {};
-    const openrouterOptions = providerOptions.openrouter || {};
+    const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
     const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
     const { value: response, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -4284,7 +4287,7 @@ var OpenRouterCompletionLanguageModel = class {
   }
   async doStream(options) {
     const providerOptions = options.providerOptions || {};
-    const openrouterOptions = providerOptions.openrouter || {};
+    const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
     const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
     const { value: response, responseHeaders } = await postJsonToApi({
       url: this.config.url({
diff --git a/dist/index.mjs b/dist/index.mjs
index 3b4c63d74..96b592196 100644
--- a/dist/index.mjs
+++ b/dist/index.mjs
@@ -2347,7 +2347,8 @@ var OpenRouterProviderOptionsSchema = z3.object({
     // (e.g., a future format not yet in the enum) is individually dropped
     // rather than causing the entire array to fail parsing.
     reasoning_details: ReasoningDetailArraySchema.optional(),
-    annotations: z3.array(FileAnnotationSchema).optional()
+    annotations: z3.array(FileAnnotationSchema).optional(),
+    strictJsonSchema: z3.boolean().optional()
   }).optional()
 }).optional();
 
@@ -3240,7 +3241,8 @@ var OpenRouterChatLanguageModel = class {
     responseFormat,
     topK,
     tools,
-    toolChoice
+    toolChoice,
+    providerOptions
   }) {
     var _a16;
     const baseArgs = __spreadValues(__spreadValues({
@@ -3296,7 +3298,8 @@ var OpenRouterChatLanguageModel = class {
         function: {
           name: tool.name,
           description: tool.description,
-          parameters: tool.inputSchema
+          parameters: tool.inputSchema,
+          strict: providerOptions?.openrouter?.strictJsonSchema
         }
       }));
       return __spreadProps(__spreadValues({}, baseArgs), {
@@ -3310,7 +3313,7 @@ var OpenRouterChatLanguageModel = class {
     var _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w;
     const providerOptions = options.providerOptions || {};
     const openrouterOptions = providerOptions.openrouter || {};
-    const _a16 = openrouterOptions, { cacheControl } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl"]);
+    const _a16 = openrouterOptions, { cacheControl, strictJsonSchema: _strictJsonSchema } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl", "strictJsonSchema"]);
     const args = __spreadValues(__spreadValues(__spreadValues({}, this.getArgs(options)), restOpenrouterOptions), cacheControl != null && !("cache_control" in restOpenrouterOptions) ? { cache_control: cacheControl } : {});
     const { value: responseValue, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -3508,7 +3511,7 @@ var OpenRouterChatLanguageModel = class {
     var _b16;
     const providerOptions = options.providerOptions || {};
     const openrouterOptions = providerOptions.openrouter || {};
-    const _a16 = openrouterOptions, { cacheControl } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl"]);
+    const _a16 = openrouterOptions, { cacheControl, strictJsonSchema: _strictJsonSchema } = _a16, restOpenrouterOptions = __objRest(_a16, ["cacheControl", "strictJsonSchema"]);
     const args = __spreadValues(__spreadValues(__spreadValues({}, this.getArgs(options)), restOpenrouterOptions), cacheControl != null && !("cache_control" in restOpenrouterOptions) ? { cache_control: cacheControl } : {});
     const { value: response, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -4176,7 +4179,7 @@ var OpenRouterCompletionLanguageModel = class {
   async doGenerate(options) {
     var _a16, _b16, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
     const providerOptions = options.providerOptions || {};
-    const openrouterOptions = providerOptions.openrouter || {};
+    const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
     const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
     const { value: response, responseHeaders } = await postJsonToApi({
       url: this.config.url({
@@ -4251,7 +4254,7 @@ var OpenRouterCompletionLanguageModel = class {
   }
   async doStream(options) {
     const providerOptions = options.providerOptions || {};
-    const openrouterOptions = providerOptions.openrouter || {};
+    const { strictJsonSchema: _strictJsonSchema, ...openrouterOptions } = providerOptions.openrouter || {};
     const args = __spreadValues(__spreadValues({}, this.getArgs(options)), openrouterOptions);
     const { value: response, responseHeaders } = await postJsonToApi({
       url: this.config.url({
