Back to Ai

Migrate AI SDK 6.x to 7.0

content/docs/08-migration-guides/23-migration-guide-7-0.mdx

2.1.102.9 KB
Original Source

Migrate AI SDK 6.x to 7.0

  1. Backup your project. If you use a versioning control system, make sure all previous versions are committed.
  2. Upgrade to AI SDK 7.0.
  3. Follow the breaking changes guide below.
  4. Verify your project is working as expected.
  5. Commit your changes.

An example upgrade command would be:

pnpm install ai@latest @ai-sdk/react@latest @ai-sdk/openai@latest

AI SDK Core

Telemetry: tracer in experimental_telemetry Replaced by OpenTelemetryIntegration

The 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:

tsx
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:

tsx
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.

MCP Package

MCP Transport: 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:

tsx
const mcpClient = await createMCPClient({
  transport: {
    type: 'http',
    url: 'https://your-server.com/mcp',
  },
});
tsx
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.