Skip to main content

Anthropic logoAnthropic

Access 14 Anthropic models through Mastra's model router. Authentication is handled automatically using the ANTHROPIC_API_KEY environment variable.

Learn more in the Anthropic documentation.

.env
ANTHROPIC_API_KEY=your-api-key
src/mastra/agents/my-agent.ts
import { Agent } from "@mastra/core/agent";

const agent = new Agent({
id: "my-agent",
name: "My Agent",
instructions: "You are a helpful assistant",
model: "anthropic/claude-fable-5"
});

// Generate a response
const response = await agent.generate("Hello!");

// Stream a response
const stream = await agent.stream("Tell me a story");
for await (const chunk of stream) {
console.log(chunk);
}

Models
Direct link to Models

ModelContextToolsReasoningImageAudioVideoInput $/1MOutput $/1M
anthropic/claude-fable-51.0M$10$50
anthropic/claude-fable-5-11.0M$10$50
anthropic/claude-haiku-4-5200K$1$5
anthropic/claude-haiku-4-5-20251001200K$1$5
anthropic/claude-opus-4-5200K$5$25
anthropic/claude-opus-4-5-20251101200K$5$25
anthropic/claude-opus-4-61.0M$5$25
anthropic/claude-opus-4-71.0M$5$25
anthropic/claude-opus-4-81.0M$5$25
anthropic/claude-opus-51.0M$5$25
anthropic/claude-sonnet-4-51.0M$3$15
anthropic/claude-sonnet-4-5-202509291.0M$3$15
anthropic/claude-sonnet-4-61.0M$3$15
anthropic/claude-sonnet-51.0M$2$10
14 available models

Model availability, capabilities, context windows, and pricing are sourced from models.dev and may change.

Advanced configuration
Direct link to Advanced configuration

Custom headers
Direct link to Custom headers

src/mastra/agents/my-agent.ts
const agent = new Agent({
id: "custom-agent",
name: "custom-agent",
model: {
id: "anthropic/claude-fable-5",
apiKey: process.env.ANTHROPIC_API_KEY,
headers: {
"X-Custom-Header": "value"
}
}
});

Dynamic model selection
Direct link to Dynamic model selection

src/mastra/agents/my-agent.ts
const agent = new Agent({
id: "dynamic-agent",
name: "Dynamic Agent",
model: ({ requestContext }) => {
const useAdvanced = requestContext.task === "complex";
return useAdvanced
? "anthropic/claude-sonnet-5"
: "anthropic/claude-fable-5";
}
});

Provider Options
Direct link to Provider Options

Anthropic supports the following provider-specific options via the providerOptions parameter:

const response = await agent.generate("Hello!", {
providerOptions: {
anthropic: {
// See available options in the table below
}
}
});

Available Options
Direct link to Available Options

sendReasoning?:

boolean | undefined

structuredOutputMode?:

"outputFormat" | "jsonTool" | "auto" | undefined

thinking?:

{ type: "adaptive"; display?: "omitted" | "summarized" | undefined; } | { type: "enabled"; budgetTokens?: number | undefined; } | { type: "disabled"; } | undefined

disableParallelToolUse?:

boolean | undefined

cacheControl?:

{ type: "ephemeral"; ttl?: "5m" | "1h" | undefined; } | undefined

metadata?:

{ userId?: string | undefined; } | undefined

mcpServers?:

{ type: "url"; name: string; url: string; authorizationToken?: string | null | undefined; toolConfiguration?: { enabled?: boolean | null | undefined; allowedTools?: string[] | null | undefined; } | null | undefined; }[] | undefined

container?:

{ id?: string | undefined; skills?: { type: "anthropic" | "custom"; skillId: string; version?: string | undefined; }[] | undefined; } | undefined

toolStreaming?:

boolean | undefined

effort?:

"low" | "medium" | "high" | "xhigh" | "max" | undefined

taskBudget?:

{ type: "tokens"; total: number; remaining?: number | undefined; } | undefined

speed?:

"fast" | "standard" | undefined

inferenceGeo?:

"us" | "global" | undefined

fallbacks?:

"default" | { model: string; max_tokens?: number | undefined; thinking?: Record<string, unknown> | undefined; output_config?: Record<string, unknown> | undefined; speed?: "fast" | "standard" | undefined; }[] | undefined

anthropicBeta?:

string[] | undefined

contextManagement?:

{ edits: ({ type: "clear_tool_uses_20250919"; trigger?: { type: "input_tokens"; value: number; } | { type: "tool_uses"; value: number; } | undefined; keep?: { type: "tool_uses"; value: number; } | undefined; clearAtLeast?: { ...; } | undefined; clearToolInputs?: boolean | undefined; excludeTools?: string[] | undefin...