Documentation
Streamable HTTP MCP. Four public-data tools. Parameters and return fields below derive from the running definitions and response allowlist.
max_results is a strict integer from 1 to 25, default 10. Queries are trimmed and limited to 1 to 200 characters. Unknown parameters are rejected.
find_businesses
Find businesses by category and location, with addresses, websites, phone numbers and ratings.
| Name | Presence | Type and limits |
|---|---|---|
query | Required | {"maxLength": 200, "minLength": 1, "type": "string"} |
max_results | Default: 10 | {"maximum": 25, "minimum": 1, "type": "integer"} |
location | Required | {"maxLength": 200, "minLength": 1, "type": "string"} |
Response: {"records": [...], "count": number}. Each record contains: name, website, phone, address, latitude, longitude, rating. Missing source values are null; fewer matches than requested, including zero, are valid.
find_shopify_stores
Find Shopify stores by product niche and country served, with websites and available business contacts.
| Name | Presence | Type and limits |
|---|---|---|
query | Required | {"maxLength": 200, "minLength": 1, "type": "string"} |
max_results | Default: 10 | {"maximum": 25, "minimum": 1, "type": "integer"} |
country | Default: "" | {"enum": ["", "US", "GB", "CA", "AU", "NZ", "IE", "DE", "FR", "IT", "ES", "NL", "PL", "AT", "CH", "PT", "SE", "DK", "FI"], "type": "string"} |
Response: {"records": [...], "count": number}. Each record contains: name, website, domain, email, phone, city, country, rating. Missing source values are null; fewer matches than requested, including zero, are valid.
find_suppliers
Find industrial suppliers by product, material or service, with company descriptions and business contacts.
| Name | Presence | Type and limits |
|---|---|---|
query | Required | {"maxLength": 200, "minLength": 1, "type": "string"} |
max_results | Default: 10 | {"maximum": 25, "minimum": 1, "type": "integer"} |
Response: {"records": [...], "count": number}. Each record contains: name, website, phone, description, city, region, country. Missing source values are null; fewer matches than requested, including zero, are valid.
search_reddit
Find Reddit discussions or comments about a topic, with text excerpts, links and scores.
| Name | Presence | Type and limits |
|---|---|---|
query | Required | {"maxLength": 200, "minLength": 1, "type": "string"} |
max_results | Default: 10 | {"maximum": 25, "minimum": 1, "type": "integer"} |
subreddit | Default: "" | {"pattern": "^[A-Za-z0-9_]{0,30}$", "type": "string"} |
sort | Default: "relevance" | {"enum": ["relevance", "new", "top"], "type": "string"} |
content_type | Default: "posts" | {"enum": ["posts", "comments"], "type": "string"} |
Response: {"records": [...], "count": number}. Each record contains: title, text, url, subreddit, author, score, created_at, type. Missing source values are null; fewer matches than requested, including zero, are valid.
Authentication
Send an API key in Authorization: Bearer YOUR_API_KEY. Get a Free key instantly: 50 calls/month, no card. Business status and Terms acceptance plus human verification are required. Paid keys are issued after confirmed Checkout and claimed once. Both signup flows require an explicit accept_terms: true.
The Free form posts accept_terms and turnstile_token to /free/claim. A verified claim returns api_key once, without creating a Stripe customer. Signup permits one key per client address per rolling 24 hours and at most 200 keys per UTC day. The endpoint fails closed when verification is unavailable. A lost response cannot be replayed to recover a key.
OAuth uses authorization code with S256 PKCE and dynamic registration. A paid key is required at consent. Discover /.well-known/oauth-protected-resource/mcp and /.well-known/oauth-authorization-server. Scope: tools:call. Use the canonical MCP URL as the resource.
Endpoints: /oauth/register, /oauth/authorize, /oauth/token, /oauth/revoke. Public clients use authentication method none; confidential clients use client_secret_basic or client_secret_post. Callbacks must exactly match registered HTTPS or loopback HTTP URLs.
Authorization codes expire after 60 seconds and are single use. Access tokens last at most one hour. Refresh grants last 30 days from consent; rotate refresh tokens on exchange. Revocation or loss of paid key access also blocks the grant.
Quotas and limits
Initialize and tool listing require no key and consume no calls. Successful searches consume one call. Failed or canceled calls release their reservations. Free quotas use UTC calendar months; paid quotas use subscription periods. Keys for the same customer share the respective Free or paid allowance.
At most two concurrent calls and 30 call attempts per rolling 60 seconds per customer, or per key when no customer is assigned. Rate and concurrency limits are shared across Free and paid keys belonging to one customer. Search execution times out after 100 seconds; billing delivery may add a short wait.
OAuth registration permits 10 requests per client address per minute, other OAuth operations 60, with a shared ceiling of 300 per minute. Registration is limited to eight callbacks and 10,000 stored clients.
Errors
Tool results use MCP error responses for invalid fields, quota exhaustion, rate limits and unavailable searches. Missing or invalid tool-call credentials produce HTTP 401 with resource metadata in the application entrypoint. Invalid credentials, revocation and expired paid periods deny access.
For a monthly call limit, wait for reset or contact support. For a rate limit, wait and retry. For unavailable searches, retry shortly with a narrower query. Do not repeatedly retry invalid input or authentication failures. No successful-call usage is charged for failed searches.
Billing JSON endpoints return 400 for rejected requests, 503 for temporary failures, and Cache-Control: no-store. A pending payment claim can be retried with the same session and claim token; a successful claim cannot be repeated.