Cursor MCP costs: a transparent breakdown across 8 popular MCP servers
Real numbers from 30 days of Cursor + MCP usage. Per-tool cost, per-session distribution, and the 3 tools you should optimize first.
Cursor's mcp.json is the simplest way to add MCP servers to any agentic IDE. But once you have 5-10 servers wired up, cost attribution becomes a black box — Cursor itself doesn't tell you which server is the expensive one.
This post breaks down 30 days of real Cursor + MCP usage across the most popular servers I've seen in user installations.
The setup
// ~/.cursor/mcp.json (before MCPSpend wraps it)
{
"mcpServers": {
"filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"] },
"github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"] },
"playwright": { "command": "npx", "args": ["-y", "@playwright/mcp"] },
"sqlite": { "command": "uvx", "args": ["mcp-server-sqlite", "--db-path", "/path/to.db"] },
"fetch": { "command": "uvx", "args": ["mcp-server-fetch"] },
"postgres": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-postgres", "postgres://..."] },
"memory": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-memory"] },
"time": { "command": "uvx", "args": ["mcp-server-time"] }
}
}
8 servers. That's a typical heavy-Cursor user.
The 30-day breakdown
| Server | Calls | Cost | $/call avg |
|---|---|---|---|
| playwright | 2,140 | $5.42 | $0.00253 |
| filesystem | 984 | $1.71 | $0.00174 |
| github | 612 | $1.40 | $0.00229 |
| fetch | 511 | $1.05 | $0.00205 |
| sqlite | 287 | $0.66 | $0.00230 |
| postgres | 142 | $0.37 | $0.00261 |
| memory | 89 | $0.18 | $0.00202 |
| time | 23 | $0.04 | $0.00174 |
Top finding: Playwright is 5.4× the next-biggest server. If you use it, that's where to look first.
The per-tool drill-down
Inside Playwright, the cost distribution is even more skewed:
browser_navigate— 71% of Playwright spendbrowser_take_screenshot— 14%browser_click— 8%- everything else — 7%
browser_navigate returns the full page DOM by default. For a moderately complex site that's 80-150 KB of HTML → 20K-40K tokens stuffed into context every time. Three optimizations that helped:
- Scrape DOM subtree, not full page. Use
browser_evaluateto grabdocument.querySelector('main').outerHTMLinstead — typically 5-10× smaller payload. - Cache navigations within a session. If your agent visits the same URL twice in 60 seconds, the second
browser_navigateis wasted. - Use
browser_snapshotfor state checks. It returns accessibility tree (text-only), not HTML — way cheaper.
How to do this analysis yourself
npx @mcpspend/proxy add
That's the entire setup. The CLI auto-detects Cursor's config, wraps every MCP server, and starts streaming data. Open the dashboard, wait a week of normal use, and the same table above appears for your usage.
Free tier covers 25,000 tool calls/month — that's a heavy Cursor user.
Counterpoint: when not to do this
If you only use 1-2 MCP servers and your monthly bill from Anthropic is under $20, this is overkill. The value kicks in around 5+ servers or $30+/month in Cursor usage. Below that, the manual mental model works fine.
Try it
npx @mcpspend/proxy add · MIT licensed · pricing · security