CLAUDE LABJP
PRICING — September 1 was the scheduled date for the Sonnet 5 price increase, and it did not happen. The introductory $2/$10 per MTok now stands as the regular pricePARTNER — Salesforce and Anthropic announced Claudeforce, an expanded partnership. The Salesforce in Claude plugin ships with 37 prebuilt sales skills, from meeting prep to pipeline managementTRUST — Claudeforce serves Claude through Amazon Bedrock inside the Salesforce Trust Boundary, so data and inference never leave the security perimeter — an answer aimed squarely at regulated industriesBETA — Salesforce in Claude is with select pilot customers for now, with an open beta expected during SeptemberLIMITS — The 50% weekly-limit boost runs through September 13. From September 14 the permanent level is 25% above the pre-promotion baseline, roughly a 17% cut from todayRELEASE — Claude Code has shipped nothing since v2.1.251 on August 28. Against a pace of one release every 0.8 days, a four-day gap is among the longest yetPRICING — September 1 was the scheduled date for the Sonnet 5 price increase, and it did not happen. The introductory $2/$10 per MTok now stands as the regular pricePARTNER — Salesforce and Anthropic announced Claudeforce, an expanded partnership. The Salesforce in Claude plugin ships with 37 prebuilt sales skills, from meeting prep to pipeline managementTRUST — Claudeforce serves Claude through Amazon Bedrock inside the Salesforce Trust Boundary, so data and inference never leave the security perimeter — an answer aimed squarely at regulated industriesBETA — Salesforce in Claude is with select pilot customers for now, with an open beta expected during SeptemberLIMITS — The 50% weekly-limit boost runs through September 13. From September 14 the permanent level is 25% above the pre-promotion baseline, roughly a 17% cut from todayRELEASE — Claude Code has shipped nothing since v2.1.251 on August 28. Against a pace of one release every 0.8 days, a four-day gap is among the longest yet
Articles/Claude Code
Claude Code/2026-07-17Advanced

The Morning My Table Ended in "… 2,847 more rows" — Separating Render Caps from Token Cost in Tool Output

Claude Code 2.1.209 caps markdown tables at 200 rows plus a remainder count. Only the rendering is capped — the model still receives every row. Here is how to measure the gap and redesign tool output around aggregates.

claude-code131mcp20tool-outputcontext10automation107

Premium Article

I opened the log from an overnight aggregation job I run as an indie developer and found … 2,847 more rows sitting under the table.

That is the Claude Code 2.1.209 rendering fix doing its job. Before it landed, a table that size would stall the terminal and eat memory. It is a welcome change.

Then I kept staring at it and grew uneasy. Two hundred rows reached my eyes. How many reached the model?

The cap is on rendering, not on context

The changelog entry reads: very large markdown tables no longer stall rendering or balloon memory, and tables over 200 rows now display the first 200 rows plus a … N more rows line. What got fixed is the terminal.

The text handed to the model travels a different path. If your MCP server returns a 3,047-row table, all 3,047 rows land in the conversation history. The 200-row cap is a courtesy extended to human eyes, and to human eyes only.

Blurring that distinction has a cost. You see the truncation, feel like things got lighter, and lose the motivation to revisit what your tool returns. In reality, only the reviewer's terminal got lighter. Billing and context consumption did not move an inch — and now the weight is harder to notice, because it stopped showing up on screen.

I was happily relieved the first time I saw the truncation. It took me a few minutes to reconsider, and only because the week before I had been chasing a job whose context filled up faster than my estimates said it should.

Estimate what one table drags in, before you send it

Start with numbers instead of intuition. The byte math is arithmetic you can do in your head.

Measure the real size of the rows your job returns:

# Dump what the MCP tool returns and look at the actual size.
# If the tool has no debug hook, reproduce the same query from the CLI.
wc -c /tmp/daily_rows.md
wc -l /tmp/daily_rows.md
 
# Average bytes per line
awk 'END { printf "avg bytes/line: %.1f\n", (NR ? total/NR : 0) } { total += length($0) + 1 }' /tmp/daily_rows.md

My aggregation rows carry six columns — date, category, hits, ratio, delta, note — and land around 74 bytes per line. At 3,047 rows that is 74 × 3,047 ≈ 225 KB. Add the header and separator and it is still roughly 225 KB.

I do not convert those bytes to tokens with a multiplier. Text with mixed Japanese and ASCII has an awkward byte-to-token ratio, so I hand it to the official count_tokens endpoint instead.

# pip install anthropic
import anthropic
 
client = anthropic.Anthropic(api_key="YOUR_API_KEY")
 
with open("/tmp/daily_rows.md", encoding="utf-8") as f:
    table = f.read()
 
# Everything, as the tool currently returns it
full = client.messages.count_tokens(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": table}],
)
 
# Only the 200 rows you actually see on screen, for comparison
head_200 = "\n".join(table.splitlines()[:202])  # header + separator + 200 rows
capped = client.messages.count_tokens(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": head_200}],
)
 
print(f"full   : {full.input_tokens:,} tokens")
print(f"head200: {capped.input_tokens:,} tokens")
print(f"ratio  : {full.input_tokens / capped.input_tokens:.1f}x")
 
# Expected output (varies with your row content):
# full   : 62,431 tokens
# head200: 4,238 tokens
# ratio  : 14.7x

Numbers change the conversation. What fits neatly into 200 rows on screen arrives at the model more than ten times heavier — and it rides along on every turn's input.

Your ratio will differ. The ratio itself matters less than confirming once, with your own numbers, that what you see and what the model receives are not connected.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
You can verify the gap between rendered rows and billed tokens yourself, using count_tokens alongside raw byte counts
You'll get a working refactor that turns a full-table MCP tool into a three-layer response: summary, top-N, and a pointer to the full result
You'll leave with a rule for deciding screen rows and model input separately, instead of letting one dictate the other
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Claude Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $15 for lifetime access
View Membership →

Related Articles

Claude Code2026-07-15
Answering auto mode's confirmation prompts in headless runs — a deny-by-default permission-prompt-tool
auto mode's confirmation step is a friend when you're at the keyboard, but in an unattended midnight run it becomes the reason a job sits waiting until morning. Here is how I catch those prompts with permission-prompt-tool, decide deny-by-default, and log every ruling — with working code.
Claude Code2026-06-18
Give an Unattended Agent Only the MCP Tools It Needs — Enforcing a Deny-by-Default Policy
An unattended Claude Code agent can't lean on a permission prompt, so whatever a tool can reach becomes the blast radius. Here's how to lock MCP servers and tools down to deny-by-default and hand back only what the job needs, with managed-settings.json examples.
Claude Code2026-03-24
How to Automate Game Development with Claude Code × unity-mcp — A Complete Workflow from Concept to Release
Learn how to combine Claude Code with unity-mcp to automate Unity game development. The hcg-workflows skill set provides an 8-phase workflow from planning to deployment.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →