MCP Server Benchmark: Task-Specific Servers on Google Ads, HubSpot, Avoma and Salesforce Nexla's task-specific MCP servers used 4.7x fewer tokens per task on Google Ads and 32.7x fewer tokens on a HubSpot deal-analysis question than the vendors' own MCP servers, according to a Nexla benchmark that held claude-opus-5, the questions and the data fixed across Google Ads, HubSpot, Avoma and Salesforce. On HubSpot, both servers returned identical results — 199 closed deals, 135 won, 64 lost and a 67.8% win rate — but Nexla's server used 21,682 tokens against 708,973 uncached for HubSpot's 24-tool CRM MCP, which re-sends about 39,000 tokens of tool schema each turn. On Avoma, Nexla's server logged 1 errored tool call over 10 tasks versus 25 for Avoma's own server and scored 0.50 versus 0.00 on call analysis, while on Salesforce its aggregates matched Salesforce's own SOQL on 13 of 13 checks. A task-specific MCP server answers the question on its own side. On Google Ads with claude-opus-5, the Nexla server used 1.0 tool call and 10,668 tokens per task against 4.7 and 50,102; on HubSpot it matched HubSpot’s own server on deal counts and win rate for 21,682 tokens against 708,973 32.7x uncached, 16.1x in the first run . On Avoma it returned the target-month call figures exactly, from dialer-call records Avoma’s own server could not read, with 1 logged tool error to 25. On Salesforce an agent connected to it with one URL and one key, and its numbers matched Salesforce’s own SOQL on 13 of 13 checks. We gave an agent a question as a user had typed it, typos included. It asked for an analysis of won and lost deals over the last 90 days, trends in deal size and stage, and any missing data. Same model claude-opus-5 , same HubSpot portal holding a synthetic set of 1,130 deals, two MCP servers. Both answers came back with 199 closed deals, 135 won and 64 lost, and a 67.8% win rate, all matching ground truth computed from the source data independently of both servers. One answer used 21,682 tokens. The other used 708,973, uncached. The difference was what each server handed the model. Nexla’s server has six aggregation tools that compute summaries over the full dataset and return finished results. HubSpot’s CRM MCP gives the agent 24 general tools, including SQL, and re-sends about 39,000 tokens of tool schema on every turn. One server answers the question. The other hands the agent a toolbox to work it out. An MCP server decides what the model reads on every turn: its tool schema and its results. So the shape of the server sets the token bill and the places where an answer can go wrong. A task-specific server is built for a defined set of questions; we covered task-specific vs system-specific MCP servers in an earlier post. We build these servers in MCP Studio and wanted to measure what a task-specific server changes. So on four systems, Google Ads, HubSpot, Avoma and Salesforce, we held the model, questions and data fixed, changed only the server, and checked the answers against ground truth. This post reports the measures where the task-specific server came out ahead, and the full method behind each number. What held: on Google Ads and HubSpot, a server that answers the question itself used fewer tokens. On Avoma, a server built on modeled call tables did not hit the validation error that kept Avoma’s own server from reading dialer calls, and the harness logged fewer errored tool calls against it. On Salesforce, Nexla’s hosted task-specific server needed nothing installed to connect. And on Google Ads, HubSpot and Salesforce, its answers held up against ground truth computed outside the servers. Results across four systems Figure 1 has one panel per system. On Google Ads, HubSpot and Avoma it compares Nexla’s task-specific server with the vendor’s own MCP server; on Salesforce it compares the Nexla server’s numbers with Salesforce’s own SOQL Salesforce Object Query Language results on the same org. Figure 2 is the scorecard: the main measures on each system, against each comparator. Figure 1. Fewer tokens, fewer tool errors, matching numbers: Nexla's task-specific server on four systems. Headline measure per system, against the vendor's own MCP server or, on Salesforce, Salesforce's own SOQL. Nexla Vendor's own server Google Ads4.7xfewer tokens per task, claude-opus-5 10,668 50,102 1.0 vs 4.7 tool calls per task HubSpot32.7xfewer tokens for one question 21,682 708,973 16.1x fewer in the first run Avoma1 vs 25errored tool calls over 10 tasks 1 25 Call-analysis score 0.50 vs 0.00 Salesforce13 of 13aggregates matched SOQL all four object totals exact Show the data System Measure Nexla Vendor's own server Ratio Google Ads Tokens per task, claude-opus-5 10,668 50,102 4.7x Google Ads Tool calls per task, claude-opus-5 1.0 4.7 4.7x HubSpot Tokens for one question, run 2 21,682 708,973 32.7x HubSpot Tokens for one question, run 1 51,867 832,739 16.1x Avoma Errored tool calls, 10 tasks 1 25 Avoma Call-analysis correctness, 0-1 0.50 0.00 Salesforce ICP aggregates matching Salesforce's own SOQL 13 of 13 Salesforce Object totals exact All four Google Ads one live, low-volume account; ten tasks . Correctness was 1.00 against 0.975 for Google’s server with claude-opus-5, and 0.90 against 0.77 with gpt-5.5, where one Nexla task never executed because the OpenAI request did not return 1.00 over the nine that did . With claude-opus-5 the Nexla server made 1.0 tool call per task against 4.7, used 10,668 tokens per task against 50,102 4.7x, uncached , and returned 93,058 bytes of tool results over ten tasks against 263,651 2.8x . With gpt-5.5 it used 5,788 tokens per task against 39,086 over the tasks that executed 6.8x . HubSpot a synthetic 1,130-deal dataset; one open-ended question, run twice . In the second run, both answers gave the same closed-deal count, won/lost split and win rate, matching ground truth, and the Nexla server used 21,682 tokens against 708,973 for HubSpot’s CRM MCP 32.7x, uncached . The first run of the same comparison used 51,867 against 832,739 16.1x , so we report the gap as 16-33x. Avoma Nexla’s own workspace, real data; ten questions . On call analysis the Nexla server scored 0.50 against 0.00 for Avoma’s own server, whose score covers the three call questions with a recorded measurement. The Nexla server’s target-month call count and outbound/inbound split were exact. Over all ten tasks the harness logged 1 errored tool call on the Nexla server and 25 on Avoma’s. Tool schema per turn was 4,637 characters against 15,078 3.3x . Salesforce a synthetic org; ten questions for ideal customer profile, or ICP, planning . An agent connected to the Nexla server with one URL and one key. In the scored run, 9 of 10 answers were judged correct against SOQL ground truth. The tenth, a won-deals date window, returned no answer in the scored run; one unscored re-run of that question returned 121 deals and $29,877,900, exactly the ground truth. In a pre-run check, all 13 ICP aggregates the server computed matched Salesforce’s own SOQL, and all four object totals were exact. Figure 2. Nexla ahead or level on every vendor comparison shown; 13 of 13 Salesforce checks matched SOQL. Nexla's task-specific MCP server against each vendor's own server, or Salesforce's own SOQL; claude-opus-5 as the agent. Measure Nexla Vendor Result Google Ads vs Google's google-ads-mcp Tokens per task 10,668 50,102 4.7x fewer Tool calls per task 1.0 4.7 4.7x fewer Correctness 0-1 1.00 0.975 ✓ higher HubSpot vs HubSpot's CRM MCP, one question Closed deals · win rate 199 · 67.8% 199 · 67.8% ✓ both correct Tokens, run 2 21,682 708,973 32.7x fewer Tokens, run 1 51,867 832,739 16.1x fewer Avoma vs Avoma's MCP server Call-analysis score 0-1 0.50 0.00 ✓ higher Errored tool calls 1 25 ✓ fewer Schema per turn chars 4,637 15,078 3.3x smaller Salesforce vs Salesforce's own SOQL ICP aggregates matched 13 of 13 ✓ exact Object totals matched 4 of 4 ✓ exact ICP questions correct 9 of 10 ✓ vs SOQL Show the data Measure Nexla Vendor's server Result Google Ads · vs Google's google-ads-mcp Correctness, claude-opus-5 0-1 1.00 0.975 higher Correctness, gpt-5.5 0-1 0.90 1.00 over the 9 tasks that executed 0.77 higher Tool calls per task, claude-opus-5 1.0 4.7 4.7x fewer Tokens per task, claude-opus-5, uncached 10,668 50,102 4.7x fewer Tokens per task, gpt-5.5, tasks that executed, uncached 5,788 39,086 6.8x fewer Tool-result bytes, 10 tasks, claude-opus-5 93,058 263,651 2.8x fewer HubSpot · vs HubSpot's CRM MCP · one question, claude-opus-5 Closed deals; won, lost; win rate 199; 135, 64; 67.8% 199; 135, 64; 67.8% both match ground truth Total tokens, run 2, uncached 21,682 708,973 32.7x fewer Total tokens, run 1, uncached 51,867 832,739 16.1x fewer Input tokens on the first turn, run 2 3,796 54,876 14.5x fewer Avoma · vs Avoma's MCP server · claude-opus-5 Call-analysis correctness 0-1 0.50 0.00 higher Errored tool calls, all 10 tasks 1 25 fewer Tool schema per turn characters 4,637 15,078 3.3x smaller Salesforce · results vs Salesforce's own SOQL; setup vs Salesforce's DX MCP server · claude-opus-5 ICP aggregates matching SOQL 13 of 13 exact Object totals matching SOQL COUNT 4 of 4 500; 2,500; 1,500; 2,000 exact ICP questions correct, scored run 9 of 10 judged against SOQL Snapshots labelled COMPLETE, scored run 8 of 8 Capped reads labelled PARTIAL, scored run 4 of 4 To connect an agent One URL and one key; nothing installed Salesforce CLI, browser OAuth login, local Node server How to read these numbers: tokens are provider-reported input plus output, summed over every turn, with no prompt caching. Each cell has one scored run HubSpot two . On Avoma, eight cells that failed on an expired login or API timeouts were re-run, and the final run is the one reported. What this tells us Answer-shaped results keep the loop short. The Nexla Google Ads server is bound to one account and to modeled performance tables, so the agent made one call per executed task with no discovery step. Google’s agent listed accessible accounts at the start of all 20 of its task-cells. With claude-opus-5, tokens fell 4.7x uncached while tool-result bytes fell only 2.8x, because every turn re-sends the tool schema and the conversation so far. Fewer turns did more than smaller rows, as our Google Ads post also found. The schema is a per-turn fee. HubSpot’s server re-sends about 39,000 tokens of tool schema on every turn. In the second run, HubSpot’s first turn alone was 54,876 input tokens, before any data came back, against 3,796 for the Nexla server. On Avoma the schemas were 15,078 characters against 4,637. The schema section below shows how HubSpot’s adds up turn by turn. A wrapper inherits its API’s edges. Avoma’s server requires the from and to fields of a call record frm and to to be strings, and dialer calls store both as null, so any page of meetings that contains a dialer call fails validation. That error made up 21 of the 25 errored tool calls the harness logged on Avoma’s server. The Nexla server reads a modeled call table, and its target-month answers were exact. Check against something the server did not produce. On Google Ads, ground truth from the Google Ads API matched all six Nexla tools on 10 of 10 answers. On HubSpot, the counts and win rate matched ground truth computed from the source dataset. On Salesforce, 13 of 13 aggregates matched SOQL, all four object totals were exact, and every capped read in the scored run came back labelled PARTIAL. The four systems in detail Each section covers the setup, the measures we report, why they came out that way, and a link to the full write-up where one exists. Google Ads, HubSpot and Avoma have one; Salesforce is new in this post. Google Ads: one call per task We ran the Google Ads comparison against Nexla’s own live Google Ads account, a single low-volume account, over a rolling 30-day window. For more detail, read the full Google Ads benchmark. Google’s official google-ads-mcp server has three general tools: a GAQL Google Ads Query Language search, a resource-metadata lookup and an account listing. Our server has six data tools over modeled campaign, ad-group, keyword, search-term, ad and daily campaign performance tables, bound to that one account. Ten tasks covered five categories: structure 2 , relationship 2 , aggregation 4 , totals 1 and point in time 1 . Two agents, claude-opus-5 and gpt-5.5, got every task once on both servers, 40 task-cells in all, with claude-opus-5 as the judge. A typical prompt: “Over the last 30 days, what were this account’s total impressions, total clicks, and total cost in dollars?” Ground truth came from the Google Ads API GAQL, last 30 days, impressions greater than zero . It matched all six Nexla tools on 10 of 10 answers, so both servers were reading the same data. Figure 3 shows correctness per task. With claude-opus-5, the Nexla server scored 1.00 on all ten tasks. Google’s server scored 0.975: 1.00 on nine tasks and 0.75 on T4, which asks for one keyword’s match type and ad group without stating the window or the impression qualifier. The agent answered for the whole account and was marked down. We count that as a gap in our prompt, not in Google’s server. With gpt-5.5, the Nexla server scored 0.90 as measured and 1.00 over the nine tasks that executed. On T1 the OpenAI API request never returned, and the cell timed out at 180 s without a tool call. Our Google Ads post gave the gpt-5.5 call, token and byte figures for the Nexla server over the nine tasks that executed, which is why it reports one call per task for both models. Google’s server scored 0.77. On T1 and T9 the agent listed the accessible accounts, saw two, and stopped to ask which one to use 0.10 each ; T4 scored 0.50. Figure 3. Google Ads: the Nexla server scored 1.00 on every task that executed, with both agents. Judge score per task 0–1 ; a solid cell is a perfect 1.00. claude-opus-5Mean Nexla1.00 Google’s server0.975 0.75 T1T2T3T4T5T6T7T8T9T10 gpt-5.5Mean Nexla 1.00 on 9 0.90 Google’s server0.77 0.100.500.10 T1T2T3T4T5T6T7T8T9T10 Nexla Google’s server Did not execute Show the data claude-opus-5 gpt-5.5 Task Category Nexla Google’s server Nexla Google’s server T1 structure 1.00 1.00 0.00 did not execute 0.10 T2 structure 1.00 1.00 1.00 1.00 T3 relationship 1.00 1.00 1.00 1.00 T4 relationship 1.00 0.75 1.00 0.50 T5 aggregation 1.00 1.00 1.00 1.00 T6 aggregation 1.00 1.00 1.00 1.00 T7 aggregation 1.00 1.00 1.00 1.00 T8 aggregation 1.00 1.00 1.00 1.00 T9 totals 1.00 1.00 1.00 0.10 T10 point in time 1.00 1.00 1.00 1.00 Mean 1.00 0.975 0.90 1.00 over the 9 tasks that executed 0.77 Figure 4 shows mean tokens per task: provider-reported input plus output, summed over every turn, uncached. With claude-opus-5 the averages were 10,668 tokens on the Nexla server and 50,102 on Google’s 4.7x . Per task, the Nexla server stayed between 8,635 and 16,353 tokens, while Google’s ranged from 11,734 to 96,265. The ten-task totals were 106,679 and 501,022. With gpt-5.5, the Nexla server averaged 5,788 tokens over the nine tasks that executed, against 39,086 for Google’s over all ten 6.8x, uncached . Figure 4. Google Ads: the Nexla server used 4.7x to 6.8x fewer tokens per task on average. Mean input plus output tokens per task that executed, uncached. Lower is better. claude-opus-54.7x fewer Nexla10,668 Google’s server50,102 gpt-5.56.8x fewer Nexla5,788 Google’s server39,086 Show the data Mean tokens per task, uncached Agent Nexla Google’s server Fewer with Nexla claude-opus-5 10,668 50,102 4.7x gpt-5.5 5,788 9 tasks executed 39,086 6.8x Figure 5 shows where the calls went. With both agents, every task that executed on the Nexla server took one call, straight to a data tool, with no discovery step. Over ten tasks, the agent on Google’s server made 47 calls with claude-opus-5 and 48 with gpt-5.5: 10 account listings each one per task , 6 and 15 metadata lookups, and 31 and 23 GAQL searches. With claude-opus-5 that is 1.0 call per task against 4.7. Figure 5 also shows tool-result bytes, the length of the result text handed to the model. With claude-opus-5 that was 93,058 bytes on the Nexla server against 263,651 on Google’s over ten tasks 2.8x . With gpt-5.5 it was 89,260 over the nine tasks that executed against 429,906 4.8x . Figure 5. Google Ads: the Nexla server took one call per executed task and returned 2.8x to 4.8x fewer bytes. Tool calls by type, and tool-result bytes returned to the model, over 10 tasks per agent. Nexla Google’s server Discovery call claude-opus-52.8x fewertool-result bytes on Nexla93,058 vs 263,651 gpt-5.54.8x fewertool-result bytes on Nexla89,260 vs 429,906 Show the data Agent Server Account listing discovery Resource metadata discovery GAQL search data Nexla data tools Total calls Tool-result bytes claude-opus-5 Nexla – – – 10 10 93,058 claude-opus-5 Google’s server 10 6 31 – 47 263,651 2.8x Nexla gpt-5.5 Nexla – – – 9 9 89,260 9 tasks executed gpt-5.5 Google’s server 10 15 23 – 48 429,906 4.8x Nexla So with claude-opus-5, bytes fell 2.8x but tokens fell 4.7x. The difference is turns. Every model turn re-sends the tool definitions and the conversation so far. A one-call task takes two turns, one to call the tool and one to answer. Each call that depends on an earlier result adds a turn, and that turn re-reads everything before it. A query tool makes the agent build the report; a task-specific tool has already built it. HubSpot: the same counts and win rate for 16-33x fewer tokens We loaded a synthetic dataset of 1,130 deals 1,010 closed, 120 open into a HubSpot portal. The agent got one open-ended question, phrased exactly as a user wrote it, typos included. It asked for an analysis of won and lost deals over the last 90 days, any trends in deal size, stage and other factors behind wins and losses, what else to consider, and what data was missing. The model was claude-opus-5, streaming, with a 32,000-token output cap, no system prompt and no scoring wrapper. On one side was HubSpot’s CRM MCP server, with 24 general tools, including one that accepts SQL. On the other was a Nexla server with seven data tools, six that compute summaries over the full dataset on the server and one that returns raw rows, plus a describe tool gateway the agent could also call. Figure 6 compares both answers with ground truth, which we computed from the source dataset independently of both servers. Both answers gave 199 closed deals, 135 won and 64 lost, and a 67.8% win rate. Both gave the same average deal sizes: $101,898 for won deals and $129,279 for lost ones. The Nexla answer gave won and lost value to the dollar, $13,756,172 and $8,273,860. HubSpot’s answer rounded them to $13.76M and $8.27M. We count both as matches. Figure 6. HubSpot: both answers gave 199 closed deals and a 67.8% win rate, matching ground truth. Closed deals in the last 90 days, second run. ✓ = the answer matched ground truth. Measure Ground truth Nexla HubSpot's CRM MCP Closed deals 199 ✓ ✓ Won / lost 135 / 64 ✓ ✓ Win rate 67.8% ✓ ✓ Won value $13,756,172 ✓ $13.76M✓ Lost value $8,273,860 ✓ $8.27M✓ Avg won deal $101,898 ✓ ✓ Avg lost deal $129,279 ✓ ✓ Show the data Measure second run Ground truth Nexla HubSpot's CRM MCP Closed deals, last 90 days 199 199 199 Won / lost 135 / 64 135 / 64 135 / 64 Win rate 67.8% 67.8% 67.8% Won value $13,756,172 $13,756,172 $13.76M Lost value $8,273,860 $8,273,860 $8.27M Average won deal $101,898 $101,898 $101,898 Average lost deal $129,279 $129,279 $129,279 Figure 7 shows what each answer cost. Tokens here are provider-reported input plus output, summed over every turn, uncached. In the second run, the agent used 21,682 tokens on the Nexla server and 708,973 on HubSpot’s, a ratio of 32.7x. In the first run of the same comparison it was 51,867 against 832,739, or 16.1x. Across the two runs, the gap was 16-33x. Our HubSpot post gave these two runs as ranges, 21.7k-51.9k tokens for Nexla and 709k-833k for HubSpot’s server; paired run by run, they are the 32.7x and 16.1x shown here. Figure 7. HubSpot: the Nexla server used 16-33x fewer tokens for the same question. Total tokens to answer one question, uncached, in each of two runs. Run 116.1x fewer Nexla51,867HubSpot’s server832,739 Run 232.7x fewer Nexla21,682HubSpot’s server708,973 Show the data Run Nexla tokens HubSpot’s CRM MCP tokens HubSpot ÷ Nexla Run 1 51,867 832,739 16.1x Run 2 21,682 708,973 32.7x Almost all of that gap is input. HubSpot’s server re-sends about 39,000 tokens of tool schema on every turn; we measured its 24 tools at 39,183 tokens and 136,412 characters. On the Nexla server the whole first turn, tool definitions plus the question, was 3,796 input tokens, against 54,876 on HubSpot’s. Nexla’s tools also return finished summaries, so the agent has little left to assemble before it answers. Figure 14, in the schema section below, shows the input on each turn. One part of the question shows the tool design at work. The question asked what data was missing, and the Nexla server has a data-quality tool that reports null counts on critical fields, computed on the server. That tool answers that part of the question directly. Both answers flagged the same core gaps: no stage-entry history, one owner on every deal, no activity data, and no competitor or discount fields. Avoma: reading the calls the vendor’s server could not We pointed Avoma’s MCP server and a Nexla call-analysis server, built on modeled call tables, at Nexla’s own production Avoma workspace. This is real data, so this post gives no counts, names or reps. claude-opus-5 was the agent and the judge, with a fresh conversation per cell. Ten questions ran against each server. Four were call-analysis questions, and the correctness results below cover that category. The error and schema figures cover all ten. Ground truth for the call questions was counted by a script, with no model in the loop, from the Nexla server’s own call table, read through that server’s call tool in weekly slices. Avoma’s server could not read those records. The question-by-question detail is in the full Avoma benchmark. Figure 8 shows the call-analysis category: 0.50 for the Nexla server and 0.00 for Avoma’s. The Nexla server’s target-month call count and target-month outbound/inbound split both matched ground truth exactly. Its other two call answers scored 0.00: the prior-month count came from one whole-month read that the server cut off at its size cap, and it came back at about half the true figure, stated as final. The rep question timed out. On Avoma’s server the agent returned no call figure on any call question that produced a measurement, and each answer said it could not retrieve the call data. Avoma’s 0.00 is the mean of those three cells. Figure 8. Avoma: the Nexla server scored 0.50 on call analysis, Avoma's server 0.00. Correctness on a 0–1 scale, and each server's result on the two target-month questions. Call-analysis correctness Nexla0.50 Avoma's MCP server0.00 Target-month questions Dialer-call count✓ Exact✕ No answer Outbound/inbound split✓ Exact✕ No answer Nexla Avoma's MCP server Show the data Measure Nexla Avoma's MCP server Call-analysis correctness 0–1 0.50 0.00 Call-analysis tasks scored 4 3 measured Target-month dialer-call count Exact 1.00 No answer 0.00 Target-month outbound/inbound split Exact 1.00 No answer 0.00 The cause is in Avoma’s own API client. It declares the frm and to fields of a call’s details as required strings, and dialer calls store both as null. Any page of meetings that holds a dialer call fails validation with Failed to list meetings: 2 validation errors for CallDetails before the agent sees any data. Smaller pages do not help, because any page that holds a dialer call fails. The harness logged 25 errored tool calls on Avoma’s server, all on those three call questions Figure 9 . The fourth call question timed out on both servers, and the harness kept no tool calls for it. Of those, 21 were this validation error. The other 4 came from a usage-metrics tool that only covers the last 30 days. Across all ten tasks, the harness logged 1 errored tool call on the Nexla server. Figure 9. Avoma: 1 errored tool call on the Nexla server, 25 on Avoma's. Tool calls the harness logged as errored, across all 10 tasks on each server. The tool schema the harness sent on every turn was 15,078 characters for Avoma’s server and 4,637 for the Nexla server 3.3x , with tool descriptions clipped to 1,500 characters for both. The schema section below returns to this. A vendor’s MCP server is a wrapper on the vendor’s API, and it carries that API’s edges with it. Here, two fields declared as required strings put every dialer call out of reach. The Nexla server reads modeled call tables instead, and on the target-month questions it returned the figures Avoma’s server could not. Salesforce: checked against Salesforce’s own numbers Salesforce is new in this post. The org is synthetic: a trial org we seeded with 500 accounts, 2,500 contacts, 1,500 leads and 2,000 opportunities, in the Asia/Kolkata timezone with one currency. The task set is ten ICP-planning questions: which industries win, where customers are billed, who the contacts are, and what sits in open pipeline. They fall into six categories. The comparator in the run was Salesforce’s official DX MCP server @salesforce/mcp 0.30.15, data toolset . claude-opus-5 was the agent and the judge, the harness was mcp-bench, and each task ran once. Nexla’s ICP-planner server has four object readers with a count mode, schema inspection, and a snapshot-and-query workspace: it copies complete reader output into a workspace and runs SQL there. It also carries generic gateway tools, one of which passes SOQL through to Salesforce; the SF10 answer came through that route. Ground truth is Salesforce’s own SOQL, run read-only through the Salesforce CLI and never through either MCP server. On Salesforce we report what it took to connect each server next section and how the Nexla server’s numbers held up against Salesforce’s own SOQL. Before the run, we checked the benchmarked server against Salesforce directly. A script, with no model in the loop, took a full snapshot of all four objects through the Nexla server and computed 13 ICP aggregates inside it. We ran the same 13 aggregates as SOQL through the Salesforce CLI. All 13 matched exactly Figure 10 . They cover counts, sums and group-bys over accounts, leads and deals, by type, industry, billing country, lead status, lead source, deal outcome and stage; won deals by account industry, both through the deal’s account field and through a join to accounts; won deals in a one-quarter close-date window; and contacts per account type. Figure 10. Salesforce: all 13 Nexla aggregates matched Salesforce’s own SOQL exactly. Counts, sums and group-bys from the Nexla server, each compared with the same aggregate run as SOQL. Checks13 of 13matched SOQL exactly Result rows176all identical to SOQL Accounts✓✓✓✓ Leads✓✓✓ Deals✓✓✓✓✓ Contacts✓ Show the data Object Check Result rows Same as SOQL SOQL Accounts Accounts by type 10 Yes, exact SELECT Type, COUNT Id FROM Account GROUP BY Type Accounts Accounts by industry 30 Yes, exact SELECT Industry, COUNT Id FROM Account GROUP BY Industry Accounts Customer accounts by billing country 9 Yes, exact SELECT BillingCountry, COUNT Id FROM Account WHERE Type='Customer' GROUP BY BillingCountry Accounts Account revenue and employee totals 1 Yes, exact SELECT SUM AnnualRevenue , SUM NumberOfEmployees FROM Account Leads Leads by status 4 Yes, exact SELECT Status, COUNT Id FROM Lead GROUP BY Status Leads Leads by source 11 Yes, exact SELECT LeadSource, COUNT Id FROM Lead GROUP BY LeadSource Leads US leads by industry 31 Yes, exact SELECT Industry, COUNT Id FROM Lead WHERE Country='United States' GROUP BY Industry Deals Deals won, lost and open 3 Yes, exact SELECT IsClosed, IsWon, COUNT Id , SUM Amount FROM Opportunity GROUP BY IsClosed, IsWon Deals Deals by stage 6 Yes, exact SELECT StageName, COUNT Id , SUM Amount FROM Opportunity GROUP BY StageName Deals Won by account industry, deal field 30 Yes, exact SELECT Account.Industry, COUNT Id , SUM Amount FROM Opportunity WHERE IsWon = true GROUP BY Account.Industry Deals Won by account industry, join 30 Yes, exact SELECT Account.Industry, COUNT Id , SUM Amount FROM Opportunity WHERE IsWon = true GROUP BY Account.Industry Deals Won deals closing in one quarter 1 Yes, exact SELECT COUNT Id , SUM Amount FROM Opportunity WHERE IsWon = true AND CloseDate =