Claude Opus 4.7 (released April 16, 2026) ships with two API-level changes that will break a working Sonnet 4.5 / Opus 4.6 call site if you copy-paste it: the classic sampling knobs (temperature, top_p, top_k) are rejected with a 400 error, and extended-thinking-with-a-token-budget is replaced by thinking={"type":"adaptive"} with output_config.effort. The 7 settings below are the production tool-call configuration the recurring r/ClaudeAI “Opus 4.7 tool calling reliability” threads converge on after the first two weeks of deployment.
The 7 settings
| Setting | Default | Production value | Why |
|---|---|---|---|
model |
none | claude-opus-4-7 |
The alias resolves to the shipped snapshot. Pin a dated snapshot in production if you need replay reproducibility. |
tool_choice |
{"type":"auto"} |
{"type":"tool","name":"<name>"} |
Forces the named tool. The largest single delta on tool-call reliability we measure. |
disable_parallel_tool_use |
false |
true unless your tools are parallel-safe |
Default parallelism races on state-changing tools. |
thinking |
off | {"type":"adaptive"} |
Adaptive replaces extended thinking on Opus 4.7. The model decides how long to think; you bias depth via output_config.effort. |
output_config.effort |
n/a | "medium" for single-turn, "high" for plan-heavy work, "xhigh" only on hard refactors |
Replaces budget_tokens. Legal values: low, medium, high, xhigh, max. |
max_tokens |
none | 4096 single-turn, 16384 when effort >= high | Smaller than you think. Cap the bill, especially given the new tokenizer (1.0-1.35x more tokens for the same input). |
system |
none | Minimal preamble + tool-use rule list | Long system prompts hurt tool-call precision and are the second most-flagged issue on the Anthropic SDK tracker. |
Sampling parameters are gone
Opus 4.7 rejects temperature, top_p, and top_k with a 400 error. If you were setting temperature=0.2 on Sonnet 4.6 or Opus 4.1 for tool-call determinism, remove it before the first request lands. The model picks its own sampling; you only get to bias thinking depth via output_config.effort. This is the single biggest migration gotcha in the Anthropic Python SDK issue tracker.
Tool schema, the way it should look
tools = [
{
"name": "search_invoices",
"description": "Search the invoice database. Use only when the user asks about invoices.",
"input_schema": {
"type": "object",
"properties": {
"query": {"type": "string", "minLength": 1, "maxLength": 200},
"since": {"type": "string", "format": "date"},
"limit": {"type": "integer", "minimum": 1, "maximum": 50}
},
"required": ["query"],
"additionalProperties": False
}
}
]
Three schema details that matter for reliability:
additionalProperties: false. The model will not invent fields your code does not expect. The single highest-value schema constraint.- Tight
minLengthandmaxLengthon strings. Prevents the “pass empty string” and “pass the whole prior conversation” failure modes. - An anti-rule in the
description. “Use only when the user asks about invoices” drops off-topic tool calls; positive-only descriptions do not.
Minimal production call
from anthropic import Anthropic
client = Anthropic()
resp = client.messages.create(
model="claude-opus-4-7",
max_tokens=4096,
system="You call exactly one tool per turn. Return tool input only.",
tools=tools,
tool_choice={"type": "tool", "name": "search_invoices"},
disable_parallel_tool_use=True,
thinking={"type": "adaptive"},
output_config={"effort": "medium"},
messages=[{"role": "user", "content": user_msg}],
)
Watch-outs
- Parallel tool-use surprise. If you see the model calling the same tool twice in one turn and your setting says otherwise, you forgot
disable_parallel_tool_use. It is a top-level request field, not a tool field. stop_sequences+ adaptive thinking. Adaptive thinking on Opus 4.7 works with tool use, butstop_sequencescan clip the thinking block on the first tool chunk. Leavestop_sequencesempty when thinking is on; ship the stop behaviour in thesystemprompt instead.- Do not send
budget_tokens. That field was the Sonnet 4.x / Opus 4.1 extended-thinking knob and is rejected by Opus 4.7. The server returnsinvalid_request_errorwith a message pointing atoutput_config.effort. - MCP tools. The official tool-use docs describe a separate
mcp_serversfield. Claude Code uses it under the hood. If you call the API directly and pass MCP tools, you must also pass the MCP server config; tools alone will not wire. - Token bill. Per Anthropic’s launch migration guide, the same input now maps to roughly 1.0-1.35x more tokens than on Opus 4.6. Plan for ~15% bill increase even before higher effort kicks in.
Related
For the Opus 4.7 scores on agent and tool-use tasks (TCC editorial scoring), see the Opus 4.7 review. For the retry policy that wraps every tool call, see the agent loop retry policy post. For the bounded-planner prompt that respects step budgets on this model, see the bounded-planner prompt.
One-line takeaway
Pin claude-opus-4-7, set tool_choice to a specific tool, disable_parallel_tool_use unless you designed for it, drop temperature/top_p/top_k, switch thinking to {"type":"adaptive"} with output_config.effort, keep stop_sequences empty, and set additionalProperties: false on every tool schema. That is the production-grade configuration in April 2026.