Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to Size Your TAM in Cursor (2026)

Add one mcp.json entry, then let Cursor run free counts that narrow a market from TAM to a buyer list you can work.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

TL;DR

  • Cursor reaches LeadOcean through one mcp.json entry. It counts every filter set you describe and returns exact totals, so TAM, SAM and SOM become four counts instead of one analyst guess.
  • It takes about 15 minutes. The sizing run spends 0 records, because counts and lookups are free.
  • Only people returned to you count as records. An optional 10-row spot-check spends 10 of the 1,000 free records.

Prerequisites

  • A LeadOcean account from app.leadocean.io. The free plan has no card and gives 1,000 records, one-off.
  • Cursor installed. The Cursor MCP docs, October 2026, name no paid plan for adding a remote server. On an Enterprise plan, an admin can restrict remote servers by URL pattern.
  • Optional, for the REST check in Step 5: curl and a key in your shell as $LEADOCEAN_API_KEY. The chat steps need no key.
bash
export LEADOCEAN_API_KEY="paste-your-key-here"

Step 1: Add LeadOcean to Cursor

Cursor reads remote servers from mcp.json. Use ~/.cursor/mcp.json for every project, or .cursor/mcp.json inside one project. Sign-in is OAuth in your browser, so no key is pasted.

json
{
  "mcpServers": {
    "leadocean": {
      "url": "https://api.leadocean.io/mcp"
    }
  }
}

Save the file, open Customize in the sidebar, enable leadocean and start the sign-in. Approve it on the LeadOcean page. The server exposes 13 tools. Button labels vary by Cursor version, and the full walkthrough is on Connect LeadOcean to Cursor.

Step 2: Write the buyer in one sentence

A market size is only as good as the buyer definition behind it. Write one sentence that names the industry, company size and role. Keep it to filters LeadOcean holds.

text
Buyer: engineering leaders (VP or Director, Engineering) at software companies
with 51 to 500 employees. Product: a developer tool. Question: how big is the
market, how much of it can I sell into from the US, and how many VPs is that?

Everything after this step turns that sentence into counts. For the method behind the tiers, see TAM, SAM and SOM.

Step 3: Resolve the exact filter values

Filter values are exact strings. "Software" is not an industry value, and "Software Development" is. Make Cursor look each value up before it counts anything.

text
Use leadocean_list_enum_values to find the exact strings for: industry (software),
employee_range, job_level and job_function (engineering). Show me the values you
will use. Do not call any tool that spends records.

Cursor asks for approval before it runs an MCP tool, by default. The arrow beside the tool name shows the arguments, so read them. For this buyer, the lookup should settle on these values.

json
{
  "industry": ["Software Development"],
  "employeeRange": ["51-200", "201-500"],
  "jobLevel": ["VP", "Director"],
  "jobFunction": ["Engineering"]
}

Step 4: Count TAM, SAM and SOM

Ask for one count per tier. Each tier keeps the filters above it and adds one. The prompt tells Cursor to use only the free count tool and to label each number.

text
Use leadocean_count_leads, with facets false, for four counts. Never call a tool
that spends records.
1. TAM: jobLevel VP and Director, jobFunction Engineering, industry Software
   Development. No size or country filter.
2. Add employeeRange 51-200 and 201-500.
3. SAM: add country US.
4. SOM pool: same as 3, but jobLevel VP only.
Put the results in a table with the exact filters beside each count. Say which
email statuses were counted.

A count is a people count. To turn it into dollars you need accounts, and leadocean_count_companies counts those for free. It takes the company-search filters and breaks the total down by industry, headcount band, HQ country, HQ state and NAICS.

text
Use leadocean_count_companies with industry ["Software Development"],
employeeRange ["51-200","201-500"], hqCountry ["US"]. Report the total and
the split by headcount band. Multiply the total by my contract value of $X.

Give Cursor your own price, since LeadOcean holds no figure for your product. The REST version is /v1/companies/count, also free.

Step 5: Check one count over REST

You can reproduce any chat count from a terminal. The sizing call is a search with count=true as a query parameter and limit at 1. The body is flat JSON with arrays.

bash
curl -s "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{
    "jobLevel": ["VP", "Director"],
    "jobFunction": ["Engineering"],
    "industry": ["Software Development"],
    "employeeRange": ["51-200", "201-500"],
    "country": ["US"],
    "emailStatus": ["verified", "catch_all_valid", "catch_all"],
    "limit": 1
  }' | jq '.meta'

The REST total is capped at 100,000. For a bigger market, use the MCP count tool, which returns the total with totalIsExact beside it.

What you get

We ran the four counts from Step 4 on 2026-10-01 with leadocean_count_leads. Each one spent 0 records, and each total was exact.

TierFilters addedMailable people
TAMVP and Director, Engineering, Software Development20,405
Narrowed+ employeeRange 51-200 and 201-5004,658
SAM+ country US2,430
SOM poolVP only937

Every figure is a mailable count: people with a verified, catch_all_valid or catch_all email, which is the tool's default. It is not everyone we hold for those filters, so label it that way in your deck.

Here is the raw result for the SAM row, as the tool returned it.

json
{
  "total": 2430,
  "totalIsExact": true,
  "credits": 0,
  "sample": 1,
  "hasMore": true,
  "unsupportedFilters": []
}

Read the table as a funnel. Of 4,658 mailable people at 51 to 500 employee companies, 2,430 sit in the US, and 937 of those are VPs. Your numbers will move as the data changes, so date every count you publish.

The account count ran on 2026-10-21 with leadocean_count_companies and spent 0 records. It found 11,577 US-headquartered Software Development companies with 51 to 500 staff, exact: 9,261 at 51-200 and 2,316 at 201-500. At a $10,000 contract value that is a $115.8M account TAM. Swap in your own price.

The people counts leave out funding, revenue and headquarters city or state filters, which the people count tool does not support. Use leadocean_count_companies for those cuts, or apply them at search time. Total spend for the run: 0 records.

Troubleshooting

ErrorCauseFix
Cursor cannot reach the serverA typo in the URL, invalid JSON in mcp.json, the server toggled off, or an admin URL allowlistCheck the URL is exactly https://api.leadocean.io/mcp and the file parses. On an Enterprise plan, ask your admin to allow it.
401Missing, wrong or revoked key on a REST callRe-copy the key from app.leadocean.io and export $LEADOCEAN_API_KEY again.
429Above your plan's rate per account (5 requests a second on Free, 200 on Agency)Wait the Retry-After seconds, then slow the loop. Five counts need nothing near that rate.
402Free plan: the 1,000 records are spentCounts stay free. Check leadocean_get_account, or move to Solo at $97 a month. Free records do not reset.
Empty results or a count of 0A filter value outside the catalogue, such as industry: "Software"Ask Cursor to call leadocean_list_enum_values and use the exact string it returns.
Total stops at 100,000The REST count is capped at 100,000Use leadocean_count_leads, or add a filter and count the pieces.

FAQ

How many records does sizing a TAM in Cursor cost?

Zero. Counts, filter lookups and enum lookups are free, however many you run. Records are spent only on people returned by a search, a lookup or an export.

Is a people count the same as a market size?

No. It is the number of reachable buyers in a segment. Count accounts with leadocean_count_companies, multiply by your contract value to get dollars, and use your own price for that step.

Why does the count say "mailable"?

The count tool defaults to verified, catch_all_valid and catch_all emails. Pass emailStatus, hasEmail or reachable to change that. Say which one you used next to every number.

How often should I re-run the counts?

Once a month is enough. The dataset is refreshed monthly, and each record carries its own fetched_at date. Keep the filters fixed in a file in your repo, re-run the same prompt, and compare totals by date.

Can I pull the whole SAM into a list?

Not in one search. One search pages to 10,000 rows, and the capped page carries meta.depthCapped. Split the SAM by country or headcount band, or use an export from Solo up, which takes up to 50,000 rows a request.

Does Cursor see my API key?

Not through the MCP server. It uses OAuth sign-in and no key sits in mcp.json. Only the optional REST check reads $LEADOCEAN_API_KEY from your shell.

Can I do this in another editor?

Yes. The same MCP URL works elsewhere. See size your TAM in VS Code, in Windsurf and in Claude. More recipes are on the MCP hub.

Size your market in Cursor, free

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →