All outputs are real tool calls to the Equibles MCP server from 21 October 2026, trimmed.

Reading one earnings call is easy. Telling what changed since the last one is the hard part: the slides look alike, every quarter is "solid", and the shift hides in which topics got airtime and how carefully management spoke.

Here's how I get an AI agent to make that comparison with numbers, using Bank of America's last two calls and one cross-bank check.

Connect it first

In Claude, open Customize → Connectors → Discover, search for Equibles, click Connect to Claude and Authorize, then switch it on in a chat from + → Connectors. In ChatGPT: Plugins, search Equibles, Install plugin. In Claude Code, claude mcp add --transport http equibles https://mcp.equibles.com/mcp and then /mcp to sign in. The free plan covers 100 requests a day; other clients are in the setup docs.

1. Score both calls side by side

The prompt: "Using Equibles, compare the tone and themes of Bank of America's last two earnings calls." The agent calls GetEarningsCallToneAndThemes for BAC with limit=2:

FY2026 Q2 (14 Jul) FY2026 Q3 (14 Oct)
Tone (-100 cautious to +100 bullish) 78 57
Hedging (0 plain to 100 qualified) 25 34

And the Q3 themes, with each theme's tone and how often it came up:

Q3 theme Tone Mentions
Markets and investment banking activity risk 64
Loan and deposit growth positive 32
Net interest income and yield growth positive 31
AI and operating leverage positive 27
Wealth management growth positive 17
Credit quality positive 16
Regulatory settlement and remediation risk 16
Consumer banking and rewards positive 13

In Q2, seven of eight themes were positive and the eighth neutral. In Q3, two carry a risk tone. A tone of 57 is still positive; what the pair tells you is direction: less upbeat, more qualified.

2. Follow the themes across a year

Two calls can mislead, so widen the window. "Show BAC's call themes over the last four quarters." GetEarningsCallThemeHistory with calls=4 returns a theme-by-quarter grid. Trimmed (a dash means not raised; + positive, ! risk):

Theme FY25 Q4 FY26 Q1 FY26 Q2 FY26 Q3 Status
Net interest income and yield growth 80 + 37 + 48 + 31 + recurring
Markets and investment banking activity 24 + 55 + - 64 ! recurring
AI and operating leverage - - 37 + 27 + recurring
Credit quality - - - 16 + new
Regulatory settlement and remediation - - - 16 ! new
Consumer banking and rewards - - - 13 + new
Expense discipline and operating efficiency 33 + 37 + - - dropped after Q1

Read the pairing before trusting a "new" or "dropped" label. Themes are matched across calls by name or shared keywords, so one topic can land on two rows. Here, Q2's "Investment banking and sales & trading" (17 mentions) sits on its own row, which is why markets shows a gap in Q2. The Q2 cell for "AI and operating leverage" is Q2's "Revenue and earnings growth" theme, joined through the keyword "operating leverage".

The settlement theme has no such ambiguity. It's new, and it's tagged risk.

3. Count the words that moved

Themes are summaries. Word counts are checkable. "How often did BAC say 'settlement' and 'operating leverage' on its last four calls?" GetTranscriptPhraseTrend, once per phrase:

Call "settlement" "operating leverage" per 10k words
FY2025 Q4 (14 Jan) 0 16 17.5
FY2026 Q1 (15 Apr) 0 22 18.1
FY2026 Q2 (14 Jul) 0 27 29.9
FY2026 Q3 (14 Oct) 11 13 9.8

The rate per 10,000 words matters because calls differ in length. The quotes it returns make the comparison in two lines:

  • Q2: "Our results show organic growth, operating leverage, and efficiency ratio improvement in every business segment."
  • Q3: "And we expect to return to operating leverage in Q4."

And the settlement, from Q3: "we've adjusted those results to take into account the non-tax deductible regulatory settlement charge of $1.2 billion, which is a $0.17 per share impact."

4. Put the price next to it

"Show BAC's daily prices from 9 to 20 October." GetStockPrices:

  • 13 October close: $53.96.
  • 14 October, the day of the call: opened at $49.83, closed at $51.39 (-4.8%), on 118.0M shares against 45.0M the day before.
  • 20 October close: $50.64.

5. Compare peers on one phrase

Across companies I compare phrase counts rather than tone scores: a count means the same thing on every transcript. "How often did JPMorgan and Bank of America say 'agentic' on their last four calls?"

Call JPM BAC
FY2025 Q4 0 0
FY2026 Q1 0 1
FY2026 Q2 0 1
FY2026 Q3 7 (7.2 per 10k) 3 (2.3 per 10k)

The word went from absent to present at both banks in the same quarter. The Q3 quotes returned for both are analyst questions, one at BAC asking about "agentic AI as potentially driving more yield-seeking behavior, the potential risk of flight for more idle consumer deposits".

The prompt I reuse

Using Equibles, for <TICKER>: 1. Compare tone, hedging and themes of the last two earnings calls. 2. Show four quarters of theme history; for each new or dropped theme, check how it was paired before calling it new. 3. Count the two phrases that moved most, per 10,000 words, with quotes. 4. Add the daily closes around the latest call. 5. Count one phrase across <TICKER> and <PEER> for the same quarters. 

What a call comparison can't tell you

  • Why the stock moved. The call and the quarterly results came out on the same day, so the price reaction covers both.
  • Who said it, on every call. BAC's Q3 call is counted over the published transcript document, with no speaker turns on file yet, so its prepared-remarks versus Q&A split is unknown and its analyst-question list is still empty. Document counts can also include boilerplate.
  • Unscored quarters. Only verifier-approved calls get tone and theme scores, so a quarter can be missing from the grid while its transcript is still countable.
  • Stable names. Theme labels are written per call, so pairing can split one topic or join two, as step 2 shows.

The scored calls and transcripts are also on each company's calls page, like BAC earnings calls and JPM earnings calls.

Nothing here is investment advice.