content/docs/08-migration-guides/23-migration-guide-7-0.mdx
An example upgrade command would be:
pnpm install ai@latest @ai-sdk/react@latest @ai-sdk/openai@latest
tracer in experimental_telemetry Replaced by OpenTelemetryIntegrationThe tracer property on experimental_telemetry settings is no longer used. Custom tracers must now be passed through the OpenTelemetryIntegration class via the integrations property instead.
Previously, you could pass a custom OpenTelemetry Tracer directly to experimental_telemetry:
import { generateText } from 'ai';
import { trace } from '@opentelemetry/api';
const tracer = trace.getTracer('my-app');
const result = await generateText({
model: yourModel,
prompt: 'Hello',
experimental_telemetry: {
isEnabled: true,
tracer, // custom tracer passed directly
},
});
Now, wrap your custom tracer in an OpenTelemetryIntegration instance and pass it via the integrations property:
import { generateText, OpenTelemetryIntegration } from 'ai';
import { trace } from '@opentelemetry/api';
const tracer = trace.getTracer('my-app');
const result = await generateText({
model: yourModel,
prompt: 'Hello',
experimental_telemetry: {
isEnabled: true,
integrations: new OpenTelemetryIntegration({ tracer }),
},
});
This applies to all AI SDK functions that accept experimental_telemetry, including streamText, generateObject, streamObject, embed, and embedMany.
If you were not passing a custom tracer (relying on the default global tracer), no changes are needed — the OpenTelemetryIntegration is registered globally by default and uses trace.getTracer('ai') when no custom tracer is provided.
redirect Default Changed from 'follow' to 'error'The redirect option on MCPTransportConfig (used by both HTTP and SSE transports) now defaults to 'error' instead of 'follow'. This means HTTP redirects are rejected by default to prevent server-side request forgery (SSRF) attacks where an MCP server could redirect requests to unintended hosts.
If your MCP server relies on HTTP redirects, explicitly set redirect: 'follow' in your transport configuration:
const mcpClient = await createMCPClient({
transport: {
type: 'http',
url: 'https://your-server.com/mcp',
},
});
const mcpClient = await createMCPClient({
transport: {
type: 'http',
url: 'https://your-server.com/mcp',
redirect: 'follow',
},
});
If the MCP server you use does not issue redirects, no changes are needed — the new default is more secure.