MCP leaderboard – Which AI is winning? – PostHog

4 min read Original article ↗

May the best model win

Which models agents run when they call our tools. Think of it as a popularity contest.

Daily share of tool calls by model

Top 10 models with the most calls get their own band, and each lab's other models share one. Calls without a known model are left out.

Top models last week

  • claude-opus-5-550.1%▲ 1.9 pts
  • gpt-612.5%▲ 1.3 pts
  • gpt-6.1-sol11.5%▲ 0.1 pts
  • claude-sonnet-5-56.3%▲ 0.2 pts
  • claude-fable-5-13.2%▼ 0.3 pts
  • gpt-6-astra2.9%▼ 1.0 pts
  • claude-sonnet-51.7%▼ 0.4 pts
  • claude-opus-51.6%▼ 0.4 pts
  • grok-4.71.4%no change
  • gpt-6.11.0%▲ 0.4 pts
  • gpt-51.0%▼ 0.1 pts
  • claude-opus-40.8%no change
  • gpt-6-sol0.7%no change
  • gpt-5.6-sol0.7%▼ 0.2 pts
  • claude-opus-4-80.6%▲ 0.1 pts

Share of last week's calls with a known model. Changes are against the week before.

AI players battle it out

Daily share of tool calls by AI lab

The lab behind each call's model. Calls without a model are left out.

Top harnesses last week

  • Claude Code30.1%▼ 0.7 pts
  • OpenAI (app not named)18.1%▲ 0.5 pts
  • Cursor10.5%▼ 0.3 pts
  • Cowork6.9%▲ 0.2 pts
  • OpenAI Codex4.5%▼ 0.8 pts
  • Claude Desktop4.0%▲ 0.3 pts
  • Claude artifacts3.8%▲ 0.7 pts
  • Claude Agent SDK3.0%▲ 0.1 pts
  • Claude.ai2.6%▲ 0.1 pts
  • Claude Code (VS Code)1.5%▼ 0.1 pts
  • ExecutorExecutor0.6%▼ 0.2 pts
  • Devin0.4%no change
  • opencode0.3%no change
  • MCPorter0.3%▲ 0.1 pts
  • Amp0.2%no change

The app the agent runs in, colored by who makes it. Not listed: custom code (3.7% of calls), meaning scripts and SDKs that only tell us their HTTP library, like Python's httpx, and apps with fewer than 25 users each (8.9%). Our own CLI isn't counted at all.

The rise and fall of MCP spec versions

MCP spec version, daily share of tool calls

The revision of the MCP spec the client and our server agreed on when they connected. A client moves to a newer one when it updates, so old versions fade out slowly.

How agents sign in

  • OAuth 89.5%
  • Personal API key 10.5%

OAuth means the user signed in through the browser when they added the server.
A personal API key means they made a key in PostHog and pasted it into their config.

How we know the model

  • Agent said so 70.0%
  • Not reported 25.7%
  • Client metadata 4.4%

Our server adds an llm_model argument to every tool, and "Agent said so" means the agent filled it in. "Client metadata" means the app sent the model with the request. "Not reported" means neither, so we don't know the model.

What agents are up to

Most popular tools

  • execute-sql85.6%
  • read-data-schema64.2%
  • project-get56.3%
  • projects-get29.8%
  • docs-search28.6%
  • switch-project24.5%
  • metric-list21.2%
  • query-trends16.6%
  • insight-create14.3%
  • dashboard-get11.8%
  • insight-query11.3%
  • query-error-tracking-issues-list10.1%

Share of last week's users who called the tool at least once. Agents call lots of tools, so this doesn't add up to 100%.

Agents tell us 'why' 90% of the time

How intent works

  1. 1. PostHog's MCP analytics adds a context argument to every tool's schema: "Why are you calling this tool? Briefly describe the user's goal."
  2. 2. The agent fills it in on each call. The SDK strips it before your handler runs, so your tools never see it.
  3. 3. PostHog stores it as $mcp_intent and groups similar intents into themes, so you see the jobs people bring to your server and which ones fail.

What they look like

$mcp_intent: "Comparing signup conversion before and after Tuesday's pricing change"

If an agent skips the argument, the server can derive an intent from the tool and its arguments instead.

Reliability

Error rate

Share of each day's tool calls that came back with an error.

Why calls failed last week

  • Bad arguments 81.1%
  • Tool failed 8.2%
  • API said no (4xx) 4.9%
  • Rate limited 2.8%
  • API error (5xx) 1.1%
  • No permission 0.9%
  • Memory limit 0.4%
  • Missing context 0.4%
  • Timed out 0.3%
Bad arguments
Our server rejected the call before running it: a missing parameter, a wrong type, or a value the tool doesn't take.
Tool failed
The tool ran and something broke. That's either our bug or a query that couldn't run.
API said no (4xx)
The PostHog API turned the request down, for example because the thing it asked for doesn't exist.
API error (5xx)
The PostHog API had an error of its own.

How long a tool call takes

From when our server gets the call to when it sends the result back, which is mostly PostHog running a query. It doesn't include the model's thinking time or the network.

Bad arguments by model, last week

  • claude-sonnet-55.7%all errors 6.8%
  • claude-sonnet-5-53.7%all errors 4.3%
  • claude-opus-5-53.5%all errors 4.2%
  • claude-fable-5-13.0%all errors 3.9%
  • claude-opus-52.7%all errors 3.2%
  • grok-4.71.5%all errors 2.4%
  • gpt-6-astra0.9%all errors 1.4%
  • gpt-60.8%all errors 1.3%
  • gpt-6.1-sol0.8%all errors 1.3%
  • gpt-6.10.8%all errors 1.0%

Share of each model's calls that our server rejected because the arguments didn't match the tool's schema, for the ten models with the most calls. This indicates how well a model can follow the MCP protocol: tool discovery, and argument validation.

How this page works

1

Our MCP server runs MCP analytics on itself. Every tool call lands in PostHog as a $mcp_tool_call event.

2

Two HogQL queries turn those events into shares, one by week and one by day. Any label with fewer than 25 users in a period folds into "Other".

3

Each query is a PostHog endpoint that refreshes daily.

4

When posthog.com builds, Gatsby calls both endpoints and bakes the results into this page.

Data fetched Fri, 30 Oct 2026 00:35:56 GMT.

Let your agent use PostHog too

Not a fan of our UI? Install the PostHog MCP.

Install the PostHog MCP

npx @posthog/wizard mcp add