Lyre Leads
REMOTE · LYRELEADS.COM
Every business of a kind in a city, from Google Maps, read from its website, with verified emails.
Available components
Last scanned (15 hours ago)
Scores higher than 57% of remote servers
Reachable. Last reached 22 Oct 2026.
Category CRM and Sales
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security63
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (search_areas). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability63
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4391 tokens (~292/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 15 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 21 Oct 26 +1
- The server rewrote its instructions, which are the text every model session reads security
- Tool “get_search_results” rewrote its description, which is the text the model reads security
- Tool “list_results” rewrote its description, which is the text the model reads security
- “get_search_results” reworded the description of “limit” cosmetic
- 19 Oct 26 +1
- Tool “find_contacts” rewrote its description, which is the text the model reads security
- “estimate_list” reworded the description of “include_contacts” cosmetic
- 18 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “enrich_leads” rewrote its description, which is the text the model reads security
- Tool “enroll_leads” rewrote its description, which is the text the model reads security
- Tool “estimate_area_search” rewrote its description, which is the text the model reads security
- Tool “estimate_list” rewrote its description, which is the text the model reads security
- Tool “find_contacts” rewrote its description, which is the text the model reads security
- Tool “get_balance” rewrote its description, which is the text the model reads security
- Tool “search_areas” rewrote its description, which is the text the model reads security
- Tool “search_leads” rewrote its description, which is the text the model reads security
- “count_saved_leads” reworded the description of “enrolled” cosmetic
- “estimate_list” reworded the description of “include_contacts” cosmetic
- Tool “get_balance” changed its title: Lead balance → Token balance cosmetic
- 17 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “find_contacts” rewrote its description, which is the text the model reads security
- Tool “get_balance” rewrote its description, which is the text the model reads security
- Tool “get_search_results” rewrote its description, which is the text the model reads security
- Tool “list_results” rewrote its description, which is the text the model reads security
- Tool “preview_search” rewrote its description, which is the text the model reads security
- Tool “search_leads” rewrote its description, which is the text the model reads security
- Schema quality: 235 → 280 ▼ functional
- “get_search_results” added an optional parameter “detail” cosmetic
- “list_results” added an optional parameter “detail” cosmetic
- “list_results” added an optional parameter “wait_seconds” cosmetic
- “list_results” reworded the description of “limit” cosmetic
- Tool “preview_search” changed its title: Preview a search (no account) → Free sample, nothing saved cosmetic
- 16 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 0
- Stability: unverified → 0.03 ▲ functional
- 14 Oct 26 65
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 22 Oct 2026 · Probed https://lyreleads.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=lyreleads.com | CN=WE1,O=Google Trust Services,C=US | 31 Aug 2026 | 29 Nov 2026 | ECDSA 256 | ECDSA-SHA256 | 63dc8077580ad700e1e827698e693ec |
| SANs: lyreleads.com, *.lyreleads.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of lyreleads.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| lyreleads.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains; preload |
| content-security-policy | default-src 'self';script-src 'self' 'unsafe-inline' 'unsafe-eval' https://js.stripe.com https://accounts.google.com https://apis.google.com;style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;font-src 'self' https://fonts.gstatic.com;img-src 'self' data: https: blob:;connect-src 'self' https://api.stripe.com https://accounts.google.com https://google.serper.dev;frame-src 'self' https://js.stripe.com https://accounts.google.com;object-src 'none';upgrade-insecure-requests;base-uri 'self';form-action 'self';frame-ancestors 'self';script-src-attr 'none' |
| x-content-type-options | nosniff |
| x-frame-options | SAMEORIGIN |
| referrer-policy | strict-origin-when-cross-origin |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://lyreleads.com/mcp | Verified | 200 | |
| http (plaintext) | http://lyreleads.com/mcp | HTTPS enforced | 301 | https://lyreleads.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
count_saved_leads Count saved leads ~667
FREE and exact. Counts leads THIS ACCOUNT has already searched and saved, matching any combination of filters, with a breakdown of how many are enriched, have an email, have a contact email, or have been relevance-checked. Use it to size a job over data the account already owns before spending: "how many of my saved roofers have no CRM and a verified email". CRITICAL: this is NOT an inventory of what Lyre Leads can find, and a small result here means the account has not searched much yet, nothing more. Never report this number to a user as the amount of data available, and never use it to answer "how many X do you have" — call estimate_list for that.
| Name | Type | Req | Description |
|---|---|---|---|
| ai_crawler_access | string | – | One of: open, partial, blocked, unknown. "blocked" = the site is invisible to AI search engines. |
| city | string | – | Substring match on city |
| country | string | – | Substring match on country |
| email_verification_status | string | – | One of: verified, catch_all, unknown, invalid |
| enrichment_status | string | – | One of: enriched, pending, unverifiable, no_website, failed |
| enrolled | boolean | – | true = enrolled in enrichment: re-checked about monthly at no charge. Every business a search found is enrolled. false = not enrolled (usually imported); enroll_leads enrolls it at one token per two… |
| has_cms | boolean | – | true = a CMS was detected. false = enriched and none detected (custom/hand-built site). |
| has_contact_email | boolean | – | true = a named contact address is on file. |
| has_crm | boolean | – | true = a CRM was detected. false = enriched and none detected. This is the classic "they have no CRM, sell them one" filter. |
| has_email | boolean | – | true = has a business email. false = enriched and confirmed to have none (excludes never-checked rows). |
| has_website | boolean | – | true = has a website. false = enriched and confirmed to have none. |
| max_rating | number | – | Maximum Google star rating. Use with min_reviews to find well-reviewed but poorly-rated businesses. |
| max_reviews | integer | – | Maximum Google review count |
| min_rating | number | – | Minimum Google star rating |
| min_reviews | integer | – | Minimum Google review count |
| query | string | – | Substring match on the search keyword that found the lead, e.g. "roofing" |
| relevance | string | – | One of: yes, no, unclear. Did a model reading the business website judge it to be the kind of business this row's own search query asked for? Runs inside enrichment at no extra cost, and every verdic… |
| search_id | string | – | Restrict to one batch from search_leads |
| type | string | – | Substring match on the Google Maps business category, e.g. "Dentist" |
No output schema declared.
No examples provided.
enrich_leads Enrich leads ~179
Fetch each lead's website and extract 50+ fields: business email, social profiles, CMS, CRM, email-marketing platform, chat widget, booking system, ad pixels, analytics, schema, SSL, page load, domain age, mail host, and AI-crawler policy. Costs one token per five businesses, on any business you hold, and does not enroll it. Every address it finds is verified at no extra charge. To keep businesses current, use enroll_leads instead. Runs in the background, returns a job id, poll it with get_job_status. Every field follows the three-state contract: a value, a confirmed absence, or unknown.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | Re-enrich rows that already have data (use to refresh stale enrichment). Default false. |
| result_ids | array | yes | Lead ids from list_results |
No output schema declared.
No examples provided.
enroll_leads Keep leads current ~129
Enroll leads in enrichment so they stay current: each lead is enriched now and re-checked about once a month for as long as the user keeps it, with change signals when something moves. Costs one token per two businesses, paid once. Businesses a search found are already enrolled for free; already-enrolled leads and leads without a website are skipped at no cost. Use it for the imported or chosen leads the user cares about most. Runs in the background and returns a job id: poll get_job_status with kind "enrich".
| Name | Type | Req | Description |
|---|---|---|---|
| result_ids | array | yes | Lead ids to enroll |
No output schema declared.
No examples provided.
estimate_area_search Size an area search ~168
FREE, no account needed. Size a search_areas run before starting it: how many grid points, and, when the user's account is connected, how many areas it already covers for the query (those are skipped). It cannot give an exact cost, because billing is 1 token per NEW business found (one new lead costs one token) and nobody knows how many exist before looking.
| Name | Type | Req | Description |
|---|---|---|---|
| areas | array | yes | Area names like "Houston, Texas", or ids from find_areas |
| country | string | yes | Country name, as listed by find_areas |
| mode | string | – | grid covers the whole area (default here); city pages from the centre and is cheaper for small towns |
| query | string | yes | Business keyword, e.g. "roofing contractor" |
No output schema declared.
No examples provided.
estimate_list Price a list ~218
FREE, no account needed. Answers "what would it cost to find me N businesses, and what data comes with each one". Returns an exact cost in tokens broken down by stage (search, enrichment, contact discovery; one new lead costs one token), and when the user's account is connected its balance and the maximum businesses affordable right now, and the full list of data points each lead arrives with. THIS is the tool to use when a user asks what Lyre Leads can get them. Do NOT use count_saved_leads for that question: Lyre Leads generates leads on demand from a live Google Maps search and does not sell access to a stored pile of them, so a count of what an account already holds is not a measure of what is available.
| Name | Type | Req | Description |
|---|---|---|---|
| include_contacts | boolean | – | Also find the named contacts at each business on the open web and verify their mailboxes. Default false. 2 tokens per person found, verification included. |
| lead_count | integer | yes | How many businesses the user wants found (1-100000) |
No output schema declared.
No examples provided.
find_areas Find search areas ~149
FREE, no account needed. Look up the areas search_areas accepts in a country, most populous first, each with an id. Call without q to browse; call with no country to get the list of countries. When a place name is shared (the US list has four Houstons and thirteen Springfields), pass the id of the one the user means to search_areas.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | Country name, e.g. "United States". Omit to list countries. |
| limit | integer | – | Max areas (default 20, max 100) |
| q | string | – | Part of a place name, case-insensitive, e.g. "hous" |
No output schema declared.
No examples provided.
find_contacts Find named contacts ~232
For leads with a website but no named contact, search the open web for the people the business names (owner, founder, director), then resolve and verify their email in the same run. Costs 2 tokens per person found, verification included; the run reserves 2 tokens per business up front and settles on what it delivered, so the most a run can cost is 2 tokens per lead id sent. Separate from enrichment, which already lists the people a business's own site names, with a verified email where one exists, at no extra charge. This is what reaches local business owners who are not in any LinkedIn-derived contact database. Returns a job id, poll with get_job_status. Outcomes per lead: verified (SMTP-confirmed), published (the address is printed on the company's own site but the domain is catch-all so SMTP cannot confirm it), catch_all (person named, no address obtainable), or searched (no name found).
| Name | Type | Req | Description |
|---|---|---|---|
| result_ids | array | yes | Lead ids to search. Only leads with a website and no personal email yet are eligible; ineligible ids are skipped and not charged. |
No output schema declared.
No examples provided.
get_balance Token balance ~148
Get the account's token balance and plan. Plans are sold in leads and every price is in tokens: one new lead (a business found by a search, with enrichment, relevance check, verified address and the monthly re-check included) costs one token. Businesses the account already holds: enrichment is one token per five, enrolling in the monthly re-check one token per two. A named contact found on the open web costs 2 tokens, charged only when a person is found. Email verification is included at no charge. Unused tokens roll over, up to three months' allowance. Plans are bought and changed on the Lyre Leads website, not through these tools; the result carries the link.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_job_status Check a background job ~125
Poll a background job started by search_areas, enrich_leads, enroll_leads (kind "enrich"), find_contacts or verify_emails. Pass the job id and its kind. Long jobs are normal: a grid search works through many map points, and enrichment fetches every website in the batch.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | Job id returned by the starting tool |
| kind | string | yes | Which tool started it: search (search_areas), enrich (enrich_leads, enroll_leads), contacts (find_contacts), verify (verify_emails) |
No output schema declared.
No examples provided.
get_search_results Read a search's leads ~281
FREE. Read the leads a search_areas job found, up to 100 per page. Accepts the same filters as the Lyre Leads database, passed as filters, e.g. {"relevanceYes": true, "hasVerifiedEmail": true, "noFBPixel": true}. Each lead comes back compact by default: contact details, business email and its verification state, named contact, relevance verdict with its evidence, software and signals, plus a summary and next steps; detail "full" returns every database field. The summary counts every lead in the search (or every lead the filters match), not only the page, so one read answers how many have emails, contacts or no contact yet; read further pages only when the user asks to see more leads. Enrichment keeps landing for a while after the search finishes, so re-read if leads are still enriching.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | compact (default) or full (every field, much longer) |
| filters | object | – | Database filter parameters as key/value pairs, e.g. {"relevanceYes": true, "minReviews": 100} |
| job_id | string | yes | job_id returned by search_areas |
| limit | integer | – | Leads per page (default 50, max 100) |
| page | integer | – | Page number, from 1 |
No output schema declared.
No examples provided.
list_results List saved leads ~233
FREE. Read saved leads with what enrichment found: business email and its verification state, named contact (name, title, email and its state), the relevance verdict with the sentence from the business's own site, software (CMS, CRM, booking, chat, email marketing), technologies and signals. Pass the search_id from search_leads to read that search; wait_seconds (up to 45) first waits for enrichment still running on it. Returns a compact view with a summary and next steps; with a search_id the summary counts the whole search, not only the page. detail "full" returns every field.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | compact (default) or full (every field, much longer) |
| limit | integer | – | Max rows to return (default 50, max 100) |
| offset | integer | – | Pagination offset |
| search_id | string | – | Batch id returned by search_leads (optional: omit for all results) |
| wait_seconds | integer | – | With search_id: wait up to this many seconds for enrichment to finish before reading. 40 right after search_leads. |
No output schema declared.
No examples provided.
preview_search Free sample, nothing saved ~257
FREE sample, no account: the first page (up to 20) of ONE Google Maps search for a kind of business in a place, with phones partly hidden. Nothing is saved or enriched, and it returns no emails, contacts or software. Use it only when the user asks for a preview or a sample, or has no account connected and wants to see what comes back. When the user asks to search, find, pull or list businesses, use search_leads (one city, answered at once) or search_areas (whole cities) instead, even for a single page: they save the businesses to the user's account and enrich them, and calling one starts sign-in if the account isn't connected yet. Places look like "Houston, TX", "Copenhagen" or "Lyon, France"; a shared name picks the largest and lists the others.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | – | Optional country name, if the place name alone is ambiguous across countries |
| place | string | yes | City or town, optionally with state and country, e.g. "Houston, TX" or "Aarhus, Denmark" |
| query | string | yes | Kind of business, e.g. "roofing contractor" or "hair salon" |
No output schema declared.
No examples provided.
search_areas Search whole areas ~272
The search to use for coverage. Sweeps each area with a grid of map points live against Google Maps, as a background job, the same search the Lyre Leads Search page runs. In Houston this found 1,061 roofing contractors where paging from one centre found 255. Costs 1 token per NEW business (one new lead costs one token); listings the account already holds cost nothing (a small per-page minimum applies). Every new business is enriched, relevance-checked, its address verified, and enrolled in the monthly re-check automatically. Returns job_id: poll get_job_status with kind "search" until finished is true, then read the leads with get_search_results. If an area name fits more than one place, the call returns the candidates with ids and starts nothing: ask the user which one they mean and resend with that id. At most two searches run at once per account.
| Name | Type | Req | Description |
|---|---|---|---|
| areas | array | yes | Area names like "Houston, Texas", or ids from find_areas |
| country | string | yes | Country name, as listed by find_areas |
| mode | string | – | grid (default here) covers the whole area; city pages from the centre |
| query | string | yes | Business keyword, e.g. "roofing contractor" or "cosmetic dentist" |
No output schema declared.
No examples provided.
search_leads Quick one-city search ~283
Search ONE city on the user's account and get the businesses back in the same call: 1 to 5 result pages from the city centre, about 20 per page. Use it when the user asks for a quick search, a page of results or one town; for a whole city or several, use search_areas, which finds several times more. Costs 1 token per NEW business (one new lead costs one token); ones the account already holds are free. Every new business is then enriched from its own website in the background, about two minutes for 20: business email with its verification state, a named contact where the site names one, the software it runs, and a check that it really is the kind of business searched for. Returns the Maps listing and a search_id. Then call list_results with that search_id and wait_seconds 40, and show the user what enrichment found, not only the listing.
| Name | Type | Req | Description |
|---|---|---|---|
| city | string | yes | City name, e.g. "Austin" |
| country | string | yes | Country name, e.g. "United States" |
| pages | integer | – | Result pages to pull, 1-5 (about 20 results per page). Default 1. |
| query | string | yes | Business keyword, e.g. "roofing contractor" or "cosmetic dentist" (max 200 chars) |
No output schema declared.
No examples provided.
verify_emails Verify emails ~131
SMTP-verify the business emails on saved leads through MillionVerifier. Included in every plan at no charge; a re-check within 90 days reuses the cached verdict. Runs in the background and returns a job id: poll get_job_status with kind "verify" until status is completed, then read the summary. Each address ends in one of four honest states: verified, catch_all (the domain accepts everything, so deliverability cannot be proven), unknown, or invalid. Never treat catch_all as verified.
| Name | Type | Req | Description |
|---|---|---|---|
| result_ids | array | yes | Lead ids to verify (max 2,000 per call) |
No output schema declared.
No examples provided.
How do I install the Lyre Leads MCP server?
Lyre Leads is a hosted endpoint at https://lyreleads.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · lyreleads.com
claude mcp add --transport http com-lyreleads-lyre-leads 'https://lyreleads.com/mcp'
What is the Lyre Leads MCP server?
Lyre Leads is an MCP server listed in the public MCP registry as com.lyreleads/lyre-leads. Every business of a kind in a city, from Google Maps, read from its website, with verified emails. This page covers its hosted endpoint (https://lyreleads.com/mcp).
Is the Lyre Leads MCP server safe to use?
Lyre Leads scores 68 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Lyre Leads MCP server expose?
Lyre Leads exposes 15 tools: preview_search, find_areas, estimate_area_search, search_areas, get_search_results, and 10 more. Their descriptions and schemas cost roughly 3,472 tokens of context every time the server is loaded.
Does the Lyre Leads MCP server require authentication?
No. We connected to Lyre Leads without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Lyre Leads MCP server still maintained?
Lyre Leads is still listed as active in the MCP registry. We last reached this channel on 22 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.