listriver-mcp
OfficialThis MCP server lets AI assistants query ListRiver's official U.S. business registry data with free counts, covered-state summaries, and paid record retrieval.
List covered states and business counts by formation window: recent, year, or all (free).
Count businesses matching filters for state, city, county, ZIP, NAICS, entity type, phone/email presence, and formation dates (free).
Search and retrieve matching business records, default 25 and up to 100 per call, with cursor-based pagination.
Use the same filters for counts and searches, and fetch only needed records because returned records consume the user's ListRiver record quota.
ListRiver Business Data API
New and active U.S. businesses from official state business registries (Secretary of State filings), as JSON. New LLCs, corporations, nonprofits and partnerships, filtered by state, city, county, ZIP, NAICS industry, entity type, formation month, and whether a phone or email is on file.
Free key: 500 records a month, no card needed: get one here
Full documentation with a live "Try it" panel and examples in cURL, Python, JavaScript, C# and PHP: listriver.com/api-docs
Python client:
pip install listriver(source)OpenAPI 3 spec: openapi.yaml (import into Postman, Insomnia, Swagger UI or an AI agent)
MCP server for Claude and other AI assistants, source in
mcp/:uvx listriver-mcp
Typical uses: lead lists of brand-new businesses (formed this month), CRM enrichment, sales territory research, KYB and business verification, market sizing, and B2B prospecting by industry and place.
Quick start (2 minutes)
Create a free API account and click the link in the confirmation email.
On the API page, click Get my free API key and copy it.
Count a search (free), then pull the records:
# How many businesses formed in Miami in the last few months have a phone number? (free)
curl -H "X-Api-Key: YOUR_KEY" "https://listriver.com/api/data.ashx?action=count&states=FL&city=MIAMI&hasPhone=1&formedWithin=3"
# The first 10 of them
curl -H "X-Api-Key: YOUR_KEY" "https://listriver.com/api/data.ashx?action=records&states=FL&city=MIAMI&hasPhone=1&formedWithin=3&limit=10"{
"ok": true,
"rows": [
{
"businessName": "ANGELI TRAVEL LLC",
"entityType": "LIMITED LIABILITY COMPANY",
"status": "ACTIVE",
"formed": "2026-08",
"registrationState": "FL",
"stateFilingNumber": "L26000446708",
"address": "2125 BISCAYNE BLVD, STE 204 #27572",
"city": "MIAMI",
"zip": "33137",
"county": "MIAMI-DADE",
"phone": "(786) 298-9566",
"website": "HTTPS://ANGELITRAVELS.COM",
"registeredAgent": "ULLOA SANCHEZ YUDELSA",
"listriverId": "FL-L26000446708",
"...": "35 fields in all"
}
],
"cursor": "FL.6604750",
"resume": "FL.6604750"
}Python
from listriver import Client
lr = Client("YOUR_KEY")
search = dict(states="FL", city="MIAMI", has_phone=True, formed_within=3)
print(lr.count(**search)) # free
for business in lr.records(**search, max_records=100):
print(business["businessName"], business["phone"])More: examples/ (Python, JavaScript, curl) and the recipes (also C# and PHP).
Related MCP server: Echo MCP Server
MCP server (source in this repo)
This repository contains a Model Context Protocol server for ListRiver, written in Python:
mcp/listriver_mcp/server.py (package mcp/, tests in mcp/tests/,
MIT license). It runs over stdio and gives AI assistants (Claude Desktop, Claude Code, Cursor and other MCP clients) three tools:
Tool | What it does | Cost |
| States covered and their record counts | free |
| How many businesses match a search (state, city, county, ZIP, NAICS, entity type, formation month, phone/email on file) | free |
| The matching businesses, 25 by default and up to 100 per call, with a cursor for more | counts against your records |
The server tells the assistant to count first and to fetch only what you need.
Install from PyPI (published from this repo's mcp/ folder) and add it to Claude Desktop (Settings > Developer > Edit Config):
{
"mcpServers": {
"listriver": {
"command": "uvx",
"args": ["listriver-mcp"],
"env": { "LISTRIVER_API_KEY": "lr_key_..." }
}
}
}Or run it from source:
git clone https://github.com/ListRiver-LLC/listriver-api && cd listriver-api
pip install ./python ./mcp
LISTRIVER_API_KEY=lr_key_... listriver-mcp
# or with Docker, using the Dockerfile in this repo
docker build -t listriver-mcp .
docker run -i --rm -e LISTRIVER_API_KEY=lr_key_... listriver-mcpSetup for other clients: mcp/README.md. Listed in the official MCP Registry as io.github.ListRiver-LLC/listriver.
Calls
Every call is an HTTPS GET to https://listriver.com/api/data.ashx with your key in the X-Api-Key header.
| What it returns | Cost |
| Available states and record counts per formation window | free |
| How many records match your filters, per state | free (20 calls a minute) |
| Up to 1,000 matching records per call; pass | each record returned counts |
Filters
records and count take the same filters. A record must match all of them; where a filter takes several
comma-separated values, any one of them matches.
Parameter | Example | What it does |
|
| Registration states (leave out for all) |
|
| Business city (needs |
|
| Business county (needs |
|
| 5-digit ZIPs or 3-digit prefixes (needs |
|
| NAICS industry prefix, 2 to 6 digits |
|
|
|
|
| Only businesses with a phone / email on file |
|
| Formed this month or in the N months before it |
|
| Formed in this range of months |
|
| Shortcut windows |
Formation dates are month-level (registries publish the month), so windows are whole calendar months.
Pricing
Plan | Records | Price |
Free | 500 / month | $0 |
Prepaid packs | 5,000 / 7,500 / 10,000 (use within 12 months) | $50 / $75 / $100 |
Monthly plans | 5,000 / 12,000 / 28,000 / 75,000 per month | $50 / $100 / $200 / $450 |
AWS Marketplace | larger volumes, billed on your AWS invoice | see listing |
Only records returned count, and each record counts every time it is returned: overlapping or repeated searches
count again. Count first (free), save the cursor or resume position to carry on later, and use listriverId to
de-duplicate. Packs and plans are on your API page. Current prices are always
on listriver.com/api-docs.
Keeping a feed up to date
Every records answer includes resume: the position after the last record returned, even on the last page. Save it per
state, and pass it as cursor next time to get only the businesses ListRiver has added since. See
examples/python/daily_feed.py.
Sample data
sample-data/ has a small sample of recent Florida formations (CSV and JSON, no emails) so you can judge the data before signing up. It is a sample, not a full file.
Data and terms
Records come from official state business registries, with addresses standardized and contact details, NAICS codes and
EINs added where available. A field is null when the state doesn't publish it or ListRiver doesn't have it; nothing is
estimated. Coverage and update schedules: listriver.com/methodology.
The code in this repository is MIT-licensed. The data (including sample-data/) is covered by the
ListRiver API agreement: for your own business use, not for resale,
and not for credit, insurance, employment or housing decisions.
Questions: support@listriver.com
Available Tools
3 toolscount_businessesARead-onlyIdempotent
Count businesses matching the filters, per state. Free: use it before search_businesses.
Args:
states: Comma-separated two-letter registration states, e.g. "FL" or "FL,TX". Required with city, county or zip.
city: Comma-separated business cities, e.g. "MIAMI".
county: Comma-separated counties, e.g. "MIAMI-DADE" (or "FL:MIAMI-DADE").
zip: Comma-separated 5-digit ZIP codes or 3-digit ZIP prefixes, e.g. "33139,331".
naics: Comma-separated NAICS prefixes, 2-6 digits, e.g. "23" (construction) or "722511".
entity_type: Comma-separated of LLC, CORP, LP, LLP, NONPROFIT, OTHER.
has_phone: Only businesses with a phone number on file.
has_email: Only businesses with an email on file.
formed_within: Formed in the current month or the N months before it (1 = this month or last). Set 0 for any formation date.
formed_from: First formation month, "YYYY-MM" (overrides formed_within).
formed_to: Last formation month, "YYYY-MM" (overrides formed_within).
Inputs: zip, city, naics, county, +7 more. Returns: result
list_statesARead-onlyIdempotent
List the states ListRiver covers, with how many businesses each has: formed this month or last ("recent"), in the last 12 months ("year"), and every active business ("all"). Free.
Inputs: no named parameters. Returns: result
search_businessesARead-onlyIdempotent
Get businesses matching the filters (same filters as count_businesses). USES THE USER'S RECORDS: each business returned counts, every time it is returned, so ask only for what the user needs.
Args:
states: Comma-separated two-letter registration states. Required with city, county or zip.
city: Comma-separated business cities.
county: Comma-separated counties.
zip: Comma-separated 5-digit ZIP codes or 3-digit prefixes.
naics: Comma-separated NAICS prefixes, 2-6 digits.
entity_type: Comma-separated of LLC, CORP, LP, LLP, NONPROFIT, OTHER.
has_phone: Only businesses with a phone number on file.
has_email: Only businesses with an email on file.
formed_within: Formed in the current month or the N months before it (1 = this month or last; 0 = any date).
formed_from: First formation month, "YYYY-MM".
formed_to: Last formation month, "YYYY-MM".
limit: How many businesses to return, 1-100 (default 25).
cursor: The cursor from a previous search_businesses answer, to get the next businesses of the same search.
Inputs: zip, city, limit, naics, +9 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
Each tool has a clearly distinct role: list_states returns coverage/metadata, count_businesses returns free aggregate counts, and search_businesses returns paginated records that consume the user's quota. The descriptions explicitly frame the intended workflow (count first, then search only what you need), leaving no realistic chance of misselection.
All three names follow a strict verb_noun snake_case pattern (list_states, count_businesses, search_businesses) with the noun consistently referring to the domain entity. No mixed conventions or vague verbs.
Three tools map exactly onto the three capabilities the service exposes: coverage, free counting, and metered record retrieval. Nothing is redundant and nothing feels padded, making the small surface well-scoped rather than thin.
The lifecycle is well covered: discover states, filter/count, then page through results with a cursor, and search shares the same rich filter set as count. The main gaps are the absence of a name/text filter and any single-record lookup, which agents may expect when researching a specific business.
Maintenance
Related MCP Connectors
MCP server for Riveter's enrichment, scraping, and monitoring API
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for accessing curated awesome list documentation
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceOfficial MCP Server for Buildkite.56MIT
- FlicenseNot gradedqualityDmaintenanceA simple demonstration MCP server that provides an echo tool and resource for learning how to build MCP servers. Serves as a starting point and template for creating custom MCP server implementations.1-
- FlicenseNot gradedqualityDmaintenanceA demonstration MCP server implementation with Docker support that provides a simple hello-world tool and includes a web-based inspector for interactive testing and exploration of MCP tools.-
- AlicenseNot gradedqualityDmaintenanceThe most complete open-source MCP server for Discord — 80+ tools, dual-mode: integrated (plugin) or standalone51 npm14MIT