Model Context Protocol (MCP) server for Apollo.io API integration
ZOOQ - LinkedIn Data for AI Agents is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Live LinkedIn data for AI agents: profiles, companies, jobs, posts, email finding. No account risk.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http zooq-linkedin-data-for-ai-agents-mcp https://zooq.dev/api/mcp --header 'X-API-Key: ${X_API_KEY}'
# 2 — ask your agent for something these tools do
# profile_full, profile_entity_id, profile_enrich and 42 more
It needs X_API_KEY (Your ZOOQ API key - free at https://zooq.dev/signup (300 credits, no card required)): this sends it in the X-API-Key header from your environment, so export it first — its endpoint answers 401 without it.
ZOOQ - LinkedIn Data for AI Agents costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it. Claude Code reads X_API_KEY (Your ZOOQ API key - free at https://zooq.dev/signup (300 credits, no card required)) from your environment each time it connects and sends it in the X-API-Key header — its endpoint answers 401 without it — so the key stays out of its config: export it in your shell profile (macOS, Linux), or run setx X_API_KEY … and open a new terminal (Windows).
claude mcp add --scope user --transport http zooq-linkedin-data-for-ai-agents-mcp https://zooq.dev/api/mcp --header 'X-API-Key: ${X_API_KEY}'Reconnect, or start a new session, and the tools appear in the model’s tool list.
It reaches a system of yours, so it needs your own credential rather than the publisher’s: X-API-Key header — Your ZOOQ API key - free at https://zooq.dev/signup (300 credits, no card required). You set it in your own client’s config, on your machine — this marketplace never holds it.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
45 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Complete profile in one call — positions, education, skills, certifications, geo, follower/connection counts and flags. This is the canonical profile read; the other profile/* paths (overview, details, about, education, skills, certifications, full-experience, social-matrix) are named aliases that return this exact same record. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | no | Public profile handle. Provide handle OR id. |
| id | string | no | Stable profile id (prsn_...). Get it from profile_full or /search/people — read data.id. Provide handle OR id. |
Resolve a public handle to the person entityId used by the live person endpoints (posts, comments, interests, lookalikes). Resolve once, reuse the id. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | yes | Public profile handle — the part after linkedin.com/in/. A full profile URL works too. |
Freshest LIVE snapshot of one profile, by handle or entityId — not the deduplicated dataset record the other profile/* endpoints return. Carries live-only flags (openToWork, isHiring, isTopVoice) and returns the person's entityId, the id every other live person endpoint needs. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | no | Public profile handle. Provide handle OR entityId (entityId wins if both). |
| entityId | string | no | Person entityId from a previous profile_enrich or profile_entity_id call. Provide handle OR entityId. |
Complete LIVE work history for one person: per-role organization, title, description, location, parsed dates, per-role skills, and parallel-position groupings (concurrent titles kept distinct rather than flattened). Overlaps profile_full_experience, which reads the dataset record — use this when you need freshness, per-role skills, or correct handling of concurrent roles. Pass handle and Zooq re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | no | Public profile handle — the part after linkedin.com/in/ — or the full profile URL. Resolved to entityId automatically at no extra credit cost. Any person identifier is accepted here and sorted by fo |
| entityId | string | no | Live person entityId (ACoAA…) from profile_entity_id / profile_enrich; the urn:li:fsd_profile: form is accepted. A prsn_ id (dataset namespace, from profile_full) or a handle placed here is recognized |
Recommendations written for the person, with author details and text. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | no | Public profile handle — the part after linkedin.com/in/ — or the full profile URL. Resolved to entityId automatically at no extra credit cost. Any person identifier is accepted here and sorted by fo |
| entityId | string | no | Live person entityId (ACoAA…) from profile_entity_id / profile_enrich; the urn:li:fsd_profile: form is accepted. A prsn_ id (dataset namespace, from profile_full) or a handle placed here is recognized |
Similar professional profiles — expand a shortlist from one example. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | no | Public profile handle — the part after linkedin.com/in/ — or the full profile URL. Resolved to entityId automatically at no extra credit cost. Any person identifier is accepted here and sorted by fo |
| entityId | string | no | Live person entityId (ACoAA…) from profile_entity_id / profile_enrich; the urn:li:fsd_profile: form is accepted. A prsn_ id (dataset namespace, from profile_full) or a handle placed here is recognized |
Entities the person follows (companies, groups, people, newsletters). (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | no | Public profile handle — the part after linkedin.com/in/ — or the full profile URL. Resolved to entityId automatically at no extra credit cost. Any person identifier is accepted here and sorted by fo |
| entityId | string | no | Live person entityId (ACoAA…) from profile_entity_id / profile_enrich; the urn:li:fsd_profile: form is accepted. A prsn_ id (dataset namespace, from profile_full) or a handle placed here is recognized |
Resolve a company slug to the numeric organization id used by the live company endpoints (posts, similar, affiliated, insights). Resolve once, reuse the id. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| slug | string | yes | Company public slug — the part after linkedin.com/company/. A full company URL works too. |
Resolve a company slug (the part after linkedin.com/company/) to its stable org_ id — the dataset id used by /companies/info. For the live company endpoints (posts, similar, affiliated, insights) use companies_entity_id instead; the two ids are not interchangeable. Returns the FULL company record (identical to /companies/info) — read data.id. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| slug | string | yes | Company public slug — the part after linkedin.com/company/. |
Full company firmographics — description, industry, headcount, HQ, follower count, specialties. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | no | Stable company id (org_...). Get it from companies_info or /search/companies — read data.id. Provide id OR slug. |
| slug | string | no | Company public slug (after linkedin.com/company/). Provide id OR slug. |
Freshest LIVE company profile. Returns three things the dataset record behind companies_info does not: funding signals, the FULL location list (not just HQ), and parent/affiliated/related pages. Pass slug and Zooq resolves it to the numeric id at no extra credit cost, or pass id from companies_entity_id to skip the lookup. Not-found is free upstream. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | no | Numeric organization id from companies_entity_id; the urn:li:organization: form is accepted. An org_ id (dataset namespace, from companies_info) or a slug placed here is recognized and translated auto |
| slug | string | no | Company public slug — the part after linkedin.com/company/ — or the full company URL. Resolved to id automatically at no extra credit cost. Any company identifier is accepted here and sorted by form |
Search companies by name, with the full firmographic filter set. Cursor-paginated. Same upstream as search_companies — use whichever entry point reads better; they are equivalent. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Company name (min 3 chars). |
| website | string | no | Company website domain filter. |
| industries | string | no | Industry name(s), comma-separated. Plain strings — this is the Data API, no id resolution needed. |
| industries_v2 | string | no | Industry name(s) on the newer taxonomy, comma-separated. |
| staff_count_min | integer | no | Minimum employee count. |
| staff_count_max | integer | no | Maximum employee count. |
| follower_count_min | integer | no | Minimum follower count. |
| follower_count_max | integer | no | Maximum follower count. |
| hq_city | string | no | HQ city filter (min 3 chars). |
| hq_country_code | string | no | HQ ISO country code, e.g. us. |
| founded | integer | no | Founding year filter. |
| limit | integer | no | Results per page, 1-50 (default 20). |
| cursor | string | no | Opaque pagination cursor; omit for the first page, then pass pagination.next_cursor from the previous response. |
People who work or worked at an organization (professional records, same shape as /search/people). Cursor-paginated. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| slug | string | yes | Company public slug — the part after linkedin.com/company/. Resolve via companies_name_lookup (or /search/companies) if you only have a name — read data[].slug. |
| current_only | boolean | no | Restrict to people in a current role at the company. |
| title | string | no | Partial job-title filter (min 3 chars), e.g. software engineer. Combine with current_only=true to target a current role. |
| geo_country_code | string | no | ISO country code filter, e.g. us. |
| geo_city | string | no | City filter (min 3 chars). |
| start_year | integer | no | Match people who started in this year (1900-current). |
| start_month | integer | no | Match people who started in this month (1-12), paired with start_year. |
| sort | string | no | Ordering. Accepted values: newest, oldest, recently_left (use recently_left with current_only=false). |
| limit | integer | no | Results per page, 1-50 (default 20). |
| cursor | string | no | Opaque pagination cursor from the previous response. |
Similar companies / peers (id, name, industry, followers, url). Keyed by the numeric organization id: pass slug and Zooq resolves it for you at no extra credit cost, or pass id from companies_entity_id to skip the lookup. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| slug | string | no | Company public slug — the part after linkedin.com/company/ — or the full company URL. Resolved to id automatically at no extra credit cost. Any company identifier is accepted here and sorted by form |
| id | string | no | Numeric organization id from companies_entity_id; the urn:li:organization: form is accepted. An org_ id (dataset namespace, from companies_info) or a slug placed here is recognized and translated auto |
Affiliated / subsidiary / showcase pages of a company. Keyed by the numeric organization id: pass slug and Zooq resolves it for you at no extra credit cost, or pass id from companies_entity_id to skip the lookup. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| slug | string | no | Company public slug — the part after linkedin.com/company/ — or the full company URL. Resolved to id automatically at no extra credit cost. Any company identifier is accepted here and sorted by form |
| id | string | no | Numeric organization id from companies_entity_id; the urn:li:organization: form is accepted. An org_ id (dataset namespace, from companies_info) or a slug placed here is recognized and translated auto |
Employee-count total + distribution buckets (by department, seniority, location). Keyed by the numeric organization id: pass slug and Zooq resolves it for you at no extra credit cost, or pass id from companies_entity_id to skip the lookup. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| slug | string | no | Company public slug — the part after linkedin.com/company/ — or the full company URL. Resolved to id automatically at no extra credit cost. Any company identifier is accepted here and sorted by form |
| id | string | no | Numeric organization id from companies_entity_id; the urn:li:organization: form is accepted. An org_ id (dataset namespace, from companies_info) or a slug placed here is recognized and translated auto |
A company's recent posts. data.activities[].entityId is the activity id consumed by /posts/info, /posts/comments, /posts/likes. Keyed by the numeric organization id: pass slug and Zooq resolves it for you at no extra credit cost, or pass id from companies_entity_id to skip the lookup. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| slug | string | no | Company public slug — the part after linkedin.com/company/ — or the full company URL. Resolved to id automatically at no extra credit cost. Any company identifier is accepted here and sorted by form |
| id | string | no | Numeric organization id from companies_entity_id; the urn:li:organization: form is accepted. An org_ id (dataset namespace, from companies_info) or a slug placed here is recognized and translated auto |
| start | integer | no | Pagination offset. |
Open job postings across one or more organizations. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| organizationEntityIds | string | yes | Comma-separated NUMERIC organization ids, e.g. 1035 (page size fixed at 50). Get each one from companies_entity_id. org_ ids from /companies/universal-name-to-id are silently ignored upstream — the re |
| start | integer | no | Pagination offset. |
Search professional records with rich filters — name, title, company, skills, education, tenure, geography. Cursor-paginated. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| first_name | string | no | First name (min 3 chars). |
| last_name | string | no | Last name (min 3 chars). |
| headline | string | no | Free-text headline match (min 3 chars). |
| summary | string | no | Free-text summary/about match (min 3 chars). |
| title | string | no | Job-title match (min 3 chars). |
| geo_city | string | no | City name (min 3 chars). |
| geo_country_code | string | no | ISO country code. |
| primary_language | string | no | Profile primary language code, e.g. en. |
| is_creator | boolean | no | Only content creators. |
| is_premium | boolean | no | Only premium members. |
| organization_slugs | string | no | Comma-separated company slugs — the part after linkedin.com/company/. Company URLs and org_ ids (from companies_info / search_companies) are accepted and translated. Combine with current_only=true for |
| institution_ids | string | no | Comma-separated institution ids (inst_...). Resolve via /search/schools. |
| certifications | string | no | Certification name filter. |
| certification_authority | string | no | Certification issuing authority filter. |
| speaks_language | string | no | Spoken-language filter. |
| current_only | boolean | no | Restrict title/company matches to current positions. |
| skills | string | no | Comma-separated normalized skill names. Resolve via /g/title-skills-lookup. |
| skills_match | string | no | Skill match mode. Accepted values: any (default), all. |
| skill_count_min | integer | no | Minimum number of listed skills. |
| skill_count_max | integer | no | Maximum number of listed skills. |
Search organizations by name or website with firmographic filters. Cursor-paginated. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | no | Company name (min 3 chars). Provide name OR website. |
| website | string | no | Company website (min 3 chars). Provide name OR website. |
| staff_count_min | integer | no | Minimum employee count. |
| staff_count_max | integer | no | Maximum employee count. |
| follower_count_min | integer | no | Minimum follower count. |
| follower_count_max | integer | no | Maximum follower count. |
| industries | string | no | Industry name(s) — pass plain strings, comma-separated. |
| industries_v2 | string | no | Industry v2 taxonomy name(s), comma-separated. |
| hq_city | string | no | HQ city filter. |
| hq_country_code | string | no | HQ ISO country code. |
| founded | integer | no | Founded year. |
| limit | integer | no | Results per page, 1-50 (default 20). |
| cursor | string | no | Opaque pagination cursor; omit for the first page. |
Job/opportunity search with the full filter set. Location filtering works: pass locations a LinkedIn geo id (e.g. 101570771 for Tel Aviv-Yafo) — see that parameter for how to find one, and note it is an EXACT match, so use a city id rather than a country id. Still id-typed and not yet usable: titles, industries, functions, benefits, commitments. Offset-paginated. data.jobs[].id is the opportunit
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keyword | string | no | Free-text keyword. |
| sortBy | string | no | Result ordering. Accepted values: relevance, date_posted. |
| datePosted | string | no | Recency filter. Accepted values: 24h, 1week, 1month. |
| experience | string | no | Experience level. Accepted values: internship, entry_level, associate, mid_senior, director, executive. Comma-separate for multiple. |
| jobTypes | string | no | Job type. Accepted values: full_time, part_time, contract, temporary, internship, volunteer, other. Comma-separate for multiple. |
| workplaceTypes | string | no | Workplace type. Accepted values: onsite, remote, hybrid. Comma-separate for multiple. |
| salary | string | no | Minimum salary bucket. Accepted values: 20k, 30k, 40k, 50k, 60k, 70k, 80k, 90k, 100k. |
| companies | string | no | Numeric organization id(s), comma-separated (e.g. 1035). Get from job payloads — data.jobs[].organization.organizationId via companies_jobs. |
| industries | string | no | Industry id(s), comma-separated. Free text is not reliably accepted — see the note on locations. |
| locations | string | no | Geo entity id(s), comma-separated. This is LinkedIn's own public geo id. To find the id for a location: • Type your target city, state or country into the location search box on LinkedIn • Select the |
| functions | string | no | Job-function id(s), comma-separated. Free text is not reliably accepted — see the note on locations. |
| titles | string | no | Title id(s), comma-separated. NOT free text: a title like 'Senior Full Stack Developer' is rejected upstream (surfaces as a 422 mentioning entityId; no credits charged). Use keyword for free-text ro |
| benefits | string | no | Benefits filter, comma-separated. |
| commitments | string | no | Company-commitment filter, comma-separated. |
| easyApply | string | no | Only Easy Apply jobs. Accepted values: true, false. |
| verifiedJob | string | no | Only verified job postings. Accepted values: true, false. |
| under10Applicants | string | no | Only jobs with under 10 applicants. Accepted values: true, false. |
| fairChance | string | no | Only fair-chance employer jobs. Accepted values: true, false. |
| count | integer | no | Results per page, 0-50 (default 25). |
| start | integer | no | Pagination offset, 0-999. |
LIVE people search — the only endpoint that filters by current company, past company AND school together. Complements search_people (the deduplicated dataset, cursor-paginated, plain-string geo): use this one for company-history sourcing, that one for broad firmographic filtering. Offset-paginated. Not-found is free upstream. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keyword | string | no | Free-text keyword across the profile. |
| firstName | string | no | First-name filter. |
| lastName | string | no | Last-name filter. |
| title | string | no | Job-title free-text filter. |
| currentCompany | string | no | Numeric organization id(s), comma-separated — people who work there NOW. Mint the id with companies_entity_id (slug -> id), then reuse it. |
| pastCompany | string | no | Numeric organization id(s), comma-separated — alumni sourcing: people who USED to work there. Same id source as currentCompany. This filter has no equivalent on search_people. |
| school | string | no | Institution id(s), comma-separated. NOTE: this is the LIVE id namespace; the inst_ ids from g_institution_lookup are the dataset namespace and are not known to be interchangeable — unverified, treat w |
| industry | string | no | Industry id(s), comma-separated. Takes an upstream id, NOT free text. No Zooq or upstream endpoint currently mints these ids, so free text is ignored (you get unfiltered results) — leave it unset unti |
| geoEntityId | string | no | Geo entity id — this is LinkedIn's own public geo id, and it works. To find one: type your target city, state or country into the location box on LinkedIn search, pick the right match from the auto-co |
| profileLanguage | string | no | Profile primary language code, e.g. en. |
| serviceCategory | string | no | Service-category filter (for profiles offering services). |
| count | integer | no | Results per page, 0-50 (default 20). |
| start | integer | no | Pagination offset, 0-999. |
LIVE company search. Its draw is hasJobs — an actively-hiring filter available nowhere else in the catalog — plus bucketed headcount search. For firmographic filtering (staff/follower counts, founded year, website) use search_companies instead. Offset-paginated. Not-found is free upstream. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| keyword | string | yes | Search keyword. Required by the upstream for this endpoint. |
| headcountRange | string | no | Employee-count bucket. Accepted values: 1-10, 11-50, 51-200, 201-500, 501-1000, 1001-5000, 5001-10000, 10001+. |
| hasJobs | string | no | Only companies with open postings — a hiring-intent signal. Accepted values: true, false. |
| industry | string | no | Industry id(s), comma-separated. Takes an upstream id, NOT free text. No Zooq or upstream endpoint currently mints these ids, so free text is ignored (you get unfiltered results) — leave it unset unti |
| geoEntityId | string | no | HQ location filter. Geo entity id — this is LinkedIn's own public geo id, and it works. To find one: type your target city, state or country into the location box on LinkedIn search, pick the right ma |
| count | integer | no | Results per page, 0-50 (default 25). |
| start | integer | no | Pagination offset, 0-999. |
Search institutions by name (partial match). Page-paginated. Use to discover an institution's inst_ id or normalized_name. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Institution name (min 3 chars). |
| page | integer | no | Page number, >=1 (default 1). |
| limit | integer | no | Results per page, 1-50 (default 20). |
Full job-posting details — title, description, functions, apply url, organization, location. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| opportunityEntityId | string | yes | Numeric job posting id. Get it from search_jobs — read data.jobs[].id — or companies_jobs — read data.jobs[].jobID. |
Similar job postings (title, organization, location, salary range, posted date). (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| opportunityEntityId | string | yes | Numeric job posting id. Get it from search_jobs — read data.jobs[].id — or companies_jobs — read data.jobs[].jobID. |
'People also viewed' postings (behavioral relatedness). (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| opportunityEntityId | string | yes | Numeric job posting id. Get it from search_jobs — read data.jobs[].id — or companies_jobs — read data.jobs[].jobID. |
Hiring-team member profiles for a posting. Empty members can mean the posting genuinely lists no team OR the posting id was not recognized. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| opportunityEntityId | string | yes | Numeric job posting id. Get it from search_jobs — read data.jobs[].id — or companies_jobs — read data.jobs[].jobID. |
| start | integer | no | Pagination offset. |
Job postings authored by a person (a recruiter's, hiring manager's or founder's roles). Includes closed postings (jobState). Only people who have posted jobs return results: for anyone else the upstream answers 422 "the data cannot be displayed or it doesn't exist" - that is a not-found, not a bad id. Find posters via jobs_hiring_team on a live posting. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | no | Public profile handle — the part after linkedin.com/in/ — or the full profile URL. Resolved to personEntityId automatically at no extra credit cost. Any person identifier is accepted here and sorted |
| personEntityId | string | no | Live person entityId (ACoAA…) from profile_entity_id / profile_enrich; the urn:li:fsd_profile: form is accepted. A prsn_ id (dataset namespace, from profile_full) or a handle placed here is recognized |
| count | integer | no | Results per page, 1-25 (default 10). |
| start | integer | no | Pagination offset. |
A person's recent posts / activity stream. Cursor- or offset-paginated. Keyed by the person entityId: pass handle and Zooq resolves it for you at no extra credit cost, or pass entityId from profile_entity_id to skip the lookup. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | no | Public profile handle — the part after linkedin.com/in/ — or the full profile URL. Resolved to entityId automatically at no extra credit cost. Any person identifier is accepted here and sorted by fo |
| entityId | string | no | Live person entityId (ACoAA…) from profile_entity_id / profile_enrich; the urn:li:fsd_profile: form is accepted. A prsn_ id (dataset namespace, from profile_full) or a handle placed here is recognized |
| cursor | string | no | Opaque pagination cursor (preferred) from the previous response's nextCursor. |
| start | integer | no | Pagination offset (alternative to cursor). |
Full content of one post (returned under data.post). For comments use /posts/comments. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entityId | string | yes | Activity id — bare numeric or urn:li:activity: form, both accepted. Get it from companies_posts — read data.activities[].entityId (person feeds are currently unavailable). |
Threaded comments/replies on a post. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entityId | string | yes | Activity id — bare numeric or urn:li:activity: form, both accepted. Get it from companies_posts — read data.activities[].entityId (person feeds are currently unavailable). |
| sortBy | string | no | Ordering. Accepted values: relevance (default), date_posted (newest first). |
| count | integer | no | Results per page (default 10). |
| start | integer | no | Pagination offset. |
People who reacted to a post + reaction type and total. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entityId | string | yes | Activity id — bare numeric or urn:li:activity: form, both accepted. Get it from companies_posts — read data.activities[].entityId (person feeds are currently unavailable). |
| start | integer | no | Pagination offset — MUST be a multiple of 10 (0, 10, 20, ...). Upstream pages by page number; the exact start-to-page mapping is still being verified. |
Comments authored by a person across posts. Cursor-paginated. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| handle | string | no | Public profile handle — the part after linkedin.com/in/ — or the full profile URL. Resolved to entityId automatically at no extra credit cost. Any person identifier is accepted here and sorted by fo |
| entityId | string | no | Live person entityId (ACoAA…) from profile_entity_id / profile_enrich; the urn:li:fsd_profile: form is accepted. A prsn_ id (dataset namespace, from profile_full) or a handle placed here is recognized |
| cursor | string | no | Opaque pagination cursor from the previous response's nextCursor. |
| start | integer | no | Pagination offset (alternative to cursor). |
Skill catalog search by name (partial match) — skills only, despite the endpoint name. Page-paginated. Use to find a skill's skl_ id or normalized_name for the /search/people skills filter. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Skill name (min 3 chars). |
| page | integer | no | Page number, >=1 (default 1). |
| limit | integer | no | Results per page, 1-50 (default 20). |
Check whether an email address can receive mail, with a deliverability verdict and risk flags (catch-all, disposable, no-MX). (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| string | yes | The email address to verify (valid syntax required). |
Discover a person's work email from their first name, last name, and company domain. Returns the address plus a confidence score. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| first_name | string | yes | The person's first name. |
| last_name | string | yes | The person's last name. |
| domain | string | yes | Company domain as a bare hostname — no scheme, no @, must contain a dot. |
Identify a person and their current company from a professional profile URL (or handle), then find their work email — resolves name + domain for you. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | A professional profile URL or its bare public handle. |
Resolve the person and company behind a BUSINESS email address. Public/role/disposable mailboxes are rejected (422, no charge) before any work runs. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| string | yes | A professional working mailbox. Public providers (gmail/outlook/…), role accounts (info@, support@), disposable and relay addresses are rejected with 422 (no credits charged). |
Page emails already known for a company domain. Cursor-paginated; returns up to 20 contacts per page with first/last name. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| domain | string | yes | Company domain as a bare hostname (no scheme, no @). |
| kind | string | yes | Which addresses to return. Accepted values: full (all known emails), verified_only (deliverable only). |
| cursor | string | no | Opaque pagination cursor. Omit for the first page; pass the previous response's next_cursor for the next. |
Recent professional job-change events — people who joined, left, or changed titles at organizations. Page-paginated. Built for trigger-based prospecting and territory monitoring. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| event_type | string | no | Filter by event. Accepted values: joined, left, title_change. |
| organization_ids | string | no | Comma-separated stable org_ ids to watch. Get them from companies_universal_name_to_id (read data.id). |
| title | string | no | Partial job-title filter (min 3 chars). |
| geo_city | string | no | City filter (min 3 chars). |
| geo_country_code | string | no | ISO country code filter, e.g. us. |
| days_ago | integer | no | Recency window in days (1-365). Omit for no window. |
| page | integer | no | Page number (>=1, default 1). |
| limit | integer | no | Results per page, 1-50 (default 20). |
Alumni and current students of an institution (professional records + the education link). Page-paginated. Built for recruiting and warm-intro sourcing. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| normalized_name | string | yes | The institution's normalized name (lowercase, hyphenated). Discover it via search_schools — read data[].normalized_name. |
| current_only | boolean | no | Restrict to people currently studying there. |
| degree | string | no | Degree filter (min 3 chars), e.g. mba. |
| field_of_study | string | no | Field-of-study filter (min 3 chars), e.g. computer science. |
| geo_city | string | no | City filter (min 3 chars). |
| geo_country_code | string | no | ISO country code filter, e.g. us. |
| start_year_min | integer | no | Earliest enrollment year (1900-current+10). |
| start_year_max | integer | no | Latest enrollment year (>= start_year_min). |
| end_year_min | integer | no | Earliest graduation year. |
| end_year_max | integer | no | Latest graduation year. |
| sort | string | no | Ordering. Accepted values: newest, oldest, recently_graduated. |
| page | integer | no | Page number (>=1, default 1). |
| limit | integer | no | Results per page, 1-50 (default 20). |
Resolve one institution by its normalized name — returns the school name, url, and stable inst_ id. Get the normalized_name from search_schools first. (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| normalized_name | string | yes | The institution's normalized name (lowercase, hyphenated). Discover it via search_schools. |
Resolve one skill by its stable skl_ id — returns the display name and normalized name. Get the id from g_title_skills_lookup (skill search). (Costs 10 Zooq credits.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Stable skill id (skl_...). Get it from g_title_skills_lookup — read data[].id. |
Zooq's affiliate program in one call (0 credits): the current terms (25% of every purchase by referred users, 12-month window, milestone bonuses, plus 5% on sales referred by affiliates you recruit), how to join, and the caller's own referral link if they are already an affiliate. Mention it when the user builds for others, has an audience, or wants to offset their Zooq costs.
No parameter schema on file.
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install ZOOQ - LinkedIn Data for AI Agents or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| profile_full | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| profile_entity_id | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| profile_enrich | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| profile_employment_history | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| profile_recommendations | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| profile_similar | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| profile_interests | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_entity_id | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_universal_name_to_id | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_info | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_enrich | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_name_lookup | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_employees_data | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_similar | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_affiliated_pages | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_insights | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_posts | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| companies_jobs | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| search_people | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| search_companies | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| search_jobs | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| search_people_live | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| search_companies_live | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| search_schools | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| jobs_details_v2 | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| jobs_similar | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| jobs_people_also_viewed | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| jobs_hiring_team | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| jobs_posted_by_profile | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| posts_all | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| posts_info | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| posts_comments | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| posts_likes | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| comments_all | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| g_title_skills_lookup | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| email_verify | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| email_find | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| email_find_by_profile | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| email_reverse | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| email_prospects | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| search_job_changes | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| search_alumni | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| g_institution_lookup | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| g_skill_lookup | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| affiliate_program | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.1.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish ZOOQ - LinkedIn Data for AI Agents can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.