Generect
NPM · GENERECT-ULTIMATE-MCP · 2 COMPONENTS
B2B lead and company data for AI agents: free search, pay only for emails, phones, profiles.
Available components
Last scanned (5 minutes ago)
Scores higher than 38% of npm servers
Category CRM and Sales
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 29 of 92 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
- Repository check failed: the declared repository URL redirects; it must resolve directly. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 1 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability73
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 10079 tokens (~387/item across 26 items; 17 tools + 9 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 Management13
- Stability observed for 4 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
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 18 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
- Supports UI / widget rendering.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.
- 17 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Oct 26 +1
- Tool safety: pass → unverified ▼ security
- Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Stability: unverified → 0.07 ▲ functional
- Package version: 0.12.1 → 0.12.2 functional
- 14 Oct 26 +31
- Injection markers: unverified → pass ▲ security
- First check of Judged manipulation: pass security
- Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
- Tool coverage: unverified → 100 ▲ functional
- Schema quality: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- First check of Schema quality: fail functional
- First check of Schema quality: excellent functional
- First check of Destructive annotations: pass functional
- First check of Schema quality: fail functional
- First check of Capabilities: pass functional
- First check of Tool coverage: 100 functional
- First check of Tool coverage: 100 functional
- 13 Oct 26 0
- Security disclosure: unverified → fail ▼ functional
- 11 Oct 26 33
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 18 Oct 2026 · Analysed npm/generect-ultimate-mcp@0.12.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 92 packages
| Packages resolved | 92 |
|---|---|
| Stale | 29 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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_companies Count matching companies (free) ~780
How many companies match an ICP, and what pulling them would cost. FREE — this call never spends credits. Call this before search_companies. As with count_leads, a realtime count costs $0.02 and is never run implicitly.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unlisted_values | boolean | – | Escape hatch for the local vocabulary check — see the lead-side field of the same name. |
| company_names | array | – | Restrict to specific company names — realtime only: using it forces the pricier live mode. |
| company_types | array | – | Company types: "Public Company","Privately Held","Non Profit","Government Agency","Educational", … |
| department_headcount | object | – | Department size, e.g. {"name":"engineering","min":10,"max":100} — realtime only: using it forces the pricier live mode. |
| exclude_domains | array | – | Exclude companies by domain (e.g. existing customers). |
| exclude_ids | array | – | Exclude companies by LinkedIn id/URN. |
| exclude_industries | array | – | Industries to exclude. |
| exclude_locations | array | – | HQ locations to exclude. |
| fallback_from_leads | – | – | DEPRECATED — accepted but ignored. Removed. It fabricated lead-derived name aggregates and cost an extra billable query. |
| get_max_companies | – | – | DEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking. |
| headcount_growth | object | – | Headcount growth in percent — realtime only: using it forces the pricier live mode. |
| headcounts | array | – | Size buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+". |
| hiring_on_linkedin | boolean | – | Only companies actively hiring — realtime only: using it forces the pricier live mode. |
| industries | array | – | Company industries. Must match Generect industry names exactly (e.g. "Software Development"); unknown names are rejected with HTTP 400. |
| keywords | array | – | Free-text keywords across name/description/specialties — realtime only: using it forces the pricier live mode. |
| linkedins_links | array | – | Specific LinkedIn company URLs — realtime only: using it forces the pricier live mode. |
| locations | array | – | HQ locations — cities, states or countries. |
| mode | string | – | Data mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime"… |
| num_of_followers | array | – | LinkedIn follower buckets: "1-50","51-100","101-1000","1001-5000","5001+" — realtime only: using it forces the pricier live mode. |
| revenues_range | object | – | Annual revenue range, single object {min,max} — realtime only: using it forces the pricier live mode. |
| sub_industries | boolean | – | Expand each selected industry to its sub-industries as well (broadens the match). |
| technologies | array | – | Technologies the company uses — realtime only: using it forces the pricier live mode. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| advice | string | – | – |
| blocked_by_vocabulary | array | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| fix | string | – | – |
| mode | string | – | – |
| needs_realtime | array | – | – |
| next_step_estimate | – | – | – |
| options | array | – | – |
| results_count | number|null | – | – |
| status | string | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
| why | string | – | – |
No examples provided.
count_leads Count matching leads (free) ~1,335
How many leads match an ICP, and what pulling them would cost. FREE — this call never spends credits. ALWAYS CALL THIS BEFORE search_leads: it is the only way to learn the size of an audience without paying per row, and it returns a cost estimate for the next step at this account's real rates. A realtime count is NOT free ($0.02 flat) — this tool refuses to run one unless you pass mode:"realtime" on purpose.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unlisted_values | boolean | – | Escape hatch. This server checks industry / seniority / headcount / company-type values against the LinkedIn vocabularies before sending, because the API silently returns 0 results for an unknown ind… |
| changed_jobs | boolean | – | Only leads who recently changed jobs — realtime only: using it forces the pricier live mode. |
| company_filters | object | – | Optional: count leads only at companies matching these company filters (a two-level ICP). Still free in database mode. |
| company_headcounts | array | – | Employer size buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+" (note the space in "10 000+"). |
| company_id | string|number | – | Anchor to one company by LinkedIn numeric id. |
| company_industries | array | – | Industry of the current employer. Must match Generect industry names exactly (e.g. "Software Development", "Financial Services"); names are hierarchical and unknown names are rejected with HTTP 400 n… |
| company_link | string | – | Anchor to one company by LinkedIn URL. |
| company_locations | array | – | HQ location of the lead's current employer. |
| company_name | string | – | Anchor to one company by name (exclusive with company_link/company_id). |
| company_types | array | – | Employer types: "Public Company","Privately Held","Non Profit","Government Agency","Educational","Self Employed","Self Owned","Partnership". |
| exclude_company_headcounts | array | – | Employer size buckets to exclude. |
| exclude_company_industries | array | – | Employer industries to exclude. |
| exclude_company_locations | array | – | Employer HQ locations to exclude. |
| exclude_ids | array | – | Skip leads by Generect/Sales-Navigator id. Pass the ids you already received to paginate without duplicates — ordering is not stable, so this is more reliable than offset. |
| exclude_locations | array | – | Lead locations to exclude. |
| exclude_names | array | – | Skip leads by full name. Works in both modes (the database-mode bug that returned 0 rows was fixed in the API on 2026-08-13, PRO-1333). exclude_ids is still the more reliable way to paginate. |
| exclude_title_keywords | – | – | DEPRECATED — accepted but ignored. No v1 equivalent. Narrow job_titles instead, or filter the returned rows yourself. |
| filter_empty_vars | array | – | Drop leads where these fields are empty, e.g. ["profile_photo","job_started_on"]. Useful to raise data quality before paying. |
| functions | array | – | Job functions, e.g. ["Sales","Marketing","Engineering"] — realtime only: using it forces the pricier live mode. |
| get_max_leads | – | – | DEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking. |
| job_title | string | – | DEPRECATED alias for job_titles. Still honoured: it is merged into job_titles. |
| job_titles | array | – | Target job titles, OR-matched (e.g. ["CEO","Founder","Owner"]). A lead needs to match only one. |
| keywords | array | – | Free-text keywords across headline/summary/skills — realtime only: using it forces the pricier live mode. |
| lead_industries | – | – | DEPRECATED — accepted but ignored. Removed: v1 filters on the employer's industry. Use company_industries. |
| linkedin_filter_link | string | – | A LinkedIn / Sales Navigator search URL to lift filters from — realtime only: using it forces the pricier live mode. |
| locations | array | – | Where the lead lives — matches cities, states and countries, e.g. ["United States","Berlin"]. |
| mode | string | – | Data mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime"… |
| past_company_names | array | – | Companies the lead previously worked at (alumni targeting) — realtime only: using it forces the pricier live mode. |
| personas | array | – | Advanced raw persona tuples [name, functions, seniorities, prohibits, priority?] — realtime only: using it forces the pricier live mode. |
| posted_on_linkedin | boolean | – | Only leads who recently posted on LinkedIn — realtime only: using it forces the pricier live mode. |
| seniorities | array | – | Seniority at the current employer, e.g. ["Owner","CXO","VP","Director","Manager"]. Current position only. |
| strict | array | – | Fields to match strictly, e.g. ["company_locations"]. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| without_company | – | – | DEPRECATED — accepted but ignored. No longer needed — v1 filter-only search is the default when no company anchor is set. |
| years_in_company | array | – | Time at current company, same buckets as years_in_position — realtime only: using it forces the pricier live mode. |
| years_in_position | array | – | Time in current role: 1=<1y, 2=1-2y, 3=3-5y, 4=6-10y, 5=10y+ — realtime only: using it forces the pricier live mode. |
| Name | Type | Req | Description |
|---|---|---|---|
| advice | string | – | – |
| blocked_by_vocabulary | array | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| fix | string | – | – |
| mode | string | – | – |
| needs_realtime | array | – | – |
| next_step_estimate | – | – | – |
| options | array | – | – |
| results_count | number|null | – | – |
| status | string | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
| why | string | – | – |
No examples provided.
enrich_company Enrich one company ~367
Full profile for ONE known company, by Generect id, LinkedIn URL, domain, or name. BILLABLE — about $0.0067 per record found (not-found is refunded) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Not found costs nothing. Domain is the most reliable identifier after id; name matching is fuzzy.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | Default true: return a small per-company summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically ne… |
| domain | string | – | Company domain without protocol, e.g. "stripe.com". |
| id | string | – | Generect company id. |
| linkedin_url | string | – | LinkedIn company page URL. |
| mode | string | – | Data mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime"… |
| name | string | – | Company name (fuzzy match). |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| company | – | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| found | boolean | – | – |
| lead | – | – | – |
| mode | string | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
enrich_lead Enrich one lead ~375
Full profile for ONE known person, by Generect id, LinkedIn URL, or work email (reverse lookup). BILLABLE — about $0.0067 per record found (not-found is refunded) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Not found costs nothing. Prefer the `id` from a search/preview result — it is the most accurate identifier. For many people at once use start_bulk_job.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | Default true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need… |
| string | – | Work email, for reverse lookup. | |
| id | string | – | Generect lead id from search/preview. |
| linkedin_url | string | – | LinkedIn profile URL. |
| mode | string | – | Data mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime"… |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| company | – | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| found | boolean | – | – |
| lead | – | – | – |
| mode | string | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
find_phone Find a phone number (most expensive) ~246
Find a phone number for one person. BILLABLE — about $0.4 per phone found (a miss is free) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). THE MOST EXPENSIVE OPERATION HERE — roughly 20x an email lookup. Do not call it speculatively or across a list; confirm with the user first, and only for people they have already qualified. Use start_bulk_job for an approved list.
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | – | Company name or domain (name+company mode). |
| domain | string | – | Company domain without protocol, e.g. "stripe.com" (name+domain mode). |
| first_name | string | – | First name (name+domain mode). |
| last_name | string | – | Last name (name+domain mode). |
| lead_id | string | – | Generect lead id from search / preview / enrich results — the cheapest and most accurate identifier. |
| linkedin_url | string | – | LinkedIn profile URL. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| result | – | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
generate_email Find a verified work email ~269
Find and verify a work email. BILLABLE — about $0.02 per VALID email found (a miss is free) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Identify the person by lead_id (best), LinkedIn URL, or first+last+domain. `candidates` resolves several people in one call; more than 10 is routed to an async bulk job instead, which returns a job_id for get_bulk_job.
| Name | Type | Req | Description |
|---|---|---|---|
| candidates | array | – | Batch mode. Each entry uses the same identifier rules as the single-person form. |
| domain | string | – | Company domain without protocol, e.g. "stripe.com" (name+domain mode). |
| first_name | string | – | First name (name+domain mode). |
| last_name | string | – | Last name (name+domain mode). |
| lead_id | string | – | Generect lead id from search / preview / enrich results — the cheapest and most accurate identifier. |
| linkedin_url | string | – | LinkedIn profile URL. |
| middle_name | string | – | Middle name (optional, improves pattern matching). |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| dropped | number | – | – |
| job | – | – | – |
| mode | string | – | – |
| next_step | string | – | – |
| requested | number | – | – |
| results | array | – | – |
| submitted | number | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
get_balance Balance, usage and your prices (free) ~282
Account balance, month-to-date usage and THIS account's real per-operation prices. FREE — this call never spends credits. balance_usd is the wallet; grants_usd is bonus and plan credit (sign-up bonus, perks, plan allowance), reported apart. Grants are spent first, but only on the operations each one covers: a promo perk or a plan allowance may not pay for API calls, and a perk never pays for phone numbers. Report both figures; do not add them up as what the user can spend. Call it before a batch of paid work (so you can tell the user what they can afford) and after (so you can report exactly what was spent). The prices it returns beat any number in a tool description — those are list prices.
| Name | Type | Req | Description |
|---|---|---|---|
| include_prices | boolean | – | Include this account's per-operation prices. Default true. |
| include_token_analytics | boolean | – | Also return per-API-token request counts for the last 30 days (by endpoint and status). Free. Useful for answering "which integration is making these calls?". |
| include_transactions | number | – | Also return the N most recent transactions (each shows the operation type and dollar amount). |
| include_usage | boolean | – | Also return the month-to-date credit usage broken down by operation type. Free. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| balance_usd | number|null | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| string|null | – | – | |
| grants_usd | number|null | – | – |
| preview_tier | boolean|null | – | – |
| prices_source | string | – | – |
| recent_transactions | – | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| token_analytics | – | – | – |
| usage | – | – | – |
| used_this_month_usd | number|null | – | – |
| vocabulary_warnings | array | – | – |
| your_prices_usd | – | – | – |
No examples provided.
get_bulk_job Poll a bulk job (free) ~91
Status and results of a bulk job. FREE — this call never spends credits. Polling is free — the work was already billed at submit time. Poll every few seconds, not in a tight loop.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | yes | job_id returned by start_bulk_job. |
| job_type | string | yes | Same job_type used at submit. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| job | – | – | – |
| job_id | string | – | – |
| job_type | string | – | – |
| results | – | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
get_lead_by_url Enrich a lead by LinkedIn URL (alias) ~449
Alias of enrich_lead for a LinkedIn profile URL, kept for backwards compatibility. BILLABLE — about $0.0067 per record found (not-found is refunded) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Prefer enrich_lead — it also accepts a Generect id (cheaper to get right) or an email for reverse lookup.
| Name | Type | Req | Description |
|---|---|---|---|
| comments | – | – | DEPRECATED — accepted but ignored. Removed: v1 enrich returns the full profile without per-section toggles. |
| compact | boolean | – | Default true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need… |
| inexact_company | – | – | DEPRECATED — accepted but ignored. Removed: v1 enrich matches on the identifier you pass. |
| mode | string | – | Data mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime"… |
| people_also_viewed | – | – | DEPRECATED — accepted but ignored. Removed: v1 enrich returns the full profile without per-section toggles. |
| posts | – | – | DEPRECATED — accepted but ignored. Removed: v1 enrich returns the full profile without per-section toggles. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| url | string | yes | LinkedIn profile URL (e.g. https://www.linkedin.com/in/username/). |
| Name | Type | Req | Description |
|---|---|---|---|
| company | – | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| found | boolean | – | – |
| lead | – | – | – |
| mode | string | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
health Server and credential health (free) ~101
Liveness check. FREE — this call never spends credits. Confirms the MCP server is up, reports its version, and (unless you disable it) verifies the credential against a free account endpoint. It never touches a paid data endpoint, so it is safe to call from a monitor.
| Name | Type | Req | Description |
|---|---|---|---|
| check_credential | boolean | – | Also verify the API token against the free /accounts/me endpoint. Default true. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| account | string|null | – | – |
| api_base | string | – | – |
| balance_usd | number|null | – | – |
| cost | object | – | – |
| credential_error | – | – | – |
| credential_valid | boolean | – | – |
| deprecated_params_ignored | object | – | – |
| has_credential | boolean | – | – |
| ms | number | – | – |
| ok | boolean | – | – |
| server | string | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| version | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
manage_webhooks Manage webhook endpoints ~142
List, create, update, delete or test webhook endpoints for bulk-job completion. FREE — this call never spends credits. Use this instead of long polling in scheduled/unattended workflows: register once, then let the completion event wake your job up.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | What to do. |
| events | array | – | Events to subscribe to (create/update). |
| id | string | – | Webhook id (required for update, delete, test). |
| secret | string | – | Shared secret for HMAC signature verification. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| url | string | – | HTTPS endpoint that receives events (create/update). |
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
| webhooks | – | – | – |
No examples provided.
preview_leads Preview leads (cheapest paid look) ~1,453
Cheap look at the actual people behind a count, before committing to a full search. BILLABLE — about $0.002 per returned row (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Preview rows carry a Generect `id`, so the intended flow is: preview many → pick the few that fit → enrich_lead / generate_email only on those. Per the API contract preview rows are masked (no LinkedIn URL, domain, email or phone); if your account returns more than that, treat it as a bonus and not something to rely on.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unlisted_values | boolean | – | Escape hatch. This server checks industry / seniority / headcount / company-type values against the LinkedIn vocabularies before sending, because the API silently returns 0 results for an unknown ind… |
| changed_jobs | boolean | – | Only leads who recently changed jobs — realtime only: using it forces the pricier live mode. |
| compact | boolean | – | Default true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need… |
| company_filters | object | – | Optional company-level filters for a two-level ICP. |
| company_headcounts | array | – | Employer size buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+" (note the space in "10 000+"). |
| company_id | string|number | – | Anchor to one company by LinkedIn numeric id. |
| company_industries | array | – | Industry of the current employer. Must match Generect industry names exactly (e.g. "Software Development", "Financial Services"); names are hierarchical and unknown names are rejected with HTTP 400 n… |
| company_link | string | – | Anchor to one company by LinkedIn URL. |
| company_locations | array | – | HQ location of the lead's current employer. |
| company_name | string | – | Anchor to one company by name (exclusive with company_link/company_id). |
| company_types | array | – | Employer types: "Public Company","Privately Held","Non Profit","Government Agency","Educational","Self Employed","Self Owned","Partnership". |
| confirm_spend_usd | number | – | Explicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to tha… |
| count_only | boolean | – | Return just how many leads the preview index holds for these filters and spend nothing. Free. This is a second opinion on count_leads: preview and cached search are different indexes and can disagree. |
| exclude_company_headcounts | array | – | Employer size buckets to exclude. |
| exclude_company_industries | array | – | Employer industries to exclude. |
| exclude_company_locations | array | – | Employer HQ locations to exclude. |
| exclude_ids | array | – | Skip leads by Generect/Sales-Navigator id. Pass the ids you already received to paginate without duplicates — ordering is not stable, so this is more reliable than offset. |
| exclude_locations | array | – | Lead locations to exclude. |
| exclude_names | array | – | Skip leads by full name. Works in both modes (the database-mode bug that returned 0 rows was fixed in the API on 2026-08-13, PRO-1333). exclude_ids is still the more reliable way to paginate. |
| exclude_title_keywords | – | – | DEPRECATED — accepted but ignored. No v1 equivalent. Narrow job_titles instead, or filter the returned rows yourself. |
| filter_empty_vars | array | – | Drop leads where these fields are empty, e.g. ["profile_photo","job_started_on"]. Useful to raise data quality before paying. |
| functions | array | – | Job functions, e.g. ["Sales","Marketing","Engineering"] — realtime only: using it forces the pricier live mode. |
| get_max_leads | – | – | DEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking. |
| job_title | string | – | DEPRECATED alias for job_titles. Still honoured: it is merged into job_titles. |
| job_titles | array | – | Target job titles, OR-matched (e.g. ["CEO","Founder","Owner"]). A lead needs to match only one. |
| keywords | array | – | Free-text keywords across headline/summary/skills — realtime only: using it forces the pricier live mode. |
| lead_industries | – | – | DEPRECATED — accepted but ignored. Removed: v1 filters on the employer's industry. Use company_industries. |
| limit | number | – | Alias for limit_by. |
| limit_by | number | – | Rows to return this call (1–100, default 25). You are billed per returned row, so this number IS the price of the call. |
| linkedin_filter_link | string | – | A LinkedIn / Sales Navigator search URL to lift filters from — realtime only: using it forces the pricier live mode. |
| locations | array | – | Where the lead lives — matches cities, states and countries, e.g. ["United States","Berlin"]. |
| offset_by | number | – | Rows to skip (pagination). |
| past_company_names | array | – | Companies the lead previously worked at (alumni targeting) — realtime only: using it forces the pricier live mode. |
| personas | array | – | Advanced raw persona tuples [name, functions, seniorities, prohibits, priority?] — realtime only: using it forces the pricier live mode. |
| posted_on_linkedin | boolean | – | Only leads who recently posted on LinkedIn — realtime only: using it forces the pricier live mode. |
| seniorities | array | – | Seniority at the current employer, e.g. ["Owner","CXO","VP","Director","Manager"]. Current position only. |
| strict | array | – | Fields to match strictly, e.g. ["company_locations"]. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| without_company | – | – | DEPRECATED — accepted but ignored. No longer needed — v1 filter-only search is the default when no company anchor is set. |
| years_in_company | array | – | Time at current company, same buckets as years_in_position — realtime only: using it forces the pricier live mode. |
| years_in_position | array | – | Time in current role: 1=<1y, 2=1-2y, 3=3-5y, 4=6-10y, 5=10y+ — realtime only: using it forces the pricier live mode. |
| Name | Type | Req | Description |
|---|---|---|---|
| api_returned_more_than_requested | number | – | – |
| blocked_by_vocabulary | array | – | – |
| companies | array | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| escalated_to_realtime_because | array | – | – |
| escalation_note | string | – | – |
| fix | string | – | – |
| leads | array | – | – |
| mode | string | – | – |
| next_page_args | – | – | – |
| note | string | – | – |
| requested_rows | number | – | – |
| results_count | number|null | – | – |
| returned | number | – | – |
| spend_guard | – | – | – |
| status | string | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
resolve_profile Resolve an anonymous LinkedIn link ~448
Reveal who is behind an anonymous LinkedIn profile link. BILLABLE — about $0.0005 per RESOLVED profile (an unresolvable reference is free) — duplicates in one batch are billed per row, so deduplicate first (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Takes the obfuscated links that Sales Navigator leaves in exports, CRMs and ad platforms — `linkedin.com/in/ACwAA…` — plus Sales Navigator lead URLs, bare profile ids and urns, and returns the real profile URL and identity. Pass `profiles` (up to 50) to do a batch in one call. The `id` it returns is the same identifier enrich_lead, generate_email and find_phone accept, so this is the cheap first step before spending on a full record. Returns identity only — no location, company or work history; use enrich_lead for those. The numeric member id is NOT accepted as input (LinkedIn answers 403 to it); it comes back as `linkedin_id`.
| Name | Type | Req | Description |
|---|---|---|---|
| compact | boolean | – | Default true: return a small per-profile summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically ne… |
| id | string | – | Alias for `url` — same accepted values. Use whichever reads better. |
| profiles | array | – | Batch mode: 1–50 references, mixed freely. One row per input, in input order, each either a resolved profile or {input, error}. Duplicates are billed per row — deduplicate first. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| url | string | – | A single LinkedIn person reference: profile URL of any flavour (including /in/ACwAA… and /sales/lead/…), a public identifier, an obfuscated id (ACwAA… or ACoAA…) or an urn. Matched case-insensitively. |
| Name | Type | Req | Description |
|---|---|---|---|
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| profiles | array | – | – |
| resolved | – | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
search_companies Search companies (free thin rows, full rows billed) ~1,263
Return companies matching an ICP. FREE by default while the account has free thin rows left today (daily quota; see detail — pass detail "thin" to guarantee $0); thin rows carry no domain — use enrich_company on the ones you keep. detail "full" is billable, about $0.0067 per returned row (0 rows costs $0) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Realtime is billed per row too. Run count_companies first. Note that headcount_range is a snapshot taken when the record was indexed and can lag the company's current size; the filter itself is applied at query time.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unlisted_values | boolean | – | Escape hatch for the local vocabulary check — see the lead-side field of the same name. |
| compact | boolean | – | Default true: return a small per-company summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically ne… |
| company_names | array | – | Restrict to specific company names — realtime only: using it forces the pricier live mode. |
| company_types | array | – | Company types: "Public Company","Privately Held","Non Profit","Government Agency","Educational", … |
| confirm_spend_usd | number | – | Explicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to tha… |
| department_headcount | object | – | Department size, e.g. {"name":"engineering","min":10,"max":100} — realtime only: using it forces the pricier live mode. |
| detail | string | – | Row detail for the database search. Thin rows are FREE — id, name, industry, headcount_range, HQ country/city, company_type, founded_year; no LinkedIn URL, domain, contacts or history — up to a daily… |
| exclude_domains | array | – | Exclude companies by domain (e.g. existing customers). |
| exclude_ids | array | – | Exclude companies by LinkedIn id/URN. |
| exclude_industries | array | – | Industries to exclude. |
| exclude_locations | array | – | HQ locations to exclude. |
| fallback_from_leads | – | – | DEPRECATED — accepted but ignored. Removed. It fabricated lead-derived name aggregates and cost an extra billable query. |
| get_max_companies | – | – | DEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking. |
| headcount_growth | object | – | Headcount growth in percent — realtime only: using it forces the pricier live mode. |
| headcounts | array | – | Size buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+". |
| hiring_on_linkedin | boolean | – | Only companies actively hiring — realtime only: using it forces the pricier live mode. |
| industries | array | – | Company industries. Must match Generect industry names exactly (e.g. "Software Development"); unknown names are rejected with HTTP 400. |
| keywords | array | – | Free-text keywords across name/description/specialties — realtime only: using it forces the pricier live mode. |
| limit | number | – | Alias for limit_by. |
| limit_by | number | – | Rows to return this call (1–100, default 25). You are billed per returned row, so this number IS the price of the call. |
| linkedins_links | array | – | Specific LinkedIn company URLs — realtime only: using it forces the pricier live mode. |
| locations | array | – | HQ locations — cities, states or countries. |
| mode | string | – | Data mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime"… |
| num_of_followers | array | – | LinkedIn follower buckets: "1-50","51-100","101-1000","1001-5000","5001+" — realtime only: using it forces the pricier live mode. |
| offset | number | – | Alias for offset_by. |
| offset_by | number | – | Rows to skip (pagination). |
| revenues_range | object | – | Annual revenue range, single object {min,max} — realtime only: using it forces the pricier live mode. |
| sub_industries | boolean | – | Expand each selected industry to its sub-industries as well (broadens the match). |
| technologies | array | – | Technologies the company uses — realtime only: using it forces the pricier live mode. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| api_returned_more_than_requested | number | – | – |
| blocked_by_vocabulary | array | – | – |
| companies | array | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| escalated_to_realtime_because | array | – | – |
| escalation_note | string | – | – |
| fix | string | – | – |
| leads | array | – | – |
| mode | string | – | – |
| next_page_args | – | – | – |
| note | string | – | – |
| requested_rows | number | – | – |
| results_count | number|null | – | – |
| returned | number | – | – |
| spend_guard | – | – | – |
| status | string | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
search_leads Search leads (free thin rows, full rows billed) ~1,786
Return leads (people) matching an ICP. FREE by default while the account has free thin rows left today (daily quota; see detail — pass detail "thin" to guarantee $0). detail "full" is billable, about $0.0067 per returned row (0 rows costs $0) (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). Realtime, or an auto escalation to it, is billed per row too. Run count_leads first — it is free and sizes the audience. Rows never include email or phone: call generate_email (it takes the lead id) or find_phone only on the ids you keep. Ordering is not stable, so paginate by passing ids you already have in exclude_ids rather than by offset.
| Name | Type | Req | Description |
|---|---|---|---|
| allow_unlisted_values | boolean | – | Escape hatch. This server checks industry / seniority / headcount / company-type values against the LinkedIn vocabularies before sending, because the API silently returns 0 results for an unknown ind… |
| changed_jobs | boolean | – | Only leads who recently changed jobs — realtime only: using it forces the pricier live mode. |
| compact | boolean | – | Default true: return a small per-lead summary (including the Generect `id`, which every later step accepts). Set false for the full raw record (~80 fields) — only worth it when you specifically need… |
| company_filters | object | – | Optional: only return leads at companies matching these filters (two-level ICP). |
| company_headcounts | array | – | Employer size buckets. Allowed ONLY: "1-10","11-50","51-200","201-500","501-1000","1001-5000","5001-10000","10 000+" (note the space in "10 000+"). |
| company_id | string|number | – | Anchor to one company by LinkedIn numeric id. |
| company_industries | array | – | Industry of the current employer. Must match Generect industry names exactly (e.g. "Software Development", "Financial Services"); names are hierarchical and unknown names are rejected with HTTP 400 n… |
| company_link | string | – | Anchor to one company by LinkedIn URL. |
| company_locations | array | – | HQ location of the lead's current employer. |
| company_name | string | – | Anchor to one company by name (exclusive with company_link/company_id). |
| company_types | array | – | Employer types: "Public Company","Privately Held","Non Profit","Government Agency","Educational","Self Employed","Self Owned","Partnership". |
| confirm_spend_usd | number | – | Explicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to tha… |
| detail | string | – | Row detail for the database search. Thin rows are FREE — id, name, job_title, seniority, location, company name/id/industry/country; no LinkedIn URL, domain, contacts or history — up to a daily per-a… |
| exclude_company_headcounts | array | – | Employer size buckets to exclude. |
| exclude_company_industries | array | – | Employer industries to exclude. |
| exclude_company_locations | array | – | Employer HQ locations to exclude. |
| exclude_ids | array | – | Skip leads by Generect/Sales-Navigator id. Pass the ids you already received to paginate without duplicates — ordering is not stable, so this is more reliable than offset. |
| exclude_locations | array | – | Lead locations to exclude. |
| exclude_names | array | – | Skip leads by full name. Works in both modes (the database-mode bug that returned 0 rows was fixed in the API on 2026-08-13, PRO-1333). exclude_ids is still the more reliable way to paginate. |
| exclude_title_keywords | – | – | DEPRECATED — accepted but ignored. No v1 equivalent. Narrow job_titles instead, or filter the returned rows yourself. |
| filter_empty_vars | array | – | Drop leads where these fields are empty, e.g. ["profile_photo","job_started_on"]. Useful to raise data quality before paying. |
| functions | array | – | Job functions, e.g. ["Sales","Marketing","Engineering"] — realtime only: using it forces the pricier live mode. |
| get_max_leads | – | – | DEPRECATED — accepted but ignored. Always on now: search responses include results_count without asking. |
| job_title | string | – | DEPRECATED alias for job_titles. Still honoured: it is merged into job_titles. |
| job_titles | array | – | Target job titles, OR-matched (e.g. ["CEO","Founder","Owner"]). A lead needs to match only one. |
| keywords | array | – | Free-text keywords across headline/summary/skills — realtime only: using it forces the pricier live mode. |
| lead_industries | – | – | DEPRECATED — accepted but ignored. Removed: v1 filters on the employer's industry. Use company_industries. |
| limit | number | – | Alias for limit_by. |
| limit_by | number | – | Rows to return this call (1–100, default 25). You are billed per returned row, so this number IS the price of the call. |
| linkedin_filter_link | string | – | A LinkedIn / Sales Navigator search URL to lift filters from — realtime only: using it forces the pricier live mode. |
| locations | array | – | Where the lead lives — matches cities, states and countries, e.g. ["United States","Berlin"]. |
| mode | string | – | Data mode. "database" = Generect's own index: sub-second, free counts, free thin rows (see detail) or cheaper full rows; it accepts a subset of the filters today and names any it rejects. "realtime"… |
| offset | number | – | Alias for offset_by. |
| offset_by | number | – | Rows to skip (pagination). |
| past_company_names | array | – | Companies the lead previously worked at (alumni targeting) — realtime only: using it forces the pricier live mode. |
| personas | array | – | Advanced raw persona tuples [name, functions, seniorities, prohibits, priority?] — realtime only: using it forces the pricier live mode. |
| posted_on_linkedin | boolean | – | Only leads who recently posted on LinkedIn — realtime only: using it forces the pricier live mode. |
| seniorities | array | – | Seniority at the current employer, e.g. ["Owner","CXO","VP","Director","Manager"]. Current position only. |
| strict | array | – | Fields to match strictly, e.g. ["company_locations"]. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| without_company | – | – | DEPRECATED — accepted but ignored. No longer needed — v1 filter-only search is the default when no company anchor is set. |
| years_in_company | array | – | Time at current company, same buckets as years_in_position — realtime only: using it forces the pricier live mode. |
| years_in_position | array | – | Time in current role: 1=<1y, 2=1-2y, 3=3-5y, 4=6-10y, 5=10y+ — realtime only: using it forces the pricier live mode. |
| Name | Type | Req | Description |
|---|---|---|---|
| api_returned_more_than_requested | number | – | – |
| blocked_by_vocabulary | array | – | – |
| companies | array | – | – |
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| escalated_to_realtime_because | array | – | – |
| escalation_note | string | – | – |
| fix | string | – | – |
| leads | array | – | – |
| mode | string | – | – |
| next_page_args | – | – | – |
| note | string | – | – |
| requested_rows | number | – | – |
| results_count | number|null | – | – |
| returned | number | – | – |
| spend_guard | – | – | – |
| status | string | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
start_bulk_job Submit a bulk job ~276
Submit up to 50 records for asynchronous processing and get a job_id back. BILLABLE at the same per-record rate as the single-record tool — and the whole cost is RESERVED at submit time, so a submitted job keeps running (and keeps charging) even if you stop polling. Only submit a list the user has approved. Poll with get_bulk_job, or register a webhook to be told when it finishes.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_spend_usd | number | – | Explicit approval for an unusually large charge. Calls whose worst case exceeds $5 are refused unless this is set to at least the amount the tool reports. Only set it after the user has agreed to tha… |
| items | array | yes | Max 50. email_find/phone_find: {lead_id} | {linkedin_url} | {first_name,last_name,domain|company}. enrich_leads: {id} | {linkedin_url} | {email}. enrich_companies: {id} | {linkedin_url} | {domain} |… |
| job_type | string | yes | What to do with the items. phone_find is by far the most expensive per record. |
| mode | string | – | Enrich jobs only: cached (cheaper) or live. Default "database". |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| dropped | number | – | – |
| job | – | – | – |
| job_type | string | – | – |
| mode | string | – | – |
| next_step | string | – | – |
| reservation_note | string | – | – |
| reserved_worst_case_usd | number | – | – |
| submitted | number | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
validate_email Validate email deliverability ~140
Check deliverability of emails you already have. BILLABLE — about $0.005 per email submitted — every address is billed, whatever the verdict (Tier 0 list price; your account may pay a different rate — call get_balance for your real prices, and read cost.amount_charged in every response for what was actually spent). This is the one operation where EVERY submitted address is billed — the verdict is the deliverable. Never validate an address that generate_email just returned as valid; it is already verified.
| Name | Type | Req | Description |
|---|---|---|---|
| emails | array | yes | Email addresses to validate. Each one is billed. |
| timeout_ms | number | – | Request timeout in milliseconds. |
| Name | Type | Req | Description |
|---|---|---|---|
| cost | object | – | – |
| deprecated_params_ignored | object | – | – |
| results | – | – | – |
| submitted | number | – | – |
| test_mode | boolean | – | – |
| test_mode_notice | string | – | – |
| vocabulary_warnings | array | – | – |
No examples provided.
How do I install the Generect MCP server?
Generect runs locally as an npm package, launched with npx -y generect-ultimate-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · generect-ultimate-mcp
claude mcp add com-generect-generect-mcp -- npx -y generect-ultimate-mcp
What is the Generect MCP server?
Generect is an MCP server listed in the public MCP registry as com.generect/generect-mcp. B2B lead and company data for AI agents: free search, pay only for emails, phones, profiles. This page covers its npm package (generect-ultimate-mcp).
Is the Generect MCP server safe to use?
Generect scores 66 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 18 October 2026. It declares no install or post-install scripts. 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 Generect MCP server expose?
Generect exposes 17 tools: count_leads, count_companies, get_balance, health, preview_leads, and 12 more. Their descriptions and schemas cost roughly 9,803 tokens of context every time the server is loaded.
Is the Generect MCP server still maintained?
Generect is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Generect MCP server under?
Generect declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.